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)
{
if (e.DamageState == DamageState.Dead)
if (e.ExtendedDamageState == ExtendedDamageState.Dead)
{
self.World.WorldActor.traits.Get<ScreenShaker>().AddEffect(10, self.CenterLocation, 1);
Sound.Play(Info.DestroyedSound, self.CenterLocation);

View File

@@ -53,20 +53,6 @@ namespace OpenRA.Traits
public bool IsDead { get { return hp <= 0; } }
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
{
get
@@ -94,7 +80,6 @@ namespace OpenRA.Traits
{
if (IsDead) return; /* overkill! don't count extra hits as more kills! */
var oldState = this.DamageState;
var oldExtendedState = this.ExtendedDamageState;
/* apply the damage modifiers, if we have any. */
@@ -124,9 +109,7 @@ namespace OpenRA.Traits
{
Attacker = attacker,
Damage = damage,
DamageState = this.DamageState,
ExtendedDamageState = this.ExtendedDamageState,
DamageStateChanged = this.DamageState != oldState,
ExtendedDamageStateChanged = this.ExtendedDamageState != oldExtendedState,
Warhead = warhead
});

View File

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

View File

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

View File

@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Cnc
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.World.AddFrameEndTask(

View File

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

View File

@@ -160,18 +160,18 @@ namespace OpenRA.Mods.RA
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 (Info.Long && Health.DamageState != DamageState.Dead &&
if (Info.Long && Health.ExtendedDamageState != ExtendedDamageState.Dead &&
((southNeighbour != null && Info.ShorePieces.Contains(southNeighbour.Type) && !IsIntact(southNeighbour)) ||
(northNeighbour != null && Info.ShorePieces.Contains(northNeighbour.Type) && !IsIntact(northNeighbour))))
{
self.Kill(self); // this changes the damagestate
}
var ds = Health.DamageState;
currentTemplate = (ds == DamageState.Half && Info.DamagedTemplate > 0) ? Info.DamagedTemplate :
(ds == DamageState.Dead && Info.DestroyedTemplate > 0) ? Info.DestroyedTemplate : Info.Template;
var ds = Health.ExtendedDamageState;
currentTemplate = (ds == ExtendedDamageState.Half && Info.DamagedTemplate > 0) ? Info.DamagedTemplate :
(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
bool waterToSouth = !IsIntact(southNeighbour);
@@ -185,7 +185,7 @@ namespace OpenRA.Mods.RA
currentTemplate = Info.DestroyedPlusSouthTemplate;
}
if (ds == DamageState.Dead && !dead)
if (ds == ExtendedDamageState.Dead && !dead)
{
dead = true;
KillUnitsOnBridge();
@@ -198,7 +198,7 @@ namespace OpenRA.Mods.RA
public void Damaged(Actor self, AttackInfo e)
{
if (e.DamageStateChanged)
if (e.ExtendedDamageStateChanged)
{
UpdateState();
if (northNeighbour != null) northNeighbour.UpdateState();

View File

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

View File

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

View File

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

View File

@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA
{
public void Damaged(Actor self, AttackInfo e)
{
if (e.DamageState == DamageState.Dead)
if (e.ExtendedDamageState == ExtendedDamageState.Dead)
{
// Prevent TK from giving exp
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)
{
if (e.DamageState == DamageState.Dead)
if (e.ExtendedDamageState == ExtendedDamageState.Dead)
if (LinkedProc != null)
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)
{
if (e.DamageState == DamageState.Dead)
if (e.ExtendedDamageState == ExtendedDamageState.Dead)
self.World.AddFrameEndTask(w =>
{
var info = self.Info.Traits.Get<LeavesHuskInfo>();

View File

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

View File

@@ -31,15 +31,15 @@ namespace OpenRA.Mods.RA.Render
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:
anim.Play( "idle" );
case ExtendedDamageState.ThreeQuarter: case ExtendedDamageState.Normal: case ExtendedDamageState.Undamaged:
anim.ReplaceAnim("idle");
break;
case DamageState.Half:
anim.Play( "damaged-idle" );
case ExtendedDamageState.Half: case ExtendedDamageState.Quarter:
anim.ReplaceAnim("damaged-idle");
Sound.Play(self.Info.Traits.Get<BuildingInfo>().DamagedSound, self.CenterLocation);
break;
}

View File

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

View File

@@ -78,7 +78,7 @@ namespace OpenRA.Mods.RA.Render
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;
Sound.PlayVoice("Die", self);

View File

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