home *** CD-ROM | disk | FTP | other *** search
Text File | 2001-02-20 | 2.5 KB | 86 lines | [AMAS/AMAP] |
- // -* CameraDollyBehavior.js *-
- //
- // Name: CameraDolly behavior
- // Description:
- // Author:
- // Version: $Id: CameraDollyBehavior.js,v 1.6 2000/12/29 10:12:14 consumer Exp $
- //
-
- // Keep an array of the solids using this behavior
- var dollyCameras = new Array(1);
-
- function CameraDollyBehavior(camera, targetSolid, intensity)
- {
- // Member methods of the behavior
- this.start = CameraDollyBehaviorStart;
- this.stop = CameraDollyBehaviorStop;
-
- this.camera = camera;
- this.targetSolid = targetSolid;
-
- // The intensity of the drag force must be proportional to the size
- // of the solid. The factor 3 is arbitrary.
- this.intensity = intensity * TSSolidGetMaxLength(targetSolid) * 3;
-
- this.initialTargetPoint = TSCameraGetTargetPosition(camera);
- this.initialPosition = TSCameraGetPosition(camera);
-
- this.dragID = TSMakeUniqID("DragForce_" + camera);
- TSMakeDragForce(this.dragID, this.intensity, "0 0 0",
- TSMakeStringFromPoint(TSSolidGetPosition(camera)));
-
- this.dampID = TSMakeUniqID("DampingForce_" + camera);
- TSMakeDampingSolidForce(this.dampID, "1", "1");
-
- TSAppendChild(camera, this.dragID);
- TSAppendChild(camera, this.dampID);
-
- TSUpdateNode(camera);
-
- // Free the camera
- TSUpdateNodeAttribute(camera, 'fixed', '0');
- }
-
- function CameraDollyBehaviorStart(percent)
- {
- var cameraPosition = TSCameraGetPosition(this.camera);
- var targetPosition = TSSolidGetPosition(this.targetSolid);
- var dragPosition = TSPointInterpolate(cameraPosition, targetPosition, percent);
-
- TSCameraLookAtSolid(this.camera, this.targetSolid);
- TSUpdateNodeAttribute(this.dragID, "targetPoint", TSMakeStringFromPoint(dragPosition));
- }
-
- function CameraDollyBehaviorStop()
- {
- TSCameraLookAt(this.camera, this.initialTargetPoint);
- TSUpdateNodeAttribute(this.dragID, "targetPoint", TSMakeStringFromPoint(this.initialPosition));
- }
-
- //
- // Event functions
- //
-
- function CameraDollyBehaviorStartEvent(obj, event)
- {
- var camera = TSGetExtraParam(event, 'camera');
- var targetSolid = TSGetExtraParam(event, 'targetSolid');
- var percent = TSGetExtraParam(event, 'percent');
- var speed = TSGetExtraParam(event, 'speed');
-
- if (dollyCameras[camera] == null) {
- if (targetSolid == "")
- dollyCameras[camera] = new CameraDollyBehavior(camera, obj, parseFloat(speed));
- else
- dollyCameras[camera] = new CameraDollyBehavior(camera, targetSolid, parseFloat(speed));
- }
-
- dollyCameras[camera].start(percent);
- }
-
- function CameraDollyBehaviorStopEvent(obj, event)
- {
- var camera = TSGetExtraParam(event, 'camera');
- dollyCameras[camera].stop();
- }
-