public void StartBattle(ExplorerPositionData position)
 {
     _contextLogic.TurnType = BattleTurnResultType.StartTurn;
     _battleLogic.StartBattle();
     _contextLogic.SetAbilityContext(-1, -1, false);
     _impactLogic.ExecuteImpact(_contextLogic.ImpactInit);
     _battleLogic.BatchEventBattle();
     _contextLogic.TurnType = BattleTurnResultType.PassiveAbility;
     foreach (var temp in _battle.LiveAllies)
     {
         _contextLogic.TurnType = BattleTurnResultType.PassiveAbility;
         ExecuteStartAbility(temp, false);
     }
     foreach (var temp in _battle.LiveEnemies)
     {
         _contextLogic.TurnType = BattleTurnResultType.PassiveAbility;
         ExecuteStartAbility(temp, true);
         if (_contextLogic.MobImpacts.TryGetValue(temp, out var impact))
         {
             _contextLogic.SetAbilityContext(temp, null, true);
             _impactLogic.ExecuteImpact(impact);
         }
     }
     _contextLogic.TurnType   = BattleTurnResultType.EndTurn;
     _explorer.State.Position = position;
     _battleLogic.UpdateMobs();
     _battleLogic.BatchEventBattle();
     LogicLog.SetBattle(LogBattleType.Start, _explorer.State.LastInteractiveId, _explorer.State.RoomId, _explorer.CurrentStage);
 }