Update PlayerResources capacity from INotify* methods
This commit is contained in:
@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public object Create(ActorInitializer init) { return new PlayerResources(init.Self, this); }
|
public object Create(ActorInitializer init) { return new PlayerResources(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PlayerResources : ITick, ISync
|
public class PlayerResources : ISync
|
||||||
{
|
{
|
||||||
public readonly PlayerResourcesInfo Info;
|
public readonly PlayerResourcesInfo Info;
|
||||||
readonly Player owner;
|
readonly Player owner;
|
||||||
@@ -197,13 +197,14 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ITick.Tick(Actor self)
|
public void AddStorage(int capacity)
|
||||||
{
|
{
|
||||||
// PERF: Avoid LINQ.
|
ResourceCapacity += capacity;
|
||||||
ResourceCapacity = 0;
|
}
|
||||||
foreach (var tp in self.World.ActorsWithTrait<IStoreResources>())
|
|
||||||
if (tp.Actor.Owner == owner)
|
public void RemoveStorage(int capacity)
|
||||||
ResourceCapacity += tp.Trait.Capacity;
|
{
|
||||||
|
ResourceCapacity -= capacity;
|
||||||
|
|
||||||
if (Resources > ResourceCapacity)
|
if (Resources > ResourceCapacity)
|
||||||
Resources = ResourceCapacity;
|
Resources = ResourceCapacity;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public object Create(ActorInitializer init) { return new StoresResources(init.Self, this); }
|
public object Create(ActorInitializer init) { return new StoresResources(init.Self, this); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class StoresResources : IPips, INotifyOwnerChanged, INotifyCapture, IStoreResources, ISync, INotifyKilled
|
public class StoresResources : IPips, INotifyOwnerChanged, INotifyCapture, IStoreResources, ISync, INotifyKilled, INotifyAddedToWorld, INotifyRemovedFromWorld
|
||||||
{
|
{
|
||||||
readonly StoresResourcesInfo info;
|
readonly StoresResourcesInfo info;
|
||||||
PlayerResources player;
|
PlayerResources player;
|
||||||
@@ -71,5 +71,15 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
player.Resources * info.PipCount > i * player.ResourceCapacity
|
player.Resources * info.PipCount > i * player.ResourceCapacity
|
||||||
? info.PipColor : PipType.Transparent);
|
? info.PipColor : PipType.Transparent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void INotifyAddedToWorld.AddedToWorld(Actor self)
|
||||||
|
{
|
||||||
|
player.AddStorage(info.Capacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void INotifyRemovedFromWorld.RemovedFromWorld(Actor self)
|
||||||
|
{
|
||||||
|
player.RemoveStorage(info.Capacity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user