Merge the two DamageState types

This commit is contained in:
Paul Chote
2010-07-30 21:26:46 +12:00
parent 41c0d175bd
commit 028c5b5201
19 changed files with 37 additions and 57 deletions

View File

@@ -78,7 +78,7 @@ namespace OpenRA.Traits
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
{ {
self.World.WorldActor.traits.Get<ScreenShaker>().AddEffect(10, self.CenterLocation, 1); self.World.WorldActor.traits.Get<ScreenShaker>().AddEffect(10, self.CenterLocation, 1);
Sound.Play(Info.DestroyedSound, self.CenterLocation); Sound.Play(Info.DestroyedSound, self.CenterLocation);

View File

@@ -52,21 +52,7 @@ namespace OpenRA.Traits
public bool IsDead { get { return hp <= 0; } } public bool IsDead { get { return hp <= 0; } }
public bool RemoveOnDeath = true; public bool RemoveOnDeath = true;
public DamageState DamageState
{
get
{
if (hp <= 0)
return DamageState.Dead;
if (hp < MaxHP * 0.5f)
return DamageState.Half;
return DamageState.Normal;
}
}
public ExtendedDamageState ExtendedDamageState public ExtendedDamageState ExtendedDamageState
{ {
get get
@@ -94,7 +80,6 @@ namespace OpenRA.Traits
{ {
if (IsDead) return; /* overkill! don't count extra hits as more kills! */ if (IsDead) return; /* overkill! don't count extra hits as more kills! */
var oldState = this.DamageState;
var oldExtendedState = this.ExtendedDamageState; var oldExtendedState = this.ExtendedDamageState;
/* apply the damage modifiers, if we have any. */ /* apply the damage modifiers, if we have any. */
@@ -124,9 +109,7 @@ namespace OpenRA.Traits
{ {
Attacker = attacker, Attacker = attacker,
Damage = damage, Damage = damage,
DamageState = this.DamageState,
ExtendedDamageState = this.ExtendedDamageState, ExtendedDamageState = this.ExtendedDamageState,
DamageStateChanged = this.DamageState != oldState,
ExtendedDamageStateChanged = this.ExtendedDamageState != oldExtendedState, ExtendedDamageStateChanged = this.ExtendedDamageState != oldExtendedState,
Warhead = warhead Warhead = warhead
}); });

View File

@@ -15,8 +15,6 @@ using OpenRA.Graphics;
namespace OpenRA.Traits namespace OpenRA.Traits
{ {
public enum DamageState { Normal, Half, Dead };
// depends on the order of pips in WorldRenderer.cs! // depends on the order of pips in WorldRenderer.cs!
public enum PipType { Transparent, Green, Yellow, Red, Gray }; public enum PipType { Transparent, Green, Yellow, Red, Gray };
public enum TagType { None, Fake, Primary }; public enum TagType { None, Fake, Primary };
@@ -27,9 +25,7 @@ namespace OpenRA.Traits
public Actor Attacker; public Actor Attacker;
public WarheadInfo Warhead; public WarheadInfo Warhead;
public int Damage; public int Damage;
public DamageState DamageState;
public ExtendedDamageState ExtendedDamageState; public ExtendedDamageState ExtendedDamageState;
public bool DamageStateChanged;
public bool ExtendedDamageStateChanged; public bool ExtendedDamageStateChanged;
} }

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Traits
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
if (self.Owner == self.World.LocalPlayer) if (self.Owner == self.World.LocalPlayer)
Sound.PlayVoice("Lost", self); Sound.PlayVoice("Lost", self);
} }

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Cnc
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageStateChanged && e.DamageState == DamageState.Dead) if (e.ExtendedDamageStateChanged && e.ExtendedDamageState == ExtendedDamageState.Dead)
{ {
self.traits.Get<RenderSimple>().anim.PlayRepeating("critical-idle"); self.traits.Get<RenderSimple>().anim.PlayRepeating("critical-idle");
self.World.AddFrameEndTask( self.World.AddFrameEndTask(

View File

@@ -82,7 +82,7 @@ namespace OpenRA.Mods.Cnc
public void Damaged (Actor self, AttackInfo e) public void Damaged (Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
CancelDock(self, dockedHarv); CancelDock(self, dockedHarv);
} }

View File

@@ -160,18 +160,18 @@ namespace OpenRA.Mods.RA
void UpdateState() void UpdateState()
{ {
// If this is a long bridge next to a destroyed shore piece, we need die to give clean edges to the break // If this is a long bridge next to a destroyed shore piece, we need die to give clean edges to the break
if (Info.Long && Health.DamageState != DamageState.Dead && if (Info.Long && Health.ExtendedDamageState != ExtendedDamageState.Dead &&
((southNeighbour != null && Info.ShorePieces.Contains(southNeighbour.Type) && !IsIntact(southNeighbour)) || ((southNeighbour != null && Info.ShorePieces.Contains(southNeighbour.Type) && !IsIntact(southNeighbour)) ||
(northNeighbour != null && Info.ShorePieces.Contains(northNeighbour.Type) && !IsIntact(northNeighbour)))) (northNeighbour != null && Info.ShorePieces.Contains(northNeighbour.Type) && !IsIntact(northNeighbour))))
{ {
self.Kill(self); // this changes the damagestate self.Kill(self); // this changes the damagestate
} }
var ds = Health.DamageState; var ds = Health.ExtendedDamageState;
currentTemplate = (ds == DamageState.Half && Info.DamagedTemplate > 0) ? Info.DamagedTemplate : currentTemplate = (ds == ExtendedDamageState.Half && Info.DamagedTemplate > 0) ? Info.DamagedTemplate :
(ds == DamageState.Dead && Info.DestroyedTemplate > 0) ? Info.DestroyedTemplate : Info.Template; (ds == ExtendedDamageState.Dead && Info.DestroyedTemplate > 0) ? Info.DestroyedTemplate : Info.Template;
if (Info.Long && ds == DamageState.Dead) if (Info.Long && ds == ExtendedDamageState.Dead)
{ {
// Long bridges have custom art for multiple segments being destroyed // Long bridges have custom art for multiple segments being destroyed
bool waterToSouth = !IsIntact(southNeighbour); bool waterToSouth = !IsIntact(southNeighbour);
@@ -185,7 +185,7 @@ namespace OpenRA.Mods.RA
currentTemplate = Info.DestroyedPlusSouthTemplate; currentTemplate = Info.DestroyedPlusSouthTemplate;
} }
if (ds == DamageState.Dead && !dead) if (ds == ExtendedDamageState.Dead && !dead)
{ {
dead = true; dead = true;
KillUnitsOnBridge(); KillUnitsOnBridge();
@@ -198,7 +198,7 @@ namespace OpenRA.Mods.RA
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageStateChanged) if (e.ExtendedDamageStateChanged)
{ {
UpdateState(); UpdateState();
if (northNeighbour != null) northNeighbour.UpdateState(); if (northNeighbour != null) northNeighbour.UpdateState();

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA
// Fire primary on death // Fire primary on death
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
Detonate(self, e.Attacker); Detonate(self, e.Attacker);
} }

View File

@@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageStateChanged && e.DamageState == DamageState.Dead) if (e.ExtendedDamageStateChanged && e.ExtendedDamageState == ExtendedDamageState.Dead)
Emit(self); Emit(self);
} }
} }

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA
{ {
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
{ {
var weapon = ChooseWeaponForExplosion(self); var weapon = ChooseWeaponForExplosion(self);
if (weapon != null) if (weapon != null)

View File

@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA
{ {
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
{ {
// Prevent TK from giving exp // Prevent TK from giving exp
if (e.Attacker == null || e.Attacker.Owner.Stances[ self.Owner ] == Stance.Ally ) if (e.Attacker == null || e.Attacker.Owner.Stances[ self.Owner ] == Stance.Ally )

View File

@@ -164,7 +164,7 @@ namespace OpenRA.Mods.RA
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
if (LinkedProc != null) if (LinkedProc != null)
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self); LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
} }

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA
{ {
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
var info = self.Info.Traits.Get<LeavesHuskInfo>(); var info = self.Info.Traits.Get<LeavesHuskInfo>();

View File

@@ -92,7 +92,7 @@ namespace OpenRA.Mods.RA
public void Damaged (Actor self, AttackInfo e) public void Damaged (Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
foreach (var harv in LinkedHarv) foreach (var harv in LinkedHarv)
harv.traits.Get<Harvester> ().UnlinkProc(harv, self); harv.traits.Get<Harvester> ().UnlinkProc(harv, self);
} }

View File

@@ -58,19 +58,19 @@ namespace OpenRA.Mods.RA.Render
public virtual void Damaged(Actor self, AttackInfo e) public virtual void Damaged(Actor self, AttackInfo e)
{ {
if (!e.DamageStateChanged) if (!e.ExtendedDamageStateChanged)
return; return;
switch( e.DamageState ) switch( e.ExtendedDamageState )
{ {
case DamageState.Normal: case ExtendedDamageState.ThreeQuarter: case ExtendedDamageState.Normal: case ExtendedDamageState.Undamaged:
anim.ReplaceAnim("idle"); anim.ReplaceAnim("idle");
break; break;
case DamageState.Half: case ExtendedDamageState.Half: case ExtendedDamageState.Quarter:
anim.ReplaceAnim("damaged-idle"); anim.ReplaceAnim("damaged-idle");
Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation); Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break; break;
case DamageState.Dead: case ExtendedDamageState.Dead:
self.World.AddFrameEndTask(w => w.Add(new Explosion(w, self.CenterLocation.ToInt2(), "building", false))); self.World.AddFrameEndTask(w => w.Add(new Explosion(w, self.CenterLocation.ToInt2(), "building", false)));
break; break;
} }

View File

@@ -31,15 +31,15 @@ namespace OpenRA.Mods.RA.Render
public override void Damaged(Actor self, AttackInfo e) public override void Damaged(Actor self, AttackInfo e)
{ {
if (!e.DamageStateChanged) return; if (!e.ExtendedDamageStateChanged) return;
switch (e.DamageState) switch( e.ExtendedDamageState )
{ {
case DamageState.Normal: case ExtendedDamageState.ThreeQuarter: case ExtendedDamageState.Normal: case ExtendedDamageState.Undamaged:
anim.Play( "idle" ); anim.ReplaceAnim("idle");
break; break;
case DamageState.Half: case ExtendedDamageState.Half: case ExtendedDamageState.Quarter:
anim.Play( "damaged-idle" ); anim.ReplaceAnim("damaged-idle");
Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation); Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break; break;
} }

View File

@@ -53,13 +53,14 @@ namespace OpenRA.Mods.RA.Render
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (!e.DamageStateChanged) return; if (!e.ExtendedDamageStateChanged) return;
switch (e.DamageState)
switch( e.ExtendedDamageState )
{ {
case DamageState.Normal: case ExtendedDamageState.ThreeQuarter: case ExtendedDamageState.Normal: case ExtendedDamageState.Undamaged:
roof.ReplaceAnim(roof.CurrentSequence.Name.Replace("damaged-","")); roof.ReplaceAnim(roof.CurrentSequence.Name.Replace("damaged-",""));
break; break;
case DamageState.Half: case ExtendedDamageState.Half: case ExtendedDamageState.Quarter:
roof.ReplaceAnim("damaged-" + roof.CurrentSequence.Name); roof.ReplaceAnim("damaged-" + roof.CurrentSequence.Name);
break; break;
} }

View File

@@ -78,7 +78,7 @@ namespace OpenRA.Mods.RA.Render
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState == DamageState.Dead) if (e.ExtendedDamageState == ExtendedDamageState.Dead)
{ {
var death = e.Warhead != null ? e.Warhead.InfDeath : 0; var death = e.Warhead != null ? e.Warhead.InfDeath : 0;
Sound.PlayVoice("Die", self); Sound.PlayVoice("Die", self);

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Render
public void Damaged(Actor self, AttackInfo e) public void Damaged(Actor self, AttackInfo e)
{ {
if (e.DamageState != DamageState.Half) return; if (e.ExtendedDamageState > ExtendedDamageState.Half) return;
if (isSmoking) return; if (isSmoking) return;
isSmoking = true; isSmoking = true;