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); } }