Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/simulation/components/Health.js
Show First 20 Lines • Show All 165 Lines • ▼ Show 20 Lines | |||||
}; | }; | ||||
Health.prototype.Kill = function() | Health.prototype.Kill = function() | ||||
{ | { | ||||
this.Reduce(this.hitpoints); | this.Reduce(this.hitpoints); | ||||
}; | }; | ||||
/** | /** | ||||
* Reduces entity's health by amount HP. Kill if required. | * @param {number} amount - The amount of hitpoints to substract. Kills the entity if required. | ||||
* @return {{ "killed": boolean, "change": Number }} the status change of the entity. | * @return {{killed:boolean, change:number}} - Number of health points lost and whether the entity was killed. | ||||
*/ | */ | ||||
Health.prototype.Reduce = function(amount) | Health.prototype.Reduce = function(amount) | ||||
{ | { | ||||
// If we are dead, do not do anything | // If we are dead, do not do anything | ||||
// (The entity will exist a little while after calling DestroyEntity so this | // (The entity will exist a little while after calling DestroyEntity so this | ||||
// might get called multiple times) | // might get called multiple times) | ||||
// Likewise if the amount is 0. | // Likewise if the amount is 0. | ||||
if (!amount || !this.hitpoints) | if (!amount || !this.hitpoints) | ||||
return {"killed": false, "change": 0}; | return { "killed": false, "change": 0 }; | ||||
// Before changing the value, activate Fogging if necessary to hide changes | // Before changing the value, activate Fogging if necessary to hide changes | ||||
let cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging); | let cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging); | ||||
if (cmpFogging) | if (cmpFogging) | ||||
cmpFogging.Activate(); | cmpFogging.Activate(); | ||||
let oldHitpoints = this.hitpoints; | let oldHitpoints = this.hitpoints; | ||||
// If we reached 0, then die. | // If we reached 0, then die. | ||||
if (amount >= this.hitpoints) | if (amount >= this.hitpoints) | ||||
{ | { | ||||
this.hitpoints = 0; | this.hitpoints = 0; | ||||
this.RegisterHealthChanged(oldHitpoints); | this.RegisterHealthChanged(oldHitpoints); | ||||
this.HandleDeath(); | this.HandleDeath(); | ||||
return {"killed": true, "change": -oldHitpoints}; | return { "killed": true, "change": -oldHitpoints }; | ||||
} | } | ||||
// If we are not marked as injured, do it now | // If we are not marked as injured, do it now | ||||
if (this.hitpoints == this.GetMaxHitpoints()) | if (this.hitpoints == this.GetMaxHitpoints()) | ||||
{ | { | ||||
let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); | ||||
if (cmpRangeManager) | if (cmpRangeManager) | ||||
cmpRangeManager.SetEntityFlag(this.entity, "injured", true); | cmpRangeManager.SetEntityFlag(this.entity, "injured", true); | ||||
} | } | ||||
this.hitpoints -= amount; | this.hitpoints -= amount; | ||||
this.RegisterHealthChanged(oldHitpoints); | this.RegisterHealthChanged(oldHitpoints); | ||||
return {"killed": false, "change": (this.hitpoints - oldHitpoints)}; | return { "killed": false, "change": this.hitpoints - oldHitpoints }; | ||||
}; | }; | ||||
/** | /** | ||||
* Handle what happens when the entity dies. | * Handle what happens when the entity dies. | ||||
*/ | */ | ||||
Health.prototype.HandleDeath = function() | Health.prototype.HandleDeath = function() | ||||
{ | { | ||||
let cmpDeathDamage = Engine.QueryInterface(this.entity, IID_DeathDamage); | let cmpDeathDamage = Engine.QueryInterface(this.entity, IID_DeathDamage); | ||||
Show All 22 Lines | case "vanish": | ||||
break; | break; | ||||
default: | default: | ||||
error("Invalid template.DeathType: " + this.template.DeathType); | error("Invalid template.DeathType: " + this.template.DeathType); | ||||
break; | break; | ||||
} | } | ||||
Engine.DestroyEntity(this.entity); | Engine.DestroyEntity(this.entity); | ||||
} | }; | ||||
Health.prototype.Increase = function(amount) | Health.prototype.Increase = function(amount) | ||||
{ | { | ||||
// Before changing the value, activate Fogging if necessary to hide changes | // Before changing the value, activate Fogging if necessary to hide changes | ||||
let cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging); | let cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging); | ||||
if (cmpFogging) | if (cmpFogging) | ||||
cmpFogging.Activate(); | cmpFogging.Activate(); | ||||
▲ Show 20 Lines • Show All 153 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator