Remove INotifyBuildComplete from ConyardChronoReturn.

This commit is contained in:
Paul Chote
2018-10-27 12:04:04 +00:00
committed by abcdefg30
parent ae3bfb73a1
commit 78a2d9aa23
3 changed files with 28 additions and 24 deletions

View File

@@ -12,19 +12,19 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using OpenRA.GameRules;
using OpenRA.Mods.Common; using OpenRA.Mods.Common;
using OpenRA.Mods.Common.Traits; using OpenRA.Mods.Common.Traits;
using OpenRA.Mods.Common.Traits.Render; using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Primitives; using OpenRA.Primitives;
using OpenRA.Support;
using OpenRA.Traits; using OpenRA.Traits;
namespace OpenRA.Mods.Cnc.Traits namespace OpenRA.Mods.Cnc.Traits
{ {
[Desc("Implements the special case handling for the Chronoshiftable return on a construction yard.", [Desc("Implements the special case handling for the Chronoshiftable return on a construction yard.",
"Actors that are actively (un)deploying will be returned to the origin as the original actor.", "If ReturnOriginalActorOnCondition evaluates true and the actor is not being sold then OriginalActor will be returned to the origin.",
"Otherwise, a vortex animation is played and damage is dealt each tick, ignoring modifiers.")] "Otherwise, a vortex animation is played and damage is dealt each tick, ignoring modifiers.")]
public class ConyardChronoReturnInfo : ITraitInfo, Requires<HealthInfo>, Requires<WithSpriteBodyInfo> public class ConyardChronoReturnInfo : IObservesVariablesInfo, Requires<HealthInfo>, Requires<WithSpriteBodyInfo>
{ {
[Desc("Sequence name with the baked-in vortex animation"), SequenceReference] [Desc("Sequence name with the baked-in vortex animation"), SequenceReference]
public readonly string Sequence = "pdox"; public readonly string Sequence = "pdox";
@@ -42,7 +42,12 @@ namespace OpenRA.Mods.Cnc.Traits
[Desc("Apply the damage using these damagetypes.")] [Desc("Apply the damage using these damagetypes.")]
public readonly BitSet<DamageType> DamageTypes = default(BitSet<DamageType>); public readonly BitSet<DamageType> DamageTypes = default(BitSet<DamageType>);
[Desc("Actor to transform into when the timer expires during (un)deploy."), ActorReference] [ConsumedConditionReference]
[Desc("Boolean expression defining the condition under which to teleport a replacement actor instead of triggering the vortex.")]
public readonly BooleanExpression ReturnOriginalActorOnCondition = null;
[ActorReference(typeof(MobileInfo))]
[Desc("Replacement actor to create when ReturnOriginalActorOnCondition evaluates true.")]
public readonly string OriginalActor = "mcv"; public readonly string OriginalActor = "mcv";
[Desc("Facing of the returned actor.")] [Desc("Facing of the returned actor.")]
@@ -56,8 +61,8 @@ namespace OpenRA.Mods.Cnc.Traits
public object Create(ActorInitializer init) { return new ConyardChronoReturn(init, this); } public object Create(ActorInitializer init) { return new ConyardChronoReturn(init, this); }
} }
public class ConyardChronoReturn : INotifyCreated, ITick, ISync, ISelectionBar, IDeathActorInitModifier, public class ConyardChronoReturn : INotifyCreated, ITick, ISync, IObservesVariables, ISelectionBar, INotifySold,
ITransformActorInitModifier, INotifyBuildComplete, INotifySold, INotifyTransform IDeathActorInitModifier, ITransformActorInitModifier
{ {
readonly ConyardChronoReturnInfo info; readonly ConyardChronoReturnInfo info;
readonly WithSpriteBody wsb; readonly WithSpriteBody wsb;
@@ -70,7 +75,7 @@ namespace OpenRA.Mods.Cnc.Traits
Actor chronosphere; Actor chronosphere;
int duration; int duration;
bool buildComplete; bool returnOriginal;
bool selling; bool selling;
[Sync] [Sync]
@@ -110,6 +115,17 @@ namespace OpenRA.Mods.Cnc.Traits
conditionManager = self.TraitOrDefault<ConditionManager>(); conditionManager = self.TraitOrDefault<ConditionManager>();
} }
IEnumerable<VariableObserver> IObservesVariables.GetVariableObservers()
{
if (info.ReturnOriginalActorOnCondition != null)
yield return new VariableObserver(ReplacementConditionChanged, info.ReturnOriginalActorOnCondition.Variables);
}
void ReplacementConditionChanged(Actor self, IReadOnlyDictionary<string, int> conditions)
{
returnOriginal = info.ReturnOriginalActorOnCondition.Evaluate(conditions);
}
void TriggerVortex() void TriggerVortex()
{ {
if (conditionManager != null && !string.IsNullOrEmpty(info.Condition) && conditionToken == ConditionManager.InvalidConditionToken) if (conditionManager != null && !string.IsNullOrEmpty(info.Condition) && conditionToken == ConditionManager.InvalidConditionToken)
@@ -194,7 +210,7 @@ namespace OpenRA.Mods.Cnc.Traits
if (returnTicks <= 0 || --returnTicks > 0) if (returnTicks <= 0 || --returnTicks > 0)
return; return;
if (!buildComplete && !selling) if (returnOriginal && !selling)
ReturnToOrigin(); ReturnToOrigin();
else else
TriggerVortex(); TriggerVortex();
@@ -228,26 +244,12 @@ namespace OpenRA.Mods.Cnc.Traits
void IDeathActorInitModifier.ModifyDeathActorInit(Actor self, TypeDictionary init) { ModifyActorInit(init); } void IDeathActorInitModifier.ModifyDeathActorInit(Actor self, TypeDictionary init) { ModifyActorInit(init); }
void ITransformActorInitModifier.ModifyTransformActorInit(Actor self, TypeDictionary init) { ModifyActorInit(init); } void ITransformActorInitModifier.ModifyTransformActorInit(Actor self, TypeDictionary init) { ModifyActorInit(init); }
void INotifyBuildComplete.BuildingComplete(Actor self)
{
buildComplete = true;
}
void INotifySold.Sold(Actor self) { } void INotifySold.Sold(Actor self) { }
void INotifySold.Selling(Actor self) void INotifySold.Selling(Actor self)
{ {
buildComplete = false;
selling = true; selling = true;
} }
void INotifyTransform.BeforeTransform(Actor self)
{
buildComplete = false;
}
void INotifyTransform.OnTransform(Actor self) { }
void INotifyTransform.AfterTransform(Actor self) { }
// Show the remaining time as a bar // Show the remaining time as a bar
float ISelectionBar.GetValue() float ISelectionBar.GetValue()
{ {

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules
get get
{ {
return "Traits are no longer force-disabled while the WithMakeAnimation trait is active.\n" + return "Traits are no longer force-disabled while the WithMakeAnimation trait is active.\n" +
"This affects the With*Animation, With*Overlay, and Gate traits.\n" + "This affects the With*Animation, With*Overlay, Gate, and ConyardChronoReturn traits.\n" +
"Affected actors are listed so that conditions may be manually defined."; "Affected actors are listed so that conditions may be manually defined.";
} }
} }
@@ -51,7 +51,8 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules
"WithDeliveryAnimation", "WithDeliveryAnimation",
"WithCrumbleOverlay", "WithCrumbleOverlay",
"WithDeliveryOverlay", "WithDeliveryOverlay",
"Gate" "Gate",
"ConyardChronoReturn"
}; };
readonly Dictionary<string, List<string>> locations = new Dictionary<string, List<string>>(); readonly Dictionary<string, List<string>> locations = new Dictionary<string, List<string>>();

View File

@@ -1162,6 +1162,7 @@ FACT:
TopLeft: -1536, -1536 TopLeft: -1536, -1536
BottomRight: 1536, 1536 BottomRight: 1536, 1536
ConyardChronoReturn: ConyardChronoReturn:
ReturnOriginalActorOnCondition: build-incomplete
Condition: chrono-vortex Condition: chrono-vortex
Damage: 950 Damage: 950
TransferTimedExternalConditionOnTransform: TransferTimedExternalConditionOnTransform: