'From Squeak3.1alpha of 28 February 2001 [latest update: #4111] on 1 June 2001 at 10:16:11 am'! !WonderlandActor methodsFor: 'event handling' stamp: 'ar 6/1/2001 10:15'! onMouseMove: event "The default response to mouse motion events" | deltaX deltaY screenPos scenePos depth camera evt | deltaX _ event getCursorDelta x. deltaY _ event getCursorDelta y. camera _ event getCamera. evt _ event getMorphicEvent. (evt shiftPressed) ifTrue: [ (evt controlKeyPressed) ifTrue: [ "If both shift and control are pressed, tumble the bunny" scenePos _ self getPosition. self moveToRightNow: { 0. 0. 0 } asSeenBy: (myWonderland getScene) undoable: false. self turnRightNow: down numberOfTurns: (deltaY * 0.01) asSeenBy: (myWonderland getScene) undoable: false. self turnRightNow: left numberOfTurns: (deltaX * 0.01) asSeenBy: (myWonderland getScene) undoable: false. self moveToRightNow: scenePos undoable: false. ] ifFalse: [ "If only shift is pressed move the actor up/down" screenPos _ (self getPositionInPixels: camera) + (0@deltaY). scenePos _ camera transformScreenPointToScenePoint: screenPos atDepthOf: self. self moveToRightNow: (scenePos) asSeenBy: (myWonderland getScene) undoable: false. ]. ] ifFalse: [ (evt controlKeyPressed) ifTrue: [ scenePos _ self getPosition. self moveToRightNow: { 0. 0. 0 } asSeenBy: (myWonderland getScene) undoable: false. self turnRightNow: left numberOfTurns: (deltaX * 0.01) asSeenBy: (myWonderland getScene) undoable: false. self moveToRightNow: scenePos undoable: false. ] ifFalse: [ "If no modifier keys are held down, move the actor forward-back and left-right" screenPos _ (self getPositionInPixels: camera) + (deltaX@0). depth _ ((self getPosition: camera) at: 3) - (deltaY * 0.01). scenePos _ camera transformScreenVectorToSceneVector: (B3DVector3 x: (screenPos x) y: (screenPos y) z: depth). self moveToRightNow: { scenePos at: 1. asIs. scenePos at: 3 } asSeenBy: (myWonderland getScene) undoable: false. ]. ]. ! ! !WonderlandCameraControls methodsFor: 'event handling' stamp: 'ar 6/1/2001 10:14'! mouseDown: evt "Handle a mouse down event." myUndoStack push: (UndoPOVChange for: myCamera from: (myCamera getPointOfView)). moveAction _ myCamera doEachFrame: [ self moveCamera: evt ]. ! ! !WonderlandCameraControls methodsFor: 'camera control' stamp: 'ar 6/1/2001 10:14'! moveCamera: evt "Move the camera an amount and direction determined by the current position of the mouse and which modifier keys are held down." | offset dt | myMoveScale == nil ifTrue:[myMoveScale _ 0.1]. myRotationScale == nil ifTrue:[myRotationScale _ 0.01]. dt _ myScheduler getElapsedTime. offset _ (self getCenter) - (0@8) - (evt cursorPoint). (evt shiftPressed) ifTrue: [ (evt controlKeyPressed) ifTrue: [ myCamera turnRightNow: up numberOfTurns: (dt * (offset y) * myRotationScale) undoable: false. ] ifFalse: [ myCamera moveRightNow: up distance: (dt * (offset y) * myMoveScale) undoable: false. myCamera moveRightNow: left distance: (dt * (offset x) * myMoveScale) undoable: false. ]. ] ifFalse: [ (evt controlKeyPressed) ifTrue: [ myCamera turnRightNow: left numberOfTurns: (dt * (offset x) * myRotationScale) undoable: false. ] ifFalse: [ myCamera moveRightNow: forward distance: (dt * (offset y) * myMoveScale) undoable: false. myCamera turnRightNow: left numberOfTurns: (dt * (offset x) * myRotationScale) undoable: false. ]. ]. ! ! WonderlandCameraControls removeSelector: #moveCamera!