From 4e123c94ed70b23c4922afb512a76d16af2b50bc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Wed, 5 Apr 2017 15:05:45 -0400 Subject: [PATCH] gamnit: intro `camera_control` an abstraction of `accept_two_fingers_motion` MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/gamnit/camera_control.nit | 51 ++++++++++++++++++++ ...ngers_motion.nit => camera_control_android.nit} | 29 ++--------- lib/gamnit/flat.nit | 3 +- 3 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 lib/gamnit/camera_control.nit rename lib/gamnit/{android_two_fingers_motion.nit => camera_control_android.nit} (79%) diff --git a/lib/gamnit/camera_control.nit b/lib/gamnit/camera_control.nit new file mode 100644 index 0000000..af5bedd --- /dev/null +++ b/lib/gamnit/camera_control.nit @@ -0,0 +1,51 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Simple camera control for user, as the method `accept_scroll_and_zoom` +module camera_control + +import gamnit +import cameras + +import camera_control_linux is conditional(linux) +import camera_control_android is conditional(android) + +redef class EulerCamera + # Zoom and scroll this camera from user input + # + # Scrolling is accomplished by moving the camera on the XY plane and + # zooming by moving it on the Z axis. + # + # This method has distinct implementations per platform. + # On desktop computers, the mouse wheel changes the zoom level, and + # holding down the middle mouse button scrolls the camera. + # On Android, a two finger pinch and slide gesture zoom and scroll. + # + # Returns `true` if the event is used. + # + # Should be called from `App::accept_event` before accepting pointer events: + # + # ~~~nitish + # redef class App + # redef fun accept_event(event) + # do + # if world_camera.accept_scroll_and_zoom(event) then return true + # + # # Handle other events... + # return false + # end + # end + # ~~~ + fun accept_scroll_and_zoom(event: InputEvent): Bool do return false +end diff --git a/lib/gamnit/android_two_fingers_motion.nit b/lib/gamnit/camera_control_android.nit similarity index 79% rename from lib/gamnit/android_two_fingers_motion.nit rename to lib/gamnit/camera_control_android.nit index b8329ef..6461c29 100644 --- a/lib/gamnit/android_two_fingers_motion.nit +++ b/lib/gamnit/camera_control_android.nit @@ -12,16 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Two fingers camera manipulation, scroll and pinch to zoom -# -# Provides the main service `EulerCamera::accept_two_fingers_motion`. -module android_two_fingers_motion - -# TODO add an abstraction when another platform supports it +# Two fingers camera manipulation, pinch to zoom and slide to scroll +module camera_control_android -import gamnit -import cameras import android +import camera_control redef class EulerCamera # Smoothened history of pointers in the current motion event @@ -30,23 +25,7 @@ redef class EulerCamera # Start time of the current motion event private var last_motion_start: Int = -1 - # Move and zoom (set `position`) from a two finger pinch and slide option - # - # Returns `true` if the event is intercepted. - # - # Should be called from `App::accept_event` before accepting pointer events: - # - # ~~~nitish - # redef class App - # redef fun accept_event(event) - # do - # if world_camera.accept_two_fingers_motion(event) then return true - # - # # Handle other events... - # end - # end - # ~~~ - fun accept_two_fingers_motion(event: InputEvent): Bool + redef fun accept_scroll_and_zoom(event) do if not event isa AndroidMotionEvent then return false diff --git a/lib/gamnit/flat.nit b/lib/gamnit/flat.nit index d5cb28e..c9935d8 100644 --- a/lib/gamnit/flat.nit +++ b/lib/gamnit/flat.nit @@ -42,8 +42,7 @@ import performance_analysis import gamnit import gamnit::cameras import gamnit::limit_fps - -import android_two_fingers_motion is conditional(android) +import gamnit::camera_control # Draw a `texture` at `center` # -- 1.7.9.5