MovingPlatform.js 1.7 KB

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