Simplify RenderGunboat.
This commit is contained in:
@@ -10,66 +10,55 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using OpenRA.FileFormats;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
class RenderGunboatInfo : RenderSimpleInfo
|
class RenderGunboatInfo : RenderSpritesInfo, Requires<IBodyOrientationInfo>
|
||||||
{
|
{
|
||||||
public override object Create(ActorInitializer init) { return new RenderGunboat(init.self); }
|
[Desc("Turreted 'Turret' key to display")]
|
||||||
|
public readonly string Turret = "primary";
|
||||||
|
|
||||||
|
public override object Create(ActorInitializer init) { return new RenderGunboat(init.self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
class RenderGunboat : RenderSimple, INotifyDamageStateChanged
|
class RenderGunboat : RenderSprites, INotifyDamageStateChanged
|
||||||
{
|
{
|
||||||
IFacing facing;
|
Animation left, right;
|
||||||
string lastDir = "left";
|
|
||||||
string lastDamage = "";
|
|
||||||
|
|
||||||
static Func<int> TurretFacingFunc(Actor self)
|
public RenderGunboat(Actor self, RenderGunboatInfo info)
|
||||||
|
: base(self)
|
||||||
{
|
{
|
||||||
return () => self.HasTrait<Turreted>() ? self.TraitsImplementing<Turreted>().First().turretFacing : 0;
|
var name = GetImage(self);
|
||||||
}
|
var facing = self.Trait<IFacing>();
|
||||||
|
var turret = self.TraitsImplementing<Turreted>()
|
||||||
|
.First(t => t.Name == info.Turret);
|
||||||
|
|
||||||
public RenderGunboat(Actor self)
|
left = new Animation(name, () => turret.turretFacing);
|
||||||
: base(self, TurretFacingFunc(self))
|
left.Play("left");
|
||||||
{
|
anims.Add("left", new AnimationWithOffset(left, null, () => facing.Facing > 128, 0));
|
||||||
facing = self.Trait<IFacing>();
|
|
||||||
anim.Play("left");
|
|
||||||
|
|
||||||
var wake = new Animation(anim.Name);
|
right = new Animation(name, () => turret.turretFacing);
|
||||||
wake.Play("left-wake");
|
right.Play("right");
|
||||||
|
anims.Add("right", new AnimationWithOffset(right, null, () => facing.Facing <= 128, 0));
|
||||||
|
|
||||||
var leftOffset = new WVec(43, 86, 0);
|
var leftWake = new Animation(name);
|
||||||
var rightOffset = new WVec(-43, 86, 0);
|
leftWake.Play("wake-left");
|
||||||
anims.Add("wake", new AnimationWithOffset(wake,
|
anims.Add("wake-left", new AnimationWithOffset(leftWake, null, () => facing.Facing > 128, -87));
|
||||||
() => anims["wake"].Animation.CurrentSequence.Name == "left-wake" ? leftOffset : rightOffset,
|
|
||||||
() => false, -87));
|
|
||||||
|
|
||||||
self.Trait<IBodyOrientation>().QuantizedFacings = anim.CurrentSequence.Facings;
|
var rightWake = new Animation(name);
|
||||||
}
|
rightWake.Play("wake-right");
|
||||||
|
anims.Add("wake-right", new AnimationWithOffset(rightWake, null, () => facing.Facing <= 128, -87));
|
||||||
|
|
||||||
public override void Tick(Actor self)
|
self.Trait<IBodyOrientation>().QuantizedFacings = 2;
|
||||||
{
|
|
||||||
var dir = (facing.Facing > 128) ? "right" : "left";
|
|
||||||
if (dir != lastDir)
|
|
||||||
{
|
|
||||||
anim.ReplaceAnim(dir+lastDamage);
|
|
||||||
anims["wake"].Animation.ReplaceAnim(dir+"-wake");
|
|
||||||
lastDir = dir;
|
|
||||||
}
|
|
||||||
base.Tick(self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DamageStateChanged(Actor self, AttackInfo e)
|
public void DamageStateChanged(Actor self, AttackInfo e)
|
||||||
{
|
{
|
||||||
if (e.DamageState >= DamageState.Critical)
|
left.ReplaceAnim(NormalizeSequence(left, e.DamageState, "left"));
|
||||||
lastDamage = "-critical";
|
right.ReplaceAnim(NormalizeSequence(right, e.DamageState, "right"));
|
||||||
else if (e.DamageState >= DamageState.Heavy)
|
|
||||||
lastDamage = "-damaged";
|
|
||||||
else if (e.DamageState < DamageState.Heavy)
|
|
||||||
lastDamage = "";
|
|
||||||
anim.ReplaceAnim(lastDir+lastDamage);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ BOAT:
|
|||||||
LocalOffset: 213,-180,0, 213,128,0, 213,0,0
|
LocalOffset: 213,-180,0, 213,128,0, 213,0,0
|
||||||
AttackTurreted:
|
AttackTurreted:
|
||||||
RenderGunboat:
|
RenderGunboat:
|
||||||
|
Selectable:
|
||||||
|
Bounds: 42,24
|
||||||
AutoTarget:
|
AutoTarget:
|
||||||
AllowMovement: false
|
AllowMovement: false
|
||||||
WithSmoke:
|
WithSmoke:
|
||||||
|
|||||||
@@ -12,22 +12,26 @@ boat:
|
|||||||
left:
|
left:
|
||||||
Start: 0
|
Start: 0
|
||||||
Facings: 32
|
Facings: 32
|
||||||
left-damaged:
|
damaged-left:
|
||||||
Start: 32
|
Start: 32
|
||||||
left-critical:
|
Facings: 32
|
||||||
|
critical-left:
|
||||||
Start: 64
|
Start: 64
|
||||||
left-wake: wake
|
Facings: 32
|
||||||
|
wake-left: wake
|
||||||
Start: 6
|
Start: 6
|
||||||
Length: 6
|
Length: 6
|
||||||
|
Offset: 1,2
|
||||||
right:
|
right:
|
||||||
Start: 96
|
Start: 96
|
||||||
Facings: 32
|
Facings: 32
|
||||||
right-damaged:
|
damaged-right:
|
||||||
Start: 128
|
Start: 128
|
||||||
Facings: 32
|
Facings: 32
|
||||||
right-critical:
|
critical-right:
|
||||||
Start: 160
|
Start: 160
|
||||||
Facings: 32
|
Facings: 32
|
||||||
right-wake: wake
|
wake-right: wake
|
||||||
Start: 0
|
Start: 0
|
||||||
Length: 6
|
Length: 6
|
||||||
|
Offset: -1,2
|
||||||
Reference in New Issue
Block a user