// 次ターンでのモンスターの表示を更新する private void UpdateEnemyVisible(Room room, Loc playerLoc) { if (_player.IsVisibleAll()) { foreach (var enemy in _enemies) { enemy.Visible = true; } } else { bool isBlind = _player.IsBlind(); if (room == null) // プレイヤーは通路上 { foreach (var enemy in _enemies) { enemy.Visible = !isBlind && playerLoc.IsNeighbor(enemy.NextLoc); } } else // プレイヤーは部屋内 { foreach (var enemy in _enemies) { enemy.Visible = !isBlind && room.IsInside(enemy.NextLoc, true); } } } _floor.UpdateMinimapEnemyIcon(_enemies); }
private static bool CanDirectAttack(Loc fm, Loc to, Floor floor) { if (fm.IsNeighbor(to)) { Dir dir = fm.Toward(to); return(floor.CanAdvance(fm, dir)); } return(false); }
// fm から to が見えるか public bool InSight(Loc fm, Loc to) { if (fm.IsNeighbor(to)) { return(true); } if (_map.IsSameRoom(fm, to)) { return(true); } // fm が部屋内で、to がその部屋の入り口なら視界内 Room room = _map.FindRoom(fm); if (room != null) { return(room.IsEntrance(to)); } // TODO:fm, to がいずれも通路なら 2 マス先まで視界内 return(false); }