Change traits to use RenderSprites directly.
This commit is contained in:
@@ -45,7 +45,7 @@ namespace OpenRA.Editor
|
|||||||
|
|
||||||
public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
|
public static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
|
||||||
{
|
{
|
||||||
var image = RenderSimple.GetImage(info);
|
var image = RenderSprites.GetImage(info);
|
||||||
|
|
||||||
using (var s = FileSystem.OpenWithExts(image, tileset.Extensions))
|
using (var s = FileSystem.OpenWithExts(image, tileset.Extensions))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
class RenderGunboatInfo : RenderUnitInfo
|
class RenderGunboatInfo : RenderSimpleInfo
|
||||||
{
|
{
|
||||||
public override object Create(ActorInitializer init) { return new RenderGunboat(init.self); }
|
public override object Create(ActorInitializer init) { return new RenderGunboat(init.self); }
|
||||||
}
|
}
|
||||||
@@ -26,8 +26,13 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
string lastDir = "left";
|
string lastDir = "left";
|
||||||
string lastDamage = "";
|
string lastDamage = "";
|
||||||
|
|
||||||
|
static Func<int> TurretFacingFunc(Actor self)
|
||||||
|
{
|
||||||
|
return () => self.HasTrait<Turreted>() ? self.TraitsImplementing<Turreted>().First().turretFacing : 0;
|
||||||
|
}
|
||||||
|
|
||||||
public RenderGunboat(Actor self)
|
public RenderGunboat(Actor self)
|
||||||
: base(self, () => self.HasTrait<Turreted>() ? self.TraitsImplementing<Turreted>().First().turretFacing : 0)
|
: base(self, TurretFacingFunc(self))
|
||||||
{
|
{
|
||||||
facing = self.Trait<IFacing>();
|
facing = self.Trait<IFacing>();
|
||||||
anim.Play("left");
|
anim.Play("left");
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc
|
namespace OpenRA.Mods.Cnc
|
||||||
{
|
{
|
||||||
class WithFireInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
class WithFireInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||||
{
|
{
|
||||||
public readonly WVec Offset = new WVec(299,-640,0);
|
public readonly WVec Offset = new WVec(299,-640,0);
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.Cnc
|
|||||||
{
|
{
|
||||||
public WithFire(Actor self, WithFireInfo info)
|
public WithFire(Actor self, WithFireInfo info)
|
||||||
{
|
{
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSprites>();
|
||||||
var roof = new Animation(rs.GetImage(self));
|
var roof = new Animation(rs.GetImage(self));
|
||||||
roof.PlayThen("fire-start", () => roof.PlayRepeating("fire-loop"));
|
roof.PlayThen("fire-start", () => roof.PlayRepeating("fire-loop"));
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc
|
namespace OpenRA.Mods.Cnc
|
||||||
{
|
{
|
||||||
public class WithRoofInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
public class WithRoofInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||||
{
|
{
|
||||||
public object Create(ActorInitializer init) { return new WithRoof(init.self); }
|
public object Create(ActorInitializer init) { return new WithRoof(init.self); }
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Cnc
|
|||||||
{
|
{
|
||||||
public WithRoof(Actor self)
|
public WithRoof(Actor self)
|
||||||
{
|
{
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSprites>();
|
||||||
var roof = new Animation(rs.GetImage(self), () => self.Trait<IFacing>().Facing);
|
var roof = new Animation(rs.GetImage(self), () => self.Trait<IFacing>().Facing);
|
||||||
roof.Play("roof");
|
roof.Play("roof");
|
||||||
rs.anims.Add("roof", new AnimationWithOffset(roof, null, null, 1024));
|
rs.anims.Add("roof", new AnimationWithOffset(roof, null, null, 1024));
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc
|
namespace OpenRA.Mods.Cnc
|
||||||
{
|
{
|
||||||
class DeadBuildingStateInfo : ITraitInfo, Requires<HealthInfo>, Requires<RenderSimpleInfo>
|
class DeadBuildingStateInfo : ITraitInfo, Requires<HealthInfo>, Requires<RenderSpritesInfo>
|
||||||
{
|
{
|
||||||
public readonly int LingerTime = 20;
|
public readonly int LingerTime = 20;
|
||||||
|
|
||||||
@@ -23,12 +23,12 @@ namespace OpenRA.Mods.Cnc
|
|||||||
class DeadBuildingState : INotifyKilled
|
class DeadBuildingState : INotifyKilled
|
||||||
{
|
{
|
||||||
DeadBuildingStateInfo info;
|
DeadBuildingStateInfo info;
|
||||||
RenderSimple rs;
|
RenderSprites rs;
|
||||||
|
|
||||||
public DeadBuildingState(Actor self, DeadBuildingStateInfo info)
|
public DeadBuildingState(Actor self, DeadBuildingStateInfo info)
|
||||||
{
|
{
|
||||||
this.info = info;
|
this.info = info;
|
||||||
rs = self.Trait<RenderSimple>();
|
rs = self.Trait<RenderSprites>();
|
||||||
self.Trait<Health>().RemoveOnDeath = !rs.anim.HasSequence("dead");
|
self.Trait<Health>().RemoveOnDeath = !rs.anim.HasSequence("dead");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class BurnsInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
class BurnsInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||||
{
|
{
|
||||||
public readonly string Anim = "1";
|
public readonly string Anim = "1";
|
||||||
public readonly int Damage = 1;
|
public readonly int Damage = 1;
|
||||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
var anim = new Animation("fire", () => 0);
|
var anim = new Animation("fire", () => 0);
|
||||||
anim.PlayRepeating(Info.Anim);
|
anim.PlayRepeating(Info.Anim);
|
||||||
self.Trait<RenderSimple>().anims.Add("fire",
|
self.Trait<RenderSprites>().anims.Add("fire",
|
||||||
new AnimationWithOffset(anim, () => info.Offset, null));
|
new AnimationWithOffset(anim, () => info.Offset, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ using OpenRA.Mods.RA.Buildings;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class CrateInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
class CrateInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||||
{
|
{
|
||||||
public readonly int Lifetime = 5; // Seconds
|
public readonly int Lifetime = 5; // Seconds
|
||||||
public readonly string[] TerrainTypes = { };
|
public readonly string[] TerrainTypes = { };
|
||||||
@@ -116,7 +116,7 @@ namespace OpenRA.Mods.RA
|
|||||||
PxPosition = Util.CenterOfCell(cell);
|
PxPosition = Util.CenterOfCell(cell);
|
||||||
|
|
||||||
var seq = self.World.GetTerrainInfo(cell).IsWater ? "water" : "land";
|
var seq = self.World.GetTerrainInfo(cell).IsWater ? "water" : "land";
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSprites>();
|
||||||
if (seq != rs.anim.CurrentSequence.Name)
|
if (seq != rs.anim.CurrentSequence.Name)
|
||||||
rs.anim.PlayRepeating(seq);
|
rs.anim.PlayRepeating(seq);
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
foreach (var r in p)
|
foreach (var r in p)
|
||||||
yield return r;
|
yield return r;
|
||||||
|
|
||||||
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
|
var anim = new Animation(RenderSprites.GetImage(building), () => 0);
|
||||||
anim.PlayRepeating("idle-top");
|
anim.PlayRepeating("idle-top");
|
||||||
yield return new SpriteRenderable(anim.Image, WPos.Zero + Origin, 0, pr, 1f);
|
yield return new SpriteRenderable(anim.Image, WPos.Zero + Origin, 0, pr, 1f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public AnimationState State { get; private set; }
|
public AnimationState State { get; private set; }
|
||||||
|
|
||||||
public RenderInfantry(Actor self, RenderInfantryInfo info)
|
public RenderInfantry(Actor self, RenderInfantryInfo info)
|
||||||
: base(self, RenderSimple.MakeFacingFunc(self))
|
: base(self, MakeFacingFunc(self))
|
||||||
{
|
{
|
||||||
Info = info;
|
Info = info;
|
||||||
anim.PlayFetchIndex(NormalizeInfantrySequence(self, "stand"), () => 0);
|
anim.PlayFetchIndex(NormalizeInfantrySequence(self, "stand"), () => 0);
|
||||||
|
|||||||
@@ -22,10 +22,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public class RenderUnit : RenderSimple
|
public class RenderUnit : RenderSimple
|
||||||
{
|
{
|
||||||
public RenderUnit(Actor self)
|
public RenderUnit(Actor self)
|
||||||
: base(self, RenderSimple.MakeFacingFunc(self))
|
: base(self) { }
|
||||||
{
|
|
||||||
anim.PlayRepeating("idle");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void PlayCustomAnimation(Actor self, string newAnim, Action after)
|
public void PlayCustomAnimation(Actor self, string newAnim, Action after)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ using OpenRA.Mods.RA;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
class WithMuzzleFlashInfo : ITraitInfo, Requires<RenderSimpleInfo>, Requires<AttackBaseInfo>
|
class WithMuzzleFlashInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<AttackBaseInfo>
|
||||||
{
|
{
|
||||||
public object Create(ActorInitializer init) { return new WithMuzzleFlash(init.self); }
|
public object Create(ActorInitializer init) { return new WithMuzzleFlash(init.self); }
|
||||||
}
|
}
|
||||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
|
|
||||||
public WithMuzzleFlash(Actor self)
|
public WithMuzzleFlash(Actor self)
|
||||||
{
|
{
|
||||||
var render = self.Trait<RenderSimple>();
|
var render = self.Trait<RenderSprites>();
|
||||||
var facing = self.TraitOrDefault<IFacing>();
|
var facing = self.TraitOrDefault<IFacing>();
|
||||||
|
|
||||||
var arms = self.TraitsImplementing<Armament>();
|
var arms = self.TraitsImplementing<Armament>();
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
public class WithRotorInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
public class WithRotorInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<LocalCoordinatesModelInfo>
|
||||||
{
|
{
|
||||||
[Desc("Position relative to body")]
|
[Desc("Position relative to body")]
|
||||||
public readonly WVec Offset = WVec.Zero;
|
public readonly WVec Offset = WVec.Zero;
|
||||||
@@ -28,12 +28,13 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public Animation rotorAnim;
|
public Animation rotorAnim;
|
||||||
public WithRotor(Actor self, WithRotorInfo info)
|
public WithRotor(Actor self, WithRotorInfo info)
|
||||||
{
|
{
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSprites>();
|
||||||
|
var coords = self.Trait<ILocalCoordinatesModel>();
|
||||||
|
|
||||||
rotorAnim = new Animation(rs.GetImage(self));
|
rotorAnim = new Animation(rs.GetImage(self));
|
||||||
rotorAnim.PlayRepeating("rotor");
|
rotorAnim.PlayRepeating("rotor");
|
||||||
rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim,
|
rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim,
|
||||||
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
|
() => coords.LocalToWorld(info.Offset.Rotate(coords.QuantizeOrientation(self, self.Orientation))),
|
||||||
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
|
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
public class WithSmokeInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
public class WithSmokeInfo : ITraitInfo, Requires<RenderSpritesInfo>
|
||||||
{
|
{
|
||||||
public object Create(ActorInitializer init) { return new WithSmoke(init.self); }
|
public object Create(ActorInitializer init) { return new WithSmoke(init.self); }
|
||||||
}
|
}
|
||||||
@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
|
|
||||||
public WithSmoke(Actor self)
|
public WithSmoke(Actor self)
|
||||||
{
|
{
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSprites>();
|
||||||
|
|
||||||
anim = new Animation("smoke_m");
|
anim = new Animation("smoke_m");
|
||||||
rs.anims.Add("smoke", new AnimationWithOffset(anim, null, () => !isSmoking));
|
rs.anims.Add("smoke", new AnimationWithOffset(anim, null, () => !isSmoking));
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
class WithSpinnerInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
class WithSpinnerInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<LocalCoordinatesModelInfo>
|
||||||
{
|
{
|
||||||
[Desc("Sequence name to use")]
|
[Desc("Sequence name to use")]
|
||||||
public readonly string Sequence = "spinner";
|
public readonly string Sequence = "spinner";
|
||||||
@@ -29,11 +29,13 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
{
|
{
|
||||||
public WithSpinner(Actor self, WithSpinnerInfo info)
|
public WithSpinner(Actor self, WithSpinnerInfo info)
|
||||||
{
|
{
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSprites>();
|
||||||
|
var coords = self.Trait<ILocalCoordinatesModel>();
|
||||||
|
|
||||||
var spinner = new Animation(rs.GetImage(self));
|
var spinner = new Animation(rs.GetImage(self));
|
||||||
spinner.PlayRepeating(info.Sequence);
|
spinner.PlayRepeating(info.Sequence);
|
||||||
rs.anims.Add("spinner_{0}".F(info.Sequence), new AnimationWithOffset(spinner,
|
rs.anims.Add("spinner_{0}".F(info.Sequence), new AnimationWithOffset(spinner,
|
||||||
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
|
() => coords.LocalToWorld(info.Offset.Rotate(coords.QuantizeOrientation(self, self.Orientation))),
|
||||||
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
|
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA.Render
|
namespace OpenRA.Mods.RA.Render
|
||||||
{
|
{
|
||||||
class WithTurretInfo : ITraitInfo, Requires<RenderSimpleInfo>, Requires<TurretedInfo>
|
class WithTurretInfo : ITraitInfo, Requires<RenderSpritesInfo>, Requires<TurretedInfo>, Requires<LocalCoordinatesModelInfo>
|
||||||
{
|
{
|
||||||
[Desc("Sequence name to use")]
|
[Desc("Sequence name to use")]
|
||||||
public readonly string Sequence = "turret";
|
public readonly string Sequence = "turret";
|
||||||
@@ -37,7 +37,8 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
class WithTurret : ITick
|
class WithTurret : ITick
|
||||||
{
|
{
|
||||||
WithTurretInfo info;
|
WithTurretInfo info;
|
||||||
RenderSimple rs;
|
RenderSprites rs;
|
||||||
|
ILocalCoordinatesModel coords;
|
||||||
AttackBase ab;
|
AttackBase ab;
|
||||||
Turreted t;
|
Turreted t;
|
||||||
IEnumerable<Armament> arms;
|
IEnumerable<Armament> arms;
|
||||||
@@ -46,7 +47,9 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public WithTurret(Actor self, WithTurretInfo info)
|
public WithTurret(Actor self, WithTurretInfo info)
|
||||||
{
|
{
|
||||||
this.info = info;
|
this.info = info;
|
||||||
rs = self.Trait<RenderSimple>();
|
rs = self.Trait<RenderSprites>();
|
||||||
|
coords = self.Trait<ILocalCoordinatesModel>();
|
||||||
|
|
||||||
ab = self.TraitOrDefault<AttackBase>();
|
ab = self.TraitOrDefault<AttackBase>();
|
||||||
t = self.TraitsImplementing<Turreted>()
|
t = self.TraitsImplementing<Turreted>()
|
||||||
.First(tt => tt.Name == info.Turret);
|
.First(tt => tt.Name == info.Turret);
|
||||||
@@ -69,9 +72,9 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
|
|
||||||
var recoil = arms.Aggregate(WRange.Zero, (a,b) => a + b.Recoil);
|
var recoil = arms.Aggregate(WRange.Zero, (a,b) => a + b.Recoil);
|
||||||
var localOffset = new WVec(-recoil, WRange.Zero, WRange.Zero);
|
var localOffset = new WVec(-recoil, WRange.Zero, WRange.Zero);
|
||||||
var bodyOrientation = rs.QuantizeOrientation(self, self.Orientation);
|
var bodyOrientation = coords.QuantizeOrientation(self, self.Orientation);
|
||||||
var turretOrientation = rs.QuantizeOrientation(self, t.LocalOrientation(self));
|
var turretOrientation = coords.QuantizeOrientation(self, t.LocalOrientation(self));
|
||||||
return t.Position(self) + rs.LocalToWorld(localOffset.Rotate(turretOrientation).Rotate(bodyOrientation));
|
return t.Position(self) + coords.LocalToWorld(localOffset.Rotate(turretOrientation).Rotate(bodyOrientation));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(Actor self)
|
public void Tick(Actor self)
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var tooltip = target.TraitsImplementing<IToolTip>().FirstOrDefault();
|
var tooltip = target.TraitsImplementing<IToolTip>().FirstOrDefault();
|
||||||
disguisedAsName = tooltip.Name();
|
disguisedAsName = tooltip.Name();
|
||||||
disguisedAsPlayer = tooltip.Owner();
|
disguisedAsPlayer = tooltip.Owner();
|
||||||
disguisedAsSprite = target.Trait<RenderSimple>().GetImage(target);
|
disguisedAsSprite = target.Trait<RenderSprites>().GetImage(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DropDisguise()
|
void DropDisguise()
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class NukePowerInfo : SupportPowerInfo
|
class NukePowerInfo : SupportPowerInfo, Requires<LocalCoordinatesModelInfo>
|
||||||
{
|
{
|
||||||
[WeaponReference]
|
[WeaponReference]
|
||||||
public readonly string MissileWeapon = "";
|
public readonly string MissileWeapon = "";
|
||||||
@@ -25,7 +25,14 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
class NukePower : SupportPower
|
class NukePower : SupportPower
|
||||||
{
|
{
|
||||||
public NukePower(Actor self, NukePowerInfo info) : base(self, info) { }
|
ILocalCoordinatesModel coords;
|
||||||
|
|
||||||
|
public NukePower(Actor self, NukePowerInfo info)
|
||||||
|
: base(self, info)
|
||||||
|
{
|
||||||
|
coords = self.Trait<ILocalCoordinatesModel>();
|
||||||
|
}
|
||||||
|
|
||||||
public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
|
public override IOrderGenerator OrderGenerator(string order, SupportPowerManager manager)
|
||||||
{
|
{
|
||||||
Sound.PlayToPlayer(manager.self.Owner, Info.SelectTargetSound);
|
Sound.PlayToPlayer(manager.self.Owner, Info.SelectTargetSound);
|
||||||
@@ -42,7 +49,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var rb = self.Trait<RenderSimple>();
|
var rb = self.Trait<RenderSimple>();
|
||||||
rb.PlayCustomAnim(self, "active");
|
rb.PlayCustomAnim(self, "active");
|
||||||
self.World.AddFrameEndTask(w => w.Add(
|
self.World.AddFrameEndTask(w => w.Add(
|
||||||
new NukeLaunch(self.Owner, self, npi.MissileWeapon, self.CenterPosition + rb.LocalToWorld(npi.SpawnOffset), order.TargetLocation)));
|
new NukeLaunch(self.Owner, self, npi.MissileWeapon, self.CenterPosition + coords.LocalToWorld(npi.SpawnOffset), order.TargetLocation)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
class ThrowsParticleInfo : ITraitInfo, Requires<RenderSimpleInfo>
|
class ThrowsParticleInfo : ITraitInfo, Requires<RenderSimpleInfo>, Requires<LocalCoordinatesModelInfo>
|
||||||
{
|
{
|
||||||
public readonly string Anim = null;
|
public readonly string Anim = null;
|
||||||
|
|
||||||
@@ -54,6 +54,7 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
var self = init.self;
|
var self = init.self;
|
||||||
var rs = self.Trait<RenderSimple>();
|
var rs = self.Trait<RenderSimple>();
|
||||||
|
var coords = self.Trait<ILocalCoordinatesModel>();
|
||||||
|
|
||||||
// TODO: Carry orientation over from the parent instead of just facing
|
// TODO: Carry orientation over from the parent instead of just facing
|
||||||
var bodyFacing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : 0;
|
var bodyFacing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : 0;
|
||||||
@@ -63,7 +64,7 @@ namespace OpenRA.Mods.RA
|
|||||||
var throwRotation = WRot.FromFacing(Game.CosmeticRandom.Next(1024));
|
var throwRotation = WRot.FromFacing(Game.CosmeticRandom.Next(1024));
|
||||||
var throwOffset = new WVec((int)(Game.CosmeticRandom.Gauss1D(1)*info.ThrowRange.Range), 0, 0).Rotate(throwRotation);
|
var throwOffset = new WVec((int)(Game.CosmeticRandom.Gauss1D(1)*info.ThrowRange.Range), 0, 0).Rotate(throwRotation);
|
||||||
|
|
||||||
initialPos = pos = info.Offset.Rotate(rs.QuantizeOrientation(self, WRot.FromFacing(bodyFacing)));
|
initialPos = pos = info.Offset.Rotate(coords.QuantizeOrientation(self, WRot.FromFacing(bodyFacing)));
|
||||||
finalPos = initialPos + throwOffset;
|
finalPos = initialPos + throwOffset;
|
||||||
|
|
||||||
// Facing rotation
|
// Facing rotation
|
||||||
|
|||||||
Reference in New Issue
Block a user