babylon.followCamera.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. module BABYLON {
  2. export class FollowCamera extends TargetCamera {
  3. public radius:number = 12;
  4. public rotationOffset:number = 0;
  5. public heightOffset:number = 4;
  6. public cameraAcceleration:number = 0.05;
  7. public maxCameraSpeed:number = 20;
  8. public target:BABYLON.AbstractMesh;
  9. constructor(name:string, position:Vector3, scene:Scene) {
  10. super(name, position, scene);
  11. }
  12. private getRadians(degrees):number {
  13. return degrees * Math.PI / 180;
  14. }
  15. private follow(cameraTarget:BABYLON.AbstractMesh) {
  16. if (!cameraTarget)
  17. return;
  18. var radians = this.getRadians(this.rotationOffset) + cameraTarget.rotation.y;
  19. var targetX:number = cameraTarget.position.x + Math.sin(radians) * this.radius;
  20. var targetZ:number = cameraTarget.position.z + Math.cos(radians) * this.radius;
  21. var dx:number = targetX - this.position.x;
  22. var dy:number = (cameraTarget.position.y + this.heightOffset) - this.position.y;
  23. var dz:number = (targetZ) - this.position.z;
  24. var vx:number = dx * this.cameraAcceleration * 2;//this is set to .05
  25. var vy:number = dy * this.cameraAcceleration;
  26. var vz:number = dz * this.cameraAcceleration * 2;
  27. if (vx > this.maxCameraSpeed || vx < -this.maxCameraSpeed) {
  28. vx = vx < 1 ? -this.maxCameraSpeed : this.maxCameraSpeed;
  29. }
  30. if (vy > this.maxCameraSpeed || vy < -this.maxCameraSpeed) {
  31. vy = vy < 1 ? -this.maxCameraSpeed : this.maxCameraSpeed;
  32. }
  33. if (vz > this.maxCameraSpeed || vz < -this.maxCameraSpeed) {
  34. vz = vz < 1 ? -this.maxCameraSpeed : this.maxCameraSpeed;
  35. }
  36. this.position = new BABYLON.Vector3(this.position.x + vx, this.position.y + vy, this.position.z + vz);
  37. this.setTarget(cameraTarget.position);
  38. }
  39. public _update():void {
  40. super._update();
  41. this.follow(this.target);
  42. }
  43. }
  44. }