Add EmptyCondition to Harvester.
This commit is contained in:
committed by
Oliver Brakmann
parent
5f2cc5981d
commit
3be008f592
@@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Activities
|
|||||||
return NextActivity;
|
return NextActivity;
|
||||||
}
|
}
|
||||||
|
|
||||||
harv.AcceptResource(resource);
|
harv.AcceptResource(self, resource);
|
||||||
|
|
||||||
foreach (var t in self.TraitsImplementing<INotifyHarvesterAction>())
|
foreach (var t in self.TraitsImplementing<INotifyHarvesterAction>())
|
||||||
t.Harvested(self, resource);
|
t.Harvested(self, resource);
|
||||||
|
|||||||
@@ -70,6 +70,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("The pathfinding cost penalty applied for each harvester waiting to unload at a refinery.")]
|
[Desc("The pathfinding cost penalty applied for each harvester waiting to unload at a refinery.")]
|
||||||
public readonly int UnloadQueueCostModifier = 12;
|
public readonly int UnloadQueueCostModifier = 12;
|
||||||
|
|
||||||
|
[GrantedConditionReference]
|
||||||
|
[Desc("Condition to grant while empty.")]
|
||||||
|
public readonly string EmptyCondition = null;
|
||||||
|
|
||||||
[VoiceReference] public readonly string HarvestVoice = "Action";
|
[VoiceReference] public readonly string HarvestVoice = "Action";
|
||||||
[VoiceReference] public readonly string DeliverVoice = "Action";
|
[VoiceReference] public readonly string DeliverVoice = "Action";
|
||||||
|
|
||||||
@@ -86,6 +90,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
readonly Dictionary<ResourceTypeInfo, int> contents = new Dictionary<ResourceTypeInfo, int>();
|
readonly Dictionary<ResourceTypeInfo, int> contents = new Dictionary<ResourceTypeInfo, int>();
|
||||||
bool idleSmart = true;
|
bool idleSmart = true;
|
||||||
INotifyHarvesterAction[] notifyHarvesterAction;
|
INotifyHarvesterAction[] notifyHarvesterAction;
|
||||||
|
ConditionManager conditionManager;
|
||||||
|
int conditionToken = ConditionManager.InvalidConditionToken;
|
||||||
int idleDuration;
|
int idleDuration;
|
||||||
|
|
||||||
[Sync] public bool LastSearchFailed;
|
[Sync] public bool LastSearchFailed;
|
||||||
@@ -95,6 +101,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Sync] int currentUnloadTicks;
|
[Sync] int currentUnloadTicks;
|
||||||
public CPos? LastHarvestedCell = null;
|
public CPos? LastHarvestedCell = null;
|
||||||
public CPos? LastOrderLocation = null;
|
public CPos? LastOrderLocation = null;
|
||||||
|
|
||||||
[Sync]
|
[Sync]
|
||||||
public int ContentValue
|
public int ContentValue
|
||||||
{
|
{
|
||||||
@@ -120,6 +127,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
void INotifyCreated.Created(Actor self)
|
void INotifyCreated.Created(Actor self)
|
||||||
{
|
{
|
||||||
notifyHarvesterAction = self.TraitsImplementing<INotifyHarvesterAction>().ToArray();
|
notifyHarvesterAction = self.TraitsImplementing<INotifyHarvesterAction>().ToArray();
|
||||||
|
conditionManager = self.TraitOrDefault<ConditionManager>();
|
||||||
|
UpdateCondition(self);
|
||||||
|
|
||||||
// Note: This is queued in a FrameEndTask because otherwise the activity is dropped/overridden while moving out of a factory.
|
// Note: This is queued in a FrameEndTask because otherwise the activity is dropped/overridden while moving out of a factory.
|
||||||
if (Info.SearchOnCreation)
|
if (Info.SearchOnCreation)
|
||||||
@@ -212,12 +221,27 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public bool IsEmpty { get { return contents.Values.Sum() == 0; } }
|
public bool IsEmpty { get { return contents.Values.Sum() == 0; } }
|
||||||
public int Fullness { get { return contents.Values.Sum() * 100 / Info.Capacity; } }
|
public int Fullness { get { return contents.Values.Sum() * 100 / Info.Capacity; } }
|
||||||
|
|
||||||
public void AcceptResource(ResourceType type)
|
void UpdateCondition(Actor self)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Info.EmptyCondition) || conditionManager == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var enabled = IsEmpty;
|
||||||
|
|
||||||
|
if (enabled && conditionToken == ConditionManager.InvalidConditionToken)
|
||||||
|
conditionToken = conditionManager.GrantCondition(self, Info.EmptyCondition);
|
||||||
|
else if (!enabled && conditionToken != ConditionManager.InvalidConditionToken)
|
||||||
|
conditionToken = conditionManager.RevokeCondition(self, conditionToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AcceptResource(Actor self, ResourceType type)
|
||||||
{
|
{
|
||||||
if (!contents.ContainsKey(type.Info))
|
if (!contents.ContainsKey(type.Info))
|
||||||
contents[type.Info] = 1;
|
contents[type.Info] = 1;
|
||||||
else
|
else
|
||||||
contents[type.Info]++;
|
contents[type.Info]++;
|
||||||
|
|
||||||
|
UpdateCondition(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UnblockRefinery(Actor self)
|
public void UnblockRefinery(Actor self)
|
||||||
@@ -307,6 +331,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
contents.Remove(type);
|
contents.Remove(type);
|
||||||
|
|
||||||
currentUnloadTicks = Info.BaleUnloadDelay;
|
currentUnloadTicks = Info.BaleUnloadDelay;
|
||||||
|
UpdateCondition(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
return contents.Count == 0;
|
return contents.Count == 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user