overte-Armored-Dragon/unpublishedScripts/DomainContent/Toybox/towerDefense/targetEntity.js

49 lines
1.8 KiB
JavaScript

(function() {
Script.include('utils.js');
function parseJSON(json) {
try {
return JSON.parse(json);
} catch(e) {
return undefined;
}
}
Target = function() {
}
Target.prototype = {
preload: function(entityID) {
this.entityID = entityID;
Script.addEventHandler(entityID, "collisionWithEntity", this.onCollide.bind(this));
this.entityIDsThatHaveCollidedWithMe = [];
var userData = Entities.getEntityProperties(this.entityID, 'userData').userData;
var data = utils.parseJSON(userData);
if (data !== undefined && data.gameChannel !== undefined && data.teamNumber !== undefined) {
this.gameChannel = data.gameChannel;
this.teamNumber = data.teamNumber;
} else {
print("targetEntity.js | ERROR: userData does not contain a game channel and/or team number");
}
},
onCollide: function(entityA, entityB, collision) {
print("Collided with: ", entityB);
var colliderName = Entities.getEntityProperties(entityB, 'name').name;
// If the other entity's name includes 'projectile' and we haven't hit it before,
// continue on.
if (colliderName.indexOf("projectile") > -1
&& this.entityIDsThatHaveCollidedWithMe.indexOf(entityB) === -1) {
this.entityIDsThatHaveCollidedWithMe.push(entityB);
Messages.sendMessage(this.gameChannel, JSON.stringify({
type: "target-hit",
entityID: this.entityID,
teamNumber: this.teamNumber
}));
}
}
};
return new Target();
});