public void Unmask(BattleMapMonster monster) { BattleMapTile centerTile = holder.BattleMap.BattleMapTiles[monster.X, monster.Y]; // 視界のタイルセットを取得 List <BattleMapTile> set = MapUtils.GetRangeTileList(centerTile, monster.BattleStatus.View); BattleMapTileMaskGroup maskGroup = holder.BattleMap.BattleMapTileMaskGroup[monster.GetTeamIndex()]; foreach (BattleMapTile bmt in set) { // マスクを取得 BattleMapTileMask mask = maskGroup.BattleMapTileMask[bmt.X, bmt.Y]; // すでにマスク解除されているならなにもしない if (mask.Mask == false) { continue; } mask.Mask = false; mask.GameObject.SetActive(false); mask.GameObjectShadow.SetActive(false); // オブジェクトが存在しない場合 // オブジェクトを描画 BattleMapObjectSet bmoSet = holder.BattleMap.BattleMapObjectSets[bmt.X, bmt.Y]; if (bmoSet == null) { mapObjectGenerator.DecoreteMapTile(bmt); } } }
/// <summary> /// 移動チェック /// </summary> /// <param name="monster"></param> /// <param name="targetTile"></param> /// <param name="moveCount"></param> /// <param name="movableTileSet"></param> private void CheckMove( BattleMapMonster monster, BattleMapTile targetTile, int moveCount, HashSet <BattleMapTile> movableTileSet) { // 該当タイルに別モンスターがいたら侵入不可 BattleMapMonster anotherMonster = holder.BattleMapMonsters.GetMonster(targetTile.X, targetTile.Y); if (anotherMonster != null && monster != anotherMonster) { return; } // マスクしてあったら侵入不可 BattleMapTileMaskGroup group = holder.BattleMap.BattleMapTileMaskGroup[monster.GetTeamIndex()]; BattleMapTileMask mask = group.BattleMapTileMask[targetTile.X, targetTile.Y]; if (mask.Mask) { return; } // 移動コストを取得 MapTileType tileType = targetTile.MapTileType; int cost = monster.BattleStatus.BattleMapMonsterMoveCost.GetMoveCost(tileType); // 侵入不可の場合 if (cost < 0) { return; } // このタイルを移動可能に追加 movableTileSet.Add(targetTile); // タイルのコストごとに移動力を減少 moveCount = moveCount - cost; // 移動力がなくなったら終了 if (moveCount <= 0) { return; } // タイルごとの処理 foreach (BattleMapTile jointTile in targetTile.JointInfo.GetJointTileList()) { CheckMove(monster, jointTile, moveCount, movableTileSet); } }