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 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,
|
IRenderModifier, IExplodeModifier, IOrderVoice,
|
||||||
ISpeedModifier
|
ISpeedModifier
|
||||||
{
|
{
|
||||||
@@ -53,8 +53,6 @@ namespace OpenRA.Mods.RA
|
|||||||
public void ChooseNewProc(Actor self, Actor ignore)
|
public void ChooseNewProc(Actor self, Actor ignore)
|
||||||
{
|
{
|
||||||
LinkedProc = ClosestProc(self, ignore);
|
LinkedProc = ClosestProc(self, ignore);
|
||||||
if (LinkedProc != null)
|
|
||||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Actor ClosestProc(Actor self, Actor ignore)
|
Actor ClosestProc(Actor self, Actor ignore)
|
||||||
@@ -131,12 +129,7 @@ namespace OpenRA.Mods.RA
|
|||||||
else if (order.OrderString == "Deliver")
|
else if (order.OrderString == "Deliver")
|
||||||
{
|
{
|
||||||
if (order.TargetActor != LinkedProc)
|
if (order.TargetActor != LinkedProc)
|
||||||
{
|
|
||||||
if (LinkedProc != null && LinkedProc.IsInWorld)
|
|
||||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().UnlinkHarvester(LinkedProc,self);
|
|
||||||
LinkedProc = order.TargetActor;
|
LinkedProc = order.TargetActor;
|
||||||
LinkedProc.TraitsImplementing<IAcceptOre>().FirstOrDefault().LinkHarvester(LinkedProc,self);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsEmpty)
|
if (IsEmpty)
|
||||||
return;
|
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)
|
public void LinkProc(Actor self, Actor proc)
|
||||||
{
|
{
|
||||||
LinkedProc = proc;
|
LinkedProc = proc;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using OpenRA.Mods.RA.Activities;
|
using OpenRA.Mods.RA.Activities;
|
||||||
using OpenRA.Mods.RA.Buildings;
|
using OpenRA.Mods.RA.Buildings;
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
@@ -36,7 +37,6 @@ namespace OpenRA.Mods.RA
|
|||||||
readonly OreRefineryInfo Info;
|
readonly OreRefineryInfo Info;
|
||||||
PlayerResources PlayerResources;
|
PlayerResources PlayerResources;
|
||||||
PowerManager PlayerPower;
|
PowerManager PlayerPower;
|
||||||
List<Actor> LinkedHarv;
|
|
||||||
|
|
||||||
[Sync]
|
[Sync]
|
||||||
int nextProcessTime = 0;
|
int nextProcessTime = 0;
|
||||||
@@ -49,19 +49,12 @@ namespace OpenRA.Mods.RA
|
|||||||
Info = info;
|
Info = info;
|
||||||
PlayerResources = self.Owner.PlayerActor.Trait<PlayerResources>();
|
PlayerResources = self.Owner.PlayerActor.Trait<PlayerResources>();
|
||||||
PlayerPower = self.Owner.PlayerActor.Trait<PowerManager>();
|
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);
|
return self.World.Queries.WithTrait<Harvester>()
|
||||||
}
|
.Where(a => a.Trait.LinkedProc == self);
|
||||||
|
|
||||||
public void UnlinkHarvester (Actor self, Actor harv)
|
|
||||||
{
|
|
||||||
if (LinkedHarv.Contains (harv))
|
|
||||||
LinkedHarv.Remove (harv);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GiveOre (int amount)
|
public void GiveOre (int amount)
|
||||||
@@ -99,8 +92,8 @@ namespace OpenRA.Mods.RA
|
|||||||
public void Damaged (Actor self, AttackInfo e)
|
public void Damaged (Actor self, AttackInfo e)
|
||||||
{
|
{
|
||||||
if (e.DamageState == DamageState.Dead)
|
if (e.DamageState == DamageState.Dead)
|
||||||
foreach (var harv in LinkedHarv)
|
foreach (var harv in GetLinkedHarvesters())
|
||||||
harv.Trait<Harvester> ().UnlinkProc(harv, self);
|
harv.Trait.UnlinkProc(harv.Actor, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int2 DeliverOffset {get{ return Info.DockOffset; }}
|
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)
|
public void OnCapture (Actor self, Actor captor, Player oldOwner, Player newOwner)
|
||||||
{
|
{
|
||||||
// Unlink any non-docked harvs
|
// Unlink any non-docked harvs
|
||||||
foreach (var harv in LinkedHarv)
|
foreach (var harv in GetLinkedHarvesters())
|
||||||
{
|
if (harv.Actor.Owner == oldOwner)
|
||||||
if (harv.Owner == oldOwner)
|
harv.Trait.UnlinkProc(harv.Actor, self);
|
||||||
harv.Trait<Harvester>().UnlinkProc (harv, self);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
|
||||||
PlayerPower = newOwner.PlayerActor.Trait<PowerManager>();
|
PlayerPower = newOwner.PlayerActor.Trait<PowerManager>();
|
||||||
@@ -125,8 +116,8 @@ namespace OpenRA.Mods.RA
|
|||||||
public void Selling (Actor self) {}
|
public void Selling (Actor self) {}
|
||||||
public void Sold (Actor self)
|
public void Sold (Actor self)
|
||||||
{
|
{
|
||||||
foreach (var harv in LinkedHarv)
|
foreach (var harv in GetLinkedHarvesters())
|
||||||
harv.Trait<Harvester>().UnlinkProc (harv, self);
|
harv.Trait.UnlinkProc(harv.Actor, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<PipType> GetPips (Actor self)
|
public IEnumerable<PipType> GetPips (Actor self)
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ namespace OpenRA.Mods.RA
|
|||||||
{
|
{
|
||||||
void OnDock(Actor harv, DeliverResources dockOrder);
|
void OnDock(Actor harv, DeliverResources dockOrder);
|
||||||
void GiveOre(int amount);
|
void GiveOre(int amount);
|
||||||
void LinkHarvester(Actor self, Actor harv);
|
|
||||||
void UnlinkHarvester(Actor self, Actor harv);
|
|
||||||
int2 DeliverOffset { get; }
|
int2 DeliverOffset { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user