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(); } } }
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; } }