Platform.js 1.7 KB

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