public SnapshotSerializer( IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository, ILog log) { _stateHolder = stateHolder; _repository = repository; _log = log.CreateComponentScope($"{nameof(SnapshotSerializer<TState>)}[{_stateHolder.GetType().Name}]"); }
public NPCBaseState(GameObject npc) { this.npc = npc; steer = npc.GetComponent <ContextSteering>(); if (steer is null) { throw new UnassignedReferenceException("NPC must have a ContextSteering component"); } stateController = npc.GetComponent <IHaveState>(); if (stateController is null) { throw new UnassignedReferenceException("NPC must have component implementing IHaveState"); } }
private async Task <bool> DeserializeAsync <TState>(ILog log, IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository) { await log.WriteInfoAsync(nameof(DeserializeAsync), "", "Loading state..."); var state = await repository.TryGetAsync(); if (state == null) { await log.WriteWarningAsync("SnapshotSerializer", nameof(DeserializeAsync), stateHolder.GetType().Name, "No snapshot found to deserialize"); return(false); } string stateDescription; try { stateDescription = stateHolder.DescribeState(state); } catch (NotSupportedException) { await log.WriteWarningAsync(nameof(DeserializeAsync), "", "Not supported, skipping"); return(false); } await log.WriteInfoAsync(nameof(DeserializeAsync), stateDescription, "Settings state..."); try { stateHolder.SetState(state); } catch (NotSupportedException) { await log.WriteWarningAsync(nameof(DeserializeAsync), "", "Not supported, skipping"); return(false); } await log.WriteInfoAsync(nameof(DeserializeAsync), "", "State was set"); return(true); }
private static async Task SerializeAsync <TState>(ILog log, IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository) { log.Info(nameof(SerializeAsync), "Gettings state..."); TState state; try { state = stateHolder.GetState(); } catch (NotSupportedException) { log.Warning(nameof(SerializeAsync), "Not supported, skipping"); return; } log.Info(nameof(SerializeAsync), "Saving state...", stateHolder.DescribeState(state)); await repository.SaveAsync(state); log.Info(nameof(SerializeAsync), "State saved"); }
public async Task <bool> DeserializeAsync <TState>(IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository) { return(await DeserializeAsync(_log.CreateComponentScope($"{nameof(SnapshotSerializer)}[{stateHolder.GetType().Name}]"), stateHolder, repository)); }
public async Task SerializeAsync <TState>(IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository) { await SerializeAsync(_logFactory.CreateLog($"{nameof(SnapshotSerializer)}[{stateHolder.GetType().Name}]"), stateHolder, repository); }
public UpdateByState(IHaveState gameOjbect) => this.gameOjbect = gameOjbect;