Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/simulation/components/Health.js
Show First 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | |||||
}; | }; | ||||
Health.prototype.Kill = function() | Health.prototype.Kill = function() | ||||
{ | { | ||||
this.Reduce(this.hitpoints); | this.Reduce(this.hitpoints); | ||||
}; | }; | ||||
/** | /** | ||||
* Take damage according to the entity's resistance. | |||||
* @param {Object} strengths - { "hack": number, "pierce": number, "crush": number } or something like that. | |||||
* @param {number} bonusMultiplier - the damage multiplier. | |||||
* Returns object of the form { "killed": false, "change": -12 }. | |||||
*/ | |||||
Health.prototype.TakeDamage = function(effectData, attacker, attackerOwner, bonusMultiplier) | |||||
{ | |||||
let cmpResistance = Engine.QueryInterface(this.entity, IID_Resistance); | |||||
if (cmpResistance && cmpResistance.IsInvulnerable()) | |||||
Stan: check for it ? | |||||
Done Inline ActionsDone. wraitii: Done. | |||||
return { "killed": false }; | |||||
let total = Attacking.GetTotalAttackEffects(effectData, "Damage", cmpResistance) * bonusMultiplier; | |||||
// Reduce health | |||||
let change = this.Reduce(total); | |||||
let cmpLoot = Engine.QueryInterface(this.entity, IID_Loot); | |||||
if (cmpLoot && cmpLoot.GetXp() > 0 && change.HPchange < 0) | |||||
change.xp = cmpLoot.GetXp() * -change.HPchange / this.GetMaxHitpoints(); | |||||
return change; | |||||
}; | |||||
/** | |||||
* @param {number} amount - The amount of hitpoints to substract. Kills the entity if required. | * @param {number} amount - The amount of hitpoints to substract. Kills the entity if required. | ||||
* @return {{killed:boolean, change:number}} - Number of health points lost and whether the entity was killed. | * @return {{killed:boolean, HPchange: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, "HPchange": 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, "HPchange": -oldHitpoints }; | ||||
} | } | ||||
// If we are not marked as injured, do it now | // If we are not marked as injured, do it now | ||||
if (!this.IsInjured()) | if (!this.IsInjured()) | ||||
{ | { | ||||
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, "HPchange": this.hitpoints - oldHitpoints }; | ||||
Not Done Inline ActionshpChange ? Stan: hpChange ? | |||||
Done Inline Actionsmeh. wraitii: meh. | |||||
}; | }; | ||||
/** | /** | ||||
* 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 20 Lines • Show All 192 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
check for it ?