protected void RecoverSnapshot(SimulatorSnapshot snapshot) { Scene.OnSnapshotRecovered(new SceneSnapshot() { Actors = new List <ActorId>(from actorSnapshot in snapshot.Actors select actorSnapshot.Desc.Id) }); foreach (var actorSnapshot in snapshot.Actors) { var actor = GetActor(actorSnapshot.Desc.Id); if (actor == null) { actor = CreateActor(actorSnapshot.Desc); } actor.OnSnapshotRecovered(actorSnapshot.Args); } }
ISnapshotArgs ISnapshotArgs.Interpolate(ISnapshotArgs snapshot, float factor) { var otherSnapshot = (SimulatorSnapshot)snapshot; var newSnapshot = new SimulatorSnapshot(); foreach (var selfActor in Actors) { var otherActor = otherSnapshot.Actors.Find(a => a.Desc.Id == selfActor.Desc.Id); if (otherActor != null) { var newActor = selfActor.Args.Interpolate(otherActor.Args, factor); newSnapshot.Actors.Add(new ActorSnapshot(selfActor.Desc, newActor)); } else { newSnapshot.Actors.Add(new ActorSnapshot(selfActor.Desc, selfActor.Args.Clone())); } } return(newSnapshot); }