Ejemplo n.º 1
0
 //Reveals the tile and releases ownership (all objects will have read permission)
 public void SetVisibility(TileVisibility value, int accessKey = 0)
 {
     //If the value is the same, don't bother
     if (visibility == value)
     {
         return;
     }
     //Check if locked for ownership permissions and if so, check access key
     if (_accessKey != 0 && accessKey != _accessKey)
     {
         Debug.Log("Wrong acess key: Tile.SetVisiblity(value, accessKey)");
         return;
     }
     //Set visibility
     visibility = value;
     //If it's face up, there's no point in restricting read permissions anymore.
     if (visibility == TileVisibility.FaceUp)
     {
         ReleaseOwnership(_accessKey);
     }
     //Pass visibility setting to renderer
     if (!(initialized))
     {
         Initialize();
     }
     Renderer.Visibility = visibility;
 }
Ejemplo n.º 2
0
        private void CheckTilesVisibilityAround(int x, int y)
        {
            Element        type       = LevelManager.Main.Grid.GetTile(x, y);
            TileVisibility visibility = grid.GetTile(x, y);

            if (showDebugLog.HasFlag(LevelFogDebug.Tiles_Around))
            {
                Debug.Log($"Checking Tiles Visibility around {x},{y} ({visibility})");
            }

            if (type != Element.NULL && visibility == TileVisibility.Visible)
            {
                List <Vector2Int> neighbours = grid.GatherNeighbourCells(x, y, 1, true, false);
                foreach (Vector2Int neighbour in neighbours)
                {
                    IsNullTileReadyToVisible(neighbour.x, neighbour.y);
                }
            }
            else
            {
                if (type == Element.NULL && visibility == TileVisibility.ReadyToVisible)
                {
                    if (showDebugLog.HasFlag(LevelFogDebug.Cluster_Logic))
                    {
                        Debug.Log("Checking for cluster completion");
                    }

                    List <Vector2Int> cellsChecked = new List <Vector2Int>()
                    {
                    };
                    if (CheckClusterTileVisibility(x, y, ref cellsChecked))
                    {
                        DiscoverNextClusterTile(0, cellsChecked);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public TileVisibility[,] CalculateTileVisibility()
        {
            TileVisibility[,] visibilityArray = new TileVisibility[m_map.Width, m_map.Height];

            m_fovManager.CalculateForMultipleCalls(m_map, m_player.Position, m_player.Vision);

            for (int i = 0; i < m_map.Width; ++i)
            {
                for (int j = 0; j < m_map.Height; ++j)
                {
                    Point p = new Point(i, j);
                    if (m_fovManager.Visible(p))
                    {
                        visibilityArray[i, j] = TileVisibility.Visible;
                    }
                    else
                    {
                        if (m_map.IsVisitedAt(p))
                            visibilityArray[i, j] = TileVisibility.Visited;
                        else
                            visibilityArray[i, j] = TileVisibility.Unvisited;
                    }
                }
            }
            return visibilityArray;
        }
Ejemplo n.º 4
0
 public virtual void UpdateFromVisibilityData(TileVisibility[,] visibility)
 {
 }
Ejemplo n.º 5
0
 public override void UpdateFromVisibilityData(TileVisibility[,] visibility)
 {
     m_tileVisibility = visibility;
 }
Ejemplo n.º 6
0
 private void DrawItems(TileVisibility[,] visibility)
 {
     MageCrawlPoint upperLeft = UpperLeftViewPoint;
     foreach (var i in m_engine.Map.Items.Where(i => IsPointDrawable(i.Second)))
     {
         if (visibility[i.Second.X, i.Second.Y] == TileVisibility.Visible)
         {
             AddObjectLayerImage(GetImageForItem(i.First), i.Second.X - upperLeft.X, i.Second.Y - upperLeft.Y);
         }
     }
 }
Ejemplo n.º 7
0
 private void DrawMapObjects(TileVisibility[,] visibility, IGameEngine engine)
 {
     MageCrawlPoint upperLeft = UpperLeftViewPoint;
     foreach (IMapObject o in m_engine.Map.MapObjects.Where(o => IsPointDrawable(o.Position)))
     {
         if (visibility[o.Position.X, o.Position.Y] != TileVisibility.Unvisited)
         {
             AddObjectLayerImage(GetImageForMapObject(o, engine), o.Position.X - upperLeft.X, o.Position.Y - upperLeft.Y);
         }
     }
 }
Ejemplo n.º 8
0
 private void DrawMonsters(TileVisibility[,] visibility)
 {
     MageCrawlPoint upperLeft = UpperLeftViewPoint;
     foreach (IMonster m in m_engine.Map.Monsters.Where(m => IsPointDrawable(m.Position)))
     {
         if (visibility[m.Position.X, m.Position.Y] == TileVisibility.Visible)
         {
             AddObjectLayerImage(GetImageForMonster(m), m.Position.X - upperLeft.X, m.Position.Y - upperLeft.Y);
         }
     }
 }
Ejemplo n.º 9
0
 private TCODColor ConvertTerrainSpotToColor(TerrainType terrain, TileVisibility visibility)
 {
     if (m_honorFOV && visibility == TileVisibility.Unvisited)
         return ColorPresets.Black;
     bool visible = visibility == TileVisibility.Visible;
     switch (terrain)
     {
         case TerrainType.Floor:
             if (visible)
                 return s_floorColorVisible;
             else
                 return s_floorColorNotVisible;
         case TerrainType.Wall:
             if (visible)
                 return s_wallColorVisible;
             else
                 return s_wallColorNotVisible;
         default:
             throw new System.ArgumentException("Unknown Type - ConvertTerrianToChar");
     }
 }