fix crash in Activities.Repair

This commit is contained in:
Chris Forbes
2010-06-16 22:42:22 +12:00
parent 81d5b9bc6a
commit 33971c06a6
6 changed files with 13 additions and 13 deletions

View File

@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Activities
return new Wait(20); return new Wait(20);
return new Move(((1 / 24f) * rearmTarget.CenterLocation).ToInt2(), rearmTarget) return new Move(((1 / 24f) * rearmTarget.CenterLocation).ToInt2(), rearmTarget)
{ NextActivity = new Rearm() { NextActivity = new Repair() { NextActivity = this } } }; { NextActivity = new Rearm() { NextActivity = new Repair(rearmTarget) { NextActivity = this } } };
} }
var ml = self.traits.Get<Minelayer>(); var ml = self.traits.Get<Minelayer>();

View File

@@ -29,20 +29,20 @@ namespace OpenRA.Mods.RA.Activities
public IActivity NextActivity { get; set; } public IActivity NextActivity { get; set; }
bool isCanceled; bool isCanceled;
int remainingTicks; int remainingTicks;
Actor host;
public Repair(Actor host) { this.host = host; }
public IActivity Tick(Actor self) public IActivity Tick(Actor self)
{ {
if (isCanceled) return NextActivity; if (isCanceled) return NextActivity;
if (remainingTicks == 0) if (remainingTicks == 0)
{ {
var hostBuilding = self.World.FindUnits(self.CenterLocation, self.CenterLocation)
.FirstOrDefault(a => a.traits.Contains<RenderBuilding>());
var unitCost = self.Info.Traits.Get<ValuedInfo>().Cost; var unitCost = self.Info.Traits.Get<ValuedInfo>().Cost;
var hp = self.Info.Traits.Get<OwnedActorInfo>().HP; var hp = self.Info.Traits.Get<OwnedActorInfo>().HP;
var costPerHp = (hostBuilding.Info.Traits.Get<RepairsUnitsInfo>().URepairPercent * unitCost) / hp; var costPerHp = (host.Info.Traits.Get<RepairsUnitsInfo>().URepairPercent * unitCost) / hp;
var hpToRepair = Math.Min(hostBuilding.Info.Traits.Get<RepairsUnitsInfo>().URepairStep, hp - self.Health); var hpToRepair = Math.Min(host.Info.Traits.Get<RepairsUnitsInfo>().URepairStep, hp - self.Health);
var cost = (int)Math.Ceiling(costPerHp * hpToRepair); var cost = (int)Math.Ceiling(costPerHp * hpToRepair);
if (!self.Owner.PlayerActor.traits.Get<PlayerResources>().TakeCash(cost)) if (!self.Owner.PlayerActor.traits.Get<PlayerResources>().TakeCash(cost))
{ {
@@ -54,9 +54,9 @@ namespace OpenRA.Mods.RA.Activities
if (self.Health == hp) if (self.Health == hp)
return NextActivity; return NextActivity;
if (hostBuilding != null) if (host != null)
hostBuilding.traits.Get<RenderBuilding>() host.traits.Get<RenderBuilding>()
.PlayCustomAnim(hostBuilding, "active"); .PlayCustomAnim(host, "active");
remainingTicks = (int)(self.World.Defaults.RepairRate * 60 * 25); remainingTicks = (int)(self.World.Defaults.RepairRate * 60 * 25);
} }

View File

@@ -103,7 +103,7 @@ namespace OpenRA.Mods.RA
self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing)); self.QueueActivity(new Turn(self.Info.Traits.GetOrDefault<UnitInfo>().InitialFacing));
self.QueueActivity(new HeliLand(false)); self.QueueActivity(new HeliLand(false));
self.QueueActivity(self.Info.Traits.Get<HelicopterInfo>().RearmBuildings.Contains(order.TargetActor.Info.Name) self.QueueActivity(self.Info.Traits.Get<HelicopterInfo>().RearmBuildings.Contains(order.TargetActor.Info.Name)
? (IActivity)new Rearm() : new Repair()); ? (IActivity)new Rearm() : new Repair(order.TargetActor));
} }
} }

View File

@@ -91,7 +91,7 @@ namespace OpenRA.Mods.RA
self.QueueActivity(new ReturnToBase(self, order.TargetActor)); self.QueueActivity(new ReturnToBase(self, order.TargetActor));
self.QueueActivity( self.QueueActivity(
info.RearmBuildings.Contains(order.TargetActor.Info.Name) info.RearmBuildings.Contains(order.TargetActor.Info.Name)
? (IActivity)new Rearm() : new Repair()); ? (IActivity)new Rearm() : new Repair(order.TargetActor));
} }
} }

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new Move(((1 / 24f) * order.TargetActor.CenterLocation).ToInt2(), order.TargetActor)); self.QueueActivity(new Move(((1 / 24f) * order.TargetActor.CenterLocation).ToInt2(), order.TargetActor));
self.QueueActivity(new Rearm()); self.QueueActivity(new Rearm());
self.QueueActivity(new Repair()); self.QueueActivity(new Repair(order.TargetActor));
if (rp != null) if (rp != null)
self.QueueActivity(new CallFunc( self.QueueActivity(new CallFunc(

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA
{ {
self.CancelActivity(); self.CancelActivity();
self.QueueActivity(new Move(order.TargetActor, 1)); self.QueueActivity(new Move(order.TargetActor, 1));
self.QueueActivity(new Repair()); self.QueueActivity(new Repair(order.TargetActor));
} }
} }
} }