Example #1
0
        private void RefreshOctant2(Vector2 _originPosition, int _octant)
        {
            ShadowLine line       = new ShadowLine();
            bool       fullShadow = false;

            for (int row = 1; row < km_maxDistance; row++)
            {
                for (int col = 0; col <= row; col++)
                {
                    Vector2     position    = _originPosition + ConvertPositionToOctantPosition(row, col, _octant);
                    DungeonTile CurrentTile = DungeonManager.instance.GetTileOnPosition(position.x, position.y);

                    if (CurrentTile == null)
                    {
                        continue;
                    }

                    if (fullShadow)
                    {
                        CurrentTile.IsVisible = false;
                    }
                    else
                    {
                        Shadow projection = ProjectTile(row, col);

                        // Setting Visibility of this tile...
                        bool visible = !line.IsInShadow(projection);
                        CurrentTile.IsVisible = visible;


                        if (visible)
                        {
                            CurrentTile.WasTileDiscovered = true;
                        }


                        if (visible && (CurrentTile.IsWall || CurrentTile.BlockVision))
                        {
                            line.AddShadowToLine(projection);
                            fullShadow = line.IsFullShadow;
                        }
                    }

                    CurrentTile.UpdateTile();
                }
            }
        }
Example #2
0
        public void RefreshVisibility(Vector2 _originPosition)
        {
            if (!DungeonManager.instance.HasTiles)
            {
                return;
            }

            DungeonTile TileInThisPosition = DungeonManager.instance.GetTileOnPosition(_originPosition.x, _originPosition.y);

            TileInThisPosition.WasTileDiscovered = true;
            TileInThisPosition.IsVisible         = true;
            TileInThisPosition.UpdateTile();

            switch (km_method)
            {
            case EFieldOfViewMethod.BobNystromShadowCast:
                for (int octant = 0; octant < 8; octant++)
                {
                    RefreshOctant2(_originPosition, octant);
                }
                break;
            }
        }