Пример #1
0
        private void BuildGrid()
        {
            grid = LineGrid <SpriteCell>
                   .BeginShape()
                   .Segment(300)
                   .EndShape();

            map2D = new ArchimedeanSpiralMap(CellDimensions, grid)
                    .AnchorCellMiddleCenter()
                    .WithWindow(ExampleUtils.ScreenRect)
                    .AlignMiddleCenter(grid);

            map = map2D
                  .To3DXY();

            foreach (var point in grid)
            {
                var cell = Instantiate(cellPrefab);

                Vector3 worldPoint = map[point];

                cell.transform.parent        = root.transform;
                cell.transform.localScale    = Vector3.one;
                cell.transform.localPosition = worldPoint;

                cell.Color = ExampleUtils.Colors[ColorFunction(point)] + Color.white * 0.2f;
                cell.name  = point.ToString();

                grid[point] = cell;
            }

            voronoiMap = new VoronoiMap <LinePoint>(grid, map2D);
            ExampleUtils.PaintScreenTexture(plane, voronoiMap, ColorFunction);
        }
Пример #2
0
	private void BuildGrid()
	{
		var pointList = PoissonDisk.GeneratePoisson(ExampleUtils.ScreenRect, cellDimensions.magnitude, 10);
		grid = LineGrid<SpriteCell>.BeginShape().Segment(pointList.Count).EndShape();
		var map2D = VoronoiMap<LinePoint>.MakeMap(pointList);

		voronoiMap = map2D.To3DXY();

		foreach (var point in grid)
		{
			var cell = Instantiate(cellPrefab);
			Vector3 worldPoint = voronoiMap[point];

			cell.transform.parent = root.transform;
			cell.transform.localScale = Vector3.one;
			cell.transform.localPosition = worldPoint;

			cell.Color = ExampleUtils.Colors[ColorFunction(point)] + Color.white * 0.1f;
			cell.name = point.ToString();

			grid[point] = cell;
		}

		ExampleUtils.PaintScreenTexture(plane, voronoiMap.To2D(), ColorFunction);
	}
Пример #3
0
        private void BuildGrid()
        {
            var pointList = PoissonDisk.GeneratePoisson(ExampleUtils.ScreenRect, cellDimensions.magnitude, 10);

            grid = LineGrid <SpriteCell> .BeginShape().Segment(pointList.Count).EndShape();

            var map2D = VoronoiMap <LinePoint> .MakeMap(pointList);

            voronoiMap = map2D.To3DXY();

            foreach (var point in grid)
            {
                var     cell       = Instantiate(cellPrefab);
                Vector3 worldPoint = voronoiMap[point];

                cell.transform.parent        = root.transform;
                cell.transform.localScale    = Vector3.one;
                cell.transform.localPosition = worldPoint;

                cell.Color = ExampleUtils.Colors[ColorFunction(point)] + Color.white * 0.1f;
                cell.name  = point.ToString();

                grid[point] = cell;
            }

            ExampleUtils.PaintScreenTexture(plane, voronoiMap.To2D(), ColorFunction);
        }
Пример #4
0
	private void BuildGrid()
	{
		grid = LineGrid<SpriteCell>
			.BeginShape()
			.Segment(300)
			.EndShape();

		map2D = new ArchimedeanSpiralMap(CellDimensions, grid)
			.AnchorCellMiddleCenter()
			.WithWindow(ExampleUtils.ScreenRect)
			.AlignMiddleCenter(grid);

		map = map2D
			.To3DXY();

		foreach (var point in grid)
		{
			var cell = Instantiate(cellPrefab);

			Vector3 worldPoint = map[point];

			cell.transform.parent = root.transform;
			cell.transform.localScale = Vector3.one;
			cell.transform.localPosition = worldPoint;

			cell.Color = ExampleUtils.Colors[ColorFunction(point)] + Color.white * 0.2f;
			cell.name = point.ToString();

			grid[point] = cell;
		}

		voronoiMap = new VoronoiMap<LinePoint>(grid, map2D);
		ExampleUtils.PaintScreenTexture(plane, voronoiMap, ColorFunction);
	}
Пример #5
0
 public Direction(LineGrid grid, Tuple <int, int> currentPosition)
 {
     UpChar    = GetUp(grid, currentPosition);
     DownChar  = GetDown(grid, currentPosition);
     RightChar = GetRight(grid, currentPosition);
     LeftChar  = GetLeft(grid, currentPosition);
 }
Пример #6
0
		public static bool __CompilerHint__Line__TileCell()
		{
			var grid = new LineGrid<TileCell[]>(1, 1);

			foreach(var point in grid) { grid[point] = new TileCell[1]; } 

			var shapeStorageInfo = new ShapeStorageInfo<LinePoint>(new IntRect(), p => true);
			var shapeInfo = new LineShapeInfo<TileCell>(shapeStorageInfo);

			return grid[grid.First()][0] == null || shapeInfo.Translate(LinePoint.Zero) != null;
		}
Пример #7
0
    //pathfind to connect individual Line
    private static void PathFindLine(LineGrid grid, Line line, Line target)
    {
        //target position
        var targetpos = target.GetNode(0);

        //list of nodes opened
        List <Vector2Int> open = new List <Vector2Int> {
            line.GetNode(0)
        };

        //list of nodes closed
        List <Vector2Int> closed = new List <Vector2Int>();

        //pathfind
        do
        {
            var currentpos = grid.GetBest(open, targetpos);

            if (!grid.IsFree(currentpos))
            {
                //ahh too bad... (uncomplete path)
                grid.TraceBackwards(line, currentpos);
                return;
            }

            if (currentpos == targetpos)
            {
                //found a full path!
                grid.TraceBackwards(line, targetpos);
                return;
            }

            var allpossible = grid.GetAllAdjacentFree(currentpos, targetpos);
            foreach (var pos in allpossible)
            {
                if (!open.Contains(pos) && !closed.Contains(pos))
                {
                    open.Add(pos);
                    grid.SetParent(pos, currentpos);
                }
            }

            open.Remove(currentpos);
            closed.Add(currentpos);
        }while (open.Count != 0);


        if (closed.Count >= 3 && Random.Range(0, 5) == 1)
        {
            grid.TraceBackwards(line, closed[Random.Range(closed.Count / 2, closed.Count)]);
        }

        return;
    }
Пример #8
0
        public EditorProperties()
        {
            mPositionsRelativeToCamera = false;

            mSnapToGrid          = false;
            mConstrainDimensions = false;

            mPixelSize = 0;

            mLineGrid         = new LineGrid();
            mLineGrid.Visible = false;
        }
Пример #9
0
        public void ToLineGrid(LineGrid lineGridToModify)
        {
            lineGridToModify.NumberOfHorizontalLines = NumberOfHorizontalLines;
            lineGridToModify.NumberOfVerticalLines = NumberOfVerticalLines;

            lineGridToModify.X = X;
            lineGridToModify.Y = Y;

            lineGridToModify.DistanceBetweenLines = DistanceBetweenLines;

            lineGridToModify.Visible = Visible;
        }
Пример #10
0
        public void ToLineGrid(LineGrid lineGridToModify)
        {
            lineGridToModify.NumberOfHorizontalLines = NumberOfHorizontalLines;
            lineGridToModify.NumberOfVerticalLines   = NumberOfVerticalLines;

            lineGridToModify.X = X;
            lineGridToModify.Y = Y;

            lineGridToModify.DistanceBetweenLines = DistanceBetweenLines;

            lineGridToModify.Visible = Visible;
        }
Пример #11
0
        public void Start()
        {
            var grid = LineGrid <int>
                       .BeginShape()
                       .Segment(10)
                       .EndShape();

            var map = new ArchimedeanSpiralMap(CellDimensions, grid);

            var voronoiMap = new VoronoiMap <LinePoint>(grid, map);

            ExampleUtils.PaintScreenTexture(plane, voronoiMap, n => GLMathf.FloorMod(n, 12));
        }
Пример #12
0
        public void Initialize(ImageRegionSelectionControl control, SystemManagers managers,
                               WireframeEditControls wireframeControl, WireframeEditControlsViewModel wireframeEditControlsViewModel)
        {
            addCursor = new System.Windows.Forms.Cursor(this.GetType(), "Content.AddCursor.cur");

            mManagers = managers;
            mManagers.Renderer.SamplerState = SamplerState.PointClamp;

            mControl = control;

            keyboard = new Keyboard();
            keyboard.Initialize(control);

            mManagers.Renderer.Camera.CameraCenterOnScreen = CameraCenterOnScreen.TopLeft;

            mWireframeControl = wireframeControl;

            mControl.RegionChanged += new EventHandler(HandleRegionChanged);

            mControl.MouseWheelZoom     += new EventHandler(HandleMouseWheelZoom);
            mControl.AvailableZoomLevels = mWireframeControl.AvailableZoomLevels;

            mControl.XnaUpdate += new Action(HandleXnaUpdate);
            mControl.Panning   += HandlePanning;

            mSpriteOutline = new LineRectangle(managers);
            managers.ShapeManager.Add(mSpriteOutline);
            mSpriteOutline.Visible = false;
            mSpriteOutline.Color   = OutlineColor;

            selectionPreviewRectangle = new LineRectangle(managers);
            managers.ShapeManager.Add(selectionPreviewRectangle);
            selectionPreviewRectangle.Visible = false;
            selectionPreviewRectangle.Color   = MagicWandPreviewColor;
            // Move them up one Z to put them above the sprites:
            selectionPreviewRectangle.Z = 1;

            mLineGrid = new LineGrid(managers);
            managers.ShapeManager.Add(mLineGrid);
            mLineGrid.Visible = false;
            mLineGrid.Color   = OutlineColor;

            mControl.Click += new EventHandler(HandleClick);

            mStatusText = new StatusTextController(managers);
            mControl_XnaInitialize();

            WireframeEditControlsViewModel = wireframeEditControlsViewModel;
            WireframeEditControlsViewModel.PropertyChanged += HandleWireframePropertyChanged;
        }
Пример #13
0
        public static LineGridSave FromLineGrid(LineGrid lineGrid)
        {
            LineGridSave lineGridSave = new LineGridSave();

            lineGridSave.NumberOfHorizontalLines = lineGrid.NumberOfHorizontalLines;
            lineGridSave.NumberOfVerticalLines = lineGrid.NumberOfVerticalLines;

            lineGridSave.X = lineGrid.X;
            lineGridSave.Y = lineGrid.Y;

            lineGridSave.DistanceBetweenLines = lineGrid.DistanceBetweenLines;

            lineGridSave.Visible = lineGrid.Visible;

            return lineGridSave;
        }
Пример #14
0
        public static LineGridSave FromLineGrid(LineGrid lineGrid)
        {
            LineGridSave lineGridSave = new LineGridSave();

            lineGridSave.NumberOfHorizontalLines = lineGrid.NumberOfHorizontalLines;
            lineGridSave.NumberOfVerticalLines   = lineGrid.NumberOfVerticalLines;

            lineGridSave.X = lineGrid.X;
            lineGridSave.Y = lineGrid.Y;

            lineGridSave.DistanceBetweenLines = lineGrid.DistanceBetweenLines;

            lineGridSave.Visible = lineGrid.Visible;

            return(lineGridSave);
        }
Пример #15
0
        private void RefreshGrid()
        {
            if (ShowGrid && lineGrid == null)
            {
                lineGrid = new LineGrid();
            }

            if (lineGrid != null)
            {
                lineGrid.Visible = ShowGrid;
            }

            if (lineGrid?.Visible == true)
            {
                lineGrid.DistanceBetweenLines    = cellSize;
                lineGrid.NumberOfHorizontalLines = 41;
                lineGrid.NumberOfVerticalLines   = 41;
            }
        }
Пример #16
0
    //pathfind to connect the lines
    private static void PathFindLines(LineGrid grid)
    {
        foreach (var line in grid.Lines)
        {
            //if line desnt exist ignore
            if (!grid.IsFree(line.GetNode(0)))
            {
                continue;
            }

            //chose target and if none can be chosen ignore
            var target = grid.ChooseTarget(line);
            if (target == null)
            {
                continue;
            }

            PathFindLine(grid, line, target);

            //grid.Print();
        }
    }
Пример #17
0
        public void Initialize(ImageRegionSelectionControl control, SystemManagers managers, WireframeEditControls wireframeControl)
        {
            mManagers = managers;
            mManagers.Renderer.SamplerState = SamplerState.PointClamp;

            mControl = control;

            keyboard = new Keyboard();
            keyboard.Initialize(control);

            mManagers.Renderer.Camera.CameraCenterOnScreen = CameraCenterOnScreen.TopLeft;

            mWireframeControl = wireframeControl;
            mWireframeControl.WandSelectionChanged += ReactToMagicWandChange;

            mControl.RegionChanged += new EventHandler(HandleRegionChanged);

            mControl.MouseWheelZoom     += new EventHandler(HandleMouseWheelZoom);
            mControl.AvailableZoomLevels = mWireframeControl.AvailableZoomLevels;

            mControl.XnaUpdate += new Action(HandleXnaUpdate);
            mControl.Panning   += HandlePanning;

            mSpriteOutline = new LineRectangle(managers);
            managers.ShapeManager.Add(mSpriteOutline);
            mSpriteOutline.Visible = false;
            mSpriteOutline.Color   = OutlineColor;

            mLineGrid = new LineGrid(managers);
            managers.ShapeManager.Add(mLineGrid);
            mLineGrid.Visible = false;
            mLineGrid.Color   = OutlineColor;

            mControl.Click += new EventHandler(HandleClick);

            mStatusText = new StatusTextController(managers);
            mControl_XnaInitialize();
        }
Пример #18
0
    private static ValidMoves CheckValidMoves(LineGrid grid, Tuple <int, int> currentPosition, char currentPosChar, Dictionary <Tuple <int, int>, int> positionDict, ValidMoves lastMove)
    {
        var dir = new Direction(grid, currentPosition);

        switch (currentPosChar)
        {
        case '-':
            dir.IsLeft  = !OnList(positionDict, currentPosition, 0, -1) && new char[] { '+', '-', 'X' }.Contains(dir.LeftChar);
            dir.IsRight = !OnList(positionDict, currentPosition, 0, 1) && new char[] { '+', '-', 'X' }.Contains(dir.RightChar);
            return(dir.GetMove());

        case '|':
            dir.IsUp   = !OnList(positionDict, currentPosition, -1, 0) && new char[] { '+', 'X', '|' }.Contains(dir.UpChar);
            dir.IsDown = !OnList(positionDict, currentPosition, 1, 0) && new char[] { '+', 'X', '|' }.Contains(dir.DownChar);
            return(dir.GetMove());

        case '+':
            dir.IsUp = (!OnList(positionDict, currentPosition, -1, 0)) &&
                       (lastMove != ValidMoves.Down && lastMove != ValidMoves.Up && new char[] { '+', '|', 'X' }.Contains(dir.UpChar));
            dir.IsDown = (!OnList(positionDict, currentPosition, 1, 0)) &&
                         (lastMove != ValidMoves.Down && lastMove != ValidMoves.Up && new char[] { '+', '|', 'X' }.Contains(dir.DownChar));
            dir.IsLeft = !OnList(positionDict, currentPosition, 0, -1) &&
                         (lastMove != ValidMoves.Left && lastMove != ValidMoves.Right && new char[] { '+', '-', 'X' }.Contains(dir.LeftChar));
            dir.IsRight = !OnList(positionDict, currentPosition, 0, 1) &&
                          (lastMove != ValidMoves.Left && lastMove != ValidMoves.Right && new char[] { '+', '-', 'X' }.Contains(dir.RightChar));
            return(dir.GetMove());

        case 'X':
            dir.IsUp    = !OnList(positionDict, currentPosition, -1, 0) && new char[] { '+', 'X', '|' }.Contains(dir.UpChar);
            dir.IsDown  = !OnList(positionDict, currentPosition, 1, 0) && new char[] { '+', 'X', '|' }.Contains(dir.DownChar);
            dir.IsLeft  = !OnList(positionDict, currentPosition, 0, -1) && new char[] { '+', '-', 'X' }.Contains(dir.LeftChar);
            dir.IsRight = !OnList(positionDict, currentPosition, 0, 1) && new char[] { '+', '-', 'X' }.Contains(dir.RightChar);
            return(dir.GetMove());

        default:
            throw new ArgumentException($"Invalid Current Position Character - '{currentPosChar}'", nameof(currentPosChar));
        }
    }
Пример #19
0
 private static char GetDown(LineGrid grid, Tuple <int, int> currentPosition) =>
 currentPosition.Item1 >= grid.RowCount - 1 ? ' ' : grid.Grid[currentPosition.Item1 + 1][currentPosition.Item2];
Пример #20
0
 private static char GetUp(LineGrid grid, Tuple <int, int> currentPosition) =>
 currentPosition.Item1 <= 0 ? ' ' : grid.Grid[currentPosition.Item1 - 1][currentPosition.Item2];
Пример #21
0
 private static char GetRight(LineGrid grid, Tuple <int, int> currentPosition) =>
 currentPosition.Item2 >= grid.ColumnCount - 1 ? ' ' : grid.Grid[currentPosition.Item1][currentPosition.Item2 + 1];
Пример #22
0
    //Populate the line grid with line points from the ports
    private static void PopulatePorts(LineGrid grid, int subspaces, List <int>[] allPorts, int numLines)
    {
        var id = 1;

        //LEFT
        var target = 0;
        var ports  = allPorts[0];

        foreach (var i in ports)
        {
            for (var j = subspaces - 1; j >= 0; j--)
            {
                var line = new Line(new Vector2Int(0, i * subspaces + j), id++, target);
                grid.AddLine(line);

                target = (target + 1) % numLines;
            }
        }

        //TOP
        target = 0;
        ports  = allPorts[1];
        foreach (var i in ports)
        {
            for (var j = 0; j < subspaces; j++)
            {
                var line = new Line(new Vector2Int(i * subspaces + j, grid.h - 1), id++, target);
                grid.AddLine(line);

                target = (target + 1) % numLines;
            }
        }

        //RIGHT
        target = 0;
        ports  = allPorts[2];
        foreach (var i in ports)
        {
            for (var j = subspaces - 1; j >= 0; j--)
            {
                var line = new Line(new Vector2Int(grid.w - 1, i * subspaces + j), id++, target);
                grid.AddLine(line);

                target = (target + 1) % numLines;
            }
        }

        //BOTTOM
        target = 0;
        ports  = allPorts[3];
        foreach (var i in ports)
        {
            for (var j = 0; j < subspaces; j++)
            {
                var line = new Line(new Vector2Int(i * subspaces + j, 0), id++, target);
                grid.AddLine(line);

                target = (target + 1) % numLines;
            }
        }
    }
Пример #23
0
 private static char GetLeft(LineGrid grid, Tuple <int, int> currentPosition) =>
 currentPosition.Item2 <= 0 ? ' ' : grid.Grid[currentPosition.Item1][currentPosition.Item2 - 1];
Пример #24
0
    public static bool Line(char[][] grid)
    {
        var newGrid = new LineGrid(grid);

        Console.WriteLine($"newGrid.startX1 = {newGrid.StartX1}");
        Console.WriteLine($"newGrid.startX2 = {newGrid.StartX2}");

        var start           = newGrid.StartX1;
        var currentPosition = start;
        var currentPosChar  = 'X';
        var end             = newGrid.StartX2;

        var positionDict = new Dictionary <Tuple <int, int>, int>
        {
            { currentPosition, 0 }
        };

        var lastMove = ValidMoves.Empty;

        while (true)
        {
            var result = CheckValidMoves(newGrid, currentPosition, currentPosChar, positionDict, lastMove);
            if (result == ValidMoves.NoValid)
            {
                if (start.Equals(newGrid.StartX2))
                {
                    return(false);
                }
                start           = newGrid.StartX2;
                end             = newGrid.StartX1;
                currentPosition = start;
                currentPosChar  = 'X';
                positionDict.Clear();
                positionDict.Add(start, 0);
                continue;
            }
            //Move
            switch (result)
            {
            case ValidMoves.Up:
                currentPosition = new Tuple <int, int>(currentPosition.Item1 - 1, currentPosition.Item2);
                lastMove        = ValidMoves.Up;
                break;

            case ValidMoves.Down:
                currentPosition = new Tuple <int, int>(currentPosition.Item1 + 1, currentPosition.Item2);
                lastMove        = ValidMoves.Down;
                break;

            case ValidMoves.Right:
                currentPosition = new Tuple <int, int>(currentPosition.Item1, currentPosition.Item2 + 1);
                lastMove        = ValidMoves.Right;
                break;

            case ValidMoves.Left:
                currentPosition = new Tuple <int, int>(currentPosition.Item1, currentPosition.Item2 - 1);
                lastMove        = ValidMoves.Left;
                break;

            default:
                throw new ArgumentException($"No valid move given - '{result}'", nameof(result));
            }

            currentPosChar = newGrid.Grid[currentPosition.Item1][currentPosition.Item2];
            positionDict.Add(currentPosition, 0);
            if (!currentPosition.Equals(end))
            {
                continue;
            }
            var expectedBlanks = newGrid.Spaces - positionDict.Count;
            if (expectedBlanks != newGrid.Blanks)
            {
                continue;
            }
            return(true);
        }
    }
Пример #25
0
    //Build All
    public static void Build(GameObject boardObj, int height, int width, float unitSize)
    {
        //parent transf
        var parent         = boardObj.transform;
        var parentRenderer = parent.GetComponent <MeshRenderer>();

        parentRenderer.enabled = false;

        //Create the gameobject
        GameObject gameObject = new GameObject("BoardMesh", typeof(MeshFilter), typeof(MeshRenderer));

        gameObject.transform.parent = parent;

        //Get Materials from parent
        var mats = new List <Material>();

        parentRenderer.GetMaterials(mats);
        var mainMaterial = mats[0];
        var lineMaterial = mats[1];


        var allPorts = new List <int> [4];

        allPorts[0] = new List <int>();
        allPorts[1] = new List <int>();
        allPorts[2] = new List <int>();
        allPorts[3] = new List <int>();

        // ==== LINES ====
        if (height >= 3 && width >= 3)
        {
            //board ports
            allPorts = GeneratePorts(width, height);

            //grid
            var      gridw = width * Subspaces;
            var      gridh = height * Subspaces;
            LineGrid grid  = new LineGrid(gridw, gridh, width * unitSize, height * unitSize);

            //populate grid with port points
            var numLines = (int)((allPorts[0].Count + allPorts[1].Count + allPorts[2].Count + allPorts[3].Count) * Subspaces) / 4;
            PopulatePorts(grid, Subspaces, allPorts, numLines);

            //create lines from ports to other ports
            PathFindLines(grid);

            //build lines
            grid.BuildLines(gameObject, lineMaterial);
        }

        // ==== BOARD MESH ====
        Mesh mesh = CreateBoardBaseMesh(width, height, unitSize, allPorts);

        //Set mesh
        gameObject.GetComponent <MeshFilter>().mesh       = mesh;
        gameObject.GetComponent <MeshRenderer>().material = mainMaterial;

        //add outline to board
        var outln = gameObject.AddComponent <QuickOutline>();

        outln.OutlineMode  = QuickOutline.Mode.OutlineVisible;
        outln.OutlineColor = new Color32(7, 80, 73, 255);
        outln.OutlineWidth = 5;

        // ==== PORTS MESHES ====
        CreatePorts(width, height, unitSize, allPorts, parent);

        return;
    }
Пример #26
0
        public PolygonEditorSettings(LineGrid lineGrid)
        {

        }
Пример #27
0
 public PolygonEditorSettings(LineGrid lineGrid)
 {
 }