Fix carryalls telling carryables to unreserve when they are reserved for a different carryall;
Reserve carryable in FreeActorWithDelivery
This commit is contained in:
@@ -28,7 +28,7 @@ namespace OpenRA.Mods.D2k.Activities
|
|||||||
readonly IFacing cargoFacing;
|
readonly IFacing cargoFacing;
|
||||||
readonly IFacing selfFacing;
|
readonly IFacing selfFacing;
|
||||||
|
|
||||||
enum State { Transport, Land, Release, Done }
|
enum State { Transport, Land, Release }
|
||||||
|
|
||||||
State state;
|
State state;
|
||||||
|
|
||||||
@@ -108,11 +108,6 @@ namespace OpenRA.Mods.D2k.Activities
|
|||||||
}
|
}
|
||||||
|
|
||||||
Release();
|
Release();
|
||||||
state = State.Done;
|
|
||||||
return Util.SequenceActivities(new Wait(10), this);
|
|
||||||
|
|
||||||
case State.Done:
|
|
||||||
self.Trait<Carryall>().UnreserveCarryable();
|
|
||||||
return NextActivity;
|
return NextActivity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +120,11 @@ namespace OpenRA.Mods.D2k.Activities
|
|||||||
cargoFacing.Facing = selfFacing.Facing;
|
cargoFacing.Facing = selfFacing.Facing;
|
||||||
|
|
||||||
// Put back into world
|
// Put back into world
|
||||||
self.World.AddFrameEndTask(w => cargo.World.Add(cargo));
|
self.World.AddFrameEndTask(w =>
|
||||||
|
{
|
||||||
|
cargo.World.Add(cargo);
|
||||||
|
carryall.UnreserveCarryable();
|
||||||
|
});
|
||||||
|
|
||||||
// Unlock carryable
|
// Unlock carryable
|
||||||
carryall.CarryableReleased();
|
carryall.CarryableReleased();
|
||||||
|
|||||||
@@ -64,7 +64,9 @@ namespace OpenRA.Mods.D2k.Traits
|
|||||||
if (clientInitialActivity != null)
|
if (clientInitialActivity != null)
|
||||||
cargo.QueueActivity(Game.CreateObject<Activity>(clientInitialActivity));
|
cargo.QueueActivity(Game.CreateObject<Activity>(clientInitialActivity));
|
||||||
|
|
||||||
cargo.Trait<Carryable>().Destination = location;
|
var carryable = cargo.Trait<Carryable>();
|
||||||
|
carryable.Destination = location;
|
||||||
|
carryable.Reserve(carrier);
|
||||||
|
|
||||||
carrier.Trait<Carryall>().AttachCarryable(cargo);
|
carrier.Trait<Carryall>().AttachCarryable(cargo);
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,9 @@ namespace OpenRA.Mods.D2k.Traits
|
|||||||
|
|
||||||
public bool Reserve(Actor carrier)
|
public bool Reserve(Actor carrier)
|
||||||
{
|
{
|
||||||
|
if (Reserved)
|
||||||
|
return false;
|
||||||
|
|
||||||
if ((self.Location - Destination).Length < info.MinDistance)
|
if ((self.Location - Destination).Length < info.MinDistance)
|
||||||
{
|
{
|
||||||
MovementCancelled(self);
|
MovementCancelled(self);
|
||||||
|
|||||||
@@ -122,6 +122,9 @@ namespace OpenRA.Mods.D2k.Traits
|
|||||||
// Reserve the carryable so its ours exclusively
|
// Reserve the carryable so its ours exclusively
|
||||||
public bool ReserveCarryable(Actor carryable)
|
public bool ReserveCarryable(Actor carryable)
|
||||||
{
|
{
|
||||||
|
if (Carrying != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (carryable.Trait<Carryable>().Reserve(self))
|
if (carryable.Trait<Carryable>().Reserve(self))
|
||||||
{
|
{
|
||||||
Carrying = carryable;
|
Carrying = carryable;
|
||||||
@@ -144,6 +147,7 @@ namespace OpenRA.Mods.D2k.Traits
|
|||||||
}
|
}
|
||||||
|
|
||||||
IsBusy = false;
|
IsBusy = false;
|
||||||
|
Carrying = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// INotifyKilled
|
// INotifyKilled
|
||||||
@@ -177,6 +181,7 @@ namespace OpenRA.Mods.D2k.Traits
|
|||||||
// Called when released
|
// Called when released
|
||||||
public void CarryableReleased()
|
public void CarryableReleased()
|
||||||
{
|
{
|
||||||
|
IsBusy = false;
|
||||||
IsCarrying = false;
|
IsCarrying = false;
|
||||||
anim = null;
|
anim = null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user