MovingPlatform.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. var glmatrix = require("gl-matrix");
  2. var vec2 = glmatrix.vec2;
  3. "atomic component";
  4. var component = function (self) {
  5. // A moving platform
  6. var node = self.node;
  7. var MAX_VELOCITY = 2;
  8. var movingToStop = true;
  9. var body = self.getComponent("RigidBody2D");
  10. self.update = function(timeStep) {
  11. var pos = node.position2D;
  12. var dir = vec2.create();
  13. var dist = 0.0;
  14. if (movingToStop) {
  15. dist = vec2.distance(pos, node.stopPos);
  16. vec2.subtract(dir, node.stopPos, pos);
  17. vec2.normalize(dir, dir);
  18. if (dist < 0.5) {
  19. movingToStop = false;
  20. return;
  21. }
  22. } else {
  23. dist = vec2.distance(pos, node.startPos);
  24. vec2.subtract(dir, node.startPos, pos);
  25. vec2.normalize(dir, dir);
  26. if (dist < 0.5) {
  27. movingToStop = true;
  28. return;
  29. }
  30. }
  31. vec2.scale(dir, dir, dist);
  32. if (vec2.length(dir) > MAX_VELOCITY) {
  33. vec2.normalize(dir, dir);
  34. vec2.scale(dir, dir, MAX_VELOCITY);
  35. }
  36. body.setLinearVelocity(dir);
  37. }
  38. }
  39. exports.component = component;