Replace IActorInit with an abstract class.

A shared ValueActorInit<T> is introduced to reduce duplication
in the most common init cases, and an ActorInitActorReference
allow actors to be referenced by map.yaml name.
This commit is contained in:
Paul Chote
2020-06-02 19:37:18 +01:00
committed by teinarss
parent 4df5ac0385
commit b38018af9c
28 changed files with 365 additions and 306 deletions

View File

@@ -80,7 +80,7 @@ namespace OpenRA.Mods.Common.Traits
},
(actor, value) =>
{
actor.ReplaceInit(new DeployStateInit(value ? DeployState.Deployed : DeployState.Undeployed));
actor.ReplaceInit(new DeployStateInit(this, value ? DeployState.Deployed : DeployState.Undeployed));
});
}
@@ -337,12 +337,12 @@ namespace OpenRA.Mods.Common.Traits
}
}
public class DeployStateInit : IActorInit<DeployState>
public class DeployStateInit : ValueActorInit<DeployState>
{
[FieldFromYamlKey]
readonly DeployState value = DeployState.Deployed;
public DeployStateInit() { }
public DeployStateInit(DeployState init) { value = init; }
public DeployState Value { get { return value; } }
public DeployStateInit(TraitInfo info, DeployState value)
: base(info, value) { }
public DeployStateInit(DeployState value)
: base(value) { }
}
}