Exemplo n.º 1
0
 // 次ターンでのモンスターの表示を更新する
 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);
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
    // 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);
    }