void InitializeVariables() { hexMap[0] = new ScriptHex[8]; hexMap[1] = new ScriptHex[9]; hexMap[2] = new ScriptHex[10]; hexMap[3] = new ScriptHex[11]; hexMap[4] = new ScriptHex[12]; hexMap[5] = new ScriptHex[13]; hexMap[6] = new ScriptHex[14]; hexMap[7] = new ScriptHex[15]; hexMap[8] = new ScriptHex[14]; hexMap[9] = new ScriptHex[13]; hexMap[10] = new ScriptHex[12]; hexMap[11] = new ScriptHex[11]; hexMap[12] = new ScriptHex[10]; hexMap[13] = new ScriptHex[9]; hexMap[14] = new ScriptHex[8]; for (int i = 0; i < hexMap.Length; i++) { for (int j = 0; j < hexMap[i].Length; j++) { hexMap[i][j] = new ScriptHex(); } } hexMap[7][7].isActive = true; hexMap[7][7].hexType = HexType.WOOD; hexMap[7][7].hexNum = 3; TurnOnActive(7, 7); }
void OnGUI() { xOffset = 265f; yOffset = 50f; GUIStyle style = EditorStyles.label; style.alignment = TextAnchor.MiddleCenter; EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(GUILayout.Width(position.width * 0.84f), GUILayout.Height(position.height - 50f)); // @author: MARSHALL AND HIS MATH GODLINESS, plus nathan #region Map // Done so that it will create the vertical field to correct height/width EditorGUILayout.LabelField(""); // Loop through and draw all of the hexes for (int i = 0; i < numRows; i++) { switch (i) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: for (int j = 0; j < 8 + i; j++) { labelText = string.Format("({0},{1})\n", i, j) + hexMap[i][j].hexType.ToString().ToLower() + "\n" + hexMap[i][j].hexNum; labelPosition = new Rect(xOffset, yOffset, 40f, 40f); hexCenter.x = xOffset + 20f; hexCenter.y = yOffset + 13f; if (hexMap[i][j].isActive) { #region data change check // Check to modify the number of each dice roll if it's been changed if (hexMap[i][j].oldHexNum != hexMap[i][j].hexNum) { switch (hexMap[i][j].hexNum) { case 1: numOnes++; break; case 2: numTwos++; break; case 3: numThrees++; break; case 4: numFours++; break; case 5: numFives++; break; case 6: numSixes++; break; } switch (hexMap[i][j].oldHexNum) { case 1: numOnes--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 2: numTwos--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 3: numThrees--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 4: numFours--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 5: numFives--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 6: numSixes--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; default: hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; numUnsetRollNum--; break; } } // Check to modify the number of the hex types if it's been changed if (hexMap[i][j].hexType != hexMap[i][j].prevHexType) { switch (hexMap[i][j].hexType) { case HexType.BRICK: numBrick++; break; case HexType.GRAIN: numWheat++; break; case HexType.WOOD: numWood++; break; case HexType.WOOL: numWool++; break; } switch (hexMap[i][j].prevHexType) { case HexType.BRICK: numBrick--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; case HexType.GRAIN: numWheat--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; case HexType.WOOD: numWood--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; case HexType.WOOL: numWool--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; default: hexMap[i][j].prevHexType = hexMap[i][j].hexType; numUnsetType--; break; } } #endregion if (hexMap[i][j].hexType != HexType.NONE) { TurnOnActive(i, j); } if (GUI.Button(labelPosition, labelText, style)) { selectedRow = i; selectedColumn = j; } } else { EditorGUI.LabelField(labelPosition, string.Format("({0},{1})\n", i, j)); } ScriptHex hex = new ScriptHex(hexCenter, hexEdgeLength); #region draw the hex // Vertical lines if (hexMap[i][j].isActive) { switch (hexMap[i][j].hexType) { case HexType.BRICK: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.red, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.red, 1f, true); break; case HexType.GRAIN: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.yellow, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.yellow, 1f, true); break; case HexType.WOOD: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.green, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.green, 1f, true); break; case HexType.WOOL: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.white, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.white, 1f, true); break; default: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.blue, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.blue, 1f, true); break; } } else { Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.black, 1f, false); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.black, 1f, false); } // Bottom of hex hex.hexCorners[0].x += 17f; hex.hexCorners[1].x += 17f; hex.hexCorners[2].x += 17f; if (hexMap[i][j].isActive) { switch (hexMap[i][j].hexType) { case HexType.BRICK: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.red, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.red, 1f, true); break; case HexType.GRAIN: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.yellow, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.yellow, 1f, true); break; case HexType.WOOD: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.green, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.green, 1f, true); break; case HexType.WOOL: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.white, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.white, 1f, true); break; default: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.blue, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.blue, 1f, true); break; } } else { Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.black, 1f, false); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.black, 1f, false); } // Top of hex hex.hexCorners[3].x -= 17f; hex.hexCorners[4].x -= 17f; hex.hexCorners[5].x -= 17f; if (hexMap[i][j].isActive) { switch (hexMap[i][j].hexType) { case HexType.BRICK: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.red, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.red, 1f, true); break; case HexType.GRAIN: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.yellow, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.yellow, 1f, true); break; case HexType.WOOD: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.green, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.green, 1f, true); break; case HexType.WOOL: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.white, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.white, 1f, true); break; default: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.blue, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.blue, 1f, true); break; } } else { Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.black, 1f, false); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.black, 1f, false); } #endregion xOffset += hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f; } xOffset -= (hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f) * (i + 8); xOffset += (hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f) * (Mathf.Cos(Mathf.PI * (4f / 3f))); yOffset += (hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f) * MAGIC_EDGE_DISTANCE_CONVERT - 1; break; case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: for (int j = 0; j < 22 - i; j++) { labelText = string.Format("({0},{1})\n", i, j) + hexMap[i][j].hexType.ToString().ToLower() + "\n" + hexMap[i][j].hexNum; labelPosition = new Rect(xOffset, yOffset, 40f, 40f); hexCenter.x = xOffset + 20f; hexCenter.y = yOffset + 13f; #region data change check // Check to modify the number of each dice roll if it's been changed if (hexMap[i][j].oldHexNum != hexMap[i][j].hexNum) { switch (hexMap[i][j].hexNum) { case 1: numOnes++; break; case 2: numTwos++; break; case 3: numThrees++; break; case 4: numFours++; break; case 5: numFives++; break; case 6: numSixes++; break; } switch (hexMap[i][j].oldHexNum) { case 1: numOnes--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 2: numTwos--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 3: numThrees--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 4: numFours--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 5: numFives--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; case 6: numSixes--; hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; break; default: hexMap[i][j].oldHexNum = hexMap[i][j].hexNum; numUnsetRollNum--; break; } } // Check to modify the number of the hex types if it's been changed if (hexMap[i][j].hexType != hexMap[i][j].prevHexType) { switch (hexMap[i][j].hexType) { case HexType.BRICK: numBrick++; break; case HexType.GRAIN: numWheat++; break; case HexType.WOOD: numWood++; break; case HexType.WOOL: numWool++; break; } switch (hexMap[i][j].prevHexType) { case HexType.BRICK: numBrick--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; case HexType.GRAIN: numWheat--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; case HexType.WOOD: numWood--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; case HexType.WOOL: numWool--; hexMap[i][j].prevHexType = hexMap[i][j].hexType; break; default: hexMap[i][j].prevHexType = hexMap[i][j].hexType; numUnsetType--; break; } } #endregion if (hexMap[i][j].isActive) { if (hexMap[i][j].hexType != HexType.NONE) { TurnOnActive(i, j); } if (GUI.Button(labelPosition, labelText, style)) { selectedRow = i; selectedColumn = j; } } else { EditorGUI.LabelField(labelPosition, string.Format("({0},{1})\n", i, j)); } ScriptHex hex = new ScriptHex(hexCenter, hexEdgeLength); #region draw the hex // Vertical lines if (hexMap[i][j].isActive) { switch (hexMap[i][j].hexType) { case HexType.BRICK: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.red, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.red, 1f, true); break; case HexType.GRAIN: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.yellow, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.yellow, 1f, true); break; case HexType.WOOD: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.green, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.green, 1f, true); break; case HexType.WOOL: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.white, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.white, 1f, true); break; default: Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.blue, 1f, true); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.blue, 1f, true); break; } } else { Drawing.DrawLine(hex.hexCorners[2], hex.hexCorners[3], Color.black, 1f, false); Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[5], Color.black, 1f, false); } // Bottom of hex hex.hexCorners[0].x += 17f; hex.hexCorners[1].x += 17f; hex.hexCorners[2].x += 17f; if (hexMap[i][j].isActive) { switch (hexMap[i][j].hexType) { case HexType.BRICK: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.red, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.red, 1f, true); break; case HexType.GRAIN: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.yellow, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.yellow, 1f, true); break; case HexType.WOOD: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.green, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.green, 1f, true); break; case HexType.WOOL: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.white, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.white, 1f, true); break; default: Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.blue, 1f, true); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.blue, 1f, true); break; } } else { Drawing.DrawLine(hex.hexCorners[0], hex.hexCorners[1], Color.black, 1f, false); Drawing.DrawLine(hex.hexCorners[1], hex.hexCorners[2], Color.black, 1f, false); } // Top of hex hex.hexCorners[3].x -= 17f; hex.hexCorners[4].x -= 17f; hex.hexCorners[5].x -= 17f; if (hexMap[i][j].isActive) { switch (hexMap[i][j].hexType) { case HexType.BRICK: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.red, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.red, 1f, true); break; case HexType.GRAIN: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.yellow, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.yellow, 1f, true); break; case HexType.WOOD: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.green, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.green, 1f, true); break; case HexType.WOOL: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.white, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.white, 1f, true); break; default: Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.blue, 1f, true); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.blue, 1f, true); break; } } else { Drawing.DrawLine(hex.hexCorners[3], hex.hexCorners[4], Color.black, 1f, false); Drawing.DrawLine(hex.hexCorners[4], hex.hexCorners[5], Color.black, 1f, false); } #endregion xOffset += hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f; } xOffset -= (hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f) * (22 - i); xOffset -= (hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f) * (Mathf.Cos(Mathf.PI * (4f / 3f))); yOffset -= (hexEdgeLength * MAGIC_EDGE_DISTANCE_CONVERT * 2f) * (Mathf.Sin(Mathf.PI * (4f / 3f))) + 1; break; } } #endregion EditorGUILayout.EndVertical(); #region Map Data EditorGUILayout.BeginVertical("box", GUILayout.Width(position.width * 0.08f), GUILayout.Height(position.height - 50f)); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.LabelField("Selected Hex Data", EditorStyles.boldLabel); // Displays the selected hexes coordinates EditorGUILayout.LabelField(string.Format("Hex Coordinate: ({0},{1})", selectedRow, selectedColumn), GUILayout.Width(130f)); // Area to select the hex roll value EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Roll Value: ", GUILayout.Width(64f)); hexMap[selectedRow][selectedColumn].hexNum = EditorGUILayout.IntPopup(hexMap[selectedRow][selectedColumn].hexNum, intPopupString, intPopup, GUILayout.Width(35f)); EditorGUILayout.EndHorizontal(); // Area to select the hex type EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Hex Type: ", GUILayout.Width(62f)); hexTypeIndex = EditorGUILayout.Popup(hexTypeIndex, hexTypeOptions, GUILayout.Width(55f)); EditorGUILayout.EndHorizontal(); #endregion // Switch to convert from the string array to the hex type based off the index switch (hexTypeIndex) { case 0: hexMap[selectedRow][selectedColumn].hexType = HexType.WOOD; hexTypeIndex = 5; break; case 1: hexMap[selectedRow][selectedColumn].hexType = HexType.GRAIN; hexTypeIndex = 5; break; case 2: hexMap[selectedRow][selectedColumn].hexType = HexType.WOOL; hexTypeIndex = 5; break; case 3: hexMap[selectedRow][selectedColumn].hexType = HexType.BRICK; hexTypeIndex = 5; break; case 4: hexMap[selectedRow][selectedColumn].hexType = HexType.NONE; hexTypeIndex = 5; break; } SetAvailableHexTypes(); SetAvailableRollNums(); #region Heuristic Display float heuristicOffset = 175f; float heuristicX = 1060f; // Displays the heuristics to the designer Rect heuristicLabelRect = new Rect(heuristicX, heuristicOffset, 100f, 15f); EditorGUI.LabelField(heuristicLabelRect, "Amount Placed", EditorStyles.boldLabel); heuristicOffset += 17f; Rect numBrickLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numBrickLabelRect, "Brick: " + numBrick); heuristicOffset += 17f; Rect numWheatLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numWheatLabelRect, "Grain: " + numWheat); heuristicOffset += 17f; Rect numWoodLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numWoodLabelRect, "Wood: " + numWood); heuristicOffset += 17f; Rect numWoolLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numWoolLabelRect, "Wool: " + numWool); heuristicOffset += 17f; Rect typeUnsetLabelRect = new Rect(heuristicX, heuristicOffset, 150f, 15f); EditorGUI.LabelField(typeUnsetLabelRect, "Hex Types Unset: " + numUnsetType, EditorStyles.boldLabel); heuristicOffset += 17f; Rect numOneLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numOneLabelRect, "1's: " + numOnes); heuristicOffset += 17f; Rect numTwoLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numTwoLabelRect, "2's: " + numTwos); heuristicOffset += 17f; Rect numThreeLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numThreeLabelRect, "3's: " + numThrees); heuristicOffset += 17f; Rect numFourLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numFourLabelRect, "4's: " + numFours); heuristicOffset += 17f; Rect numFiveLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numFiveLabelRect, "5's: " + numFives); heuristicOffset += 17f; Rect numSixLabelRect = new Rect(heuristicX, heuristicOffset, 65f, 15f); EditorGUI.LabelField(numSixLabelRect, "6's: " + numSixes); heuristicOffset += 17f; Rect rollUnsetLabelRect = new Rect(heuristicX, heuristicOffset, 150f, 15f); EditorGUI.LabelField(rollUnsetLabelRect, " Roll Values Unset: " + numUnsetRollNum, EditorStyles.boldLabel); heuristicOffset += 30f; #endregion #region Export Data Button Rect exportDataButtonRect = new Rect(1078f, heuristicOffset, 100f, 25f); Color oldColor = GUI.color; // Check to make sure that at least one of each resource exist on the game map // Also check to make sure that the number of unset roll numbers is the same as the unset types // to ensure that all of the hexes that are given a hex type also have a valid number associated with that hex if (numBrick >= 1 && numWood >= 1 && numWheat >= 1 && numWool >= 1 && numUnsetRollNum == numUnsetType) { GUI.color = Color.green; if (GUI.Button(exportDataButtonRect, "Export Map")) { Debug.Log("Exports the map!"); } GUI.color = oldColor; } #endregion EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); }