private void ReplayActor(Actor actor, ActorData data, int startTime) { if (data.Variables != null) { foreach (var variableData in data.Variables) { var variable = actor.GetVariable(variableData.Id); if (variable == null) { throw new InvalidOperationException("Missing variable"); } ReplayVariable(variable, variableData, startTime); } } if (data.EndTime > 0 && actor.EndTime < 0) { RemoveActor(actor, data.EndTime); } }
private ActorData RecordActor(Actor actor) { var data = new ActorData() { Id = actor.Id, StartTime = actor.StartTime, EndTime = actor.EndTime, Variables = (from variable in actor.Variables select RecordVariable(variable) into variableData where variableData != null select variableData).ToArray(), }; if (actor.StartTime >= Scene.ElapsedTime) { data.Definitions = (from variable in actor.Variables select DefineVariable(variable)).ToArray(); } return((data.StartTime >= Scene.ElapsedTime || data.EndTime >= Scene.ElapsedTime || data.Variables.Length > 0) ? data : null); }
private Actor CreateActor(ActorData data) { var actor = AddActor(data.Id, data.StartTime); if (data.Definitions != null) { foreach (var definition in data.Definitions) { switch (definition.Type) { case VariableType.VBoolean: AddBoolean(actor, definition.Id); break; case VariableType.VInt16: AddInt16(actor, definition.Id); break; case VariableType.VInt32: AddInt32(actor, definition.Id); break; case VariableType.VInt64: AddInt64(actor, definition.Id); break; case VariableType.VFloat: AddFloat(actor, definition.Id); break; default: throw new NotSupportedException("VariableType"); } } } return(actor); }