public GameClient()
        {
            CharacterBehavior behavior     = new CharacterBehavior(Configuration.Behaviors.LoadDefault().GetBehaviorsSets());
            EffectEngine      effectEngine = new EffectEngine(new RandomGenerator(), Configuration.ConfigData.LoadDefault());
            SkillEngine       skillEngine  = new SkillEngine(effectEngine);

            Configuration.Skills skills = Configuration.Skills.LoadDefault();
            InitialState = Configuration.InitialState.LoadDefault(skills);
            GameState state = InitialState.CreateInitialBattle();

            Engine = new GameEngine(state, behavior, skillEngine, effectEngine);
            Engine.DelayedActions      += (o, e) => Delegate?.OnDelayedAction(e.Action);
            Engine.SkillUsed           += (o, e) => Delegate?.OnSkillUsed(e.Character, e.Skill);
            Engine.SkillChannelStarted += (o, e) => Delegate?.OnSkillChannelStarted(e.Character, e.Skill);
            Engine.SkillChannelEnded   += (o, e) => Delegate?.OnSkillChannelEnded(e.Character, e.Skill);
        }
 void LoadLevel(GameState state, int level)
 {
     Configuration.Skills skills = Configuration.Skills.LoadDefault();
     Engine.LoadState(Configuration.InitialState.LoadDefault(skills).LoadBattle(state, level));
     Delegate?.OnNewLevel(level);
 }