public void Refresh(Vinteger pos) { for (var octant = 0; octant < 8; octant++) { RefreshOctant(pos, octant); } }
public Shadow(float shadowStart, float shadowEnd, Vinteger startPosition, Vinteger endPosition) { Start = shadowStart; End = shadowEnd; StartPos = startPosition; EndPos = endPosition; }
private void Init() { AreaReady = false; AreaMapHolder = new GameObject("AreaMapHolder"); if (FovHolder == null) { FovHolder = GameObject.Find("Fov"); } Fov = FovHolder.GetComponent <Fov>(); if (_player == null || _player != GameManager.Instance.Player) { _player = GameManager.Instance.Player; InstantiatePlayerSprite(); } _areaMapHolderTransform = AreaMapHolder.transform; _currentArea = GameManager.Instance.CurrentArea; _currentArea.TurnOrder = new Queue <Entity>(); _currentArea.TurnOrder.Enqueue(_player); _currentArea.Build(); // if (_currentArea.ParentCell.Rivers.Count > 0) // { // PlaceWaterTiles(); // } DrawArea(); PlaceBuildings(); PlacePlayer(); if (_currentArea.PresentEntities.Count > 1) { PlaceNpcs(); MarkCustomers(); } CreateAStarGraph(); AstarPath.active.Scan(); Fov.Init(_currentArea); var v = new Vinteger(_player.CurrentTile.X, _player.CurrentTile.Y); Fov.Refresh(v); Messenger.Instance.LoadOnScreenMessages(); AreaReady = true; }
public void RefreshOctant(Vinteger start, int octant, int maxRows = 999) { var line = new ShadowLine(); var fullShadow = false; for (var row = 1; row < maxRows; row++) { var bounds = start.Add(TransformOctant(row, 0, octant)); if (!InBoundsAndClose(bounds.X, bounds.Y)) { break; } for (var col = 0; col <= row; col++) { var pos = start.Add(TransformOctant(row, col, octant)); if (!InBoundsAndClose(pos.X, pos.Y)) { break; } if (fullShadow) { var tile = _grid[pos.X, pos.Y]; tile.Visibility = Visibilities.Invisible; } else { var projection = ProjectTile(row, col); var visible = !line.IsInShadow(projection); var tile = _grid[pos.X, pos.Y]; var blocksLight = tile.GetBlocksLight(); if (!visible) { tile.Visibility = Visibilities.Invisible; } else { if (tile.Visibility != Visibilities.Visible && tile.GetPresentEntity() != null) { tile.GetPresentEntity().PositionRevealed(); } tile.Visibility = Visibilities.Visible; tile.Revealed = true; } if (visible && blocksLight) { line.Add(projection); fullShadow = line.IsFullShadow(); } } } } }
public float Distance(Vinteger other) { return(Mathf.Sqrt(Mathf.Pow(this.X - other.X, 2) + Mathf.Pow(this.Y - other.Y, 2))); }
public Vinteger Add(Vinteger other) { return(new Vinteger(X + other.X, Y + other.Y)); }