document the various overlay and animation change traits

This commit is contained in:
Matthias Mailänder
2014-07-01 17:46:15 +02:00
parent cf7bd75dad
commit 6097b3eb19
25 changed files with 104 additions and 34 deletions

View File

@@ -14,15 +14,32 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
class WithBuildingExplosionInfo : TraitInfo<WithBuildingExplosion> { }
[Desc("Display explosions over the building footprint when it is destroyed.")]
class WithBuildingExplosionInfo : ITraitInfo, Requires<BuildingInfo>
{
[Desc("Explosion sequence name to use")]
public readonly string Sequence = "building";
[Desc("Custom palette name")]
public readonly string Palette = "effect";
public object Create(ActorInitializer init) { return new WithBuildingExplosion(this); }
}
class WithBuildingExplosion : INotifyKilled
{
WithBuildingExplosionInfo info;
public WithBuildingExplosion(WithBuildingExplosionInfo info)
{
this.info = info;
}
public void Killed(Actor self, AttackInfo e)
{
//TODO: Make palette for this customizable as well
var bi = self.Info.Traits.Get<BuildingInfo>();
FootprintUtils.UnpathableTiles(self.Info.Name, bi, self.Location).Do(
t => self.World.AddFrameEndTask(w => w.Add(new Explosion(w, w.Map.CenterOfCell(t), "building", "effect"))));
var buildingInfo = self.Info.Traits.Get<BuildingInfo>();
FootprintUtils.UnpathableTiles(self.Info.Name, buildingInfo, self.Location).Do(
t => self.World.AddFrameEndTask(w => w.Add(new Explosion(w, w.Map.CenterOfCell(t), info.Sequence, info.Palette))));
}
}
}

View File

@@ -12,6 +12,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Changes the animation when the actor constructed a building.")]
public class WithBuildingPlacedAnimationInfo : ITraitInfo, Requires<RenderSimpleInfo>
{
[Desc("Sequence name to use")]

View File

@@ -15,9 +15,12 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Renders crates with both water and land variants.")]
class WithCrateBodyInfo : ITraitInfo, Requires<RenderSpritesInfo>
{
public readonly string[] Images = { "crate" };
[Desc("Easteregg sequences to use in december.")]
public readonly string[] XmasImages = { };
public object Create(ActorInitializer init) { return new WithCrateBody(init.self, this); }
@@ -35,7 +38,7 @@ namespace OpenRA.Mods.RA.Render
var images = info.XmasImages.Any() && DateTime.Today.Month == 12 ? info.XmasImages : info.Images;
anim = new Animation(self.World, images.Random(Game.CosmeticRandom));
anim.Play("idle");
rs.Add("", anim);
rs.Add("crate", anim);
}
public void OnLanded()

View File

@@ -13,6 +13,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Displays an overlay whenever resources are harvested by the actor.")]
class WithHarvestAnimationInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<IBodyOrientationInfo>
{
[Desc("Sequence name to use")]

View File

@@ -15,6 +15,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Renders a decorative animation on units and buildings.")]
public class WithIdleOverlayInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<IBodyOrientationInfo>
{
[Desc("Sequence name to use")]

View File

@@ -16,6 +16,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Renders the MuzzleSequence from the Armament trait.")]
class WithMuzzleFlashInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<AttackBaseInfo>, Requires<ArmamentInfo>
{
[Desc("Ignore the weapon position, and always draw relative to the center of the actor")]

View File

@@ -14,6 +14,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Replaces the building animation when it repairs a unit.")]
public class WithRepairAnimationInfo : ITraitInfo, Requires<RenderBuildingInfo>
{
[Desc("Sequence name to use")]

View File

@@ -16,6 +16,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Displays an overlay when the building is being repaired by the player.")]
public class WithRepairOverlayInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<IBodyOrientationInfo>
{
[Desc("Sequence name to use")]

View File

@@ -1,6 +1,6 @@
#region Copyright & License Information
/*
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
@@ -13,6 +13,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Displays the fill status of PlayerResources with an extra sprite overlay on the actor.")]
class WithResourcesInfo : ITraitInfo, Requires<RenderSimpleInfo>
{
[Desc("Sequence name to use")]

View File

@@ -13,6 +13,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Displays a helicopter rotor overlay.")]
public class WithRotorInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<IBodyOrientationInfo>
{
[Desc("Sequence name to use when flying")]
@@ -24,6 +25,7 @@ namespace OpenRA.Mods.RA.Render
[Desc("Position relative to body")]
public readonly WVec Offset = WVec.Zero;
[Desc("Change this when using this trait multiple times on the same actor.")]
public readonly string Id = "rotor";
public object Create(ActorInitializer init) { return new WithRotor(init.self, this); }

View File

@@ -17,10 +17,23 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
class WithShadowInfo : TraitInfo<WithShadow> {}
[Desc("Clones the aircraft sprite with another palette below it.")]
class WithShadowInfo : ITraitInfo
{
public readonly string Palette = "shadow";
public object Create(ActorInitializer init) { return new WithShadow(this); }
}
class WithShadow : IRenderModifier
{
WithShadowInfo info;
public WithShadow(WithShadowInfo info)
{
this.info = info;
}
public IEnumerable<IRenderable> ModifyRender(Actor self, WorldRenderer wr, IEnumerable<IRenderable> r)
{
var ios = self.Trait<IOccupySpace>();
@@ -32,7 +45,7 @@ namespace OpenRA.Mods.RA.Render
// Contrails shouldn't cast shadows
var shadowSprites = r.Where(s => !s.IsDecoration)
.Select(a => a.WithPalette(wr.Palette("shadow"))
.Select(a => a.WithPalette(wr.Palette(info.Palette))
.OffsetBy(new WVec(0, 0, -a.Pos.Z))
.WithZOffset(a.ZOffset + a.Pos.Z)
.AsDecoration());

View File

@@ -13,9 +13,13 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Renders an overlay when the actor is taking heavy damage.")]
public class WithSmokeInfo : ITraitInfo, Requires<RenderSpritesInfo>
{
public object Create(ActorInitializer init) { return new WithSmoke(init.self); }
[Desc("Needs to define \"idle\", \"loop\" and \"end\" sub-sequences.")]
public readonly string Sequence = "smoke_m";
public object Create(ActorInitializer init) { return new WithSmoke(init.self, this); }
}
public class WithSmoke : INotifyDamage
@@ -23,11 +27,11 @@ namespace OpenRA.Mods.RA.Render
bool isSmoking;
Animation anim;
public WithSmoke(Actor self)
public WithSmoke(Actor self, WithSmokeInfo info)
{
var rs = self.Trait<RenderSprites>();
anim = new Animation(self.World, "smoke_m");
anim = new Animation(self.World, info.Sequence);
rs.Add("smoke", new AnimationWithOffset(anim, null, () => !isSmoking));
}
@@ -38,10 +42,10 @@ namespace OpenRA.Mods.RA.Render
if (e.DamageState < DamageState.Heavy) return;
isSmoking = true;
anim.PlayThen( "idle",
() => anim.PlayThen( "loop",
() => anim.PlayBackwardsThen( "end",
() => isSmoking = false ) ) );
anim.PlayThen("idle",
() => anim.PlayThen("loop",
() => anim.PlayBackwardsThen("end",
() => isSmoking = false)));
}
}
}

View File

@@ -15,6 +15,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
{
[Desc("Renders barrels for units with the Turreted trait.")]
class WithTurretInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<TurretedInfo>, Requires<IBodyOrientationInfo>
{
[Desc("Sequence name to use")]