infantry deaths (handled by Corpse effect)
This commit is contained in:
@@ -106,7 +106,7 @@ namespace OpenRa.Game
|
||||
|
||||
public bool IsDead { get { return Health <= 0; } }
|
||||
|
||||
public void InflictDamage(Actor attacker, int damage)
|
||||
public void InflictDamage(Actor attacker, int damage, WarheadInfo warhead)
|
||||
{
|
||||
/* todo: auto-retaliate, etc */
|
||||
/* todo: death sequence for infantry based on inflictor */
|
||||
@@ -138,7 +138,7 @@ namespace OpenRa.Game
|
||||
}
|
||||
|
||||
foreach (var ndx in traits.WithInterface<INotifyDamageEx>())
|
||||
ndx.Damaged(this, damage);
|
||||
ndx.Damaged(this, damage, warhead);
|
||||
}
|
||||
|
||||
public void QueueActivity( IActivity nextActivity )
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRa.Game
|
||||
var hitActors = Game.FindUnitsInCircle(loc, maxSpread);
|
||||
|
||||
foreach (var victim in hitActors)
|
||||
victim.InflictDamage(firedBy, (int)GetDamageToInflict(victim, loc, weapon, warhead));
|
||||
victim.InflictDamage(firedBy, (int)GetDamageToInflict(victim, loc, weapon, warhead), warhead);
|
||||
}
|
||||
|
||||
static float GetMaximumSpread(WeaponInfo weapon, WarheadInfo warhead)
|
||||
|
||||
32
OpenRa.Game/Effects/Corpse.cs
Normal file
32
OpenRa.Game/Effects/Corpse.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using OpenRa.Game.Graphics;
|
||||
|
||||
namespace OpenRa.Game.Effects
|
||||
{
|
||||
class Corpse : IEffect
|
||||
{
|
||||
readonly Animation anim;
|
||||
readonly float2 pos;
|
||||
readonly Player owner;
|
||||
|
||||
public Corpse(Actor fromActor, int death)
|
||||
{
|
||||
anim = new Animation(fromActor.Info.Image ?? fromActor.Info.Name);
|
||||
anim.PlayThen("die{0}".F(death + 1),
|
||||
() => Game.world.AddFrameEndTask(w => w.Remove(this)));
|
||||
|
||||
pos = fromActor.CenterLocation;
|
||||
owner = fromActor.Owner;
|
||||
}
|
||||
|
||||
public void Tick() { anim.Tick(); }
|
||||
|
||||
public IEnumerable<Tuple<Sprite, float2, int>> Render()
|
||||
{
|
||||
yield return Tuple.New(anim.Image, pos - .5f * anim.Image.size, owner.Palette);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,6 +80,7 @@
|
||||
<Compile Include="Chat.cs" />
|
||||
<Compile Include="Chrome.cs" />
|
||||
<Compile Include="Combat.cs" />
|
||||
<Compile Include="Effects\Corpse.cs" />
|
||||
<Compile Include="Effects\Smoke.cs" />
|
||||
<Compile Include="Effects\TeslaZap.cs" />
|
||||
<Compile Include="Exts.cs" />
|
||||
|
||||
@@ -3,10 +3,12 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using OpenRa.Game.Graphics;
|
||||
using OpenRa.Game.GameRules;
|
||||
using OpenRa.Game.Effects;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
class RenderInfantry : RenderSimple, INotifyAttack
|
||||
class RenderInfantry : RenderSimple, INotifyAttack, INotifyDamageEx
|
||||
{
|
||||
public RenderInfantry(Actor self)
|
||||
: base(self)
|
||||
@@ -57,5 +59,13 @@ namespace OpenRa.Game.Traits
|
||||
{
|
||||
yield return Util.Centered(self, anim.Image, self.CenterLocation);
|
||||
}
|
||||
|
||||
public void Damaged(Actor self, int damage, WarheadInfo warhead)
|
||||
{
|
||||
if (self.Health <= 0)
|
||||
Game.world.AddFrameEndTask(w => w.Add(new Corpse(self, warhead.InfDeath)));
|
||||
}
|
||||
|
||||
public void Damaged(Actor self, DamageState ds) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using OpenRa.Game.Graphics;
|
||||
using OpenRa.Game.GameRules;
|
||||
|
||||
namespace OpenRa.Game.Traits
|
||||
{
|
||||
@@ -37,7 +38,7 @@ namespace OpenRa.Game.Traits
|
||||
|
||||
public void Damaged(Actor self, DamageState ds) { currentDs = ds; }
|
||||
|
||||
public void Damaged(Actor self, int damage)
|
||||
public void Damaged(Actor self, int damage, WarheadInfo warhead)
|
||||
{
|
||||
if (currentDs != DamageState.Half) return;
|
||||
if (!isSmoking)
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace OpenRa.Game.Traits
|
||||
interface ITick { void Tick(Actor self); }
|
||||
interface IRender { IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self); }
|
||||
interface INotifyDamage { void Damaged(Actor self, DamageState ds); }
|
||||
interface INotifyDamageEx : INotifyDamage { void Damaged(Actor self, int damage); }
|
||||
interface INotifyDamageEx : INotifyDamage { void Damaged(Actor self, int damage, WarheadInfo warhead); }
|
||||
interface INotifyBuildComplete { void BuildingComplete (Actor self); }
|
||||
interface IOrder
|
||||
{
|
||||
|
||||
@@ -205,7 +205,9 @@ namespace SequenceEditor
|
||||
e.Graphics.DrawString(toolText, Font, Brushes.Black, toolPoint.Value.X, toolPoint.Value.Y);
|
||||
}
|
||||
|
||||
Height = Math.Max( Parent.ClientSize.Height, y );
|
||||
var newHeight = Math.Max( Parent.ClientSize.Height, y );
|
||||
if (Height != newHeight)
|
||||
Height = newHeight;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -349,6 +349,7 @@
|
||||
<sequence name="die3" start="304" length="8" />
|
||||
<sequence name="die4" start="312" length="12" />
|
||||
<sequence name="die5" start="324" length="18" />
|
||||
<sequence name="die6" start="0" length="14" src="electro" />
|
||||
</unit>
|
||||
<!-- build clock - hacked in -->
|
||||
<unit name="clock">
|
||||
@@ -415,6 +416,12 @@
|
||||
<sequence name="shoot-5" start="104" length="8" />
|
||||
<sequence name="shoot-6" start="112" length="8" />
|
||||
<sequence name="shoot-7" start="120" length="8" />
|
||||
<sequence name="die1" start="304" length="8" />
|
||||
<sequence name="die2" start="312" length="8" />
|
||||
<sequence name="die3" start="320" length="8" />
|
||||
<sequence name="die4" start="328" length="12" />
|
||||
<sequence name="die5" start="340" length="18" />
|
||||
<sequence name="die6" start="0" length="14" src="electro" />
|
||||
</unit>
|
||||
<unit name="e6">
|
||||
<sequence name="stand" start="0" length="8" />
|
||||
@@ -432,6 +439,7 @@
|
||||
<sequence name="die4" start="170" length="12" />
|
||||
<sequence name="die5" start="182" length="18" />
|
||||
<sequence name="run-5" start="46" length="8" />
|
||||
<sequence name="die6" start="0" length="14" src="electro" />
|
||||
</unit>
|
||||
<unit name="ca">
|
||||
<sequence name="idle" start="0" length="16" />
|
||||
@@ -637,6 +645,12 @@
|
||||
<sequence name="shoot-5" start="164" length="20" />
|
||||
<sequence name="shoot-6" start="184" length="20" />
|
||||
<sequence name="shoot-7" start="204" length="20" />
|
||||
<sequence name="die1" start="416" length="8" />
|
||||
<sequence name="die2" start="424" length="8" />
|
||||
<sequence name="die3" start="432" length="8" />
|
||||
<sequence name="die4" start="440" length="12" />
|
||||
<sequence name="die5" start="452" length="18" />
|
||||
<sequence name="die6" start="0" length="14" src="electro" />
|
||||
</unit>
|
||||
<unit name="bomb">
|
||||
<sequence name="idle" start="0" length="8" />
|
||||
@@ -651,6 +665,12 @@
|
||||
<sequence name="run-5" start="38" length="6" />
|
||||
<sequence name="run-6" start="44" length="6" />
|
||||
<sequence name="run-7" start="50" length="6" />
|
||||
<sequence name="die1" start="236" length="6" />
|
||||
<sequence name="die2" start="242" length="9" />
|
||||
<sequence name="die3" start="236" length="6" />
|
||||
<sequence name="die4" start="242" length="9" />
|
||||
<sequence name="die5" start="251" length="14" />
|
||||
<sequence name="die6" start="0" length="17" src="electdog" />
|
||||
</unit>
|
||||
<unit name="missile">
|
||||
<sequence name="idle" start="0" length="32" />
|
||||
@@ -679,4 +699,29 @@
|
||||
<sequence name="bright" start="0" length="4" />
|
||||
<sequence name="dim" start="4" length="4" />
|
||||
</unit>
|
||||
<unit name="e7">
|
||||
<sequence name="stand" start="0" length="8" />
|
||||
<sequence name="run-0" start="8" length="6" />
|
||||
<sequence name="run-1" start="14" length="6" />
|
||||
<sequence name="run-2" start="20" length="6" />
|
||||
<sequence name="run-3" start="26" length="6" />
|
||||
<sequence name="run-4" start="32" length="6" />
|
||||
<sequence name="run-5" start="38" length="6" />
|
||||
<sequence name="run-6" start="44" length="6" />
|
||||
<sequence name="run-7" start="50" length="6" />
|
||||
<sequence name="shoot-0" start="56" length="7" />
|
||||
<sequence name="shoot-1" start="63" length="7" />
|
||||
<sequence name="shoot-2" start="70" length="7" />
|
||||
<sequence name="shoot-3" start="77" length="7" />
|
||||
<sequence name="shoot-4" start="84" length="7" />
|
||||
<sequence name="shoot-5" start="91" length="7" />
|
||||
<sequence name="shoot-6" start="98" length="7" />
|
||||
<sequence name="shoot-7" start="105" length="7" />
|
||||
<sequence name="die1" start="262" length="8" />
|
||||
<sequence name="die2" start="270" length="8" />
|
||||
<sequence name="die3" start="278" length="8" />
|
||||
<sequence name="die4" start="286" length="12" />
|
||||
<sequence name="die5" start="298" length="18" />
|
||||
<sequence name="die6" start="0" length="14" src="electro" />
|
||||
</unit>
|
||||
</sequences>
|
||||
Reference in New Issue
Block a user