MovingPlatform.js 1.7 KB

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