remove some dumb state-tracking from OreRefinery
This commit is contained in:
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA
|
||||
public object Create(ActorInitializer init) { return new Harvester(init.self, this); }
|
||||
}
|
||||
|
||||
public class Harvester : IIssueOrder, IResolveOrder, INotifyDamage, IPips,
|
||||
public class Harvester : IIssueOrder, IResolveOrder, IPips,
|
||||
IRenderModifier, IExplodeModifier, IOrderVoice,
|
||||
ISpeedModifier
|
||||
{
|
||||
@@ -53,8 +53,6 @@ namespace OpenRA.Mods.RA
|
||||
public void ChooseNewProc(Actor self, Actor ignore)
|
||||
{
|
||||
LinkedProc = ClosestProc(self, ignore);
|
||||
if (LinkedProc != null)
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
||||
}
|
||||
|
||||
Actor ClosestProc(Actor self, Actor ignore)
|
||||
@@ -131,12 +129,7 @@ namespace OpenRA.Mods.RA
|
||||
else if (order.OrderString == "Deliver")
|
||||
{
|
||||
if (order.TargetActor != LinkedProc)
|
||||
{
|
||||
if (LinkedProc != null && LinkedProc.IsInWorld)
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
||||
LinkedProc = order.TargetActor;
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
||||
}
|
||||
|
||||
if (IsEmpty)
|
||||
return;
|
||||
@@ -148,13 +141,6 @@ namespace OpenRA.Mods.RA
|
||||
}
|
||||
}
|
||||
|
||||
public void Damaged(Actor self, AttackInfo e)
|
||||
{
|
||||
if (e.DamageState == DamageState.Dead)
|
||||
if (LinkedProc != null && !LinkedProc.Destroyed)
|
||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
||||
}
|
||||
|
||||
public void LinkProc(Actor self, Actor proc)
|
||||
{
|
||||
LinkedProc = proc;
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Mods.RA.Activities;
|
||||
using OpenRA.Mods.RA.Buildings;
|
||||
using OpenRA.Traits;
|
||||
@@ -36,7 +37,6 @@ namespace OpenRA.Mods.RA
|
||||
readonly OreRefineryInfo Info;
|
||||
PlayerResources PlayerResources;
|
||||
PowerManager PlayerPower;
|
||||
List<Actor> LinkedHarv;
|
||||
|
||||
[Sync]
|
||||
int nextProcessTime = 0;
|
||||
@@ -49,19 +49,12 @@ namespace OpenRA.Mods.RA
|
||||
Info = info;
|
||||
PlayerResources = self.Owner.PlayerActor.Trait<PlayerResources>();
|
||||
PlayerPower = self.Owner.PlayerActor.Trait<PowerManager>();
|
||||
|
||||
LinkedHarv = new List<Actor> ();
|
||||
}
|
||||
|
||||
public void LinkHarvester (Actor self, Actor harv)
|
||||
public IEnumerable<TraitPair<Harvester>> GetLinkedHarvesters()
|
||||
{
|
||||
LinkedHarv.Add (harv);
|
||||
}
|
||||
|
||||
public void UnlinkHarvester (Actor self, Actor harv)
|
||||
{
|
||||
if (LinkedHarv.Contains (harv))
|
||||
LinkedHarv.Remove (harv);
|
||||
return self.World.Queries.WithTrait<Harvester>()
|
||||
.Where(a => a.Trait.LinkedProc == self);
|
||||
}
|
||||
|
||||
public void GiveOre (int amount)
|
||||
@@ -99,8 +92,8 @@ namespace OpenRA.Mods.RA
|
||||
public void Damaged (Actor self, AttackInfo e)
|
||||
{
|
||||
if (e.DamageState == DamageState.Dead)
|
||||
foreach (var harv in LinkedHarv)
|
||||
harv.Trait<Harvester> ().UnlinkProc(harv, self);
|
||||
foreach (var harv in GetLinkedHarvesters())
|
||||
harv.Trait.UnlinkProc(harv.Actor, self);
|
||||
}
|
||||
|
||||
public int2 DeliverOffset {get{ return Info.DockOffset; }}
|
||||
@@ -112,11 +105,9 @@ namespace OpenRA.Mods.RA
|
||||
public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner)
|
||||
{
|
||||
// Unlink any non-docked harvs
|
||||
foreach (var harv in LinkedHarv)
|
||||
{
|
||||
if (harv.Owner == oldOwner)
|
||||
harv.Trait<Harvester>().UnlinkProc (harv, self);
|
||||
}
|
||||
foreach (var harv in GetLinkedHarvesters())
|
||||
if (harv.Actor.Owner == oldOwner)
|
||||
harv.Trait.UnlinkProc(harv.Actor, self);
|
||||
|
||||
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
||||
PlayerPower = newOwner.PlayerActor.Trait<PowerManager>();
|
||||
@@ -125,8 +116,8 @@ namespace OpenRA.Mods.RA
|
||||
public void Selling (Actor self) {}
|
||||
public void Sold (Actor self)
|
||||
{
|
||||
foreach (var harv in LinkedHarv)
|
||||
harv.Trait<Harvester>().UnlinkProc (harv, self);
|
||||
foreach (var harv in GetLinkedHarvesters())
|
||||
harv.Trait.UnlinkProc(harv.Actor, self);
|
||||
}
|
||||
|
||||
public IEnumerable<PipType> GetPips (Actor self)
|
||||
|
||||
@@ -16,8 +16,6 @@ namespace OpenRA.Mods.RA
|
||||
{
|
||||
void OnDock(Actor harv, DeliverResources dockOrder);
|
||||
void GiveOre(int amount);
|
||||
void LinkHarvester(Actor self, Actor harv);
|
||||
void UnlinkHarvester(Actor self, Actor harv);
|
||||
int2 DeliverOffset { get; }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user