adds custom-palette/shadow support for rendering everything
This commit is contained in:
@@ -59,9 +59,9 @@ namespace OpenRa.Game
|
||||
}
|
||||
|
||||
public float2 CenterLocation;
|
||||
public float2 SelectedSize { get { return Render().First().First.size; } }
|
||||
public float2 SelectedSize { get { return Render().First().a.size; } }
|
||||
|
||||
public IEnumerable<Pair<Sprite, float2>> Render()
|
||||
public IEnumerable<Tuple<Sprite, float2, int>> Render()
|
||||
{
|
||||
return traits.WithInterface<Traits.IRender>().SelectMany( x => x.Render( this ) );
|
||||
}
|
||||
|
||||
@@ -36,25 +36,6 @@ namespace OpenRa.Game.Graphics
|
||||
uiOverlay = new UiOverlay(spriteRenderer);
|
||||
}
|
||||
|
||||
void DrawSpriteList(Player owner, RectangleF rect,
|
||||
IEnumerable<Pair<Sprite, float2>> images)
|
||||
{
|
||||
foreach (var image in images)
|
||||
{
|
||||
var loc = image.Second;
|
||||
|
||||
if (loc.X > rect.Right || loc.X < rect.Left
|
||||
- image.First.bounds.Width)
|
||||
continue;
|
||||
if (loc.Y > rect.Bottom || loc.Y < rect.Top
|
||||
- image.First.bounds.Height)
|
||||
continue;
|
||||
|
||||
spriteRenderer.DrawSprite(image.First, loc,
|
||||
(owner != null) ? owner.Palette : 0);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawSpriteList(RectangleF rect,
|
||||
IEnumerable<Tuple<Sprite, float2, int>> images)
|
||||
{
|
||||
@@ -81,12 +62,12 @@ namespace OpenRa.Game.Graphics
|
||||
region.Size.ToSizeF());
|
||||
|
||||
foreach (Actor a in Game.world.Actors.OrderBy( u => u.CenterLocation.Y ))
|
||||
DrawSpriteList(a.Owner, rect, a.Render());
|
||||
DrawSpriteList(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 */
|
||||
DrawSpriteList(rect, a.RenderRoof(a.self)); /* RUDE HACK */
|
||||
|
||||
foreach (IEffect e in Game.world.Effects)
|
||||
DrawSpriteList(rect, e.Render());
|
||||
|
||||
@@ -35,11 +35,11 @@ namespace OpenRa.Game.Traits
|
||||
self.CenterLocation.ToInt2() + elementOffsets[elements.Count][i], self);
|
||||
}
|
||||
|
||||
public IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
return elements.Select(
|
||||
e => Util.Centered(e.anim.Image, e.location))
|
||||
.OrderBy( a => a.Second.Y ); /* important to y-order elements of a squad! */
|
||||
e => Util.Centered(self, e.anim.Image, e.location))
|
||||
.OrderBy( a => a.b.Y ); /* important to y-order elements of a squad! */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,11 +21,11 @@ namespace OpenRa.Game.Traits
|
||||
anim.PlayRepeating("idle");
|
||||
}
|
||||
|
||||
public IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
var uog = Game.controller.orderGenerator as UnitOrderGenerator;
|
||||
if (uog != null && self.Owner == Game.LocalPlayer && uog.selection.Contains(self))
|
||||
yield return Util.Centered(
|
||||
yield return Util.Centered( self,
|
||||
anim.Image, Game.CellSize * (new float2(.5f, .5f) + rallyPoint.ToFloat2()));
|
||||
}
|
||||
|
||||
|
||||
@@ -64,9 +64,9 @@ namespace OpenRa.Game.Traits
|
||||
}
|
||||
}
|
||||
|
||||
public override IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public override IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
yield return Pair.New(anim.Image, 24f * (float2)self.Location);
|
||||
yield return Tuple.New(anim.Image, 24f * (float2)self.Location, self.Owner.Palette);
|
||||
}
|
||||
|
||||
public virtual void Damaged(Actor self, DamageState state)
|
||||
|
||||
@@ -29,10 +29,11 @@ namespace OpenRa.Game.Traits
|
||||
}, self);
|
||||
}
|
||||
|
||||
public IEnumerable<Pair<Sprite, float2>> RenderRoof(Actor self)
|
||||
public IEnumerable<Tuple<Sprite, float2, int>> RenderRoof(Actor self)
|
||||
{
|
||||
if (doneBuilding)
|
||||
yield return Pair.New(roof.Image, 24f * (float2)self.Location);
|
||||
yield return Tuple.New(roof.Image,
|
||||
24f * (float2)self.Location, self.Owner.Palette);
|
||||
}
|
||||
|
||||
public override void Tick(Actor self)
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace OpenRa.Game.Traits
|
||||
anim = new Animation(self.unitInfo.Image ?? self.unitInfo.Name);
|
||||
}
|
||||
|
||||
public abstract IEnumerable<Pair<Sprite, float2>> Render(Actor self);
|
||||
public abstract IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self);
|
||||
|
||||
public virtual void Tick(Actor self)
|
||||
{
|
||||
|
||||
@@ -29,11 +29,11 @@ namespace OpenRa.Game.Traits
|
||||
anim.PlayThen(newAnim, () => { PlayFacingAnim(self); if (after != null) after(); });
|
||||
}
|
||||
|
||||
public override IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public override IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
yield return Util.Centered(anim.Image, self.CenterLocation);
|
||||
yield return Util.Centered(self, anim.Image, self.CenterLocation);
|
||||
if (isSmoking)
|
||||
yield return Util.Centered(smoke.Image, self.CenterLocation);
|
||||
yield return Util.Centered(self, smoke.Image, self.CenterLocation);
|
||||
}
|
||||
|
||||
bool isSmoking;
|
||||
|
||||
@@ -23,15 +23,15 @@ namespace OpenRa.Game.Traits
|
||||
}
|
||||
}
|
||||
|
||||
public override IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public override IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
var mobile = self.traits.Get<Mobile>();
|
||||
|
||||
yield return Util.Centered(anim.Image, self.CenterLocation);
|
||||
yield return Util.Centered(rotorAnim.Image, self.CenterLocation
|
||||
yield return Util.Centered(self, anim.Image, self.CenterLocation);
|
||||
yield return Util.Centered(self, rotorAnim.Image, self.CenterLocation
|
||||
+ Util.GetTurretPosition(self, self.unitInfo.PrimaryOffset, 0));
|
||||
if (self.unitInfo.SecondaryOffset != null)
|
||||
yield return Util.Centered((secondRotorAnim ?? rotorAnim).Image, self.CenterLocation
|
||||
yield return Util.Centered(self, (secondRotorAnim ?? rotorAnim).Image, self.CenterLocation
|
||||
+ Util.GetTurretPosition(self, self.unitInfo.SecondaryOffset, 0));
|
||||
}
|
||||
|
||||
|
||||
@@ -33,19 +33,19 @@ namespace OpenRa.Game.Traits
|
||||
turretAnim.PlayRepeating("turret"); /* not really a turret; it's a spinner */
|
||||
}
|
||||
|
||||
public override IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public override IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
var mobile = self.traits.Get<Mobile>();
|
||||
|
||||
yield return Util.Centered(anim.Image, self.CenterLocation);
|
||||
yield return Util.Centered(turretAnim.Image, self.CenterLocation
|
||||
yield return Util.Centered(self, anim.Image, self.CenterLocation);
|
||||
yield return Util.Centered(self, turretAnim.Image, self.CenterLocation
|
||||
+ Util.GetTurretPosition(self, self.unitInfo.PrimaryOffset, primaryRecoil));
|
||||
if (self.unitInfo.SecondaryOffset != null)
|
||||
yield return Util.Centered(turretAnim.Image, self.CenterLocation
|
||||
yield return Util.Centered(self, turretAnim.Image, self.CenterLocation
|
||||
+ Util.GetTurretPosition(self, self.unitInfo.SecondaryOffset, secondaryRecoil));
|
||||
|
||||
if (muzzleFlash != null && primaryRecoil > 0)
|
||||
yield return Util.Centered(muzzleFlash.Image, self.CenterLocation
|
||||
yield return Util.Centered(self, muzzleFlash.Image, self.CenterLocation
|
||||
+ Util.GetTurretPosition(self, self.unitInfo.PrimaryOffset, primaryRecoil));
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace OpenRa.Game.Traits
|
||||
enum DamageState { Normal, Half, Dead };
|
||||
|
||||
interface ITick { void Tick(Actor self); }
|
||||
interface IRender { IEnumerable<Pair<Sprite, float2>> Render(Actor self); }
|
||||
interface IRender { IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self); }
|
||||
interface IOrder { Order Order(Actor self, int2 xy, bool lmb, Actor underCursor); }
|
||||
interface INotifyDamage { void Damaged(Actor self, DamageState ds); }
|
||||
interface INotifyDamageEx : INotifyDamage { void Damaged(Actor self, int damage); }
|
||||
|
||||
@@ -16,9 +16,9 @@ namespace OpenRa.Game.Traits
|
||||
Image = treeImage;
|
||||
}
|
||||
|
||||
public IEnumerable<Pair<Sprite, float2>> Render(Actor self)
|
||||
public IEnumerable<Tuple<Sprite, float2, int>> Render(Actor self)
|
||||
{
|
||||
yield return Pair.New(Image, Game.CellSize * (float2)self.Location);
|
||||
yield return Tuple.New(Image, Game.CellSize * (float2)self.Location, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,10 +98,10 @@ namespace OpenRa.Game.Traits
|
||||
+ new float2(offset.ElementAtOrDefault(2), offset.ElementAtOrDefault(3));
|
||||
}
|
||||
|
||||
public static Pair<Sprite, float2> Centered(Sprite s, float2 location)
|
||||
public static Tuple<Sprite, float2, int> Centered(Actor self, Sprite s, float2 location)
|
||||
{
|
||||
var loc = location - 0.5f * s.size;
|
||||
return Pair.New(s, loc.Round());
|
||||
return Tuple.New(s, loc.Round(), self.Owner.Palette);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user