(function(){ Script.include('utils.js'); Enemy = function() { }; Enemy.prototype = { preload: function(entityID) { this.entityID = entityID; var userData = Entities.getEntityProperties(this.entityID, 'userData').userData; var data = utils.parseJSON(userData); if (data !== undefined && data.gameChannel !== undefined) { this.gameChannel = data.gameChannel; } else { print("enemyServerEntity.js | ERROR: userData does not contain a game channel and/or team number"); } var self = this; this.heartbeatTimerID = Script.setInterval(function() { print("Sending heartbeat", self.gameChannel); Messages.sendMessage(self.gameChannel, JSON.stringify({ type: "enemy-heartbeat", entityID: self.entityID, position: Entities.getEntityProperties(self.entityID, 'position').position })); }, 1000); }, onCollide: function(entityA, entityB, collision) { if (this.entityIDsThatHaveCollidedWithMe.indexOf(entityB) > -1) { return; } this.entityIDsThatHaveCollidedWithMe.push(entityB); var colliderName = Entities.getEntityProperties(entityB, 'name').name; if (colliderName.indexOf("projectile") > -1) { Messages.sendMessage(this.gameChannel, JSON.stringify({ type: "enemy-killed", entityID: this.entityID, position: Entities.getEntityProperties(this.entityID, 'position').position })); Entities.deleteEntity(this.entityID); } else if (colliderName.indexOf("GateCollider") > -1) { Messages.sendMessage(this.gameChannel, JSON.stringify({ type: "enemy-escaped", entityID: this.entityID, position: Entities.getEntityProperties(this.entityID, 'position').position })); Entities.deleteEntity(this.entityID); } } }; return new Enemy(); });