SpatialConstraintGridCell[] Rotate5x5(SpatialConstraintGridCell[] cells)
        {
            var SrcIndex = new int[] {
                0, 1, 2, 3, 4,
                5, 6, 7, 8, 9,
                10, 11, 12, 13, 14,
                15, 16, 17, 18, 19,
                20, 21, 22, 23, 24
            };
            var DstIndex = new int[] {
                20, 15, 10, 5, 0,
                21, 16, 11, 6, 1,
                22, 17, 12, 7, 2,
                23, 18, 13, 8, 3,
                24, 19, 14, 9, 4,
            };

            var result = new SpatialConstraintGridCell[cells.Length];

            for (int i = 0; i < result.Length; i++)
            {
                result[DstIndex[i]] = cells[SrcIndex[i]];
            }
            return(result);
        }
        SpatialConstraintGridCell[] Rotate7x7(SpatialConstraintGridCell[] cells)
        {
            var SrcIndex = new int[] {
                0, 1, 2, 3, 4, 5, 6,
                7, 8, 9, 10, 11, 12, 13,
                14, 15, 16, 17, 18, 19, 20,
                21, 22, 23, 24, 25, 26, 27,
                28, 29, 30, 31, 32, 33, 34,
                35, 36, 37, 38, 39, 40, 41,
                42, 43, 44, 45, 46, 47, 48
            };

            var DstIndex = new int[] {
                42, 35, 28, 21, 14, 7, 0,
                43, 36, 29, 22, 15, 8, 1,
                44, 37, 30, 23, 16, 9, 2,
                45, 38, 31, 24, 17, 10, 3,
                46, 39, 32, 25, 18, 11, 4,
                47, 40, 33, 26, 19, 12, 5,
                48, 41, 34, 27, 20, 13, 6,
            };

            var result = new SpatialConstraintGridCell[cells.Length];

            for (int i = 0; i < result.Length; i++)
            {
                result[DstIndex[i]] = cells[SrcIndex[i]];
            }
            return(result);
        }
Example #3
0
        protected bool DrawGridCell(SpatialConstraintGridCell cell)
        {
            string title    = GetConstraintString(cell.CellType);
            bool   modified = false;

            if (GUILayout.Button(title, GUILayout.MinHeight(minCellHeight)))
            {
                cell.CellType = GetNextType(cell.CellType);
                modified      = true;
            }
            return(modified);
        }
        bool Process1x2(SpatialConstraintGrid1x2 constraint, PropSocket socket, DungeonModel model, ref Matrix4x4 outOffset)
        {
            var gridModel = model as GridDungeonModel;

            if (gridModel == null)
            {
                return(false);
            }
            var gridSize = gridModel.Config.GridCellSize;

            var     markerRotation = Matrix.GetRotation(ref socket.Transform);
            var     markerPosition = Matrix.GetTranslation(ref socket.Transform);
            Vector3 leftOffset, rightOffset;
            float   offset = gridSize.x;

            leftOffset  = markerRotation * new Vector3(-offset, 0, 0);
            rightOffset = markerRotation * new Vector3(0, 0, 0);

            var left  = MathUtils.RoundToIntVector(MathUtils.Divide(markerPosition + leftOffset, gridSize));
            var right = MathUtils.RoundToIntVector(MathUtils.Divide(markerPosition + rightOffset, gridSize));

            var leftOccupied  = groundPositions.ContainsKey(left);
            var rightOccupied = groundPositions.ContainsKey(right);

            var  occupied = new bool[] { leftOccupied, rightOccupied };
            var  cells    = new SpatialConstraintGridCell[] { constraint.left, constraint.right };
            bool valid    = false;

            if (CheckValidity(cells, occupied))
            {
                valid = true;
            }

            cells = new SpatialConstraintGridCell[] { constraint.right, constraint.left };
            if (CheckValidity(cells, occupied))
            {
                valid = true;
            }

            if (!valid)
            {
                return(false);
            }

            var rotation = Quaternion.identity; // Quaternion.Euler(0, offsetRotY, 0);

            outOffset = Matrix4x4.TRS(Vector3.zero, rotation, Vector3.one);
            return(true);
        }
        SpatialConstraintGridCell[] Rotate2x2(SpatialConstraintGridCell[] cells)
        {
            var SrcIndex = new int[] {
                0, 1,
                2, 3
            };
            var DstIndex = new int[] {
                2, 0,
                3, 1
            };

            var result = new SpatialConstraintGridCell[4];

            for (int i = 0; i < 4; i++)
            {
                result[DstIndex[i]] = cells[SrcIndex[i]];
            }
            return(result);
        }
        SpatialConstraintGridCell[] Rotate3x3(SpatialConstraintGridCell[] cells)
        {
            var SrcIndex = new int[] {
                0, 1, 2,
                3, 4, 5,
                6, 7, 8
            };
            var DstIndex = new int[] {
                6, 3, 0,
                7, 4, 1,
                8, 5, 2
            };

            var result = new SpatialConstraintGridCell[9];

            for (int i = 0; i < result.Length; i++)
            {
                result[DstIndex[i]] = cells[SrcIndex[i]];
            }
            return(result);
        }