Merge pull request #11479 from reaperrr/improve-shadow

Improve WithShadow
This commit is contained in:
abcdefg30
2016-06-19 22:29:29 +02:00
committed by GitHub
3 changed files with 32 additions and 7 deletions

View File

@@ -16,31 +16,44 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits.Render
{
[Desc("Clones the aircraft sprite with another palette below it.")]
class WithShadowInfo : ITraitInfo
[Desc("Clones the actor sprite with another palette below it.")]
public class WithShadowInfo : UpgradableTraitInfo
{
[PaletteReference] public readonly string Palette = "shadow";
public object Create(ActorInitializer init) { return new WithShadow(this); }
[Desc("Shadow position offset relative to actor position (ground level).")]
public readonly WVec Offset = WVec.Zero;
[Desc("Shadow Z offset relative to actor sprite.")]
public readonly int ZOffset = -5;
public override object Create(ActorInitializer init) { return new WithShadow(this); }
}
class WithShadow : IRenderModifier
public class WithShadow : UpgradableTrait<WithShadowInfo>, IRenderModifier
{
WithShadowInfo info;
readonly WithShadowInfo info;
public WithShadow(WithShadowInfo info)
: base(info)
{
this.info = info;
}
public IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
{
if (IsTraitDisabled)
return Enumerable.Empty<IRenderable>();
if (self.IsDead || !self.IsInWorld)
return Enumerable.Empty<IRenderable>();
// Contrails shouldn't cast shadows
var height = self.World.Map.DistanceAboveTerrain(self.CenterPosition).Length;
var shadowSprites = r.Where(s => !s.IsDecoration)
.Select(a => a.WithPalette(wr.Palette(info.Palette))
.OffsetBy(new WVec(0, 0, -height))
.WithZOffset(a.ZOffset + height)
.OffsetBy(info.Offset - new WVec(0, 0, height))
.WithZOffset(a.ZOffset + (height + info.ZOffset))
.AsDecoration());
return shadowSprites.Concat(r);

View File

@@ -153,6 +153,8 @@
GenericName: Helicopter
WithFacingSpriteBody:
WithShadow:
Offset: 43, 128, 0
ZOffset: -129
Hovers@CRUISING:
UpgradeTypes: cruising
UpgradeMinEnabledLevel: 1
@@ -427,6 +429,8 @@
ActorLostNotification:
AttackMove:
WithShadow:
Offset: 43, 128, 0
ZOffset: -129
WithFacingSpriteBody:
FlyAwayOnIdle:
RejectsOrders:
@@ -746,6 +750,8 @@
^HelicopterHusk:
Inherits: ^CommonHuskDefaults
WithShadow:
Offset: 43, 128, 0
ZOffset: -129
Aircraft:
AirborneUpgrades: airborne
CanHover: True

View File

@@ -386,6 +386,8 @@
Tooltip:
GenericName: Plane
WithShadow:
Offset: 43, 128, 0
ZOffset: -129
WithFacingSpriteBody:
MustBeDestroyed:
Voiced:
@@ -690,6 +692,8 @@
^PlaneHusk:
Inherits: ^BasicHusk
WithShadow:
Offset: 43, 128, 0
ZOffset: -129
Tooltip:
GenericName: Destroyed Plane
Aircraft:
@@ -703,6 +707,8 @@
^HelicopterHusk:
Inherits: ^BasicHusk
WithShadow:
Offset: 43, 128, 0
ZOffset: -129
Tooltip:
GenericName: Destroyed Helicopter
Aircraft: