Actor.traits is implementation detail
This commit is contained in:
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
public IActivity Tick( Actor self )
|
||||
{
|
||||
var facing = self.traits.Get<IFacing>();
|
||||
var facing = self.Trait<IFacing>();
|
||||
if (!Target.IsValid)
|
||||
return NextActivity;
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
return new Move( Target, Range ) { NextActivity = this };
|
||||
|
||||
var desiredFacing = Util.GetFacing((targetCell - self.Location).ToFloat2(), 0);
|
||||
var renderUnit = self.traits.GetOrDefault<RenderUnit>();
|
||||
var renderUnit = self.TraitOrDefault<RenderUnit>();
|
||||
var numDirs = (renderUnit != null)
|
||||
? renderUnit.anim.CurrentSequence.Facings : 8;
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
return new Turn( desiredFacing ) { NextActivity = this };
|
||||
}
|
||||
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
attack.target = Target;
|
||||
attack.DoAttack(self);
|
||||
return this;
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
target.Owner = self.Owner;
|
||||
w.Add(target);
|
||||
|
||||
foreach (var t in target.traits.WithInterface<INotifyCapture>())
|
||||
foreach (var t in target.TraitsImplementing<INotifyCapture>())
|
||||
t.OnCapture(target, self, oldOwner, self.Owner);
|
||||
|
||||
w.Remove(self);
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if( NextActivity != null )
|
||||
return NextActivity;
|
||||
|
||||
var harv = self.traits.Get<Harvester>();
|
||||
var harv = self.Trait<Harvester>();
|
||||
|
||||
if (harv.LinkedProc == null)
|
||||
harv.ChooseNewProc(self, null);
|
||||
@@ -36,14 +36,14 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
var proc = harv.LinkedProc;
|
||||
|
||||
if( self.Location != proc.Location + proc.traits.Get<IAcceptOre>().DeliverOffset )
|
||||
if( self.Location != proc.Location + proc.Trait<IAcceptOre>().DeliverOffset )
|
||||
{
|
||||
return new Move(proc.Location + proc.traits.Get<IAcceptOre>().DeliverOffset, 0) { NextActivity = this };
|
||||
return new Move(proc.Location + proc.Trait<IAcceptOre>().DeliverOffset, 0) { NextActivity = this };
|
||||
}
|
||||
else if (!isDocking)
|
||||
{
|
||||
isDocking = true;
|
||||
proc.traits.Get<IAcceptOre>().OnDock(self, this);
|
||||
proc.Trait<IAcceptOre>().OnDock(self, this);
|
||||
}
|
||||
return new Wait(10) { NextActivity = this };
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (isCanceled) return NextActivity;
|
||||
if (transport == null || !transport.IsInWorld) return NextActivity;
|
||||
|
||||
var cargo = transport.traits.Get<Cargo>();
|
||||
var cargo = transport.Trait<Cargo>();
|
||||
if (cargo.IsFull(transport))
|
||||
return NextActivity;
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (d.LengthSquared < 50) /* close enough */
|
||||
return NextActivity;
|
||||
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
|
||||
var desiredFacing = Util.GetFacing(d, aircraft.Facing);
|
||||
if (aircraft.Altitude == cruiseAltitude)
|
||||
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
{
|
||||
public static void Fly(Actor self, int desiredAltitude )
|
||||
{
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
var speed = .2f * aircraft.MovementSpeedForCell(self, self.Location);
|
||||
var angle = aircraft.Facing / 128f * Math.PI;
|
||||
self.CenterLocation += speed * -float2.FromAngle((float)angle);
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (!Target.IsValid)
|
||||
return NextActivity;
|
||||
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo != null && !limitedAmmo.HasAmmo())
|
||||
return NextActivity;
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if( isHarvesting ) return this;
|
||||
if( NextActivity != null ) return NextActivity;
|
||||
|
||||
var harv = self.traits.Get<Harvester>();
|
||||
var harv = self.Trait<Harvester>();
|
||||
harv.LastHarvestedCell = self.Location;
|
||||
|
||||
if( harv.IsFull )
|
||||
@@ -42,10 +42,10 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
bool HarvestThisTile(Actor self)
|
||||
{
|
||||
var harv = self.traits.Get<Harvester>();
|
||||
var renderUnit = self.traits.Get<RenderUnit>(); /* better have one of these! */
|
||||
var harv = self.Trait<Harvester>();
|
||||
var renderUnit = self.Trait<RenderUnit>(); /* better have one of these! */
|
||||
|
||||
var resource = self.World.WorldActor.traits.Get<ResourceLayer>().Harvest(self.Location);
|
||||
var resource = self.World.WorldActor.Trait<ResourceLayer>().Harvest(self.Location);
|
||||
if (resource == null)
|
||||
return false;
|
||||
|
||||
@@ -60,7 +60,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
void FindMoreResource(Actor self)
|
||||
{
|
||||
var res = self.World.WorldActor.traits.Get<ResourceLayer>();
|
||||
var res = self.World.WorldActor.Trait<ResourceLayer>();
|
||||
var harv = self.Info.Traits.Get<HarvesterInfo>();
|
||||
|
||||
self.QueueActivity(new Move(
|
||||
|
||||
@@ -26,14 +26,14 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (!target.IsValid)
|
||||
return NextActivity;
|
||||
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo != null && !limitedAmmo.HasAmmo())
|
||||
{
|
||||
self.QueueActivity(new HeliReturn());
|
||||
return NextActivity;
|
||||
}
|
||||
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
var info = self.Info.Traits.Get<HelicopterInfo>();
|
||||
if (aircraft.Altitude != info.CruiseAltitude)
|
||||
{
|
||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
return this;
|
||||
}
|
||||
|
||||
var range = self.traits.Get<AttackBase>().GetMaximumRange() - 1;
|
||||
var range = self.Trait<AttackBase>().GetMaximumRange() - 1;
|
||||
var dist = target.CenterLocation - self.CenterLocation;
|
||||
|
||||
var desiredFacing = Util.GetFacing(dist, aircraft.Facing);
|
||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
if (!float2.WithinEpsilon(float2.Zero, dist, range * Game.CellSize))
|
||||
self.CenterLocation += (rawSpeed / dist.Length) * dist;
|
||||
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
return NextActivity;
|
||||
|
||||
var info = self.Info.Traits.Get<HelicopterInfo>();
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
|
||||
if (aircraft.Altitude != info.CruiseAltitude)
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
public IActivity Tick(Actor self)
|
||||
{
|
||||
if (isCanceled) return NextActivity;
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
if (aircraft.Altitude == 0)
|
||||
return NextActivity;
|
||||
|
||||
|
||||
@@ -40,11 +40,11 @@ namespace OpenRA.Mods.RA.Activities
|
||||
new HeliLand(true),
|
||||
NextActivity);
|
||||
|
||||
var res = dest.traits.GetOrDefault<Reservable>();
|
||||
var res = dest.TraitOrDefault<Reservable>();
|
||||
if (res != null)
|
||||
self.traits.Get<Helicopter>().reservation = res.Reserve(self);
|
||||
self.Trait<Helicopter>().reservation = res.Reserve(self);
|
||||
|
||||
var pi = dest.traits.Get<Production>();
|
||||
var pi = dest.Trait<Production>();
|
||||
var offset = pi != null ? pi.Spawns.First().First : float2.Zero;
|
||||
|
||||
return Util.SequenceActivities(
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (target == null || target.IsDead()) return NextActivity;
|
||||
if (target.Owner == self.Owner) return NextActivity;
|
||||
|
||||
foreach (var t in target.traits.WithInterface<IAcceptSpy>())
|
||||
foreach (var t in target.TraitsImplementing<IAcceptSpy>())
|
||||
t.OnInfiltrate(target, self);
|
||||
|
||||
self.World.AddFrameEndTask(w => w.Remove(self));
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (d.LengthSquared < 50) /* close enough */
|
||||
return NextActivity;
|
||||
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
|
||||
if (aircraft.Altitude > 0)
|
||||
--aircraft.Altitude;
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
{
|
||||
if (canceled) return NextActivity;
|
||||
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (!limitedAmmo.HasAmmo())
|
||||
{
|
||||
// rearm & repair at fix, then back out here to refill the minefield some more
|
||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
{ NextActivity = new Rearm() { NextActivity = new Repair(rearmTarget) { NextActivity = this } } };
|
||||
}
|
||||
|
||||
var ml = self.traits.Get<Minelayer>();
|
||||
var ml = self.Trait<Minelayer>();
|
||||
if (ml.minefield.Contains(self.Location) &&
|
||||
ShouldLayMine(self, self.Location))
|
||||
{
|
||||
@@ -64,13 +64,13 @@ namespace OpenRA.Mods.RA.Activities
|
||||
bool ShouldLayMine(Actor self, int2 p)
|
||||
{
|
||||
// if there is no unit (other than me) here, we want to place a mine here
|
||||
return !self.World.WorldActor.traits.Get<UnitInfluence>()
|
||||
return !self.World.WorldActor.Trait<UnitInfluence>()
|
||||
.GetUnitsAt(p).Any(a => a != self);
|
||||
}
|
||||
|
||||
void LayMine(Actor self)
|
||||
{
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo != null) limitedAmmo.Attacking(self);
|
||||
|
||||
self.World.AddFrameEndTask(
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
this.target = target;
|
||||
initialLocation = self.CenterLocation;
|
||||
|
||||
self.traits.Get<RenderInfantry>().Attacking(self);
|
||||
self.Trait<RenderInfantry>().Attacking(self);
|
||||
Sound.Play("dogg5p.aud", self.CenterLocation);
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
if (t >= 1f)
|
||||
{
|
||||
self.traits.WithInterface<IMove>().FirstOrDefault()
|
||||
self.TraitsImplementing<IMove>().FirstOrDefault()
|
||||
.SetPosition(self, Util.CellContaining(target.CenterLocation));
|
||||
|
||||
if (target.IsActor)
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
public IActivity Tick(Actor self)
|
||||
{
|
||||
if (isCanceled) return NextActivity;
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo == null) return NextActivity;
|
||||
|
||||
if (--remainingTicks == 0)
|
||||
@@ -33,10 +33,10 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (!limitedAmmo.GiveAmmo()) return NextActivity;
|
||||
|
||||
var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation)
|
||||
.FirstOrDefault(a => a.traits.Contains<RenderBuilding>());
|
||||
.FirstOrDefault(a => a.HasTrait<RenderBuilding>());
|
||||
|
||||
if (hostBuilding != null)
|
||||
hostBuilding.traits.Get<RenderBuilding>().PlayCustomAnim(hostBuilding, "active");
|
||||
hostBuilding.Trait<RenderBuilding>().PlayCustomAnim(hostBuilding, "active");
|
||||
|
||||
remainingTicks = ticksPerPip;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
if (isCanceled) return NextActivity;
|
||||
if (remainingTicks == 0)
|
||||
{
|
||||
var health = self.traits.GetOrDefault<Health>();
|
||||
var health = self.TraitOrDefault<Health>();
|
||||
if (health == null) return NextActivity;
|
||||
|
||||
var unitCost = self.Info.Traits.Get<ValuedInfo>().Cost;
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
var costPerHp = (repairsUnits.URepairPercent * unitCost) / health.MaxHP;
|
||||
var hpToRepair = Math.Min(host.Info.Traits.Get<RepairsUnitsInfo>().URepairStep, health.MaxHP - health.HP);
|
||||
var cost = (int)Math.Ceiling(costPerHp * hpToRepair);
|
||||
if (!self.Owner.PlayerActor.traits.Get<PlayerResources>().TakeCash(cost))
|
||||
if (!self.Owner.PlayerActor.Trait<PlayerResources>().TakeCash(cost))
|
||||
{
|
||||
remainingTicks = 1;
|
||||
return this;
|
||||
@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
return NextActivity;
|
||||
|
||||
if (host != null)
|
||||
host.traits.Get<RenderBuilding>()
|
||||
host.Trait<RenderBuilding>()
|
||||
.PlayCustomAnim(host, "active");
|
||||
|
||||
remainingTicks = (int)(repairsUnits.RepairRate * 60 * 25);
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
public IActivity Tick(Actor self)
|
||||
{
|
||||
if (target == null || target.IsDead()) return NextActivity;
|
||||
var health = target.traits.Get<Health>();
|
||||
var health = target.Trait<Health>();
|
||||
if (health.DamageState == DamageState.Undamaged)
|
||||
return NextActivity;
|
||||
|
||||
|
||||
@@ -40,16 +40,16 @@ namespace OpenRA.Mods.RA.Activities
|
||||
dest = ChooseAirfield(self);
|
||||
}
|
||||
|
||||
var res = dest.traits.GetOrDefault<Reservable>();
|
||||
var res = dest.TraitOrDefault<Reservable>();
|
||||
if (res != null)
|
||||
{
|
||||
var plane = self.traits.Get<Plane>();
|
||||
var plane = self.Trait<Plane>();
|
||||
plane.UnReserve();
|
||||
plane.reservation = res.Reserve(self);
|
||||
}
|
||||
|
||||
var landPos = dest.CenterLocation;
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
|
||||
var speed = .2f * aircraft.MovementSpeedForCell(self, self.Location);
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
public IActivity Tick(Actor self)
|
||||
{
|
||||
self.traits.WithInterface<IMove>().FirstOrDefault().SetPosition(self, destination);
|
||||
self.TraitsImplementing<IMove>().FirstOrDefault().SetPosition(self, destination);
|
||||
return NextActivity;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
this.offset = offset;
|
||||
this.sounds = sounds;
|
||||
this.facing = facing;
|
||||
rb = self.traits.GetOrDefault<RenderBuilding>();
|
||||
rb = self.TraitOrDefault<RenderBuilding>();
|
||||
}
|
||||
|
||||
public IActivity NextActivity { get; set; }
|
||||
@@ -59,8 +59,8 @@ namespace OpenRA.Mods.RA.Activities
|
||||
new OwnerInit( self.Owner ),
|
||||
new FacingInit( facing ),
|
||||
};
|
||||
if (self.traits.Contains<Health>())
|
||||
init.Add( new HealthInit( self.traits.Get<Health>().HPFraction ));
|
||||
if (self.HasTrait<Health>())
|
||||
init.Add( new HealthInit( self.Trait<Health>().HPFraction ));
|
||||
|
||||
var a = w.CreateActor( actor, init );
|
||||
|
||||
|
||||
@@ -24,10 +24,10 @@ namespace OpenRA.Mods.RA.Activities
|
||||
int2? ChooseExitTile(Actor self, Actor cargo)
|
||||
{
|
||||
// is anyone still hogging this tile?
|
||||
if (self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(self.Location).Count() > 1)
|
||||
if (self.World.WorldActor.Trait<UnitInfluence>().GetUnitsAt(self.Location).Count() > 1)
|
||||
return null;
|
||||
|
||||
var mobile = cargo.traits.Get<Mobile>();
|
||||
var mobile = cargo.Trait<Mobile>();
|
||||
|
||||
for (var i = -1; i < 2; i++)
|
||||
for (var j = -1; j < 2; j++)
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Mods.RA.Activities
|
||||
|
||||
// if we're a thing that can turn, turn to the
|
||||
// right facing for the unload animation
|
||||
var facing = self.traits.GetOrDefault<IFacing>();
|
||||
var facing = self.TraitOrDefault<IFacing>();
|
||||
var unloadFacing = self.Info.Traits.Get<CargoInfo>().UnloadFacing;
|
||||
if (facing != null && facing.Facing != unloadFacing)
|
||||
return new Turn(unloadFacing) { NextActivity = this };
|
||||
@@ -52,11 +52,11 @@ namespace OpenRA.Mods.RA.Activities
|
||||
// todo: handle the BS of open/close sequences, which are inconsistent,
|
||||
// for reasons that probably make good sense to the westwood guys.
|
||||
|
||||
var cargo = self.traits.Get<Cargo>();
|
||||
var cargo = self.Trait<Cargo>();
|
||||
if (cargo.IsEmpty(self))
|
||||
return NextActivity;
|
||||
|
||||
var ru = self.traits.GetOrDefault<RenderUnit>();
|
||||
var ru = self.TraitOrDefault<RenderUnit>();
|
||||
if (ru != null)
|
||||
ru.PlayCustomAnimation(self, "unload", null);
|
||||
|
||||
@@ -69,12 +69,12 @@ namespace OpenRA.Mods.RA.Activities
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(actor);
|
||||
actor.traits.WithInterface<IMove>().FirstOrDefault().SetPosition(actor, self.Location);
|
||||
actor.TraitsImplementing<IMove>().FirstOrDefault().SetPosition(actor, self.Location);
|
||||
actor.CancelActivity();
|
||||
actor.QueueActivity(new Move(exitTile.Value, 0));
|
||||
if (actor.Owner == self.World.LocalPlayer)
|
||||
{
|
||||
var line = actor.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = actor.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTargetSilently(self, Target.FromCell(exitTile.Value), Color.Green);
|
||||
}
|
||||
|
||||
@@ -84,8 +84,8 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public float MovementSpeedForCell(Actor self, int2 cell)
|
||||
{
|
||||
var modifier = self.traits
|
||||
.WithInterface<ISpeedModifier>()
|
||||
var modifier = self
|
||||
.TraitsImplementing<ISpeedModifier>()
|
||||
.Select(t => t.GetSpeedModifier())
|
||||
.Product();
|
||||
return Info.Speed * modifier;
|
||||
|
||||
@@ -23,13 +23,13 @@ namespace OpenRA.Mods.RA
|
||||
public IEnumerable<int2> RadarSignatureCells(Actor self)
|
||||
{
|
||||
if (Space == null)
|
||||
Space = self.traits.Get<IOccupySpace>();
|
||||
Space = self.Trait<IOccupySpace>();
|
||||
return Space.OccupiedCells();
|
||||
}
|
||||
|
||||
public Color RadarSignatureColor(Actor self)
|
||||
{
|
||||
var mod = self.traits.WithInterface<IRadarColorModifier>().FirstOrDefault();
|
||||
var mod = self.TraitsImplementing<IRadarColorModifier>().FirstOrDefault();
|
||||
if (mod != null)
|
||||
return mod.RadarColorOverride(self);
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
if (!target.IsValid) return false;
|
||||
if (Weapons.All(w => w.IsReloading)) return false;
|
||||
if (self.traits.WithInterface<IDisable>().Any(d => d.Disabled)) return false;
|
||||
if (self.TraitsImplementing<IDisable>().Any(d => d.Disabled)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -102,8 +102,8 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
if( !CanAttack( self ) ) return;
|
||||
|
||||
var move = self.traits.GetOrDefault<IMove>();
|
||||
var facing = self.traits.GetOrDefault<IFacing>();
|
||||
var move = self.TraitOrDefault<IMove>();
|
||||
var facing = self.TraitOrDefault<IFacing>();
|
||||
foreach (var w in Weapons)
|
||||
if (CheckFire(self, move, facing, w))
|
||||
w.FiredShot();
|
||||
@@ -113,7 +113,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
if (w.FireDelay > 0) return false;
|
||||
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo != null && !limitedAmmo.HasAmmo())
|
||||
return false;
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace OpenRA.Mods.RA
|
||||
if (!w.IsValidAgainst(target)) return false;
|
||||
|
||||
var barrel = w.Barrels[w.Burst % w.Barrels.Length];
|
||||
var destMove = target.IsActor ? target.Actor.traits.GetOrDefault<IMove>() : null;
|
||||
var destMove = target.IsActor ? target.Actor.TraitOrDefault<IMove>() : null;
|
||||
|
||||
var args = new ProjectileArgs
|
||||
{
|
||||
@@ -140,7 +140,7 @@ namespace OpenRA.Mods.RA
|
||||
destAltitude = destMove != null ? destMove.Altitude : 0,
|
||||
|
||||
facing = barrel.Facing +
|
||||
(self.traits.Contains<Turreted>() ? self.traits.Get<Turreted>().turretFacing :
|
||||
(self.HasTrait<Turreted>() ? self.Trait<Turreted>().turretFacing :
|
||||
facing != null ? facing.Facing : Util.GetFacing(target.CenterLocation - self.CenterLocation, 0)),
|
||||
};
|
||||
|
||||
@@ -157,7 +157,7 @@ namespace OpenRA.Mods.RA
|
||||
}
|
||||
});
|
||||
|
||||
foreach (var na in self.traits.WithInterface<INotifyAttack>())
|
||||
foreach (var na in self.TraitsImplementing<INotifyAttack>())
|
||||
na.Attacking(self);
|
||||
|
||||
return true;
|
||||
@@ -219,7 +219,7 @@ namespace OpenRA.Mods.RA
|
||||
if (order.TargetActor != null)
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
if (order.TargetActor != null) line.SetTarget(self, Target.FromOrder(order), Color.Red);
|
||||
else line.SetTarget(self, Target.FromOrder(order), Color.Red);
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if (!target.IsValid) return;
|
||||
|
||||
var facing = self.traits.Get<IFacing>().Facing;
|
||||
var facing = self.Trait<IFacing>().Facing;
|
||||
var facingToTarget = Util.GetFacing(target.CenterLocation - self.CenterLocation, facing);
|
||||
|
||||
if (Math.Abs(facingToTarget - facing) % 256 < FacingTolerance)
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA
|
||||
if (!target.IsValid) return;
|
||||
if (self.GetCurrentActivity() is Leap) return;
|
||||
|
||||
var weapon = self.traits.Get<AttackBase>().Weapons[0].Info;
|
||||
var weapon = self.Trait<AttackBase>().Weapons[0].Info;
|
||||
if (weapon.Range * Game.CellSize * weapon.Range * Game.CellSize
|
||||
< (target.CenterLocation - self.CenterLocation).LengthSquared) return;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
protected override bool CanAttack( Actor self )
|
||||
{
|
||||
var isBuilding = ( self.traits.Contains<Building>() && !buildComplete );
|
||||
var isBuilding = ( self.HasTrait<Building>() && !buildComplete );
|
||||
return base.CanAttack( self ) && !isBuilding;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace OpenRA.Mods.RA
|
||||
if (target.Actor != previousTarget)
|
||||
{
|
||||
previousTarget = target.Actor;
|
||||
self.traits.Get<RenderBuildingCharge>().PlayCharge(self);
|
||||
self.Trait<RenderBuildingCharge>().PlayCharge(self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,11 +25,11 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
protected override bool CanAttack( Actor self )
|
||||
{
|
||||
if( self.traits.Contains<Building>() && !buildComplete )
|
||||
if( self.HasTrait<Building>() && !buildComplete )
|
||||
return false;
|
||||
|
||||
if (!target.IsValid) return false;
|
||||
var turreted = self.traits.Get<Turreted>();
|
||||
var turreted = self.Trait<Turreted>();
|
||||
turreted.desiredFacing = Util.GetFacing( target.CenterLocation - self.CenterLocation, turreted.turretFacing );
|
||||
if( turreted.desiredFacing != turreted.turretFacing )
|
||||
return false;
|
||||
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
protected override void QueueAttack( Actor self, Order order )
|
||||
{
|
||||
if (self.traits.Contains<Building>() && self.traits.Get<Building>().Disabled)
|
||||
if (self.HasTrait<Building>() && self.Trait<Building>().Disabled)
|
||||
return;
|
||||
|
||||
const int RangeTolerance = 1; /* how far inside our maximum range we should try to sit */
|
||||
@@ -56,7 +56,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
target = Target.FromOrder(order);
|
||||
|
||||
if (self.traits.Contains<Mobile>())
|
||||
if (self.HasTrait<Mobile>())
|
||||
self.QueueActivity( new Follow( target,
|
||||
Math.Max( 0, (int)weapon.Info.Range - RangeTolerance ) ) );
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
void AttackTarget(Actor self, Actor target)
|
||||
{
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
if (target != null)
|
||||
attack.ResolveOrder(self, new Order("Attack", self, target));
|
||||
else
|
||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
bool NeedsNewTarget(Actor self)
|
||||
{
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
var range = attack.GetMaximumRange();
|
||||
|
||||
if (!attack.target.IsValid)
|
||||
@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
var range = attack.GetMaximumRange();
|
||||
|
||||
if (NeedsNewTarget(self))
|
||||
@@ -57,12 +57,12 @@ namespace OpenRA.Mods.RA
|
||||
Actor ChooseTarget(Actor self, float range)
|
||||
{
|
||||
var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range);
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
|
||||
return inRange
|
||||
.Where(a => a != self && self.Owner.Stances[a.Owner] == Stance.Ally)
|
||||
.Where(a => !a.IsDead())
|
||||
.Where(a => a.traits.Contains<Health>() && a.GetDamageState() > DamageState.Undamaged)
|
||||
.Where(a => a.HasTrait<Health>() && a.GetDamageState() > DamageState.Undamaged)
|
||||
.Where(a => attack.HasAnyValidWeapons(Target.FromActor(a)))
|
||||
.OrderBy(a => (a.Location - self.Location).LengthSquared)
|
||||
.FirstOrDefault();
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
void AttackTarget(Actor self, Actor target)
|
||||
{
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
if (target != null)
|
||||
attack.ResolveOrder(self, new Order("Attack", self, target));
|
||||
}
|
||||
@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if (--nextScanTime <= 0)
|
||||
{
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
var range = attack.GetMaximumRange();
|
||||
|
||||
if (!attack.target.IsValid ||
|
||||
@@ -53,12 +53,12 @@ namespace OpenRA.Mods.RA
|
||||
Actor ChooseTarget(Actor self, float range)
|
||||
{
|
||||
var inRange = self.World.FindUnitsInCircle(self.CenterLocation, Game.CellSize * range);
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
|
||||
return inRange
|
||||
.Where(a => a.Owner != null && self.Owner.Stances[ a.Owner ] == Stance.Enemy)
|
||||
.Where(a => attack.HasAnyValidWeapons(Target.FromActor(a)))
|
||||
.Where(a => !a.traits.Contains<Cloak>() || !a.traits.Get<Cloak>().Cloaked)
|
||||
.Where(a => !a.HasTrait<Cloak>() || !a.Trait<Cloak>().Cloaked)
|
||||
.OrderBy(a => (a.Location - self.Location).LengthSquared)
|
||||
.FirstOrDefault();
|
||||
}
|
||||
@@ -68,7 +68,7 @@ namespace OpenRA.Mods.RA
|
||||
if (!self.IsIdle) return;
|
||||
|
||||
// not a lot we can do about things we can't hurt... although maybe we should automatically run away?
|
||||
var attack = self.traits.Get<AttackBase>();
|
||||
var attack = self.Trait<AttackBase>();
|
||||
if (!attack.HasAnyValidWeapons(Target.FromActor(e.Attacker))) return;
|
||||
|
||||
// don't retaliate against own units force-firing on us. it's usually not what the player wanted.
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace OpenRA.Mods.RA
|
||||
public Bridge(Actor self, BridgeInfo info)
|
||||
{
|
||||
this.self = self;
|
||||
Health = self.traits.Get<Health>();
|
||||
Health = self.Trait<Health>();
|
||||
Health.RemoveOnDeath = false;
|
||||
this.Info = info;
|
||||
this.Type = self.Info.Name;
|
||||
@@ -144,11 +144,11 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
void KillUnitsOnBridge()
|
||||
{
|
||||
var uim = self.World.WorldActor.traits.Get<UnitInfluence>();
|
||||
var uim = self.World.WorldActor.Trait<UnitInfluence>();
|
||||
|
||||
foreach (var c in TileSprites[currentTemplate].Keys)
|
||||
foreach (var a in uim.GetUnitsAt(c))
|
||||
if (a.traits.Contains<IMove>() && !a.traits.Get<IMove>().CanEnterCell(c))
|
||||
if (a.HasTrait<IMove>() && !a.Trait<IMove>().CanEnterCell(c))
|
||||
a.Kill(self);
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace OpenRA.Mods.RA
|
||||
ConvertBridgeToActor(w, i, j);
|
||||
|
||||
// Link adjacent (long)-bridges so that artwork is updated correctly
|
||||
foreach (var b in w.Actors.SelectMany(a => a.traits.WithInterface<Bridge>()))
|
||||
foreach (var b in w.Actors.SelectMany(a => a.TraitsImplementing<Bridge>()))
|
||||
b.LinkNeighbouringBridges(w,this);
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace OpenRA.Mods.RA
|
||||
new LocationInit( new int2(ni, nj) ),
|
||||
new OwnerInit( w.WorldActor.Owner ),
|
||||
new HealthInit( BridgeTypes[tile].Second ),
|
||||
}).traits.Get<Bridge>();
|
||||
}).Trait<Bridge>();
|
||||
|
||||
Dictionary<int2, byte> subTiles = new Dictionary<int2, byte>();
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
var anim = new Animation("fire", () => 0);
|
||||
anim.PlayRepeating(self.Info.Traits.Get<BurnsInfo>().Anim);
|
||||
self.traits.Get<RenderSimple>().anims.Add("fire",
|
||||
self.Trait<RenderSimple>().anims.Add("fire",
|
||||
new RenderSimple.AnimationWithOffset(anim, () => new float2(0, -3), null));
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA
|
||||
if (mi.Button != MouseButton.Right) return null;
|
||||
if (underCursor == null) return null;
|
||||
if (underCursor.Owner == self.Owner && !mi.Modifiers.HasModifier(Modifiers.Ctrl)) return null;
|
||||
if (!underCursor.traits.Contains<Building>()) return null;
|
||||
if (!underCursor.HasTrait<Building>()) return null;
|
||||
|
||||
return new Order("C4", self, underCursor);
|
||||
}
|
||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Red);
|
||||
});
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA
|
||||
return false;
|
||||
|
||||
// Cannot unload mid-air
|
||||
var move = self.traits.GetOrDefault<IMove>();
|
||||
var move = self.TraitOrDefault<IMove>();
|
||||
if (move != null && move.Altitude > 0)
|
||||
return false;
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
static PipType GetPipForPassenger(Actor a)
|
||||
{
|
||||
return a.traits.Get<Passenger>().ColorOfCargoPip( a );
|
||||
return a.Trait<Passenger>().ColorOfCargoPip( a );
|
||||
}
|
||||
|
||||
public void Load(Actor self, Actor a)
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA
|
||||
if ((self.Location - Target).LengthSquared > info.Range * info.Range)
|
||||
return;
|
||||
|
||||
var limitedAmmo = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var limitedAmmo = self.TraitOrDefault<LimitedAmmo>();
|
||||
if (limitedAmmo != null && !limitedAmmo.HasAmmo())
|
||||
return;
|
||||
|
||||
@@ -45,11 +45,11 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
var args = new ProjectileArgs
|
||||
{
|
||||
srcAltitude = self.traits.Get<IMove>().Altitude,
|
||||
srcAltitude = self.Trait<IMove>().Altitude,
|
||||
destAltitude = 0,
|
||||
src = self.CenterLocation.ToInt2(),
|
||||
dest = self.CenterLocation.ToInt2(),
|
||||
facing = self.traits.Get<IFacing>().Facing,
|
||||
facing = self.Trait<IFacing>().Facing,
|
||||
firedBy = self,
|
||||
weapon = weapon
|
||||
};
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA
|
||||
return;
|
||||
}
|
||||
|
||||
var movement = self.traits.GetOrDefault<IMove>();
|
||||
var movement = self.TraitOrDefault<IMove>();
|
||||
if (order.OrderString == "ChronoshiftSelf" && movement.CanEnterCell(order.TargetLocation))
|
||||
{
|
||||
if (self.Owner == self.World.LocalPlayer)
|
||||
|
||||
@@ -47,9 +47,9 @@ namespace OpenRA.Mods.RA
|
||||
chronoshiftReturnTicks = duration;
|
||||
|
||||
// Kill cargo
|
||||
if (killCargo && self.traits.Contains<Cargo>())
|
||||
if (killCargo && self.HasTrait<Cargo>())
|
||||
{
|
||||
var cargo = self.traits.Get<Cargo>();
|
||||
var cargo = self.Trait<Cargo>();
|
||||
while (!cargo.IsEmpty(self))
|
||||
{
|
||||
chronosphere.Owner.Kills++;
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if (warhead.SmudgeType != null)
|
||||
{
|
||||
var smudgeLayer = world.WorldActor.traits.WithInterface<SmudgeLayer>()
|
||||
var smudgeLayer = world.WorldActor.TraitsImplementing<SmudgeLayer>()
|
||||
.FirstOrDefault(x => x.Info.Type == warhead.SmudgeType);
|
||||
if (smudgeLayer == null)
|
||||
throw new NotImplementedException("Unknown smudge type `{0}`".F(warhead.SmudgeType));
|
||||
@@ -68,10 +68,10 @@ namespace OpenRA.Mods.RA
|
||||
}
|
||||
|
||||
if (warhead.Ore)
|
||||
world.WorldActor.traits.Get<ResourceLayer>().Destroy(targetTile);
|
||||
world.WorldActor.Trait<ResourceLayer>().Destroy(targetTile);
|
||||
|
||||
var firepowerModifier = args.firedBy.traits
|
||||
.WithInterface<IFirepowerModifier>()
|
||||
var firepowerModifier = args.firedBy
|
||||
.TraitsImplementing<IFirepowerModifier>()
|
||||
.Select(a => a.GetFirepowerModifier())
|
||||
.Product();
|
||||
|
||||
@@ -184,10 +184,10 @@ namespace OpenRA.Mods.RA
|
||||
var abInfo = self.Info.Traits.GetOrDefault<AttackBaseInfo>();
|
||||
if (abInfo == null || abInfo.Recoil == 0) return float2.Zero;
|
||||
|
||||
var rut = self.traits.GetOrDefault<RenderUnitTurreted>();
|
||||
var rut = self.TraitOrDefault<RenderUnitTurreted>();
|
||||
if (rut == null) return float2.Zero;
|
||||
|
||||
var facing = self.traits.Get<Turreted>().turretFacing;
|
||||
var facing = self.Trait<Turreted>().turretFacing;
|
||||
var localRecoil = new float2(0, recoil * abInfo.Recoil); // vector in turret-space.
|
||||
|
||||
return Util.RotateVectorByFacing(localRecoil, facing, .7f);
|
||||
@@ -196,7 +196,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
if(facing == null) return turret.ScreenSpacePosition; /* things that don't have a rotating base don't need the turrets repositioned */
|
||||
|
||||
var ru = self.traits.GetOrDefault<RenderUnit>();
|
||||
var ru = self.TraitOrDefault<RenderUnit>();
|
||||
var numDirs = (ru != null) ? ru.anim.CurrentSequence.Facings : 8;
|
||||
var bodyFacing = facing.Facing;
|
||||
var quantizedFacing = Util.QuantizeFacing(bodyFacing, numDirs) * (256 / numDirs);
|
||||
@@ -209,7 +209,7 @@ namespace OpenRA.Mods.RA
|
||||
// gets the screen-space position of a barrel.
|
||||
public static float2 GetBarrelPosition(Actor self, IFacing facing, Turret turret, Barrel barrel)
|
||||
{
|
||||
var turreted = self.traits.GetOrDefault<Turreted>();
|
||||
var turreted = self.TraitOrDefault<Turreted>();
|
||||
|
||||
if (turreted == null && facing == null)
|
||||
return float2.Zero;
|
||||
|
||||
@@ -54,12 +54,12 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
this.Info = info;
|
||||
|
||||
self.World.WorldActor.traits.Get<UnitInfluence>().Add(self, this);
|
||||
self.World.WorldActor.Trait<UnitInfluence>().Add(self, this);
|
||||
}
|
||||
|
||||
public void OnCrush(Actor crusher)
|
||||
{
|
||||
var shares = self.traits.WithInterface<CrateAction>().Select(
|
||||
var shares = self.TraitsImplementing<CrateAction>().Select(
|
||||
a => Pair.New(a, a.GetSelectionShares(crusher)));
|
||||
var totalShares = shares.Sum(a => a.Second);
|
||||
var n = self.World.SharedRandom.Next(totalShares);
|
||||
@@ -94,7 +94,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public void SetPosition(Actor self, int2 cell)
|
||||
{
|
||||
var uim = self.World.WorldActor.traits.Get<UnitInfluence>();
|
||||
var uim = self.World.WorldActor.Trait<UnitInfluence>();
|
||||
|
||||
uim.Remove(self, this);
|
||||
|
||||
@@ -102,8 +102,8 @@ namespace OpenRA.Mods.RA
|
||||
self.CenterLocation = Util.CenterOfCell(cell);
|
||||
|
||||
var seq = self.World.GetTerrainInfo(cell).IsWater ? "water" : "idle";
|
||||
if (seq != self.traits.Get<RenderSimple>().anim.CurrentSequence.Name)
|
||||
self.traits.Get<RenderSimple>().anim.PlayRepeating(seq);
|
||||
if (seq != self.Trait<RenderSimple>().anim.CurrentSequence.Name)
|
||||
self.Trait<RenderSimple>().anim.PlayRepeating(seq);
|
||||
|
||||
uim.Add(self, this);
|
||||
}
|
||||
|
||||
@@ -63,8 +63,8 @@ namespace OpenRA.Mods.RA
|
||||
if (!(inWater ? info.ValidWater : info.ValidGround).Contains(terrainType)) continue;
|
||||
|
||||
// Don't drop on any actors
|
||||
if (self.World.WorldActor.traits.Get<BuildingInfluence>().GetBuildingAt(p) != null) continue;
|
||||
if (self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(p).Any()) continue;
|
||||
if (self.World.WorldActor.Trait<BuildingInfluence>().GetBuildingAt(p) != null) continue;
|
||||
if (self.World.WorldActor.Trait<UnitInfluence>().GetUnitsAt(p).Any()) continue;
|
||||
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
@@ -81,8 +81,8 @@ namespace OpenRA.Mods.RA
|
||||
});
|
||||
plane.CancelActivity();
|
||||
plane.QueueActivity(new FlyCircle(p));
|
||||
plane.traits.Get<ParaDrop>().SetLZ(p, null);
|
||||
plane.traits.Get<Cargo>().Load(plane, crate);
|
||||
plane.Trait<ParaDrop>().SetLZ(p, null);
|
||||
plane.Trait<Cargo>().Load(plane, crate);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
using OpenRA.FileFormats;
|
||||
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
using OpenRA.FileFormats;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
public class CrateSpawnerInfo : TraitInfo<CrateSpawner>
|
||||
@@ -62,14 +62,14 @@ namespace OpenRA.Mods.RA
|
||||
if (!(inWater ? info.ValidWater : info.ValidGround).Contains(terrainType)) continue;
|
||||
|
||||
// Don't spawn on any actors
|
||||
if (self.World.WorldActor.traits.Get<BuildingInfluence>().GetBuildingAt(p) != null) continue;
|
||||
if (self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(p).Any()) continue;
|
||||
if (self.World.WorldActor.Trait<BuildingInfluence>().GetBuildingAt(p) != null) continue;
|
||||
if (self.World.WorldActor.Trait<UnitInfluence>().GetUnitsAt(p).Any()) continue;
|
||||
|
||||
self.World.AddFrameEndTask(
|
||||
w => crates.Add(w.CreateActor("crate", new TypeDictionary
|
||||
{
|
||||
new LocationInit( p ),
|
||||
new OwnerInit( self.World.WorldActor.Owner ),
|
||||
w => crates.Add(w.CreateActor("crate", new TypeDictionary
|
||||
{
|
||||
new LocationInit( p ),
|
||||
new OwnerInit( self.World.WorldActor.Owner ),
|
||||
})));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA.Crates
|
||||
|
||||
public override int GetSelectionShares(Actor collector)
|
||||
{
|
||||
return collector.traits.Contains<Cloak>()
|
||||
return collector.HasTrait<Cloak>()
|
||||
? 0 : base.GetSelectionShares(collector);
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Mods.RA.Crates
|
||||
collector.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Remove(collector);
|
||||
collector.traits.Add(cloak);
|
||||
collector.AddTrait(cloak);
|
||||
w.Add(collector);
|
||||
});
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA
|
||||
collector.World.AddFrameEndTask(w =>
|
||||
{
|
||||
var amount = (info as GiveCashCrateActionInfo).Amount;
|
||||
collector.Owner.PlayerActor.traits.Get<PlayerResources>().GiveCash(amount);
|
||||
collector.Owner.PlayerActor.Trait<PlayerResources>().GiveCash(amount);
|
||||
});
|
||||
base.Activate(collector);
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.RA.Crates
|
||||
int2? ChooseEmptyCellNear(Actor a)
|
||||
{
|
||||
// hack: use `a`'s movement capability.
|
||||
var move = a.traits.Get<ITeleportable>();
|
||||
var move = a.Trait<ITeleportable>();
|
||||
var loc = a.Location;
|
||||
|
||||
for (var i = -1; i < 2; i++)
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
collector.World.AddFrameEndTask(w =>
|
||||
{
|
||||
var gainsExperience = collector.traits.GetOrDefault<GainsExperience>();
|
||||
var gainsExperience = collector.TraitOrDefault<GainsExperience>();
|
||||
if (gainsExperience != null)
|
||||
gainsExperience.GiveOneLevel();
|
||||
});
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
base.Activate(collector);
|
||||
if (collector.Owner == collector.World.LocalPlayer)
|
||||
collector.World.WorldActor.traits.Get<Shroud>().ResetExploration();
|
||||
collector.World.WorldActor.Trait<Shroud>().ResetExploration();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Crates
|
||||
|
||||
public override void Activate(Actor collector)
|
||||
{
|
||||
var p = collector.Owner.PlayerActor.traits.WithInterface<SupportPower>()
|
||||
var p = collector.Owner.PlayerActor.TraitsImplementing<SupportPower>()
|
||||
.FirstOrDefault(sp => sp.GetType().Name == (info as SupportPowerCrateActionInfo).Power);
|
||||
|
||||
if (p != null) p.Give(1);
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
{
|
||||
class DefaultShellmapScriptInfo : TraitInfo<DefaultShellmapScript> { }
|
||||
|
||||
class DefaultShellmapScript: ILoadWorldHook, ITick
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA
|
||||
// Sound.PlayMusic("hell226m.aud");
|
||||
goodguy = w.players.Values.Where(x => x.InternalName == "GoodGuy").FirstOrDefault();
|
||||
greece = w.players.Values.Where(x => x.InternalName == "Greece").FirstOrDefault();
|
||||
MapActors = w.WorldActor.traits.Get<SpawnMapActors>().MapActors;
|
||||
MapActors = w.WorldActor.Trait<SpawnMapActors>().MapActors;
|
||||
|
||||
|
||||
goodguy.Stances[greece] = Stance.Enemy;
|
||||
@@ -37,18 +37,18 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
int ticks = 0;
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
if (ticks == 250)
|
||||
{
|
||||
MapActors["pdox"].traits.Get<Chronosphere>().Teleport(MapActors["ca1"], new int2(90, 70));
|
||||
MapActors["pdox"].traits.Get<Chronosphere>().Teleport(MapActors["ca2"], new int2(92, 71));
|
||||
{
|
||||
if (ticks == 250)
|
||||
{
|
||||
MapActors["pdox"].Trait<Chronosphere>().Teleport(MapActors["ca1"], new int2(90, 70));
|
||||
MapActors["pdox"].Trait<Chronosphere>().Teleport(MapActors["ca2"], new int2(92, 71));
|
||||
}
|
||||
if (ticks == 100)
|
||||
MapActors["mslo1"].traits.Get<NukeSilo>().Attack(new int2(96,53));
|
||||
MapActors["mslo1"].Trait<NukeSilo>().Attack(new int2(96,53));
|
||||
if (ticks == 110)
|
||||
MapActors["mslo2"].traits.Get<NukeSilo>().Attack(new int2(92,53));
|
||||
MapActors["mslo2"].Trait<NukeSilo>().Attack(new int2(92,53));
|
||||
if (ticks == 120)
|
||||
MapActors["mslo3"].traits.Get<NukeSilo>().Attack(new int2(94,50));
|
||||
MapActors["mslo3"].Trait<NukeSilo>().Attack(new int2(94,50));
|
||||
|
||||
ticks++;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public void Detonate(Actor self, Actor detonatedBy)
|
||||
{
|
||||
var move = self.traits.GetOrDefault<IMove>();
|
||||
var move = self.TraitOrDefault<IMove>();
|
||||
var info = self.Info.Traits.Get<AttackBaseInfo>();
|
||||
var altitude = move != null ? move.Altitude : 0;
|
||||
|
||||
|
||||
@@ -34,13 +34,13 @@ namespace OpenRA.Mods.RA
|
||||
ticks = info.Interval;
|
||||
|
||||
var toDecloak = self.World.FindUnitsInCircle(self.CenterLocation, info.Range * Game.CellSize)
|
||||
.Where(a => a.traits.Contains<Cloak>());
|
||||
.Where(a => a.HasTrait<Cloak>());
|
||||
|
||||
if (!info.AffectOwnUnits)
|
||||
toDecloak = toDecloak.Where(a => self.Owner.Stances[a.Owner] != Stance.Ally);
|
||||
|
||||
foreach (var a in toDecloak)
|
||||
a.traits.Get<Cloak>().Decloak((int)(25 * info.DecloakTime));
|
||||
a.Trait<Cloak>().Decloak((int)(25 * info.DecloakTime));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,8 +111,8 @@ namespace OpenRA.Mods.RA.Effects
|
||||
var pos = float2.Lerp(Args.src, Args.dest, at);
|
||||
var cell = Traits.Util.CellContaining(pos);
|
||||
|
||||
if (world.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(cell).Any(
|
||||
a => a.traits.Contains<IBlocksBullets>()))
|
||||
if (world.WorldActor.Trait<UnitInfluence>().GetUnitsAt(cell).Any(
|
||||
a => a.HasTrait<IBlocksBullets>()))
|
||||
{
|
||||
Args.dest = pos.ToInt2();
|
||||
Explode(world);
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Effects
|
||||
|
||||
public Corpse(Actor fromActor, int death)
|
||||
{
|
||||
anim = new Animation(fromActor.traits.GetOrDefault<RenderSimple>().GetImage(fromActor));
|
||||
anim = new Animation(fromActor.TraitOrDefault<RenderSimple>().GetImage(fromActor));
|
||||
anim.PlayThen("die{0}".F(death + 1),
|
||||
() => fromActor.World.AddFrameEndTask(w => w.Remove(this)));
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Effects
|
||||
public InvulnEffect(Actor a)
|
||||
{
|
||||
this.a = a;
|
||||
this.b = a.traits.Get<IronCurtainable>();
|
||||
this.b = a.Trait<IronCurtainable>();
|
||||
}
|
||||
|
||||
public void Tick( World world )
|
||||
|
||||
@@ -76,8 +76,8 @@ namespace OpenRA.Mods.RA.Effects
|
||||
var targetPosition = Args.target.CenterLocation + offset;
|
||||
|
||||
var targetAltitude = 0;
|
||||
if (Args.target.IsActor && Args.target.Actor.traits.Contains<IMove>())
|
||||
targetAltitude = Args.target.Actor.traits.Get<IMove>().Altitude;
|
||||
if (Args.target.IsActor && Args.target.Actor.HasTrait<IMove>())
|
||||
targetAltitude = Args.target.Actor.Trait<IMove>().Altitude;
|
||||
Altitude += Math.Sign(targetAltitude - Altitude);
|
||||
|
||||
Facing = Traits.Util.TickFacing(Facing,
|
||||
@@ -107,8 +107,8 @@ namespace OpenRA.Mods.RA.Effects
|
||||
{
|
||||
var cell = Traits.Util.CellContaining(Pos);
|
||||
|
||||
if (world.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt(cell).Any(
|
||||
a => a.traits.Contains<IBlocksBullets>()))
|
||||
if (world.WorldActor.Trait<UnitInfluence>().GetUnitsAt(cell).Any(
|
||||
a => a.HasTrait<IBlocksBullets>()))
|
||||
Explode(world);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.RA.Effects
|
||||
{
|
||||
world.AddFrameEndTask(w => w.Remove(this));
|
||||
Combat.DoExplosion(silo.Owner.PlayerActor, weapon, pos, 0);
|
||||
world.WorldActor.traits.Get<ScreenShaker>().AddEffect(20, pos, 5);
|
||||
world.WorldActor.Trait<ScreenShaker>().AddEffect(20, pos, 5);
|
||||
}
|
||||
|
||||
public IEnumerable<Renderable> Render()
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace OpenRA.Mods.RA.Effects
|
||||
var loc = Traits.Util.CellContaining(location);
|
||||
cargo.CancelActivity();
|
||||
|
||||
var mobile = cargo.traits.GetOrDefault<ITeleportable>();
|
||||
var mobile = cargo.TraitOrDefault<ITeleportable>();
|
||||
|
||||
if (mobile != null)
|
||||
mobile.SetPosition(cargo, loc);
|
||||
@@ -67,8 +67,8 @@ namespace OpenRA.Mods.RA.Effects
|
||||
{
|
||||
cargo.CenterLocation = Traits.Util.CenterOfCell(loc);
|
||||
|
||||
if (cargo.traits.Contains<IOccupySpace>())
|
||||
world.WorldActor.traits.Get<UnitInfluence>().Add(cargo, cargo.traits.Get<IOccupySpace>());
|
||||
if (cargo.HasTrait<IOccupySpace>())
|
||||
world.WorldActor.Trait<UnitInfluence>().Add(cargo, cargo.Trait<IOccupySpace>());
|
||||
}
|
||||
w.Add(cargo);
|
||||
});
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA
|
||||
var valued = self.Info.Traits.GetOrDefault<ValuedInfo>();
|
||||
var cost = csv != null ? csv.Value : (valued != null ? valued.Cost : 0);
|
||||
|
||||
var health = self.traits.GetOrDefault<Health>();
|
||||
var health = self.TraitOrDefault<Health>();
|
||||
var hpFraction = (health == null) ? 1f : health.HPFraction;
|
||||
var dudesValue = (int)(hpFraction * info.ValueFraction * cost);
|
||||
var eligibleLocations = Footprint.Tiles(self).ToList();
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA
|
||||
if (mi.Button != MouseButton.Right) return null;
|
||||
if (underCursor == null) return null;
|
||||
if (self.Owner.Stances[underCursor.Owner] == Stance.Ally) return null;
|
||||
if (!underCursor.traits.Contains<Building>() || !underCursor.Info.Traits.Get<BuildingInfo>().Capturable) return null;
|
||||
if (!underCursor.HasTrait<Building>() || !underCursor.Info.Traits.Get<BuildingInfo>().Capturable) return null;
|
||||
|
||||
return new Order("CaptureBuilding", self, underCursor);
|
||||
}
|
||||
@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Red);
|
||||
});
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
* as published by the Free Software Foundation. For more information,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using System.Drawing;
|
||||
using OpenRA.Effects;
|
||||
using OpenRA.Mods.RA.Activities;
|
||||
using OpenRA.Traits;
|
||||
#endregion
|
||||
|
||||
using System.Drawing;
|
||||
using OpenRA.Effects;
|
||||
using OpenRA.Mods.RA.Activities;
|
||||
using OpenRA.Traits;
|
||||
using OpenRA.Traits.Activities;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
bool CanRepair(Actor self, Actor a)
|
||||
{
|
||||
if (!a.traits.Contains<Building>()) return false;
|
||||
if (!a.HasTrait<Building>()) return false;
|
||||
return (self.Owner.Stances[a.Owner] == Stance.Ally);
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Yellow);
|
||||
});
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
|
||||
var weapon = ChooseWeaponForExplosion(self);
|
||||
if (weapon != null)
|
||||
{
|
||||
var move = self.traits.GetOrDefault<IMove>();
|
||||
var move = self.TraitOrDefault<IMove>();
|
||||
var altitude = move != null ? move.Altitude : 0;
|
||||
Combat.DoExplosion(e.Attacker, weapon, self.CenterLocation, altitude);
|
||||
}
|
||||
@@ -39,7 +39,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
string ChooseWeaponForExplosion(Actor self)
|
||||
{
|
||||
var shouldExplode = self.traits.WithInterface<IExplodeModifier>().All(a => a.ShouldExplode(self));
|
||||
var shouldExplode = self.TraitsImplementing<IExplodeModifier>().All(a => a.ShouldExplode(self));
|
||||
|
||||
var info = self.Info.Traits.Get<ExplodesInfo>();
|
||||
return shouldExplode ? info.Weapon : info.EmptyWeapon;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using OpenRA.Traits;
|
||||
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
{
|
||||
class GivesExperienceInfo : TraitInfo<GivesExperience> { public readonly int Experience = -1; }
|
||||
@@ -22,16 +22,16 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
// Prevent TK from giving exp
|
||||
if (e.Attacker == null || e.Attacker.Owner.Stances[ self.Owner ] == Stance.Ally )
|
||||
return;
|
||||
|
||||
return;
|
||||
|
||||
var info = self.Info.Traits.Get<GivesExperienceInfo>();
|
||||
var valued = self.Info.Traits.GetOrDefault<ValuedInfo>();
|
||||
|
||||
var exp = info.Experience >= 0
|
||||
? info.Experience
|
||||
var valued = self.Info.Traits.GetOrDefault<ValuedInfo>();
|
||||
|
||||
var exp = info.Experience >= 0
|
||||
? info.Experience
|
||||
: valued != null ? valued.Cost : 0;
|
||||
|
||||
var killer = e.Attacker.traits.GetOrDefault<GainsExperience>();
|
||||
|
||||
var killer = e.Attacker.TraitOrDefault<GainsExperience>();
|
||||
if (killer != null)
|
||||
killer.GiveExperience(exp);
|
||||
}
|
||||
|
||||
@@ -55,22 +55,22 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
LinkedProc = ClosestProc(self, ignore);
|
||||
if (LinkedProc != null)
|
||||
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
||||
}
|
||||
|
||||
Actor ClosestProc(Actor self, Actor ignore)
|
||||
{
|
||||
var refs = self.World.Queries.OwnedBy[self.Owner]
|
||||
.Where(x => x != ignore && x.traits.Contains<IAcceptOre>())
|
||||
.Where(x => x != ignore && x.HasTrait<IAcceptOre>())
|
||||
.ToList();
|
||||
|
||||
var path = self.World.PathFinder.FindPath(PathSearch.FromPoints(self,
|
||||
refs.Select(r => r.Location + r.traits.Get<IAcceptOre>().DeliverOffset),
|
||||
refs.Select(r => r.Location + r.Trait<IAcceptOre>().DeliverOffset),
|
||||
self.Location,
|
||||
false));
|
||||
path.Reverse();
|
||||
if (path.Count != 0)
|
||||
return refs.FirstOrDefault(x => x.Location + x.traits.Get<IAcceptOre>().DeliverOffset == path[0]);
|
||||
return refs.FirstOrDefault(x => x.Location + x.Trait<IAcceptOre>().DeliverOffset == path[0]);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
@@ -86,7 +86,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public void Deliver(Actor self, Actor proc)
|
||||
{
|
||||
proc.traits.Get<IAcceptOre>().GiveOre(contents.Sum(kv => kv.Key.ValuePerUnit * kv.Value));
|
||||
proc.Trait<IAcceptOre>().GiveOre(contents.Sum(kv => kv.Key.ValuePerUnit * kv.Value));
|
||||
contents.Clear();
|
||||
}
|
||||
|
||||
@@ -96,11 +96,11 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if (underCursor != null
|
||||
&& underCursor.Owner == self.Owner
|
||||
&& underCursor.traits.Contains<IAcceptOre>())
|
||||
&& underCursor.HasTrait<IAcceptOre>())
|
||||
{
|
||||
return new Order("Deliver", self, underCursor);
|
||||
}
|
||||
var res = self.World.WorldActor.traits.Get<ResourceLayer>().GetResource(xy);
|
||||
var res = self.World.WorldActor.Trait<ResourceLayer>().GetResource(xy);
|
||||
var info = self.Info.Traits.Get<HarvesterInfo>();
|
||||
|
||||
if (underCursor == null && res != null && info.Resources.Contains(res.info.Name) && !IsFull)
|
||||
@@ -129,7 +129,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new MoveFlash(self.World, order.TargetLocation));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Red);
|
||||
});
|
||||
@@ -143,9 +143,9 @@ namespace OpenRA.Mods.RA
|
||||
if (order.TargetActor != LinkedProc)
|
||||
{
|
||||
if (LinkedProc != null)
|
||||
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
||||
LinkedProc = order.TargetActor;
|
||||
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
||||
}
|
||||
|
||||
if (IsEmpty)
|
||||
@@ -155,7 +155,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
@@ -169,7 +169,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
if (e.DamageState == DamageState.Dead)
|
||||
if (LinkedProc != null)
|
||||
LinkedProc.traits.WithInterface<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
||||
}
|
||||
|
||||
public void LinkProc(Actor self, Actor proc)
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Mods.RA
|
||||
if (mi.Button == MouseButton.Left) return null;
|
||||
|
||||
if (underCursor == null)
|
||||
if (self.traits.GetOrDefault<IMove>().CanEnterCell(xy))
|
||||
if (self.TraitOrDefault<IMove>().CanEnterCell(xy))
|
||||
return new Order("Move", self, xy);
|
||||
|
||||
if (AircraftCanEnter(self, underCursor)
|
||||
@@ -82,7 +82,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new MoveFlash(self.World, order.TargetLocation));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
@@ -100,18 +100,18 @@ namespace OpenRA.Mods.RA
|
||||
if (order.OrderString == "Enter")
|
||||
{
|
||||
if (Reservable.IsReserved(order.TargetActor)) return;
|
||||
var res = order.TargetActor.traits.GetOrDefault<Reservable>();
|
||||
var res = order.TargetActor.TraitOrDefault<Reservable>();
|
||||
if (res != null)
|
||||
reservation = res.Reserve(self);
|
||||
|
||||
var pi = order.TargetActor.traits.Get<Production>();
|
||||
var pi = order.TargetActor.Trait<Production>();
|
||||
var offset = pi != null ? pi.Spawns.First().First : float2.Zero;
|
||||
|
||||
if (self.Owner == self.World.LocalPlayer)
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
@@ -128,16 +128,16 @@ namespace OpenRA.Mods.RA
|
||||
int offsetTicks = 0;
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
var aircraft = self.traits.Get<Aircraft>();
|
||||
var aircraft = self.Trait<Aircraft>();
|
||||
if (aircraft.Altitude <= 0)
|
||||
return;
|
||||
|
||||
var rawSpeed = .2f * aircraft.MovementSpeedForCell(self, self.Location);
|
||||
var otherHelis = self.World.FindUnitsInCircle(self.CenterLocation, Info.IdealSeparation)
|
||||
.Where(a => a.traits.Contains<Helicopter>());
|
||||
.Where(a => a.HasTrait<Helicopter>());
|
||||
|
||||
var f = otherHelis
|
||||
.Select(h => self.traits.Get<Helicopter>().GetRepulseForce(self, h))
|
||||
.Select(h => self.Trait<Helicopter>().GetRepulseForce(self, h))
|
||||
.Aggregate(float2.Zero, (a, b) => a + b);
|
||||
|
||||
self.CenterLocation += rawSpeed * f;
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA
|
||||
this.self = init.self;
|
||||
this.location = init.Get<LocationInit,int2>();
|
||||
this.Facing = init.Contains<FacingInit>() ? init.Get<FacingInit,int>() : 128;
|
||||
self.World.WorldActor.traits.Get<UnitInfluence>().Add(self, this);
|
||||
self.World.WorldActor.Trait<UnitInfluence>().Add(self, this);
|
||||
}
|
||||
|
||||
public int2 TopLeft { get { return location; } }
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
public void OnInfiltrate(Actor self, Actor spy)
|
||||
{
|
||||
spy.Owner.PlayerActor.traits.Get<SonarPulsePower>().Give(1.0f);
|
||||
spy.Owner.PlayerActor.Trait<SonarPulsePower>().Give(1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,12 +32,12 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
new LocationInit( self.Location ),
|
||||
new OwnerInit( self.Owner ),
|
||||
new FacingInit( self.traits.Get<IFacing>().Facing ),
|
||||
new FacingInit( self.Trait<IFacing>().Facing ),
|
||||
});
|
||||
|
||||
var turreted = self.traits.GetOrDefault<Turreted>();
|
||||
var turreted = self.TraitOrDefault<Turreted>();
|
||||
if (turreted != null)
|
||||
foreach (var p in husk.traits.WithInterface<ThrowsParticle>())
|
||||
foreach (var p in husk.TraitsImplementing<ThrowsParticle>())
|
||||
p.InitialFacing = turreted.turretFacing;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -36,12 +36,12 @@ namespace OpenRA.Mods.RA
|
||||
this.self = init.self;
|
||||
this.info = info;
|
||||
this.location = init.Get<LocationInit,int2>();
|
||||
self.World.WorldActor.traits.Get<UnitInfluence>().Add(self, this);
|
||||
self.World.WorldActor.Trait<UnitInfluence>().Add(self, this);
|
||||
}
|
||||
|
||||
public void OnCrush(Actor crusher)
|
||||
{
|
||||
if (crusher.traits.Contains<MineImmune>() && crusher.Owner == self.Owner)
|
||||
if (crusher.HasTrait<MineImmune>() && crusher.Owner == self.Owner)
|
||||
return;
|
||||
|
||||
var info = self.Info.Traits.Get<MineInfo>();
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace OpenRA.Mods.RA
|
||||
if (self.Owner == self.World.LocalPlayer)
|
||||
self.World.CancelInputMode();
|
||||
|
||||
var movement = self.traits.Get<IMove>();
|
||||
var movement = self.Trait<IMove>();
|
||||
|
||||
minefield = GetMinefieldCells(minefieldStart, order.TargetLocation,
|
||||
self.Info.Traits.Get<MinelayerInfo>().MinefieldDepth)
|
||||
@@ -122,8 +122,8 @@ namespace OpenRA.Mods.RA
|
||||
int2 lastMousePos;
|
||||
public void RenderAfterWorld(World world)
|
||||
{
|
||||
var ml = minelayer.traits.Get<Minelayer>();
|
||||
var movement = minelayer.traits.Get<IMove>();
|
||||
var ml = minelayer.Trait<Minelayer>();
|
||||
var movement = minelayer.Trait<IMove>();
|
||||
var minefield = GetMinefieldCells(ml.minefieldStart, lastMousePos, minelayer.Info.Traits.Get<MinelayerInfo>().MinefieldDepth)
|
||||
.Where(p => movement.CanEnterCell(p)).ToArray();
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public FrozenUnderFog(Actor self)
|
||||
{
|
||||
shroud = self.World.WorldActor.traits.Get<Shroud>();
|
||||
shroud = self.World.WorldActor.Trait<Shroud>();
|
||||
}
|
||||
|
||||
public bool IsVisible(Actor self)
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public HiddenUnderFog(Actor self)
|
||||
{
|
||||
shroud = self.World.WorldActor.traits.Get<Shroud>();
|
||||
shroud = self.World.WorldActor.Trait<Shroud>();
|
||||
}
|
||||
|
||||
public bool IsVisible(Actor self)
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Orders
|
||||
{
|
||||
var underCursor = world.FindUnitsAtMouse(mi.Location)
|
||||
.Where(a => a.Owner == world.LocalPlayer
|
||||
&& a.traits.Contains<CanPowerDown>())
|
||||
&& a.HasTrait<CanPowerDown>())
|
||||
.FirstOrDefault();
|
||||
|
||||
if (underCursor != null)
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA.Orders
|
||||
if (mi.Button == MouseButton.Left)
|
||||
{
|
||||
var underCursor = world.FindUnitsAtMouse(mi.Location)
|
||||
.Where(a => a.Owner == world.LocalPlayer && a.traits.Contains<RepairableBuilding>()).FirstOrDefault();
|
||||
.Where(a => a.Owner == world.LocalPlayer && a.HasTrait<RepairableBuilding>()).FirstOrDefault();
|
||||
|
||||
if (underCursor == null)
|
||||
yield break;
|
||||
|
||||
@@ -30,8 +30,8 @@ namespace OpenRA.Mods.RA.Orders
|
||||
{
|
||||
var underCursor = world.FindUnitsAtMouse(mi.Location)
|
||||
.Where(a => a.Owner == world.LocalPlayer
|
||||
&& a.traits.Contains<Building>()
|
||||
&& a.traits.Contains<Selectable>()).FirstOrDefault();
|
||||
&& a.HasTrait<Building>()
|
||||
&& a.HasTrait<Selectable>()).FirstOrDefault();
|
||||
|
||||
var building = underCursor != null ? underCursor.Info.Traits.Get<BuildingInfo>() : null;
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace OpenRA.Mods.RA.Orders
|
||||
if (!world.LocalPlayer.Shroud.IsExplored(xy))
|
||||
return "move-blocked";
|
||||
|
||||
var movement = self.traits.GetOrDefault<IMove>();
|
||||
var movement = self.TraitOrDefault<IMove>();
|
||||
return (movement.CanEnterCell(xy)) ? "chrono-target" : "move-blocked";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
this.self = self;
|
||||
Info = info;
|
||||
Player = self.Owner.PlayerActor.traits.Get<PlayerResources> ();
|
||||
Player = self.Owner.PlayerActor.Trait<PlayerResources> ();
|
||||
LinkedHarv = new List<Actor> ();
|
||||
}
|
||||
|
||||
@@ -94,13 +94,13 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
if (e.DamageState == DamageState.Dead)
|
||||
foreach (var harv in LinkedHarv)
|
||||
harv.traits.Get<Harvester> ().UnlinkProc(harv, self);
|
||||
harv.Trait<Harvester> ().UnlinkProc(harv, self);
|
||||
}
|
||||
|
||||
public int2 DeliverOffset {get{ return Info.DockOffset; }}
|
||||
public void OnDock (Actor harv, DeliverResources dockOrder)
|
||||
{
|
||||
self.traits.Get<IAcceptOreDockAction>().OnDock(self, harv, dockOrder);
|
||||
self.Trait<IAcceptOreDockAction>().OnDock(self, harv, dockOrder);
|
||||
}
|
||||
|
||||
public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner)
|
||||
@@ -109,7 +109,7 @@ namespace OpenRA.Mods.RA
|
||||
foreach (var harv in LinkedHarv)
|
||||
{
|
||||
if (harv.Owner == self.Owner)
|
||||
harv.traits.Get<Harvester>().UnlinkProc (harv, self);
|
||||
harv.Trait<Harvester>().UnlinkProc (harv, self);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace OpenRA.Mods.RA
|
||||
public void Sold (Actor self)
|
||||
{
|
||||
foreach (var harv in LinkedHarv)
|
||||
harv.traits.Get<Harvester>().UnlinkProc (harv, self);
|
||||
harv.Trait<Harvester>().UnlinkProc (harv, self);
|
||||
}
|
||||
|
||||
public IEnumerable<PipType> GetPips (Actor self)
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using OpenRA.Mods.RA.Activities;
|
||||
using OpenRA.Mods.RA.Render;
|
||||
using OpenRA.Traits;
|
||||
using OpenRA.Traits.Activities;
|
||||
#region Copyright & License Information
|
||||
/*
|
||||
* Copyright 2007-2010 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,
|
||||
* see LICENSE.
|
||||
*/
|
||||
#endregion
|
||||
|
||||
using OpenRA.Mods.RA.Activities;
|
||||
using OpenRA.Mods.RA.Render;
|
||||
using OpenRA.Traits;
|
||||
using OpenRA.Traits.Activities;
|
||||
using System.Drawing;
|
||||
|
||||
namespace OpenRA.Mods.RA
|
||||
@@ -24,31 +24,31 @@ namespace OpenRA.Mods.RA
|
||||
Actor dockedHarv = null;
|
||||
public void OnDock(Actor self, Actor harv, DeliverResources dockOrder)
|
||||
{
|
||||
var harvester = harv.traits.Get<Harvester>();
|
||||
var harvester = harv.Trait<Harvester>();
|
||||
|
||||
if (harv.traits.Get<IFacing>().Facing != 64)
|
||||
if (harv.Trait<IFacing>().Facing != 64)
|
||||
harv.QueueActivity (new Turn (64));
|
||||
|
||||
harv.QueueActivity (new CallFunc (() =>
|
||||
{
|
||||
dockedHarv = harv;
|
||||
var renderUnit = harv.traits.Get<RenderUnit> ();
|
||||
var renderUnit = harv.Trait<RenderUnit> ();
|
||||
if (renderUnit.anim.CurrentSequence.Name != "empty")
|
||||
renderUnit.PlayCustomAnimation (harv, "empty", () =>
|
||||
{
|
||||
harvester.Deliver(harv, self);
|
||||
harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) );
|
||||
|
||||
if (harvester.LastHarvestedCell != int2.Zero)
|
||||
if (harvester.LastHarvestedCell != int2.Zero)
|
||||
{
|
||||
harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) );
|
||||
if (harv.Owner == self.World.LocalPlayer)
|
||||
self.World.AddFrameEndTask( w =>
|
||||
{
|
||||
var line = harv.traits.GetOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green);
|
||||
});
|
||||
harv.QueueActivity( new Move(harvester.LastHarvestedCell, 5) );
|
||||
if (harv.Owner == self.World.LocalPlayer)
|
||||
self.World.AddFrameEndTask( w =>
|
||||
{
|
||||
var line = harv.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTargetSilently(harv, Target.FromCell(harvester.LastHarvestedCell), Color.Green);
|
||||
});
|
||||
}
|
||||
harv.QueueActivity( new Harvest() );
|
||||
});
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
if ((self.Location - lz).LengthSquared <= r * r && !droppedAt.Contains(self.Location))
|
||||
{
|
||||
var cargo = self.traits.Get<Cargo>();
|
||||
var cargo = self.Trait<Cargo>();
|
||||
if (cargo.IsEmpty(self))
|
||||
FinishedDropping(self);
|
||||
else
|
||||
@@ -55,9 +55,9 @@ namespace OpenRA.Mods.RA
|
||||
droppedAt.Add(self.Location);
|
||||
|
||||
var a = cargo.Unload(self);
|
||||
var rs = a.traits.Get<RenderSimple>();
|
||||
var rs = a.Trait<RenderSimple>();
|
||||
|
||||
var aircraft = self.traits.Get<IMove>();
|
||||
var aircraft = self.Trait<IMove>();
|
||||
self.World.AddFrameEndTask(w => w.Add(
|
||||
new Parachute(self.Owner, rs.anim.Name,
|
||||
Util.CenterOfCell(Util.CellContaining(self.CenterLocation)),
|
||||
@@ -70,7 +70,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
bool IsSuitableCell(Actor actorToDrop, int2 p)
|
||||
{
|
||||
return actorToDrop.traits.Get<ITeleportable>().CanEnterCell(p);
|
||||
return actorToDrop.Trait<ITeleportable>().CanEnterCell(p);
|
||||
}
|
||||
|
||||
void FinishedDropping(Actor self)
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace OpenRA.Mods.RA
|
||||
if (underCursor == null || underCursor.Owner != self.Owner)
|
||||
return null;
|
||||
|
||||
var cargo = underCursor.traits.GetOrDefault<Cargo>();
|
||||
var cargo = underCursor.TraitOrDefault<Cargo>();
|
||||
if (cargo == null)
|
||||
return null;
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
bool CanEnter(Actor self, Actor a)
|
||||
{
|
||||
var cargo = a.traits.GetOrDefault<Cargo>();
|
||||
var cargo = a.TraitOrDefault<Cargo>();
|
||||
return (cargo != null && !cargo.IsFull(a));
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
|
||||
@@ -34,11 +34,11 @@ namespace OpenRA.Mods.RA
|
||||
if (firstTick)
|
||||
{
|
||||
firstTick = false;
|
||||
if (self.traits.Get<IMove>().Altitude == 0)
|
||||
if (self.Trait<IMove>().Altitude == 0)
|
||||
{
|
||||
/* not spawning in the air, so try to assoc. with our afld. this is a hack. */
|
||||
var res = self.World.FindUnits(self.CenterLocation, self.CenterLocation)
|
||||
.Select( a => a.traits.GetOrDefault<Reservable>() ).FirstOrDefault( a => a != null );
|
||||
.Select( a => a.TraitOrDefault<Reservable>() ).FirstOrDefault( a => a != null );
|
||||
|
||||
if (res != null)
|
||||
reservation = res.Reserve(self);
|
||||
@@ -93,7 +93,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new MoveFlash(self.World, order.TargetLocation));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
@@ -114,7 +114,7 @@ namespace OpenRA.Mods.RA
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
void Complete( Actor self )
|
||||
{
|
||||
anim.PlayRepeating( GetPrefix(self) + "idle" );
|
||||
foreach( var x in self.traits.WithInterface<INotifyBuildComplete>() )
|
||||
foreach( var x in self.TraitsImplementing<INotifyBuildComplete>() )
|
||||
x.BuildingComplete( self );
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
public void BuildingComplete( Actor self )
|
||||
{
|
||||
anim.PlayFetchIndex( "idle",
|
||||
() => (int)( 4.9 * self.Owner.PlayerActor.traits.Get<PlayerResources>().GetSiloFullness() ) );
|
||||
() => (int)( 4.9 * self.Owner.PlayerActor.Trait<PlayerResources>().GetSiloFullness() ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
class RenderBuildingTurreted : RenderBuilding, INotifyBuildComplete
|
||||
{
|
||||
public RenderBuildingTurreted(Actor self)
|
||||
: base(self, () => self.traits.Get<Turreted>().turretFacing)
|
||||
: base(self, () => self.Trait<Turreted>().turretFacing)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
|
||||
foreach (var w in adjWalls)
|
||||
{
|
||||
w.traits.Get<RenderBuildingWall>().AddAdjacentWall(w.Location, self.Location);
|
||||
w.Trait<RenderBuildingWall>().AddAdjacentWall(w.Location, self.Location);
|
||||
AddAdjacentWall(self.Location, w.Location);
|
||||
}
|
||||
hasTicked = true;
|
||||
|
||||
@@ -34,18 +34,18 @@ namespace OpenRA.Mods.RA.Render
|
||||
|
||||
public RenderWarFactory(Actor self)
|
||||
{
|
||||
roof = new Animation(self.traits.Get<RenderSimple>().GetImage(self));
|
||||
roof = new Animation(self.Trait<RenderSimple>().GetImage(self));
|
||||
}
|
||||
|
||||
public void BuildingComplete( Actor self )
|
||||
{
|
||||
roof.Play( GetPrefix(self) + "idle-top" );
|
||||
self.traits.Get<RenderSimple>().anims.Add( "roof", new RenderSimple.AnimationWithOffset( roof ) { ZOffset = 2 } );
|
||||
self.Trait<RenderSimple>().anims.Add( "roof", new RenderSimple.AnimationWithOffset( roof ) { ZOffset = 2 } );
|
||||
}
|
||||
|
||||
public void Tick(Actor self)
|
||||
{
|
||||
if (isOpen && !self.World.WorldActor.traits.Get<UnitInfluence>()
|
||||
if (isOpen && !self.World.WorldActor.Trait<UnitInfluence>()
|
||||
.GetUnitsAt(openExit).Any())
|
||||
{
|
||||
isOpen = false;
|
||||
@@ -70,7 +70,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
|
||||
public void Selling( Actor self )
|
||||
{
|
||||
self.traits.Get<RenderSimple>().anims.Remove( "roof" );
|
||||
self.Trait<RenderSimple>().anims.Remove( "roof" );
|
||||
}
|
||||
|
||||
public void Sold( Actor self ) { }
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
public class RenderInfantry : RenderSimple, INotifyAttack, INotifyDamage
|
||||
{
|
||||
public RenderInfantry(Actor self)
|
||||
: base(self, () => self.traits.Get<IFacing>().Facing)
|
||||
: base(self, () => self.Trait<IFacing>().Facing)
|
||||
{
|
||||
anim.Play("stand");
|
||||
}
|
||||
@@ -32,7 +32,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
if (!(self.GetCurrentActivity() is Move) && !(self.GetCurrentActivity() is Drag)) // A bit of a hack
|
||||
return false;
|
||||
|
||||
var mobile = self.traits.Get<Mobile>();
|
||||
var mobile = self.Trait<Mobile>();
|
||||
if (float2.WithinEpsilon(self.CenterLocation, Util.CenterOfCell(mobile.toCell), 2)) return false;
|
||||
|
||||
var seq = IsProne(self) ? "crawl" : "run";
|
||||
@@ -46,7 +46,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
bool inAttack = false;
|
||||
bool IsProne(Actor self)
|
||||
{
|
||||
var takeCover = self.traits.GetOrDefault<TakeCover>();
|
||||
var takeCover = self.TraitOrDefault<TakeCover>();
|
||||
return takeCover != null && takeCover.IsProne;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
public class RenderUnit : RenderSimple, INotifyDamage
|
||||
{
|
||||
public RenderUnit(Actor self)
|
||||
: base(self, () => self.traits.Contains<IFacing>() ? self.traits.Get<IFacing>().Facing : 0)
|
||||
: base(self, () => self.HasTrait<IFacing>() ? self.Trait<IFacing>().Facing : 0)
|
||||
{
|
||||
anim.Play("idle");
|
||||
anims.Add( "smoke", new AnimationWithOffset( new Animation( "smoke_m" ), null, () => !isSmoking ) );
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
var isAttacking = self.GetCurrentActivity() is Attack;
|
||||
|
||||
var attack = self.traits.GetOrDefault<AttackBase>();
|
||||
var attack = self.TraitOrDefault<AttackBase>();
|
||||
|
||||
if (attack != null)
|
||||
anim.ReplaceAnim((attack.IsReloading() ? "empty-" : "")
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
public RenderUnitRotor( Actor self )
|
||||
: base(self)
|
||||
{
|
||||
var facing = self.traits.Get<IFacing>();
|
||||
var facing = self.Trait<IFacing>();
|
||||
var info = self.Info.Traits.Get<RenderUnitRotorInfo>();
|
||||
|
||||
rotorAnim = new Animation(GetImage(self));
|
||||
@@ -52,7 +52,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
{
|
||||
base.Tick(self);
|
||||
|
||||
var isFlying = self.traits.Get<IMove>().Altitude > 0;
|
||||
var isFlying = self.Trait<IMove>().Altitude > 0;
|
||||
if (isFlying ^ (rotorAnim.CurrentSequence.Name != "rotor"))
|
||||
return;
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA.Render
|
||||
spinnerAnim.PlayRepeating("spinner");
|
||||
anims.Add("spinner", new AnimationWithOffset(
|
||||
spinnerAnim,
|
||||
() => Combat.GetTurretPosition( self, self.traits.Get<IFacing>(), new Turret(info.Offset)),
|
||||
() => Combat.GetTurretPosition( self, self.Trait<IFacing>(), new Turret(info.Offset)),
|
||||
null ) { ZOffset = 1 } );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ namespace OpenRA.Mods.RA.Render
|
||||
public RenderUnitTurreted(Actor self)
|
||||
: base(self)
|
||||
{
|
||||
var facing = self.traits.Get<IFacing>();
|
||||
var turreted = self.traits.Get<Turreted>();
|
||||
var attack = self.traits.GetOrDefault<AttackBase>();
|
||||
var facing = self.Trait<IFacing>();
|
||||
var turreted = self.Trait<Turreted>();
|
||||
var attack = self.TraitOrDefault<AttackBase>();
|
||||
var attackInfo = self.Info.Traits.Get<AttackBaseInfo>();
|
||||
|
||||
var turretAnim = new Animation(GetImage(self), () => turreted.turretFacing );
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
self.World.WorldRenderer.DrawRangeCircle(
|
||||
Color.FromArgb(128, Color.Yellow),
|
||||
self.CenterLocation, (int)self.traits.Get<AttackBase>().GetMaximumRange());
|
||||
self.CenterLocation, (int)self.Trait<AttackBase>().GetMaximumRange());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA
|
||||
Health Health;
|
||||
public Repairable(Actor self)
|
||||
{
|
||||
Health = self.traits.Get<Health>();
|
||||
Health = self.Trait<Health>();
|
||||
}
|
||||
|
||||
public Order IssueOrder(Actor self, int2 xy, MouseInput mi, Actor underCursor)
|
||||
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
bool CanRepair(Actor self)
|
||||
{
|
||||
var li = self.traits.GetOrDefault<LimitedAmmo>();
|
||||
var li = self.TraitOrDefault<LimitedAmmo>();
|
||||
return (Health.DamageState > DamageState.Undamaged || (li != null && !li.FullAmmo()) );
|
||||
}
|
||||
|
||||
@@ -67,13 +67,13 @@ namespace OpenRA.Mods.RA
|
||||
if (!CanRepair(self))
|
||||
return;
|
||||
|
||||
var rp = order.TargetActor.traits.GetOrDefault<RallyPoint>();
|
||||
var rp = order.TargetActor.TraitOrDefault<RallyPoint>();
|
||||
|
||||
if (self.Owner == self.World.LocalPlayer)
|
||||
self.World.AddFrameEndTask(w =>
|
||||
{
|
||||
w.Add(new FlashTarget(order.TargetActor));
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTarget(self, Target.FromOrder(order), Color.Green);
|
||||
});
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA
|
||||
if (self.Owner == self.World.LocalPlayer)
|
||||
self.World.AddFrameEndTask( w =>
|
||||
{
|
||||
var line = self.traits.GetOrDefault<DrawLineToTarget>();
|
||||
var line = self.TraitOrDefault<DrawLineToTarget>();
|
||||
if (line != null)
|
||||
line.SetTargetSilently(self, Target.FromActor(order.TargetActor), Color.Green);
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public bool Disabled
|
||||
{
|
||||
get { return (self.Owner.PlayerActor.traits.Get<PlayerResources>().GetPowerState() != PowerState.Normal); }
|
||||
get { return (self.Owner.PlayerActor.Trait<PlayerResources>().GetPowerState() != PowerState.Normal); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.RA
|
||||
|
||||
public static bool IsReserved(Actor a)
|
||||
{
|
||||
var res = a.traits.GetOrDefault<Reservable>();
|
||||
var res = a.TraitOrDefault<Reservable>();
|
||||
return res != null && res.reservedFor != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
var exit = self.Location + s.Second;
|
||||
var spawn = self.CenterLocation + s.First;
|
||||
if (!self.World.WorldActor.traits.Get<UnitInfluence>().GetUnitsAt( exit ).Any())
|
||||
if (!self.World.WorldActor.Trait<UnitInfluence>().GetUnitsAt( exit ).Any())
|
||||
{
|
||||
var newUnit = self.World.CreateActor( producee.Name, new TypeDictionary
|
||||
{
|
||||
@@ -45,13 +45,13 @@ namespace OpenRA.Mods.RA
|
||||
});
|
||||
newUnit.CenterLocation = spawn;
|
||||
|
||||
var rp = self.traits.GetOrDefault<RallyPoint>();
|
||||
var rp = self.TraitOrDefault<RallyPoint>();
|
||||
if( rp != null )
|
||||
{
|
||||
newUnit.QueueActivity( new Activities.HeliFly( Util.CenterOfCell(rp.rallyPoint)) );
|
||||
}
|
||||
|
||||
foreach (var t in self.traits.WithInterface<INotifyProduction>())
|
||||
foreach (var t in self.TraitsImplementing<INotifyProduction>())
|
||||
t.UnitProduced(self, newUnit, exit);
|
||||
|
||||
Log.Write("debug", "{0} #{1} produced by {2} #{3}", newUnit.Info.Name, newUnit.ActorID, self.Info.Name, self.ActorID);
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
public void Idle(Actor self)
|
||||
{
|
||||
var altitude = self.traits.Get<Aircraft>().Altitude;
|
||||
var altitude = self.Trait<Aircraft>().Altitude;
|
||||
if (altitude == 0) return; // we're on the ground, let's stay there.
|
||||
|
||||
var airfield = ReturnToBase.ChooseAirfield(self);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user