Render building previews

This commit is contained in:
Paul Chote
2010-11-24 13:43:07 +13:00
parent fc5830a687
commit 96cd0e2259
4 changed files with 40 additions and 10 deletions

View File

@@ -28,19 +28,24 @@ namespace OpenRA.Traits
public Dictionary<string, AnimationWithOffset> anims = new Dictionary<string, AnimationWithOffset>(); public Dictionary<string, AnimationWithOffset> anims = new Dictionary<string, AnimationWithOffset>();
public Animation anim { get { return anims[""].Animation; } protected set { anims[""].Animation = value; } } public Animation anim { get { return anims[""].Animation; } protected set { anims[""].Animation = value; } }
public static string GetImage(ActorInfo actor, string Tileset)
{
var Info = actor.Traits.Get<RenderSimpleInfo>();
if (Info.OverrideTileset != null && Tileset != null)
for (int i = 0; i < Info.OverrideTileset.Length; i++)
if (Info.OverrideTileset[i] == Tileset)
return Info.OverrideImage[i];
return Info.Image ?? actor.Name;
}
string cachedImage = null; string cachedImage = null;
public string GetImage(Actor self) public string GetImage(Actor self)
{ {
if (cachedImage != null) if (cachedImage != null)
return cachedImage; return cachedImage;
var Info = self.Info.Traits.Get<RenderSimpleInfo>(); return cachedImage = GetImage(self.Info, self.World.Map.Tileset);
if (Info.OverrideTileset != null)
for (int i = 0; i < Info.OverrideTileset.Length; i++)
if (Info.OverrideTileset[i] == self.World.Map.Tileset)
return cachedImage = Info.OverrideImage[i];
return cachedImage = Info.Image ?? self.Info.Name;
} }
public RenderSimple(Actor self, Func<int> baseFacing) public RenderSimple(Actor self, Func<int> baseFacing)

View File

@@ -13,6 +13,7 @@ using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Mods.RA.Render;
namespace OpenRA.Mods.RA.Orders namespace OpenRA.Mods.RA.Orders
{ {
@@ -60,11 +61,14 @@ namespace OpenRA.Mods.RA.Orders
} }
public void Tick( World world ) {} public void Tick( World world ) {}
public void RenderAfterWorld( WorldRenderer wr, World world ) {}
public void RenderAfterWorld( WorldRenderer wr, World world ) { }
public void RenderBeforeWorld( WorldRenderer wr, World world ) public void RenderBeforeWorld( WorldRenderer wr, World world )
{ {
var topleft = Game.viewport.ViewToWorld(Viewport.LastMousePos).ToInt2() - FootprintUtils.AdjustForBuildingSize( BuildingInfo );
var renderables = Rules.Info[Building].Traits.Get<RenderBuildingInfo>().BuildingPreview(Rules.Info[Building], world.Map.Tileset);
foreach (var r in renderables)
r.Sprite.DrawAt(wr,Game.CellSize*topleft + r.Pos, r.Palette ?? world.LocalPlayer.Palette);
BuildingInfo.DrawBuildingGrid( wr, world, Building ); BuildingInfo.DrawBuildingGrid( wr, world, Building );
} }

View File

@@ -11,6 +11,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Effects; using OpenRA.Mods.RA.Effects;
using OpenRA.Traits; using OpenRA.Traits;
@@ -22,6 +23,14 @@ namespace OpenRA.Mods.RA.Render
public readonly bool HasMakeAnimation = true; public readonly bool HasMakeAnimation = true;
public readonly float2 Origin = float2.Zero; public readonly float2 Origin = float2.Zero;
public override object Create(ActorInitializer init) { return new RenderBuilding(init);} public override object Create(ActorInitializer init) { return new RenderBuilding(init);}
public virtual IEnumerable<Renderable> BuildingPreview(ActorInfo building, string Tileset)
{
var anim = new Animation(RenderSimple.GetImage(building, Tileset), () => 0);
anim.PlayRepeating("idle");
var rb = building.Traits.Get<RenderBuildingInfo>();
yield return new Renderable(anim.Image,rb.Origin,rb.Palette,0);
}
} }
public class RenderBuilding : RenderSimple, INotifyDamage, INotifySold, IRenderModifier public class RenderBuilding : RenderSimple, INotifyDamage, INotifySold, IRenderModifier

View File

@@ -8,6 +8,7 @@
*/ */
#endregion #endregion
using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Traits; using OpenRA.Traits;
@@ -17,6 +18,17 @@ namespace OpenRA.Mods.RA.Render
class RenderWarFactoryInfo : RenderBuildingInfo class RenderWarFactoryInfo : RenderBuildingInfo
{ {
public override object Create(ActorInitializer init) { return new RenderWarFactory(init); } public override object Create(ActorInitializer init) { return new RenderWarFactory(init); }
public override IEnumerable<Renderable> BuildingPreview(ActorInfo building, string Tileset)
{
foreach (var r in base.BuildingPreview(building, Tileset))
yield return r;
var anim = new Animation(RenderSimple.GetImage(building, Tileset), () => 0);
anim.PlayRepeating("idle-top");
var rb = building.Traits.Get<RenderBuildingInfo>();
yield return new Renderable(anim.Image,rb.Origin,rb.Palette,0);
}
} }
class RenderWarFactory : RenderBuilding, INotifyBuildComplete, INotifyDamage, ITick, INotifyProduction, INotifySold class RenderWarFactory : RenderBuilding, INotifyBuildComplete, INotifyDamage, ITick, INotifyProduction, INotifySold