예제 #1
0
        private IEnumerable <GridPoint> GetRayLine(Vector3 from, Vector3 to)
        {
            var gridFrom = ToGridPoint(from);
            var gridTo   = ToGridPoint(to);

            return(Bresenham.GetPointsOnLine(gridFrom, gridTo));
        }
예제 #2
0
        public void UpdateVisibility()
        {
            foreach (Tile tile in Tiles)
            {
                foreach (Tile other in Tiles)
                {
                    tile.Visibility[other.Index] = true;

                    foreach (Point point in Bresenham.GetPointsOnLine(tile.X, tile.Y, other.X, other.Y))
                    {
                        if (Tiles[point.X, point.Y].IsObstacle)
                        {
                            tile.Visibility[other.Index] = false;
                            break;
                        }
                    }
                }
            }
        }
예제 #3
0
        public void OnMousePressed(MouseButton button, Point mousePosition, Keys[] allHeldKeys)
        {
            int  x    = mousePosition.X / 32;
            int  y    = mousePosition.Y / 32;
            Tile tile = Tiles[x, y];

            if (tile != null)
            {
                if (!allHeldKeys.Contains(Keys.LeftControl))
                {
                    if (button == MouseButton.Middle)
                    {
                        POVTile = tile;
                        UpdateVisibility();
                    }
                    else if (button == MouseButton.Left)
                    {
                        LineOrigin = tile.Position;
                    }
                    else if (button == MouseButton.Right)
                    {
                        if (allHeldKeys.Contains(Keys.LeftShift))
                        {
                            foreach (Point point in Bresenham.GetPointsOnLine(LineOrigin.X, LineOrigin.Y, tile.X, tile.Y))
                            {
                                Line.Add(point);
                            }
                        }
                        else
                        {
                            Line = Bresenham.GetPointsOnLine(LineOrigin.X, LineOrigin.Y, tile.X, tile.Y).ToList();
                        }
                    }
                }
            }
        }