RenderBuildingTurreted -> WithTurretedSpriteBody

This commit is contained in:
reaperrr
2015-07-15 07:02:02 +02:00
parent 69d062495c
commit 21186c10b6
8 changed files with 75 additions and 23 deletions

View File

@@ -15,15 +15,25 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Cnc.Traits namespace OpenRA.Mods.Cnc.Traits
{ {
[Desc("Actor's turret rises from the ground before attacking.")] [Desc("Actor's turret rises from the ground before attacking.")]
class AttackPopupTurretedInfo : AttackTurretedInfo, Requires<BuildingInfo>, Requires<RenderBuildingInfo> class AttackPopupTurretedInfo : AttackTurretedInfo, Requires<BuildingInfo>, Requires<WithTurretedSpriteBodyInfo>
{ {
[Desc("How many game ticks should pass before closing the actor's turret.")] [Desc("How many game ticks should pass before closing the actor's turret.")]
public int CloseDelay = 125; public int CloseDelay = 125;
public int DefaultFacing = 0; public int DefaultFacing = 0;
[Desc("The percentage of damage that is received while this actor is closed.")] [Desc("The percentage of damage that is received while this actor is closed.")]
public int ClosedDamageMultiplier = 50; public int ClosedDamageMultiplier = 50;
[Desc("Sequence to play when opening.")]
[SequenceReference] public string OpeningSequence = "opening";
[Desc("Sequence to play when closing.")]
[SequenceReference] public string ClosingSequence = "closing";
[Desc("Idle sequence to play when closed.")]
[SequenceReference] public string ClosedIdleSequence = "closed-idle";
public override object Create(ActorInitializer init) { return new AttackPopupTurreted(init, this); } public override object Create(ActorInitializer init) { return new AttackPopupTurreted(init, this); }
} }
@@ -32,11 +42,11 @@ namespace OpenRA.Mods.Cnc.Traits
enum PopupState { Open, Rotating, Transitioning, Closed } enum PopupState { Open, Rotating, Transitioning, Closed }
readonly AttackPopupTurretedInfo info; readonly AttackPopupTurretedInfo info;
RenderBuilding rb; readonly WithSpriteBody wsb;
readonly Turreted turret;
int idleTicks = 0; int idleTicks = 0;
PopupState state = PopupState.Open; PopupState state = PopupState.Open;
Turreted turret;
bool skippedMakeAnimation; bool skippedMakeAnimation;
public AttackPopupTurreted(ActorInitializer init, AttackPopupTurretedInfo info) public AttackPopupTurreted(ActorInitializer init, AttackPopupTurretedInfo info)
@@ -44,7 +54,7 @@ namespace OpenRA.Mods.Cnc.Traits
{ {
this.info = info; this.info = info;
turret = turrets.FirstOrDefault(); turret = turrets.FirstOrDefault();
rb = init.Self.Trait<RenderBuilding>(); wsb = init.Self.Trait<WithSpriteBody>();
skippedMakeAnimation = init.Contains<SkipMakeAnimsInit>(); skippedMakeAnimation = init.Contains<SkipMakeAnimsInit>();
} }
@@ -60,10 +70,10 @@ namespace OpenRA.Mods.Cnc.Traits
if (state == PopupState.Closed) if (state == PopupState.Closed)
{ {
state = PopupState.Transitioning; state = PopupState.Transitioning;
rb.PlayCustomAnimThen(self, "opening", () => wsb.PlayCustomAnimation(self, info.OpeningSequence, () =>
{ {
state = PopupState.Open; state = PopupState.Open;
rb.PlayCustomAnimRepeating(self, "idle"); wsb.PlayCustomAnimationRepeating(self, wsb.Info.Sequence);
}); });
return false; return false;
} }
@@ -81,10 +91,10 @@ namespace OpenRA.Mods.Cnc.Traits
else if (state == PopupState.Rotating && turret.TurretFacing == info.DefaultFacing) else if (state == PopupState.Rotating && turret.TurretFacing == info.DefaultFacing)
{ {
state = PopupState.Transitioning; state = PopupState.Transitioning;
rb.PlayCustomAnimThen(self, "closing", () => wsb.PlayCustomAnimation(self, info.ClosingSequence, () =>
{ {
state = PopupState.Closed; state = PopupState.Closed;
rb.PlayCustomAnimRepeating(self, "closed-idle"); wsb.PlayCustomAnimationRepeating(self, info.ClosedIdleSequence);
turret.DesiredFacing = null; turret.DesiredFacing = null;
}); });
} }
@@ -95,7 +105,7 @@ namespace OpenRA.Mods.Cnc.Traits
if (skippedMakeAnimation) if (skippedMakeAnimation)
{ {
state = PopupState.Closed; state = PopupState.Closed;
rb.PlayCustomAnimRepeating(self, "closed-idle"); wsb.PlayCustomAnimationRepeating(self, info.ClosedIdleSequence);
turret.DesiredFacing = null; turret.DesiredFacing = null;
} }
} }

View File

@@ -406,8 +406,8 @@
<Compile Include="Traits\Render\Hovers.cs" /> <Compile Include="Traits\Render\Hovers.cs" />
<Compile Include="Traits\Render\LeavesTrails.cs" /> <Compile Include="Traits\Render\LeavesTrails.cs" />
<Compile Include="Traits\Render\RenderBuilding.cs" /> <Compile Include="Traits\Render\RenderBuilding.cs" />
<Compile Include="Traits\Render\RenderBuildingTurreted.cs" />
<Compile Include="Traits\Render\RenderSpritesEditorOnly.cs" /> <Compile Include="Traits\Render\RenderSpritesEditorOnly.cs" />
<Compile Include="Traits\Render\WithTurretedSpriteBody.cs" />
<Compile Include="Traits\Render\RenderNameTag.cs" /> <Compile Include="Traits\Render\RenderNameTag.cs" />
<Compile Include="Traits\Render\RenderSimple.cs" /> <Compile Include="Traits\Render\RenderSimple.cs" />
<Compile Include="Traits\Render\RenderSprites.cs" /> <Compile Include="Traits\Render\RenderSprites.cs" />

View File

@@ -17,24 +17,25 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits namespace OpenRA.Mods.Common.Traits
{ {
class RenderBuildingTurretedInfo : RenderBuildingInfo, Requires<TurretedInfo> [Desc("This actor has turret art with facings baked into the sprite.")]
public class WithTurretedSpriteBodyInfo : WithSpriteBodyInfo, Requires<TurretedInfo>, Requires<IBodyOrientationInfo>
{ {
public override object Create(ActorInitializer init) { return new RenderBuildingTurreted(init, this); } public override object Create(ActorInitializer init) { return new WithTurretedSpriteBody(init, this); }
public override IEnumerable<IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p) public override IEnumerable<IActorPreview> RenderPreviewSprites(ActorPreviewInitializer init, RenderSpritesInfo rs, string image, int facings, PaletteReference p)
{ {
var t = init.Actor.Traits.WithInterface<TurretedInfo>() var t = init.Actor.Traits.WithInterface<TurretedInfo>().FirstOrDefault();
.FirstOrDefault(); var wsb = init.Actor.Traits.WithInterface<WithSpriteBodyInfo>().FirstOrDefault();
// Show the correct turret facing // Show the correct turret facing
var anim = new Animation(init.World, image, () => t.InitialFacing); var anim = new Animation(init.World, image, () => t.InitialFacing);
anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), Sequence)); anim.PlayRepeating(RenderSprites.NormalizeSequence(anim, init.GetDamageState(), wsb.Sequence));
yield return new SpriteActorPreview(anim, WVec.Zero, 0, p, rs.Scale); yield return new SpriteActorPreview(anim, WVec.Zero, 0, p, rs.Scale);
} }
} }
class RenderBuildingTurreted : RenderBuilding public class WithTurretedSpriteBody : WithSpriteBody
{ {
readonly Turreted turreted; readonly Turreted turreted;
@@ -45,7 +46,7 @@ namespace OpenRA.Mods.Common.Traits
return () => turreted.TurretFacing; return () => turreted.TurretFacing;
} }
public RenderBuildingTurreted(ActorInitializer init, RenderBuildingInfo info) public WithTurretedSpriteBody(ActorInitializer init, WithSpriteBodyInfo info)
: base(init, info, MakeTurretFacingFunc(init.Self)) : base(init, info, MakeTurretFacingFunc(init.Self))
{ {
turreted = init.Self.TraitsImplementing<Turreted>().FirstOrDefault(); turreted = init.Self.TraitsImplementing<Turreted>().FirstOrDefault();

View File

@@ -1875,6 +1875,33 @@ namespace OpenRA.Mods.Common.UtilityCommands
if (rrb != null) if (rrb != null)
rrb.Key = "-WithSiloAnimation"; rrb.Key = "-WithSiloAnimation";
} }
// Replaced RenderBuildingTurreted with RenderSprites + WithTurretedSpriteBody (+AutoSelectionSize)
if (depth == 0)
{
var childKeysExcludeFromRS = new[] { "Sequence", "PauseOnLowPower" };
var rb = node.Value.Nodes.FirstOrDefault(n => n.Key.StartsWith("RenderBuildingTurreted"));
if (rb != null)
{
rb.Key = "WithTurretedSpriteBody";
var rsNodes = rb.Value.Nodes.Where(n => !childKeysExcludeFromRS.Contains(n.Key)).ToList();
if (rsNodes.Any())
node.Value.Nodes.Add(new MiniYamlNode("RenderSprites", new MiniYaml("", rsNodes)));
else
node.Value.Nodes.Add(new MiniYamlNode("RenderSprites", ""));
node.Value.Nodes.Add(new MiniYamlNode("AutoSelectionSize", ""));
rb.Value.Nodes.RemoveAll(n => rsNodes.Contains(n));
}
var rrb = node.Value.Nodes.FirstOrDefault(n => n.Key.StartsWith("-RenderBuildingTurreted"));
if (rrb != null)
rrb.Key = "-WithTurretedSpriteBody";
}
} }
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1); UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);

View File

@@ -654,7 +654,8 @@ GUN:
Turreted: Turreted:
ROT: 12 ROT: 12
InitialFacing: 50 InitialFacing: 50
RenderBuildingTurreted: RenderSprites:
WithTurretedSpriteBody:
Armament: Armament:
Weapon: TurretGun Weapon: TurretGun
LocalOffset: 512,0,112 LocalOffset: 512,0,112
@@ -667,6 +668,7 @@ GUN:
Range: 3 Range: 3
Power: Power:
Amount: -20 Amount: -20
-WithMakeAnimation:
SAM: SAM:
Inherits: ^Defense Inherits: ^Defense
@@ -695,7 +697,9 @@ SAM:
Turreted: Turreted:
ROT: 10 ROT: 10
InitialFacing: 0 InitialFacing: 0
RenderBuildingTurreted: RenderSprites:
WithTurretedSpriteBody:
AutoSelectionSize:
Armament: Armament:
Weapon: SAMMissile Weapon: SAMMissile
MuzzleSequence: muzzle MuzzleSequence: muzzle
@@ -705,6 +709,7 @@ SAM:
-RenderDetectionCircle: -RenderDetectionCircle:
Power: Power:
Amount: -20 Amount: -20
-WithMakeAnimation:
OBLI: OBLI:
Inherits: ^Defense Inherits: ^Defense

View File

@@ -1729,8 +1729,9 @@ Rules:
Turreted: Turreted:
ROT: 15 ROT: 15
InitialFacing: 224 InitialFacing: 224
RenderBuildingTurreted: RenderSprites:
Image: AGUN Image: AGUN
WithTurretedSpriteBody:
Armament: Armament:
Weapon: MissionColt Weapon: MissionColt
LocalOffset: 432,150,-30, 432,-150,-30 LocalOffset: 432,150,-30, 432,-150,-30
@@ -1738,6 +1739,7 @@ Rules:
AutoTarget: AutoTarget:
-RenderBuilding: -RenderBuilding:
-Selectable: -Selectable:
-WithMakeAnimation:
E1.Autotarget: E1.Autotarget:
Inherits: E1 Inherits: E1
Buildable: Buildable:

View File

@@ -451,7 +451,8 @@ AGUN:
Turreted: Turreted:
ROT: 15 ROT: 15
InitialFacing: 224 InitialFacing: 224
RenderBuildingTurreted: RenderSprites:
WithTurretedSpriteBody:
Armament: Armament:
Weapon: ZSU-23 Weapon: ZSU-23
LocalOffset: 432,150,-30, 432,-150,-30 LocalOffset: 432,150,-30, 432,-150,-30
@@ -465,6 +466,7 @@ AGUN:
Amount: -50 Amount: -50
DetectCloaked: DetectCloaked:
Range: 6 Range: 6
-WithMakeAnimation:
DOME: DOME:
Inherits: ^Building Inherits: ^Building
@@ -610,7 +612,8 @@ GUN:
Turreted: Turreted:
ROT: 12 ROT: 12
InitialFacing: 50 InitialFacing: 50
RenderBuildingTurreted: RenderSprites:
WithTurretedSpriteBody:
Armament: Armament:
Weapon: TurretGun Weapon: TurretGun
LocalOffset: 512,0,112 LocalOffset: 512,0,112
@@ -622,6 +625,7 @@ GUN:
Amount: -40 Amount: -40
DetectCloaked: DetectCloaked:
Range: 7 Range: 7
-WithMakeAnimation:
FTUR: FTUR:
Inherits: ^Defense Inherits: ^Defense
@@ -686,7 +690,8 @@ SAM:
Turreted: Turreted:
ROT: 30 ROT: 30
InitialFacing: 0 InitialFacing: 0
RenderBuildingTurreted: RenderSprites:
WithTurretedSpriteBody:
Armament: Armament:
Weapon: Nike Weapon: Nike
MuzzleSequence: muzzle MuzzleSequence: muzzle
@@ -699,6 +704,7 @@ SAM:
Amount: -40 Amount: -40
DetectCloaked: DetectCloaked:
Range: 5 Range: 5
-WithMakeAnimation:
ATEK: ATEK:
Inherits: ^Building Inherits: ^Building

View File

@@ -123,6 +123,7 @@ GACTWR:
ProvidesPrerequisite@buildingname: ProvidesPrerequisite@buildingname:
SelectionDecorations: SelectionDecorations:
VisualBounds: 48, 48, 0, -12 VisualBounds: 48, 48, 0, -12
-WithMakeAnimation:
GAVULC: GAVULC:
Inherits: ^BuildingPlug Inherits: ^BuildingPlug