war factory incredible hack

This commit is contained in:
Chris Forbes
2009-10-24 19:28:16 +13:00
parent d66475edcb
commit 4aa172a7a7
3 changed files with 22 additions and 7 deletions

View File

@@ -197,6 +197,8 @@ namespace OpenRa.Game
world.AddFrameEndTask(_ => world.Add(unit)); world.AddFrameEndTask(_ => world.Add(unit));
// todo: make the producing building play `build` // todo: make the producing building play `build`
if (producer.traits.Contains<RenderWarFactory>())
producer.traits.Get<RenderWarFactory>().EjectUnit();
} }
} }
} }

View File

@@ -54,6 +54,11 @@ namespace OpenRa.Game.Graphics
foreach (Actor a in Game.world.Actors.OrderBy( u => u.CenterLocation.Y )) foreach (Actor a in Game.world.Actors.OrderBy( u => u.CenterLocation.Y ))
DrawSpriteList(a.Owner, rect, a.Render()); DrawSpriteList(a.Owner, rect, a.Render());
foreach (var a in Game.world.Actors
.Where(u => u.traits.Contains<Traits.RenderWarFactory>())
.Select(u => u.traits.Get<Traits.RenderWarFactory>()))
DrawSpriteList(a.self.Owner, rect, a.RenderRoof(a.self)); /* RUDE HACK */
foreach (IEffect e in Game.world.Effects) foreach (IEffect e in Game.world.Effects)
DrawSpriteList(e.Owner, rect, e.Render()); DrawSpriteList(e.Owner, rect, e.Render());

View File

@@ -11,10 +11,13 @@ namespace OpenRa.Game.Traits
{ {
public Animation roof; public Animation roof;
bool doneBuilding; bool doneBuilding;
public readonly Actor self;
public RenderWarFactory(Actor self) public RenderWarFactory(Actor self)
: base(self) : base(self)
{ {
this.self = self;
roof = new Animation(self.unitInfo.Image ?? self.unitInfo.Name); roof = new Animation(self.unitInfo.Image ?? self.unitInfo.Name);
anim.PlayThen("make", () => anim.PlayThen("make", () =>
{ {
@@ -24,13 +27,10 @@ namespace OpenRa.Game.Traits
}); });
} }
public override IEnumerable<Pair<Sprite, float2>> Render(Actor self) public IEnumerable<Pair<Sprite, float2>> RenderRoof(Actor self)
{ {
if (doneBuilding) if (doneBuilding)
return base.Render(self).Concat( yield return Pair.New(roof.Image, 24f * (float2)self.Location);
new[] { Pair.New(roof.Image, 24f * (float2)self.Location) });
else
return base.Render(self);
} }
public override void Tick(Actor self) public override void Tick(Actor self)
@@ -38,5 +38,13 @@ namespace OpenRa.Game.Traits
base.Tick(self); base.Tick(self);
roof.Tick(); roof.Tick();
} }
public void EjectUnit()
{
/* todo: hold the door open */
roof.PlayThen("build-top",
() => roof.PlayRepeating("idle-top"));
}
} }
} }