ืืื, ืื ื Nikita Brizhak, ืืคืชืืช ืฉืจืชืื ืืืืช Pixonic. ืืืื ืื ื ืจืืฆื ืืืืจ ืขื ืคืืฆืื ืขื ืคืืืืจ ื-Multiplayer ื ืืื.
ืืืืจืื ืจืืื ื ืืชืื ืขื ืคืืฆืื ืขื ืคืืืืจ ืืฉืจืช, ืืืื ืืจืืกืืช. ืื ืื ืืคืชืืข, ืืืืืื ืฉืืื ืืืืืื ืื ืฉืืืฉื ืืืืคื ืคืขืื ืืืฆืืจืช FPS ืืจืืื ืืฉืชืชืคืื ืืื ืกืืฃ ืฉื ืืช ื-90. ืืืืืื, ืืชื ืืืื ืืืืืจ ืืช ืืืื QuakeWorld, ืฉืืื ืืื ืืจืืฉืื ืื ืืืฉืชืืฉ ืื.
ืื ื ืืฉืชืืฉืื ืื ืื ืืืจืืืช ืืจืืื ืืฉืชืชืคืื ืื ืืื ืฉืื ื Dino Squad.
ืืืืืจ ืื, ืืืืจื ืฉืื ืืื ืื ืืืืืจ ืขื ืื ืฉืืืจ ื ืืชื ืืืฃ ืคืขืืื, ืืื ืืกืคืจ ืืื ืืืืขื ื ืคืืฆืื ืคืืืืจ ืืืฉืืง ืฉืื ื, ืชืื ืืชืืฉืืืช ืืขืจืืืช ืืืื ืืืืืื ืฉืื ื ืืชืืื ืืช ืืืืื ืฉื ืืืฉืืง.
ืืื ืืืืื ืขื ืืงืืจืืงืก ืืืืื ืืืืืื ืฉืื ื.
Dino Squad ืืื ืืืจื PvP ื ืืื ืืจืฉืช. ืฉืืงื ืื ืฉืืืืื ืืืื ืืืืืจืื ืืืฆืืืืื ืืืืืื ืืื ื ืฉืง ืื ืืืืื ืื ืืื ืืงืืืฆืืช 6 ื ืื 6.
ืื ืืืงืื ืืื ืืฉืจืช ืืืืกืกืื ืขื Unity. ืืืจืืืืงืืืจื ืื ืงืืืกืืช ืขืืืจ ืืืจืื: ืืฉืจืช ืกืืืืชื, ืืืืืื ืืงืื ืขืืื ืขื ืืืงืืืืช. ืืืืืืช ืืืฉืืง ื ืืชืืช ืืืืฆืขืืช ECS ืคื ืืืืช ืืืฉืืฉืช ืื ืืฉืจืช ืืื ืืืงืื.
ืื ืื ืืคืขื ืืจืืฉืื ื ืฉืฉืืขืชื ืขื ืคืืฆืืื ืคืืืืจ, ืื ื ืกืืืจ ืงืฆืจ ืื ืืฉื.
ืืืฉืืงื FPS ืืจืืื ืืฉืชืชืคืื, ืืืฉืืง ืืืืื ืืืจื ืืื ืืฉืจืช ืืจืืืง. ืฉืืงื ืื ืฉืืืืื ืืช ืืงืื ืฉืืื (ืืืืข ืขื ืืืงืฉืื ืฉื ืืืฆื) ืืฉืจืช, ืืืชืืืื ืืฉืจืช ืฉืืื ืืื ืืฆื ืืฉืืง ืืขืืืื ืชืื ืืชืืฉืืืช ืื ืชืื ืื ืฉืืชืงืืื. ืขื ืกืืืืช ืืื ืืจืืงืฆืื ืื, ืืืฉืืื ืืื ืืืืฆื ืขื ืืงืฉ ืงืืืื ืืจืืข ืฉืืืืช ืืฉืืงื ื ืขื ืขื ืืืกื ืชืืื ืชืืื ืืืืื ืืืชืจ ืืืคืื ื.
ืืขืื ืฉืืจืฉืชืืช ืืงืืืืืช ืืขืืืื ืืื (ืื ืงืจื ืืคืืคืืืืจืืืช ื-input lag) ืขืฉืื ืืืืืช ืืืชื ืืืจืืฉ, ืืืฉืจ ืืฉืืง ืืจื ืืืื ืืจื ื ืืื ืืืฆืจ ืชืืืฉื ืฉื "ืืืืงื ืขื ืืงืจื" ืืขืช ืฉืืืื ืืืืืช. ืืขืื ืื ืจืืืื ืืืช ืืคืืืื ืืจืฉืชืืช ืกืืืืจืืืช, ืืืฉืจ ืืืงืจื ืฉืื ืืคืื ื ืฉื ืฉืืงื ืืื 200 ืืืคืืืช ืืฉื ืืื ืขืืืื ื ืืฉื ืืืืืืจ ืืฆืืื. ืืขืชืื ืงืจืืืืช ืืคืื ื ืืืื ืืืืืช 350, 500 ืื 1000 ืืืคืืืช ืืฉื ืืื. ืื ืื ืืืคื ืืืืืช ืืืขื ืืืชื ืืคืฉืจื ืืฉืืง ืืืจื ืืืืจ ืขื ืืฉืืืืช ืงืื.
ืืคืชืจืื ืืืขืื ืื ืืื ืืืืื ืกืืืืืฆืื ืืฆื ืืืงืื. ืืื ืืืงืื ืขืฆืื ืืืื ืืช ืืงืื ืขื ืืืืช ืืฉืืงื, ืืืื ืืืืืช ืืชืืืื ืืืฉืจืช. ืืืฉืืชืฉืืื ืืชืงืืืช, ืืื ืคืฉืื ืืฉืืื ืืช ืืชืืฆืืืช ืืืขืืื ืืช ืขืืืืช ืืืจืืืื. ืืืฉืืื ืืื ืืืืฆื ืขื ืืงืฉ ืืืฆืืช ืืชืืฆืื ืขื ืืืกื ืืืงืจื ืื ืืื ืืื ืืืืืช.
ืืฉืื ืืืืื ืืช ืื ืืืื ืก ืืื: ืืืงืื ืชืืื ืฉืืื ืืช ืขืฆืื ืืคื ืืงืื ืืืืจืื ืฉืื, ืืืืืืื - ืขื ืขืืืื ืืจืฉืช, ืืคื ืืืฆื ืืงืืื ืืื ืชืื ืื ืืืฉืจืช. ืืืืืจ, ืืืฉืจ ืืืจืื ืขื ืืืื, ืืฉืืงื ืจืืื ืืืชื ืืขืืจ ืืืกืืช ืืขืฆืื. ืขืื ืขื ืืืืื ืืงืื
ืืคืืื, ืืืืื ืืงืื ืคืืชืจืช ืืขืื ืืืช, ืื ืืืฆืจืช ืืขืื ืืืจืช: ืื ืฉืืงื ืืืจื ืื ืงืืื ืฉืื ืืื ืืืืื ืืขืืจ, ืืฉืจืช ืืฉืืื ืืืจื ืืืืชื ื ืงืืื, ืืืชืื ืฉืืืืื ืืืจ ืื ื ืืฆื ืืืงืื ืืื. ืคืืฆืื ืขื ืคืืืืจ ืฉืจืช ืื ืกื ืืคืชืืจ ืืขืื ืื. ืืืฉืจ ื ืืจื ื ืฉืง, ืืฉืจืช ืืฉืืืจ ืืช ืืฆื ืืืฉืืง ืฉืืฉืืงื ืจืื ืืืงืื ืืืื ืืืจืืื, ืืืืืง ืืื ืืื ืืืืช ืืืื ืืื ืืคืืืข ืืืืื. ืื ืืชืฉืืื ืืื "ืื", ืืคืืืขื ื ืกืคืจืช, ืื ืื ืืืืื ืืืจ ืื ื ืืฆื ืืฉืจืช ืืืืชื ื ืงืืื.
ืืืืฉืื ืืืืข ืืื, ืืชืืื ื ืืืืฉื ืคืืฆืื ืืืืืจ ืืฉืจืช ื-Dino Squad. ืงืืื ืื, ืืืื ื ืฆืจืืืื ืืืืื ืืื ืืฉืืืจ ืืฉืจืช ืืช ืื ืฉืืืงืื ืจืื? ืืื ืืืืืง ืฆืจืื ืืฉืืืจ? ืืืฉืืง ืฉืื ื, ืคืืืขืืช ืืืื ื ืฉืง ืืืืืืืช ืืืืฉืืืช ืืืืฆืขืืช ืืงืจื ืืช ืืฉืืืืช-ืขื - ืืืืืจ, ืืืืฆืขืืช ืืื ืืจืืงืฆืืืช ืขื ืืืชื ืืฉืื ืืคืืืืื ืฉื ืืืืื. ืืืชืื ืืื, ืืืื ื ืฆืจืืืื ืืฉืืืจ ืืช ืืืืงืื ืฉื ืืืชื ืืฉืื ืืืื, ืฉืืฉืืงื "ืจืื" ืืืืคื ืืงืืื, ืืฉืจืช. ืืืืชื ืืื ืืฉืชืืฉื ื ืืืจืกืช Unity 2018.x. ื-API ืฉื ืืคืืืืงื ืฉื ืืื ืกืืื, ืืขืืื ืืคืืื ืงืืื ืืขืืชืง ืืืื. ืืื ืืจื ืืฉืืืจ ืืช ืืืฆื ืฉืื ืืื ืืฉืืืจ ืืืชื ืืืงืืคืกื. ืื ืื ืืขืฉืืช?
ืืคืชืจืื ืืื ืขื ืคื ื ืืฉืื; ืื ืืืืื ืืื ืฉืื ืืืจ ืฉืืืฉื ืืืชื ื ืืคืชืจืื ืืขืืืช ืืืจืืช:
- ืขืืืจ ืื ืืงืื, ืื ืื ื ืฆืจืืืื ืืืขืช ืืืืื ืฉืขื ืืื ืจืื ืืจืืืื ืืฉืืื ืืืฅ ืขื ืืืงืฉืื. ืืืจ ืืชืื ื ืืช ืืืืืข ืืื ืืืืืืช ืืงืื ืืืฉืชืืฉื ื ืื ืืื ืืืชืืื ืืช ืืืืื ืืืงืื.
- ืื ืื ื ืฆืจืืืื ืืืืืช ืืกืืืืื ืืืืกื ืืช ืืืืกืืืจืื ืฉื ืืฆืื ืืืฉืืง. ืื ื ืืืืง ืืขืืืืช ืืจืืืื ื (ืืืื ืืืชื ืืฉืื ืฉืืื). ืืืจ ืืืืชื ืื ื ืืืกืืืจืืืช ืืฆื ืืฉืจืช, ืืฉืชืืฉื ื ืื ืืื ืืื ืืช
ืืืชืืช . ืืืืืขื ืฉื ืืืื ืื ืืื, ื ืืื ืืืฆืื ืืงืืืช ืืช ืืืฆื ืื ืืื ืืืืกืืืจืื. - ืขืืฉืื ืืฉืืฉ ืื ื ืืช ืืฆื ืืืฉืืง ืืืืืกืืืจืื ืืื, ืื ืื ื ืฆืจืืืื ืืืืืช ืืกืืืืื ืืกื ืืจื ืืช ื ืชืื ื ืืฉืืงื ืื ืขื ืืืฆื ืฉื ืืขืืื ืืคืืื. ืืชื ืืฉืื ืงืืืืื - ืืืื, ืืกืจืื - ืืืฆืจืื, ืืืืชืจืื - ืืืจืกืื. ืื ืืืืืืื ืืื ืืืจ ื ืืชื ืืืืจืื ืืืื ืืขืจืืืช ECS. ืืฉืชืืฉื ื ืื ืืื ืืืืืืง ืืื ืืืจื ืืฉืืงืื ืืชืืืื ืืื ืฉื Unity. ืืืืืืื ืฉืืขืืื ืืคืืื ืืื ืืื ืืื ืชืืืื, ืืื ืฆืืจื ืืขืฉืืช ืื ืฉืืืืฉ ืืืืจ ืืื ืืืืจืื. ืืคื ื ืื ืกืืืื ืฉื ืืกืืืืืฆืื, "ืืืคืกื ื" ืืช ืืฆื ืืขืืื ืืคืืื ืืืชืืื ื ืืืชื ืืืืฉ ืื ืชืื ืื ืขืืืจ ืืืืจ ืื ืืืื, ืชืื ื ืืกืืื ืืขืฉืืช ืฉืืืืฉ ืืืืจ ืืืืืืืงืื ืืฉืืง Unity ืืื ืืืคืฉืจ ืืืืฆืขืืช ืืขืจืืช ืืืืื ืืืื. ืื ืฉื ืืชืจ ืืื ืืืคืขืื ืืช ืืืชื ืืืืืื ืขืืืจ ืืฆื ืืืฉืืง ืืืขืืจ.
ืขื ืืื ืืืืืจ ืื ืืืืื ืืื ืืืื, ืงืืืื ื "ืืืื ืช ืืื" ืฉืืืืื ืืืืืืจ ืืช ืืฆื ืืขืืื ืืคืืื ืืืืืจ ืืจืืข ืื ืืื. ืืงืื ืืชืืจืจ ืืคืฉืื:
public class TimeMachine : ITimeMachine
{
//ะััะพัะธั ะธะณัะพะฒัั
ัะพััะพัะฝะธะน
private readonly IGameStateHistory _history;
//ะขะตะบััะตะต ะธะณัะพะฒะพะต ัะพััะพัะฝะธะต ะฝะฐ ัะตัะฒะตัะต
private readonly ExecutableSystem[] _systems;
//ะะฐะฑะพั ัะธััะตะผ, ัะฐัััะฐะฒะปัััะธั
ะบะพะปะปะฐะนะดะตัั ะฒ ัะธะทะธัะตัะบะพะผ ะผะธัะต
//ะฟะพ ะดะฐะฝะฝัะผ ะธะท ะธะณัะพะฒะพะณะพ ัะพััะพัะฝะธั
private readonly GameState _presentState;
public TimeMachine(IGameStateHistory history, GameState presentState, ExecutableSystem[] timeInitSystems)
{
_history = history;
_presentState = presentState;
_systems = timeInitSystems;
}
public GameState TravelToTime(int tick)
{
var pastState = tick == _presentState.Time ? _presentState : _history.Get(tick);
foreach (var system in _systems)
{
system.Execute(pastState);
}
return pastState;
}
}
ืื ืฉื ืืชืจ ืืื ืืืืื ืืื ืืืฉืชืืฉ ืืืืื ื ืืื ืืื ืืคืฆืืช ืืงืืืช ืขื ืืจืืืช ืืืืืืืช.
ืืืงืจื ืืคืฉืื ืืืืชืจ, ืืืฉืจ ืืืื ืืงื ืืืืกืกืช ืขื ืกืจืืงืช ืืื ืืืืืช, ื ืจืื ืฉืืื ืืจืืจ: ืืคื ื ืฉืืฉืืงื ืืืจื, ืืื ืฆืจืื ืืืืืืจ ืืช ืืขืืื ืืคืืื ืืืฆื ืืจืฆืื, ืืืฆืข raycast, ืืกืคืืจ ืืช ืืคืืืขื ืื ืืืืฆื, ื ืืืืืืจ ืืช ืืขืืื ืืืฆื ืืืชืืืชื.
ืืื ืืฉ ืืขื ืืืื ืืืื ืืื ืืืื ื-Dino Squad! ืจืื ืืื ืื ืฉืง ืืืฉืืง ืืืฆืจืื ืงืืืขืื - ืืืืจืื ืืจืืืื ืฉืขืคืื ืืืกืคืจ ืชืงืืืช ืกืืืืืฆืื (ืืืงืจืื ืืกืืืืื, ืขืฉืจืืช ืืืงืื). ืื ืืขืฉืืช ืืืชื, ืืืืื ืฉืขื ืื ืฆืจืืืื ืืืืก?
ะ
ืื ืืืืชื ืื ื ืืคืฉืจืืช ืื: ืืื ื ืฉืง ืืืืกืกื ืงืืืขืื ืืื ืชืืื ื ืืจืืืืช ืืขืืฆืื ืืืฉืืง. ืื ืืืื ื ืฆืจืืืื ืืืืฆืื ืืฉืื. ืืืืจ ืกืืขืืจ ืืืืืช, ืืืืฉื ื ืฉืชื ืืคืฉืจืืืืช ืฉื ืจืื ืฉืขืืื:
1. ืื ืื ื ืงืืฉืจืื ืืช ืืงืืืข ืืืื ืฉื ืืฉืืงื ืฉืืฆืจ ืืืชื. ืื ืกืืืื ืฉื ืกืืืืืฆืืืช ืืฉืจืช, ืขืืืจ ืื ืืืืจ ืฉื ืื ืฉืืงื, ืื ื ืืืืืจืื ืืช ืืขืืื ืืคืืื ืืืฆื ืืืงืื ืืืืฆืขืื ืืช ืืืืฉืืืื ืืืจืืฉืื. ืืืฉื ืื ืืคืฉืจื ืขืืืก ืืืืืจ ืขื ืืฉืจืช ืืืื ืืืกื ืฆืคืื ืฉื ืงืืืขืื. ืืืืื ืืื ืืฉืื ืืืืืื ืขืืืจื ื, ืืืืืื ืฉืืฉ ืื ื ืืช ืื ืืงืืืขืื, ืืืื ืงืืืขื ืืืืื, ืืืืืื ืขื ืืืงืื.
ืืชืืื ื, ืืฉืืงื ืืกืืืื 30 ืืืจื ืืื ืืฆืืคืืื: ืืื ืจืืื ืืืืื ืืืืื ืืืืื ืจืฅ ืืืืืข ืืช ืืืืืจืืช ืืืฉืืขืจืช ืฉื ืืืื. ืืงืืืืช ืืื ืจืืื ืฉืคืืข ืืืืจื ืืกืืืื ื-33. ืืืืืช ืืคืืฆืื ืคืืืืจ, ืืื ืืืคืืข ืื ืืฉืจืช
2. ืื ืื ื ืขืืฉืื ืืื ืืื ืืืืคืฆืื ืืจืืฉืื ื, ืืื ืืืจื ืฉืกืคืจื ื ืกืืืื ืืื ืฉื ืืืืืืช ืืงืืืข, ืื ืื ื ืื ืขืืฆืจืื, ืืื ืืืฉืืืื ืืืืืช ืืช ืืืืกื ืฉืื ืืชืื ืืืชื ืกืืืื ืฉืจืช, ืื ืคืขื ืืงืจืืื ืืช ืืืื ืฉืื ืืฉืจืช ืกืืืื ืืื ืืื ืืขืืืื ืขืืืืช ืืชื ืืฉืื. ืื ื ืขืืฉืื ืืืช ืขื ืฉืืื ืืฉื ื ืืืจืื ืงืืจื:
- ืคื ืชืืงืฃ ืืืืืจ. ืื ืืืืจ ืฉืืืืฉืืืื ืืกืชืืืื, ืื ืื ื ืืืืืื ืืกืคืืจ ืืืืฆื ืื ืืื. ืืื ืืืืชื ืงืจืฆืื ืื ื ืืจืชื ืืืจืืื! ืขืืืจื ื ืื ืืื ืื ืคืืืก ืืื ืืื ืืก. ืืชืจืื - ืื ืขืืืจ ืืฉืืงื ืืืืจื ืื ืืคืืืช ืืฉืืขืืชืืช ืืช ืืขืืืื ืืื ืืคืืืขื ืืืจืืื ืืืจืืืืช ืืืืื. ืืืืกืจืื ืืื ืฉืืืชื ืืคืงื ื ืฆืคื ืืืฉืจ ืืจืืืื ืืจื ืืขืืจ ืืฉืืงื: ืืืืื, ืื ื ืจืื, ืจืง ืืจื ืจืงืื ืืืืืช, ืืื ืืง ืืืจ ื ืกืคืจ.
- ืืงืืืข ืืืืข ืืืื ืืฉืจืช. ืืืงืจื ืื, ืืกืืืืืฆืื ืฉืื ืชืืฉืื ืืชืืงืืช ืืฉืจืช ืืืื ืืื ืื ืคืืฆืื ืคืืืืจ. ืขืืืจ ืงืืืขืื ืืืืืื, ืื ืืืื ืืืืคื ืชืืืืจืื ืืืคืืืช ืืช ืืกืคืจ ืืืืืจืืช ืืคืืืืงืืืืช ืืืฉืืืื ืืืคืฉืจืืช ืืจืืฉืื ื. ืืื ืขื ืืืช, ืืขืืืก ืืื ืืืื ืขื ืืกืืืืืฆืื ืืื: ืืฉืจืช ืืื ืืื, ืื ืฉืืชืืง ืฉืจืช ืืื ืืื ืืืฉื ืชืจืืกืจ ืกืืืืืฆืื ืืืกืคืจ ืืืืจืื.
ืืืชื ืชืจืืืฉ ืืื ืืชืืื ื ืืงืืืืช, ืื ืืืืฉื ืืคื ืืกืืื ืืฉื ืืื. ืืืื "ืืืืืง" ืืช ืืื ืืฉืจืช ืืืืชื ืกืืืื ืฉืื ืืชืจืืฉื ืืืจืืื, ืื ืืชื ืืกืคืืจ ืืช ืืคืืืขื ืืืจ ืืกืืืื ืืื. ืืกืืืื ื-31, ืืืงืจื ืื, ืื ืืืื ืขืื ืคืืฆืืื ืคืืืืจ
ืืืืฉืื ืฉืื ื, ืฉืชื ืืืืฉืืช ืืืื ื ืืืื ืืืื ืฉืืจืืช ืงืื ืืืื, ืื ืืฆืจื ื ืืช ืฉืชืืื, ืืืืฉื ืืื ืจื ืื ืืชืงืืืื ืืืงืืื. ืืืชืื ืืืื ืืงืช ืื ืฉืง ืืืืืืจืืช ืืงืืืข, ืืืจื ื ืืคืฉืจืืช ืืื ืื ืืืจืช ืืื ืืื ืืืืืจ. ื ืงืืืช ืืืคื ื ืืื ืืืืชื ืืืืคืขื ืืืฉืืง ืืืื ืืงื ืืื "ืื ืืชื ืคืืืข ืืืืื ืื ืื ืืจืื ืคืขืืื ืืืื ืืื ืืืื, ืงืื ืืื ืืก ืืื ืืืื". ืื ืืืื ืื ืฉืื ืืืื ืฉืื ืืฉืืงื ืคืืข ืืืืื ืฉืืืง ืชืคืงืื ืืฉืื ืกืืจื ืืขืืื ืขื ืืืืฉื ืืฉื ืืื. ืื ืืกืืคื ืฉื ืืืจ ืืืื ื ืขื ืืืคืฉืจืืช ืืจืืฉืื ื, ืืืื ืืื ืืขืช ืขื ืื ืืื ืื ืฉืง ืืื ืืืืืืืช ืืคืขืืืืช ืืืฉืืง.
ืื ืคืจื, ืืืื ืืืขืืืช ืืช ื ืืฉื ืืืืฆืืขืื. ืื ืืฉืืชื ืฉืื ืื ืืื ืืช ืืงืฆื, ืื ื ืขืื ื: ืืื. Unity ืื ืืืืืช ืืืืืช ืืชื ืืฉืื ืืืืืืื ืฉืืื. ื-Dino Squad, ืืืงืจื ื"ืืจืืข" ืืืืชืจ, ืืืืืื ืืืืืช ืืื ืืืืช ืงืืืขืื ืืงืืืืื ืื-ืืื ืืช ืืืืืื. ืืขืืจืช ืืชื ืืฉืื ืืื ืืกืคืืจ ืื ืงืืืข ืื ืคืจื ืืื ืืืชืจืืช ืฉืื ืืฉืชืืืช. ืืื, ืื ืืื ืืืจืื ืขืืืจื ื ืืืืขืจ ืืช ืืกืคืจ ื"ืืืจืืช" ืฉื ืืคืืืืงื. ืืฉื ืื ืืฆืจื ื ืจืืื ื ืคืจื ื-ECS ืื ืื ื ืืงืืืืื ืืช ืืืื ืฉื ืื ืื. ืืืกืคื ื ืืืชื ืืื ืืืืคืื ืฉืืืจืฉืื ืคืืฆืื ืคืืืืจ (ืงืืืขืื, ืืืืืืช ืืื'). ืืคื ื ืฉื ืชืืื ืืขืื ืืฉืืืืช ืืืื, ืื ื ืืืืืื ืืืชื ืขื ืืืื ืื ืืืขืืืื ืืืชื ืืื, ืืืืืืื ืืช ืืขืืื ืืคืืื ืคืขื ืืืช ืขืืืจ ืื ืืฉืืื.
ืืฉืื ืื ืืฉ ืื ื ืืขืจืืช ืฉืขืืืืช ืืืืคื ืืืื. ืืงืื ืฉืื ืืฆืืจื ืืขื ืคืฉืืื:
public sealed class LagCompensationSystemGroup : ExecutableSystem
{
//ะะฐัะธะฝะฐ ะฒัะตะผะตะฝะธ
private readonly ITimeMachine _timeMachine;
//ะะฐะฑะพั ัะธััะตะผ ะปะฐะณะบะพะผะฟะตะฝัะฐัะธะธ
private readonly LagCompensationSystem[] _systems;
//ะะฐัะฐ ัะตะฐะปะธะทะฐัะธั ะบะปะฐััะตัะธะทะฐัะพัะฐ
private readonly TimeTravelMap _travelMap = new TimeTravelMap();
public LagCompensationSystemGroup(ITimeMachine timeMachine,
LagCompensationSystem[] lagCompensationSystems)
{
_timeMachine = timeMachine;
_systems = lagCompensationSystems;
}
public override void Execute(GameState gs)
{
//ะะฐ ะฒั
ะพะด ะบะปะฐััะตัะธะทะฐัะพั ะฟัะธะฝะธะผะฐะตั ัะตะบััะตะต ะธะณัะพะฒะพะต ัะพััะพัะฝะธะต,
//ะฐ ะฝะฐ ะฒัั
ะพะด ะฒัะดะฐะตั ะฝะฐะฑะพั ยซะบะพัะทะธะฝยป. ะ ะบะฐะถะดะพะน ะบะพัะทะธะฝะต ะปะตะถะฐั ัะฝัะธัะธ,
//ะบะพัะพััะผ ะดะปั ะปะฐะณะบะพะผะฟะตะฝัะฐัะธะธ ะฝัะถะฝะพ ะพะดะฝะพ ะธ ัะพ ะถะต ะฒัะตะผั ะธะท ะธััะพัะธะธ.
var buckets = _travelMap.RefillBuckets(gs);
for (int bucketIndex = 0; bucketIndex < buckets.Count; bucketIndex++)
{
ProcessBucket(gs, buckets[bucketIndex]);
}
//ะ ะบะพะฝัะต ะปะฐะณะบะพะผะฟะตะฝัะฐัะธะธ ะผั ะฒะพัััะฐะฝะฐะฒะปะธะฒะฐะตะผ ัะธะทะธัะตัะบะธะน ะผะธั
//ะฒ ะธัั
ะพะดะฝะพะต ัะพััะพัะฝะธะต
_timeMachine.TravelToTime(gs.Time);
}
private void ProcessBucket(GameState presentState, TimeTravelMap.Bucket bucket)
{
//ะัะบะฐััะฒะฐะตะผ ะฒัะตะผั ะพะดะธะฝ ัะฐะท ะดะปั ะบะฐะถะดะพะน ะบะพัะทะธะฝั
var pastState = _timeMachine.TravelToTime(bucket.Time);
foreach (var system in _systems)
{
system.PastState = pastState;
system.PresentState = presentState;
foreach (var entity in bucket)
{
system.Execute(entity);
}
}
}
}
ืื ืฉื ืืชืจ ืืื ืืืืืืจ ืืช ืืคืจืืื:
1. ืืืืื ืขื ืืื ืืืืืื ืืช ืืจืืง ืืชื ืืขื ืืืงืกืืืื ืืืื.
ืืื ืื ื ืืฉืื ืืืคืื ืืช ืืืฉืืง ืื ืืืฉ ืืื ืืืคืฉืจ ืืชื ืืื ืฉื ืจืฉืชืืช ืกืืืืจืืืช ืืจืืขืืช, ืื ืืืืื ื ืืช ืืกืืคืืจ ืขื ืืจืืื ืฉื 30 ืืืงืื (ืขื ืงืฆื ืืืง ืฉื 20 ืืจืฅ). ืื ืืืคืฉืจ ืืฉืืงื ืื ืืคืืืข ืืืจืืืื ืืคืืื ืืคืื ืืื ืืืืืื ืืืื.
2. ืงืืข ืืืื ืืคืฆืื ื ืืชื ืืืืื ืืืื ืืืืื ืื.
ืื ืื ื, ืืืืื, ืืืืืื ืืช ืืืจืืืื ืฉืื ื. ืืื ืืื ื ืื ืจืืื ืื ืืชื ืื ืืืชืงื ื, ืืืฉื, ืื. ืืืืื ื ืฉืขืืืฃ ืืชืช ืขืืืคืืช ืืืืืืช ืืืื ืชืืช, ืืคื ืฉื ืขืฉื ืืจืื ืืงืืืขืื ืืงืืื ืื. ืื ืืฉืืงื ืืืจ ืื ืื ืืื ืืืืื, ืืืืจืื ืขื ืคืืฆืื ืขื ืคืืืืจ ืืืขืืจ ืื ืืืืจืื ืืขืืฃ ืืจืื.
3. ืืืืืื ืืื ืืฉ ืฆืืจื ืืคืฆืืช ืขื ืืืืืืช ืืืื ืืืืืจืื: ื ืฉืืื, ืืืช ืื ื ืืื' ืืืืื ื ืื ืฆืจืื ืืืขืืืื ืืืชื ืืคื ืืืชื ืืืืื ืืื ืืืืจืื.
4. ืงืืขื ืื ืืขืฉืืช ืขื ืืืชื ืืฉืื ืฉื ืืฉืืงื ืฉืขืืืจื ืืชืืฆืข ืคืืฆืื ืคืืืืจ. ืืืืื ืืื, ืืืืงืื ืฉืืื ืื ืฆืจืื ืืขืืืจ ืืขืืจ: ืืฉืืงื ืฆืจืื ืืจืืืช ืืช ืขืฆืื ืืืืชื ืืื ืฉืื ืืื ื ืืฆื ืืขืช ืืฉืจืช. ืขื ืืืช, ืื ื ืื ืืืืืจืื ืืืืืจ ืืช ืืืชื ืืฉืื ืฉื ืืฉืืงื ืืืืจื, ืืืฉ ืืื ืืกืคืจ ืกืืืืช.
ืจืืฉืืช, ืื ืืฉืคืจ ืืฉืืืืืช: ืื ืื ื ืืืืืื ืืืฉืชืืฉ ืืืืชื ืืฆื ืคืืื ืขืืืจ ืื ืืฉืืงื ืื ืขื ืคืื ืืื ืงืจืืืื.
ืฉื ืืช, ืืื ืืืืืืช ืืืืคืืคืืช ืื ื ืชืืื ืื ืืืืืื ืืช ืืืชื ืืฉืื ืฉื ืืฉืืงื ืฉืืืขืืืชื ืืืืืืืช ืื ืืงืืืขืื. ื-Dino Squad, ืฉืืงื ืื ืฉืืืืื ืืืื ืืืืืจืื, ืฉืืฉ ืืื ืืืืืืืจืื ืื ืกืื ืืจืืืช ืืืื ืืกืื ืืจืืื ืฉื ืืืจื. ืื ืื ืืฉืืงื ืืืจื ืืืืืืช ืืืฆืืช ืืืคื ืืืกืืื ืืืืืจ ืืขืืืจ ืืจื ืืชื ืืฉ ืืืื ืืืืืจืื ืฉื ืืฉืืงื, ืืืืืจ ืืชืขืื ืืื ื.
ืฉืืืฉืืช, ืื ื ืืืฉืืื ืืช ืืืงืืื ืื ืฉืง ืฉื ืืืื ืืืืืจ ืื ืืช ื ืงืืืช ืืืืฉืื ืฉื ืืืืืืช ืืืืฆืขืืช ื ืชืื ืื ืื-ECS ืขืื ืืคื ื ืชืืืืช ืคืืฆืื ืืคืืืืจ.
ืืชืืฆืื ืืื, ืืืืงืื ืืืืืชื ืฉื ืืืชื ืืฉืื ืฉื ืืฉืืงื ืืืชืืืื ืืคืืืืจ ืืื ื ืืฉืื ืขืืืจื ื, ืืืื ื ืงืื ื ืืืจื ืคืจืืืืงืืืืืช ืืืชืจ ืืื ืืื ืืช ืคืฉืืื ืืืชืจ.
ืื ืืคืฉืจ ืคืฉืื ืืืกืืจ ืืช ืืฉืืื ืืจืฉืช, ืืคืฉืจ ืจืง ืืืกืืืช ืืืชื. ืืื ืื ืฉืืื ืืืจืช ืฉื ืชืืคืืฉืช, ืืคืืฆืื ืขื ืคืืืืจ ืฉืจืช ืืฉ ืคืฉืจืืช. ืื ืืฉืคืจ ืืช ืืืืืช ืืืฉืืง ืฉื ืืฉืืงื ืฉืืืจื ืขื ืืฉืืื ืืฉืืงื ืฉืืืจืื ืื. ืขืืืจ ืืื ื ืกืงืืืื, ืืขืืืช ืืืช, ืืืืืจื ืืื ืืืืชื ืืจืืจื.
ืืืืื, ืขื ืื ืื ืืื ืฆืจืื ืืฉืื ืื ืขื ืืื ืืืืจืืืืช ืืืืืืจืช ืฉื ืงืื ืืฉืจืช ืืืืืืชื โ ืื ืขืืืจ ืืชืื ืชืื ืืื ืขืืืจ ืืขืฆืื ืืฉืืงืื. ืื ืงืืื ืืื ืืกืืืืืฆืื ืืืืชื ืงืจืืื ืจืฆืืคื ืคืฉืืื ืฉื โโืืขืจืืืช, ืื ืขื ืคืืฆืื ืคืืืืจ, ืืืคืืขื ืื ืืืืืืช ืืงืื ื ืืช ืืขื ืคืื. ืืฉืงืขื ื ืื ืืืืฆืื ืจืืื ืืื ืฉืืืื ื ืื ืืขืืื ืืืชื.
ืืืจืกืช 2019 (ืืืืื ืงืฆืช ืงืืื ืืื), Unity ืืืกืืคื ืชืืืื ืืืื ืืกืฆื ืืช ืคืืืืืช ืขืฆืืืืืช. ืืืืขื ื ืืืชื ืืฉืจืช ืืืขื ืืื ืืืืจ ืืขืืืื, ืื ืจืฆืื ื ืืืืคืืจ ืืืืืจืืช ืืืขืืื ืืคืืื ืืืฉืืชืฃ ืืื ืืืืจืื.
ื ืชื ื ืืื ืืืจ ืืฉืืงืื ืกืฆื ื ืคืืืืช ืืฉืื ืืืื ืืืืื ื ืืช ืืฆืืจื "ืื ืงืืช" ืืช ืืกืฆื ื ืื ืชืื ื ืืืืจ ืืฉืื ืืคื ื ืืืฉืื ืืกืืืืืฆืื. ืจืืฉืืช, ืื ื ืชื ืขืืืื ืืฉืืขืืชืืช ืืคืจืืื. ืฉื ืืช, ืื ืืืคืฉืจ ืืืืคืืจ ืืืืืงื ืฉืืื ืฉื ืืืืื ืฉืืชืขืืจืจื ืื ืืืชืื ืช ืืืฆืข ืฉืืืื ืืงืื ืื ืืงืื ืฉื ืืกืฆื ื ืืขืช ืืืกืคืช ืจืืืื ืืฉืืง ืืืฉืื. ืฉืืืืืช ืืืื ืืื ืงืฉืืช ืื ืืคืื, ืืืขืชืื ืงืจืืืืช ืื ืืืืืื ืืืฆื ืฉื ืืืืืืงืืื ืคืืืืื ืืกืฆื ื ืฉื ืืืจ ืืื "ืืืจืืื" ืืืืจ ืืืจ.
ืื ืืกืฃ, ืขืฉืื ื ืืืงืจ ืขื ืืื ื ืืชื ืืืฉืชืืฉ ืืกืฆื ืืช ืคืืืืืช ืืื ืืืืกื ืืช ืืืืกืืืจืื ืฉื ืืขืืื ืืคืืื. ืืืืืจ, ืืชื ืื, ืืืงืฆืืช ืื ืกืฆื ื ืืืช ืืื ืืืจ, ืืื 30 ืกืฆื ืืช, ืืืขืฉืืช ืืื ืืืฅ ืืืืืจื, ืฉืื ืืืืกื ืืช ืืกืืคืืจ. ืืืืคื ืืืื, ืืชืืจืจ ืฉืืืืคืฆืื ืขืืืืช, ืืื ืื ืืืฉืื ื ืืืชื: ืืื ืื ืืจืืชื ืขืืืื ืืืืจืคืช ืืคืจืืื, ืืื ืืจืฉื ืฉืื ืืืื ืืกืืื ืื ืืืื. ืืื ืงืฉื ืืืืืช ืืื ืืฉืจืช ืืชื ืื ืืฉืขืืื ืืืฉื ืืื ืจื ืขื ืื ืื ืืจืื ืกืฆื ืืช. ืืื, ืคืขืื ื ืขื ืคื ืืืื: "ืื ืื ืื ื ืฉืืจ, ืื ืืชืงื ืืช ืื".
ืืงืืจ: www.habr.com