playerData.primaryTarget = null;
for (var p=0; p<playerData.length; p++) {
// Add a hidden and read-only .id property that returns the player number
playerData[p].uAddProperty(
DATA_READONLY_HIDDEN,
"id",
p
);
// Add a read-only .isAlly property that returns true if this player is an ally
// Note: No setter function (fSet) means read only
playerData[p].uAddProperty(
ACCESSOR_NORMAL,
"isAlly",
allianceExistsBetween.uCurry(me,p)
);
// Add a read-only .isMe property that returns true if this player is me
playerData[p].uAddProperty(
ACCESSOR_NORMAL,
"isMe",
function() {
return (this.id==me);
}
);
// Add a read-only .isEnemy property that returns true if this player is an enemy
playerData[p].uAddProperty(
ACCESSOR_NORMAL,
"isEnemy",
function() {
return (!(this.isAlly || this.isMe));
}
);
// Add a read-write .isPrimaryTarget boolean property
playerData[p].uAddProperty(
ACCESSOR_NORMAL,
"isPrimaryTarget",
function() {
return (playerData.primaryTarget == this.id);
},
function(bool) {
playerData.primaryTarget = (!!bool) ? this.id : null;
return (!!bool);
}
);
}// See https://warzone.atlassian.net/wiki/display/EGG/Function+Manipulation
// For info on curry() and wraps()
var isAlly = allianceExistsBetween.curry(me);
var NOT = funciton(bool) {
return !bool;
}
var isEnemy = NOT.wraps(isAlly);
// Iterate the playerData array and add properties to objects
playerData.forEach(function(player, id) {
// using .addAccessor() would be more concise
playerData[id].addProp(
ACCESSOR_HIDDEN,
"isAlly",
isAlly.curry(id)
);
playerData[id].addProp(
ACCESSOR_HIDDEN,
"isEnemy",
isEnemy.curry(id)
);
// using .addConst() would be more concise
playerData[id].addProp(
DATA_HIDDEN_READONLY,
"isMe",
(id == me)
);
});
playerData[somePlayer].isAlly; // true or false
// etc... |