| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // A moving platform
- // FIXME
- keepAlive = typeof(keepAlive) == "undefined" ? [] : keepAlive;
- keepAlive.push(self);
- var MAX_VELOCITY = 2;
- var movingToStop = true;
- var glmatrix = require("gl-matrix");
- var vec2 = glmatrix.vec2;
- var node = self.node;
- var body;
- function start() {
- var sprite2D = node.createComponent("StaticSprite2D");
- sprite2D.sprite = cache.getResource("Sprite2D", "Sprites/platform.png");
- // start at the start positon
- node.position2D = self.startPos;
- body = node.createComponent("RigidBody2D");
- body.setBodyType(Atomic.BT_KINEMATIC);
- body.fixedRotation = true;
- // Create box
- var box = node.createComponent("CollisionBox2D");
- // Set size
- box.setSize([2.5, .55]);
- // Set density
- box.setDensity(1.0);
- // Set friction
- box.setFriction(1.0);
- // Set restitution
- box.setRestitution(0.1);
- }
- function update(timeStep) {
- var pos = node.position2D;
- var dir = vec2.create();
- var dist = 0.0;
-
- if (movingToStop) {
- dist = vec2.distance(pos, self.stopPos);
- vec2.subtract(dir, self.stopPos, pos);
- vec2.normalize(dir, dir);
-
- if (dist < 0.5) {
- movingToStop = false;
- return;
- }
- } else {
-
- dist = vec2.distance(pos, self.startPos);
- vec2.subtract(dir, self.startPos, pos);
- vec2.normalize(dir, dir);
- if (dist < 0.5) {
- movingToStop = true;
- return;
- }
-
- }
-
- vec2.scale(dir, dir, dist);
-
- if (vec2.length(dir) > MAX_VELOCITY) {
- vec2.normalize(dir, dir);
- vec2.scale(dir, dir, MAX_VELOCITY );
- }
-
- body.setLinearVelocity(dir);
-
- }
|