#2160 fixed - RenderCargo support for relative altitude

This commit is contained in:
Chris Forbes
2012-05-22 19:42:51 +12:00
parent e9656795a2
commit ff32864b47
2 changed files with 12 additions and 5 deletions

View File

@@ -15,9 +15,12 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Cnc namespace OpenRA.Mods.Cnc
{ {
class RenderCargoInfo : ITraitInfo, Requires<CargoInfo> public class RenderCargoInfo : ITraitInfo, Requires<CargoInfo>
{ {
public object Create(ActorInitializer init) { return new RenderCargo(init.self); } /* altitude of the cargo, relative to us. -ve is underneath us */
public readonly int RelativeAltitude = 0;
public object Create(ActorInitializer init) { return new RenderCargo(init.self, this); }
} }
public class RenderCargo : IRenderModifier public class RenderCargo : IRenderModifier
@@ -25,12 +28,14 @@ namespace OpenRA.Mods.Cnc
Cargo cargo; Cargo cargo;
IFacing facing; IFacing facing;
IMove move; IMove move;
RenderCargoInfo Info;
public RenderCargo(Actor self) public RenderCargo(Actor self, RenderCargoInfo info)
{ {
cargo = self.Trait<Cargo>(); cargo = self.Trait<Cargo>();
facing = self.TraitOrDefault<IFacing>(); facing = self.TraitOrDefault<IFacing>();
move = self.Trait<IMove>(); move = self.Trait<IMove>();
Info = info;
} }
public IEnumerable<Renderable> ModifyRender(Actor self, IEnumerable<Renderable> r) public IEnumerable<Renderable> ModifyRender(Actor self, IEnumerable<Renderable> r)
@@ -44,7 +49,9 @@ namespace OpenRA.Mods.Cnc
cargoFacing.Facing = facing.Facing; cargoFacing.Facing = facing.Facing;
} }
return r.Concat(cargo.Passengers.SelectMany(a => a.Render())); return r.Concat(cargo.Passengers.SelectMany(a => a.Render())
.Select(a => a.WithPos(a.Pos - new float2(0, Info.RelativeAltitude))
.WithZOffset(a.ZOffset + Info.RelativeAltitude)));
} }
} }
} }

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA.Render
var shadowSprites = r.Select(a => a.WithPalette("shadow")); var shadowSprites = r.Select(a => a.WithPalette("shadow"));
var flyingSprites = (move.Altitude <= 0) ? r var flyingSprites = (move.Altitude <= 0) ? r
: r.Select(a => a.WithPos(a.Pos - new float2(0, move.Altitude + visualOffset)).WithZOffset(move.Altitude)); : r.Select(a => a.WithPos(a.Pos - new float2(0, move.Altitude + visualOffset)).WithZOffset(move.Altitude + a.ZOffset));
return shadowSprites.Concat(flyingSprites); return shadowSprites.Concat(flyingSprites);
} }