void Update() { // 移動中のモンスター処理 if (monsterMover != null) { monsterMover.Step(); bool isFinished = monsterMover.isFinished(); if (isFinished) { // 視界 BattleMapUnmasker unmasker = new BattleMapUnmasker(holder, mapObjectGenerator); unmasker.Unmask(monsterMover.GetTargetMonster()); // ボードの更新 commandController.UpdateActionBoard(); // ステータスの非表示 statusGenerator.HideStatus(); monsterMover = null; } } }
/// <summary> /// 移動処理 /// </summary> /// <param name="bmt"></param> public void Move(BattleMapTile bmt) { // 移動中は受け付けない if (monsterMover != null) { return; } BattleMapMoveProcessor moveProcessor = new BattleMapMoveProcessor(holder, iconGenerator, iconController); // モードごと BattleMapMoveStatus moveStatus = holder.BattleMapStatus.BattleMapMoveStatus; // 選択前 if (moveStatus == null) { BattleMapMonster target = holder.BattleMapMonsters.GetMonster(bmt.X, bmt.Y); // いなければなにもしない if (target == null) { return; } // 移動可能範囲の表示 moveProcessor.ShowMovable(target); // ステータスの表示 statusGenerator.ShowStatus(target); } else { BattleMapMoveStatusType statusType = moveStatus.BattleMapMoveStatusType; // 選択中か確認中 if (statusType == BattleMapMoveStatusType.SELECTED || statusType == BattleMapMoveStatusType.MOVE_CONFIRM) { BattleMapTile startTile = moveStatus.StartMapTile; // 自身ならキャンセル if (startTile.X == bmt.X && startTile.Y == bmt.Y) { moveProcessor.CancelMove(); // ステータスの非表示 statusGenerator.HideStatus(); return; } // 確認中かつ終端なら確定 if (statusType == BattleMapMoveStatusType.MOVE_CONFIRM) { BattleMapTile endTile = moveStatus.GetEndMapTile(); if (endTile.X == bmt.X && endTile.Y == bmt.Y) { monsterMover = new BattleMapMonsterMover( holder, moveProcessor, iconGenerator, monsterGenerator); return; } } // 移動範囲内なら移動確認 bool isRange = moveStatus.MapTileMovableList.Contains(bmt); if (isRange) { moveProcessor.ConfirmMove(bmt); } } } }