Fix harv/proc/selling interaction. Fix formatting issues in OreRefinery. (Fixes #901, #903)

This commit is contained in:
Paul Chote
2011-06-23 19:53:31 +12:00
parent 122c7ec569
commit 2d34169d79
4 changed files with 31 additions and 13 deletions

View File

@@ -65,16 +65,29 @@ namespace OpenRA.Mods.Cnc
return Util.SequenceActivities(new Drag(startDock, endDock, 12), this); return Util.SequenceActivities(new Drag(startDock, endDock, 12), this);
case State.Dock: case State.Dock:
dock.Visible = false; dock.Visible = false;
if (rb.anim.CurrentSequence.Name == "idle" || rb.anim.CurrentSequence.Name == "damaged-idle")
{
rb.PlayCustomAnimThen(proc, "dock-start", () => {rb.PlayCustomAnimRepeating(proc, "dock-loop"); state = State.Loop;}); rb.PlayCustomAnimThen(proc, "dock-start", () => {rb.PlayCustomAnimRepeating(proc, "dock-loop"); state = State.Loop;});
state = State.Wait; state = State.Wait;
}
else
state = State.Loop;
return this; return this;
case State.Loop: case State.Loop:
if (harv.TickUnload(self, proc)) if (harv.TickUnload(self, proc))
state = State.Undock; state = State.Undock;
return this; return this;
case State.Undock: case State.Undock:
if (rb.anim.CurrentSequence.Name == "dock-loop" || rb.anim.CurrentSequence.Name == "damaged-dock-loop")
{
rb.PlayCustomAnimThen(proc, "dock-end", () => {dock.Visible = true; state = State.Dragout;}); rb.PlayCustomAnimThen(proc, "dock-end", () => {dock.Visible = true; state = State.Dragout;});
state = State.Wait; state = State.Wait;
}
else
{
state = State.Dragout;
dock.Visible = true;
}
return this; return this;
case State.Dragout: case State.Dragout:
return Util.SequenceActivities(new Drag(endDock, startDock, 12), NextActivity); return Util.SequenceActivities(new Drag(endDock, startDock, 12), NextActivity);
@@ -85,7 +98,6 @@ namespace OpenRA.Mods.Cnc
public override void Cancel(Actor self) public override void Cancel(Actor self)
{ {
state = State.Undock; state = State.Undock;
base.Cancel(self);
} }
public override IEnumerable<Target> GetTargets( Actor self ) public override IEnumerable<Target> GetTargets( Actor self )

View File

@@ -126,7 +126,7 @@ namespace OpenRA.Mods.RA
{ {
get get
{ {
yield return new EnterOrderTargeter<IAcceptOre>( "Deliver", 5, false, true, _ => true, _ => !IsEmpty ); yield return new EnterOrderTargeter<IAcceptOre>("Deliver", 5, false, true, _ => true, proc => !IsEmpty && proc.Trait<IAcceptOre>().AllowDocking);
yield return new HarvestOrderTargeter(); yield return new HarvestOrderTargeter();
} }
} }
@@ -160,6 +160,10 @@ namespace OpenRA.Mods.RA
} }
else if (order.OrderString == "Deliver") else if (order.OrderString == "Deliver")
{ {
var iao = order.TargetActor.TraitOrDefault<IAcceptOre>();
if (iao == null || !iao.AllowDocking)
return;
if (order.TargetActor != LinkedProc) if (order.TargetActor != LinkedProc)
LinkedProc = order.TargetActor; LinkedProc = order.TargetActor;

View File

@@ -51,13 +51,14 @@ namespace OpenRA.Mods.RA
[Sync] [Sync]
bool preventDock = false; bool preventDock = false;
public bool AllowDocking { get { return !preventDock; } }
public int2 DeliverOffset { get { return Info.DockOffset; } } public int2 DeliverOffset { get { return Info.DockOffset; } }
public virtual Activity DockSequence(Actor harv, Actor self) public virtual Activity DockSequence(Actor harv, Actor self)
{ {
return new RAHarvesterDockSequence(harv, self); return new RAHarvesterDockSequence(harv, self);
} }
public OreRefinery (Actor self, OreRefineryInfo info) public OreRefinery(Actor self, OreRefineryInfo info)
{ {
this.self = self; this.self = self;
Info = info; Info = info;
@@ -92,7 +93,7 @@ namespace OpenRA.Mods.RA
dockedHarv.CancelActivity(); dockedHarv.CancelActivity();
} }
public void Tick (Actor self) public void Tick(Actor self)
{ {
// Harvester was killed while unloading // Harvester was killed while unloading
if (dockedHarv != null && dockedHarv.IsDead()) if (dockedHarv != null && dockedHarv.IsDead())
@@ -111,14 +112,14 @@ namespace OpenRA.Mods.RA
} }
} }
public void Killed (Actor self, AttackInfo e) public void Killed(Actor self, AttackInfo e)
{ {
CancelDock(self); CancelDock(self);
foreach (var harv in GetLinkedHarvesters()) foreach (var harv in GetLinkedHarvesters())
harv.Trait.UnlinkProc(harv.Actor, self); harv.Trait.UnlinkProc(harv.Actor, self);
} }
public void OnDock (Actor harv, DeliverResources dockOrder) public void OnDock(Actor harv, DeliverResources dockOrder)
{ {
if (!preventDock) if (!preventDock)
{ {
@@ -130,7 +131,7 @@ 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)
{ {
// Steal any docked harv too // Steal any docked harv too
if (dockedHarv != null) if (dockedHarv != null)
@@ -144,8 +145,8 @@ namespace OpenRA.Mods.RA
PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>(); PlayerResources = newOwner.PlayerActor.Trait<PlayerResources>();
} }
public void Selling (Actor self) { CancelDock(self); } public void Selling(Actor self) { CancelDock(self); }
public void Sold (Actor self) public void Sold(Actor self)
{ {
foreach (var harv in GetLinkedHarvesters()) foreach (var harv in GetLinkedHarvesters())
harv.Trait.UnlinkProc(harv.Actor, self); harv.Trait.UnlinkProc(harv.Actor, self);

View File

@@ -18,6 +18,7 @@ namespace OpenRA.Mods.RA
void GiveOre(int amount); void GiveOre(int amount);
bool CanGiveOre(int amount); bool CanGiveOre(int amount);
int2 DeliverOffset { get; } int2 DeliverOffset { get; }
bool AllowDocking { get; }
} }
public interface IAcceptOreDockAction public interface IAcceptOreDockAction