Bat.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // FIXME
  2. keepAlive = typeof(keepAlive) == "undefined" ? [] : keepAlive;
  3. keepAlive.push(self);
  4. var glmatrix = require("gl-matrix");
  5. var vec2 = glmatrix.vec2;
  6. var node = self.node;
  7. var animationSet = cache.getResource("AnimationSet2D", "Sprites/Bat/Bat.scml");
  8. var sprite = node.createComponent("AnimatedSprite2D");
  9. sprite.setAnimation(animationSet, "Fly");
  10. sprite.setLayer(100);
  11. node.scale2D = [.5, .5];
  12. var cwaypoint = -1;
  13. var light = node.createComponent("PointLight2D");
  14. light.color = [1, 1, 1, 1];
  15. light.radius = 4;
  16. if (!daytime)
  17. lightGroup.addLight(light);
  18. node.createJSComponent("LightFlicker");
  19. var time = Math.random() * 10000;
  20. function update(timestep) {
  21. time += timestep * 4;
  22. light.color = [ .5 + Math.sin(time), .5 + Math.cos(time), .5 + Math.cos(-time), 1];
  23. var waypoints = TheLevel.batWaypoints;
  24. var pos = node.position2D;
  25. if (cwaypoint == -1 || vec2.distance(pos, waypoints[cwaypoint]) < .5) {
  26. cwaypoint = Math.round(Math.random() * (waypoints.length - 1));
  27. return;
  28. }
  29. var dir = vec2.create();
  30. var goal = waypoints[cwaypoint];
  31. vec2.subtract(dir, goal, pos);
  32. vec2.normalize(dir, dir);
  33. vec2.scale(dir, dir, timestep * 2);
  34. if (dir[0] < 0)
  35. sprite.flipX = true;
  36. else
  37. sprite.flipX = false;
  38. vec2.add(pos, pos, dir);
  39. node.position2D = pos;
  40. }