Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/components/Auras.js
function Auras() {} | function Auras() {} | ||||
Auras.prototype.Schema = | Auras.prototype.Schema = | ||||
"<attribute name='datatype'>" + | "<attribute name='datatype'>" + | ||||
"<value>tokens</value>" + | "<value>tokens</value>" + | ||||
"</attribute>" + | "</attribute>" + | ||||
"<text a:help='A whitespace-separated list of aura files, placed under simulation/data/auras/'/>"; | "<text a:help='A whitespace-separated list of aura files, placed under simulation/data/auras/'/>"; | ||||
Auras.prototype.Init = function() | Auras.prototype.Init = function() | ||||
{ | { | ||||
let cmpDataTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_DataTemplateManager); | |||||
this.auras = {}; | |||||
this.affectedPlayers = {}; | this.affectedPlayers = {}; | ||||
for (let name of this.GetAuraNames()) | for (let name of this.GetAuraNames()) | ||||
{ | |||||
this.affectedPlayers[name] = []; | this.affectedPlayers[name] = []; | ||||
this.auras[name] = cmpDataTemplateManager.GetAuraTemplate(name); | |||||
} | |||||
// In case of autogarrisoning, this component can be called before ownership is set. | // In case of autogarrisoning, this component can be called before ownership is set. | ||||
// So it needs to be completely initialised from the start. | // So it needs to be completely initialised from the start. | ||||
this.Clean(); | this.Clean(); | ||||
}; | }; | ||||
// We can modify identifier if we want stackable auras in some case. | // We can modify identifier if we want stackable auras in some case. | ||||
Auras.prototype.GetModifierIdentifier = function(name) | Auras.prototype.GetModifierIdentifier = function(name) | ||||
{ | { | ||||
if (this.auras[name].stackable) | if (AuraTemplates.Get(name).stackable) | ||||
return name + this.entity; | return name + this.entity; | ||||
return name; | return name; | ||||
}; | }; | ||||
Auras.prototype.GetDescriptions = function() | Auras.prototype.GetDescriptions = function() | ||||
{ | { | ||||
var ret = {}; | var ret = {}; | ||||
for (let auraID of this.GetAuraNames()) | for (let auraID of this.GetAuraNames()) | ||||
{ | { | ||||
let aura = this.auras[auraID]; | let aura = AuraTemplates.Get(auraID); | ||||
ret[auraID] = { | ret[auraID] = { | ||||
"name": aura.auraName, | "name": aura.auraName, | ||||
"description": aura.auraDescription || null, | "description": aura.auraDescription || null, | ||||
"radius": this.GetRange(auraID) || null | "radius": this.GetRange(auraID) || null | ||||
}; | }; | ||||
} | } | ||||
return ret; | return ret; | ||||
}; | }; | ||||
Auras.prototype.GetAuraNames = function() | Auras.prototype.GetAuraNames = function() | ||||
{ | { | ||||
return this.template._string.split(/\s+/); | return this.template._string.split(/\s+/); | ||||
}; | }; | ||||
Auras.prototype.GetOverlayIcon = function(name) | Auras.prototype.GetOverlayIcon = function(name) | ||||
{ | { | ||||
return this.auras[name].overlayIcon || ""; | return AuraTemplates.Get(name).overlayIcon || ""; | ||||
}; | }; | ||||
Auras.prototype.GetAffectedEntities = function(name) | Auras.prototype.GetAffectedEntities = function(name) | ||||
{ | { | ||||
return this[name].targetUnits; | return this[name].targetUnits; | ||||
}; | }; | ||||
Auras.prototype.GetRange = function(name) | Auras.prototype.GetRange = function(name) | ||||
{ | { | ||||
if (this.IsRangeAura(name)) | if (this.IsRangeAura(name)) | ||||
return +this.auras[name].radius; | return +AuraTemplates.Get(name).radius; | ||||
return undefined; | return undefined; | ||||
}; | }; | ||||
Auras.prototype.GetClasses = function(name) | Auras.prototype.GetClasses = function(name) | ||||
{ | { | ||||
return this.auras[name].affects; | return AuraTemplates.Get(name).affects; | ||||
}; | }; | ||||
Auras.prototype.GetModifications = function(name) | Auras.prototype.GetModifications = function(name) | ||||
{ | { | ||||
return this.auras[name].modifications; | return AuraTemplates.Get(name).modifications; | ||||
}; | }; | ||||
Auras.prototype.GetAffectedPlayers = function(name) | Auras.prototype.GetAffectedPlayers = function(name) | ||||
{ | { | ||||
return this.affectedPlayers[name]; | return this.affectedPlayers[name]; | ||||
}; | }; | ||||
Auras.prototype.GetRangeOverlays = function() | Auras.prototype.GetRangeOverlays = function() | ||||
{ | { | ||||
let rangeOverlays = []; | let rangeOverlays = []; | ||||
for (let name of this.GetAuraNames()) | for (let name of this.GetAuraNames()) | ||||
{ | { | ||||
if (!this.IsRangeAura(name) || !this[name].isApplied) | if (!this.IsRangeAura(name) || !this[name].isApplied) | ||||
continue; | continue; | ||||
let rangeOverlay = AuraTemplates.Get(name).rangeOverlay; | |||||
rangeOverlays.push( | rangeOverlays.push( | ||||
this.auras[name].rangeOverlay ? | rangeOverlay ? | ||||
{ | { | ||||
"radius": this.GetRange(name), | "radius": this.GetRange(name), | ||||
"texture": this.auras[name].rangeOverlay.lineTexture, | "texture": rangeOverlay.lineTexture, | ||||
"textureMask": this.auras[name].rangeOverlay.lineTextureMask, | "textureMask": rangeOverlay.lineTextureMask, | ||||
"thickness": this.auras[name].rangeOverlay.lineThickness | "thickness": rangeOverlay.lineThickness | ||||
} : | } : | ||||
// Specify default in order not to specify it in about 40 auras | // Specify default in order not to specify it in about 40 auras | ||||
{ | { | ||||
"radius": this.GetRange(name), | "radius": this.GetRange(name), | ||||
"texture": "outline_border.png", | "texture": "outline_border.png", | ||||
"textureMask": "outline_border_mask.png", | "textureMask": "outline_border_mask.png", | ||||
"thickness": 0.2 | "thickness": 0.2 | ||||
}); | }); | ||||
} | } | ||||
return rangeOverlays; | return rangeOverlays; | ||||
}; | }; | ||||
Auras.prototype.CalculateAffectedPlayers = function(name) | Auras.prototype.CalculateAffectedPlayers = function(name) | ||||
{ | { | ||||
var affectedPlayers = this.auras[name].affectedPlayers || ["Player"]; | var affectedPlayers = AuraTemplates.Get(name).affectedPlayers || ["Player"]; | ||||
this.affectedPlayers[name] = []; | this.affectedPlayers[name] = []; | ||||
var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); | var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); | ||||
if (!cmpPlayer) | if (!cmpPlayer) | ||||
cmpPlayer = QueryOwnerInterface(this.entity); | cmpPlayer = QueryOwnerInterface(this.entity); | ||||
if (!cmpPlayer || cmpPlayer.GetState() == "defeated") | if (!cmpPlayer || cmpPlayer.GetState() == "defeated") | ||||
return; | return; | ||||
var numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); | var numPlayers = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager).GetNumPlayers(); | ||||
for (var i = 0; i < numPlayers; ++i) | for (var i = 0; i < numPlayers; ++i) | ||||
{ | { | ||||
for (let p of affectedPlayers) | for (let p of affectedPlayers) | ||||
{ | { | ||||
if (p == "Player" ? cmpPlayer.GetPlayerID() == i : cmpPlayer["Is" + p](i)) | if (p == "Player" ? cmpPlayer.GetPlayerID() == i : cmpPlayer["Is" + p](i)) | ||||
{ | { | ||||
this.affectedPlayers[name].push(i); | this.affectedPlayers[name].push(i); | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
Auras.prototype.CanApply = function(name) | Auras.prototype.CanApply = function(name) | ||||
{ | { | ||||
if (!this.auras[name].requiredTechnology) | if (!AuraTemplates.Get(name).requiredTechnology) | ||||
return true; | return true; | ||||
let cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager); | let cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager); | ||||
if (!cmpTechnologyManager) | if (!cmpTechnologyManager) | ||||
return false; | return false; | ||||
return cmpTechnologyManager.IsTechnologyResearched(this.auras[name].requiredTechnology); | |||||
return cmpTechnologyManager.IsTechnologyResearched(AuraTemplates.Get(name).requiredTechnology); | |||||
}; | }; | ||||
Auras.prototype.HasFormationAura = function() | Auras.prototype.HasFormationAura = function() | ||||
{ | { | ||||
return this.GetAuraNames().some(n => this.IsFormationAura(n)); | return this.GetAuraNames().some(n => this.IsFormationAura(n)); | ||||
}; | }; | ||||
Auras.prototype.HasGarrisonAura = function() | Auras.prototype.HasGarrisonAura = function() | ||||
{ | { | ||||
return this.GetAuraNames().some(n => this.IsGarrisonAura(n)); | return this.GetAuraNames().some(n => this.IsGarrisonAura(n)); | ||||
}; | }; | ||||
Auras.prototype.HasGarrisonedUnitsAura = function() | Auras.prototype.HasGarrisonedUnitsAura = function() | ||||
{ | { | ||||
return this.GetAuraNames().some(n => this.IsGarrisonedUnitsAura(n)); | return this.GetAuraNames().some(n => this.IsGarrisonedUnitsAura(n)); | ||||
}; | }; | ||||
Auras.prototype.GetType = function(name) | Auras.prototype.GetType = function(name) | ||||
{ | { | ||||
return this.auras[name].type; | return AuraTemplates.Get(name).type; | ||||
}; | }; | ||||
Auras.prototype.IsFormationAura = function(name) | Auras.prototype.IsFormationAura = function(name) | ||||
{ | { | ||||
return this.GetType(name) == "formation"; | return this.GetType(name) == "formation"; | ||||
}; | }; | ||||
Auras.prototype.IsGarrisonAura = function(name) | Auras.prototype.IsGarrisonAura = function(name) | ||||
▲ Show 20 Lines • Show All 291 Lines • ▼ Show 20 Lines | |||||
Auras.prototype.OnGlobalResearchFinished = function(msg) | Auras.prototype.OnGlobalResearchFinished = function(msg) | ||||
{ | { | ||||
var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); | var cmpPlayer = Engine.QueryInterface(this.entity, IID_Player); | ||||
if ((!cmpPlayer || cmpPlayer.GetPlayerID() != msg.player) && !IsOwnedByPlayer(msg.player, this.entity)) | if ((!cmpPlayer || cmpPlayer.GetPlayerID() != msg.player) && !IsOwnedByPlayer(msg.player, this.entity)) | ||||
return; | return; | ||||
for (let name of this.GetAuraNames()) | for (let name of this.GetAuraNames()) | ||||
{ | { | ||||
let requiredTech = this.auras[name].requiredTechnology; | let requiredTech = AuraTemplates.Get(name).requiredTechnology; | ||||
if (requiredTech && requiredTech == msg.tech) | if (requiredTech && requiredTech == msg.tech) | ||||
{ | { | ||||
this.Clean(); | this.Clean(); | ||||
return; | return; | ||||
} | } | ||||
} | } | ||||
}; | }; | ||||
Auras.prototype.OnPlayerDefeated = function(msg) | Auras.prototype.OnPlayerDefeated = function(msg) | ||||
{ | { | ||||
this.Clean(); | this.Clean(); | ||||
}; | }; | ||||
Engine.RegisterComponentType(IID_Auras, "Auras", Auras); | Engine.RegisterComponentType(IID_Auras, "Auras", Auras); |
Wildfire Games · Phabricator