Platform.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // A moving platform
  2. // FIXME
  3. keepAlive = typeof(keepAlive) == "undefined" ? [] : keepAlive;
  4. keepAlive.push(self);
  5. var MAX_VELOCITY = 2;
  6. var movingToStop = true;
  7. var glmatrix = require("gl-matrix");
  8. var vec2 = glmatrix.vec2;
  9. var node = self.node;
  10. var body;
  11. function start() {
  12. var sprite2D = node.createComponent("StaticSprite2D");
  13. sprite2D.sprite = cache.getResource("Sprite2D", "Sprites/platform.png");
  14. // start at the start positon
  15. node.position2D = self.startPos;
  16. body = node.createComponent("RigidBody2D");
  17. body.setBodyType(Atomic.BT_KINEMATIC);
  18. body.fixedRotation = true;
  19. // Create box
  20. var box = node.createComponent("CollisionBox2D");
  21. // Set size
  22. box.setSize([2.5, .55]);
  23. // Set density
  24. box.setDensity(1.0);
  25. // Set friction
  26. box.setFriction(1.0);
  27. // Set restitution
  28. box.setRestitution(0.1);
  29. }
  30. function update(timeStep) {
  31. var pos = node.position2D;
  32. var dir = vec2.create();
  33. var dist = 0.0;
  34. if (movingToStop) {
  35. dist = vec2.distance(pos, self.stopPos);
  36. vec2.subtract(dir, self.stopPos, pos);
  37. vec2.normalize(dir, dir);
  38. if (dist < 0.5) {
  39. movingToStop = false;
  40. return;
  41. }
  42. } else {
  43. dist = vec2.distance(pos, self.startPos);
  44. vec2.subtract(dir, self.startPos, pos);
  45. vec2.normalize(dir, dir);
  46. if (dist < 0.5) {
  47. movingToStop = true;
  48. return;
  49. }
  50. }
  51. vec2.scale(dir, dir, dist);
  52. if (vec2.length(dir) > MAX_VELOCITY) {
  53. vec2.normalize(dir, dir);
  54. vec2.scale(dir, dir, MAX_VELOCITY );
  55. }
  56. body.setLinearVelocity(dir);
  57. }