| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- "atomic component";
- var inspectorFields = {
- pickupSound: ["Sound", "Sounds/Pickup_Coin8.ogg"],
- bounceSound: ["Sound"]
- }
- var glmatrix = require("gl-matrix");
- var vec2 = glmatrix.vec2;
- var component = function(self) {
- var node = self.node;
- var camera = self.node.scene.getMainCamera();
- var cameraNode = camera.node;
- // Resources
- var sprite = node.getComponent("AnimatedSprite2D")
- sprite.setAnimation("idle");
- var soundSource = node.getComponent("SoundSource");
- var activated = false;
- var body;
- self.start = function() {
- }
- self.update = function(timeStep) {
- if (activated)
- return false;
- if (vec2.distance(cameraNode.position2D, node.position2D) < 3.0) {
- activated = true;
- body = node.createComponent("RigidBody2D");
- body.setBodyType(Atomic.BT_DYNAMIC);
- body.fixedRotation = true;
- body.castShadows = false;
- self.subscribeToEvent("PhysicsBeginContact2D", function(ev) {
- if (ev.nodeB == node) {
- if (ev.nodeA && ev.nodeA.name == "Player") {
- node.scale2D = [0, 0];
- sprite.enabled = false;
- body.enabled = false;
- if (self.pickupSound) {
- soundSource.gain = 1.0;
- soundSource.play(self.pickupSound);
- }
- } else if (self.bounceSound) {
- var vel = body.linearVelocity;
- if (vec2.length(vel) > 3) {
- soundSource.gain = .3;
- soundSource.play(self.bounceSound);
- }
- }
- }
- });
- var circle = node.createComponent("CollisionCircle2D");
- // Set radius
- circle.setRadius(.3);
- // Set density
- circle.setDensity(1.0);
- // Set friction.
- circle.friction = .2;
- // Set restitution
- circle.setRestitution(.8);
- }
- }
- }
- exports.component = component;
|