public BattleMapMonsterMover( BattleStageHolder holder, BattleMapMoveProcessor moveProcessor, MapIconGenerator mapIconGenerator, BattleMapMonsterGenerator monsterGenerator) { this.holder = holder; this.moveProcessor = moveProcessor; this.mapIconGenerator = mapIconGenerator; this.monsterGenerator = monsterGenerator; this.monster = holder.BattleMapStatus.BattleMapMoveStatus.TargetMonster; this.movePositionQueue = CreateMovePositionQueue(); }
/// <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); } } } }