protected override void Execute(List <TimeEntity> entities) { foreach (LogicEntity e in _LogicContext.GetEntities()) { e.isDestroyed = true; } Contexts.sharedInstance.input.commandList.commands.Clear(); _timeContext.logicSystem.system.Initialize(); int currentInputFrame = 0; for (int i = 0; i <= _timeContext.jumpInTime.targetTick; i++) { _timeContext.ReplaceTick(i); foreach (InputEntity e in _inputSources) { e.controllerInput.snapshot.Reset(); e.ReplaceControllerInput(e.controllerInput.snapshot); e.isValidInput = false; } if (currentInputFrame < Contexts.sharedInstance.input.inputHistory.snapshots.Count) { for (int j = currentInputFrame; j < Contexts.sharedInstance.input.inputHistory.snapshots.Count; j++) { StoredInput nextInput = _inputContext.inputHistory.snapshots[j]; if (nextInput.tick == i) { foreach (InputEntity e in _inputContext.GetEntitiesWithControllerID(nextInput.playerID)) { InputSnapshot s = new InputSnapshot(); s.Copy(nextInput.snapshot); e.ReplaceControllerInput(s); e.isValidInput = true; } } else if (nextInput.tick > i) { currentInputFrame = j; break; } } _timeContext.logicSystem.system.Execute(); _timeContext.logicSystem.system.Cleanup(); } } }
protected override void Execute(List <TimeEntity> entities) { return; if (_movers.count == 0) { return; } while (futureMovements.Count > _movers.count) { GameObject go = futureMovements[0].gameObject; futureMovements.RemoveAt(0); GameObject.Destroy(go); } while (futureMovements.Count < _movers.count) { LineRenderer lr = new GameObject("future move").AddComponent <LineRenderer> (); lr.positionCount = FUTURE_FRAMES; lr.startWidth = 0.1f; lr.endWidth = 0.1f; futureMovements.Add(lr); } // _timeContext.logicSystem.system.Initialize (); LogicContext gc = new LogicContext(); foreach (LogicEntity e in _LogicContext.GetEntities()) { gc.CloneEntity(e, true, e.GetComponentIndices()); } for (int i = 0; i < FUTURE_FRAMES; i++) { _timeContext.ReplaceTick(_timeContext.tick.value++); foreach (InputEntity e in _inputSources) { e.ReplaceControllerInput(e.controllerInput.snapshot); } _timeContext.logicSystem.system.Execute(); _timeContext.logicSystem.system.Cleanup(); int j = 0; foreach (LogicEntity mover in _movers) { futureMovements[j].SetPosition(i, new Vector3( mover.position.value.x.ToFloat(), mover.position.value.y.ToFloat(), 0 )); j++; } } foreach (LogicEntity e in _LogicContext.GetEntities()) { e.isDestroyed = true; } _timeContext.logicSystem.system.Execute(); _timeContext.logicSystem.system.Cleanup(); foreach (LogicEntity ge in gc.GetEntities()) { _LogicContext.CloneEntity(ge, true, ge.GetComponentIndices()); } foreach (InputEntity e in _inputSources) { e.ReplaceControllerInput(e.controllerInput.snapshot); } }