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