public override void OnInspectorGUI()
{
Map m = (Map)target;
showDimensions = EditorGUILayout.Foldout(showDimensions, "Map Dimensions");
if(showDimensions) {
// EditorGUI.indentLevel++;
GUILayout.BeginHorizontal();
GUILayout.Label("Width", GUILayout.Width(78));
float nextXSz = EditorGUILayout.FloatField(m.size.x, GUILayout.Width(32));
GUILayout.Label("Height", GUILayout.Width(78));
float nextYSz = EditorGUILayout.FloatField(m.size.y, GUILayout.Width(32));
Vector2 nextSz = new Vector2(nextXSz, nextYSz);
if(nextSz != m.size) {
RegisterUndo("Map Size Change");
m.size = nextSz;
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("Side Length", GUILayout.Width(78));
float nextLength = EditorGUILayout.FloatField(m.sideLength, GUILayout.Width(32));
if(nextLength != m.sideLength) {
RegisterUndo("Map Side Length Change");
m.sideLength = nextLength;
}
GUILayout.Label("Tile Height", GUILayout.Width(78));
float nextHeight = EditorGUILayout.FloatField(m.tileHeight, GUILayout.Width(32));
if(nextHeight != m.tileHeight) {
RegisterUndo("Map Side Height Change");
m.tileHeight = nextHeight;
}
GUILayout.EndHorizontal();
// EditorGUI.indentLevel--;
}
EditorGUILayout.Separator();
GUILayout.BeginHorizontal();
GUILayout.Label("Edit Z", GUILayout.Width(78));
int nextZ = EditorGUILayout.IntSlider(editZ, 0, 20);
if(nextZ != editZ) {
// RegisterUndo(target, "Map Height Selection");
editZ = nextZ;
}
GUILayout.EndHorizontal();
EditorGUILayout.Separator();
EditorGUILayout.BeginHorizontal();
GUIContent[] toolbarOptions = new GUIContent[3];
toolbarOptions[(int)EditMode.AddRemove] = new GUIContent("Add/Remove");
toolbarOptions[(int)EditMode.Reshape] = new GUIContent("Reshape");
toolbarOptions[(int)EditMode.Paint] = new GUIContent("Paint");
EditMode nextMode = (EditMode)GUILayout.Toolbar((int)editMode, toolbarOptions);
EditorGUILayout.EndHorizontal();
if(nextMode != editMode) {
editMode = nextMode;
editModeChanged = true;
}
if(editMode == EditMode.AddRemove || editMode == EditMode.Reshape) {
//show inset/offset settings for current stamp
GUILayout.BeginHorizontal();
GUILayout.Label("Invisible", GUILayout.Width(78));
makeInvisibleTiles = EditorGUILayout.Toggle(makeInvisibleTiles);
GUILayout.EndHorizontal();
GUILayout.Label("Side Insets");
EditorGUILayout.BeginHorizontal();
GUILayout.Label("-X", GUILayout.Width(32));
sideInsets[(int)Neighbors.FrontLeftIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.FrontLeftIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.BackRightIdx ]);
GUILayout.Label("+X", GUILayout.Width(32));
sideInsets[(int)Neighbors.BackRightIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.BackRightIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.FrontLeftIdx ]);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("-Y", GUILayout.Width(32));
sideInsets[(int)Neighbors.FrontRightIdx] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.FrontRightIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.BackLeftIdx ]);
GUILayout.Label("+Y", GUILayout.Width(32));
sideInsets[(int)Neighbors.BackLeftIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.BackLeftIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.FrontRightIdx]);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("-Z", GUILayout.Width(32));
sideInsets[(int)Neighbors.BottomIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.BottomIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.TopIdx ]);
GUILayout.Label("+Z", GUILayout.Width(32));
sideInsets[(int)Neighbors.TopIdx ] = Mathf.Clamp(EditorGUILayout.FloatField(sideInsets[(int)Neighbors.TopIdx ], GUILayout.Width(32)), 0, 1.0f-sideInsets[(int)Neighbors.BottomIdx ]);
EditorGUILayout.EndHorizontal();
// GUILayout.Label("Corner Insets (not yet implemented)");
// EditorGUILayout.BeginHorizontal();
// GUILayout.Label(" 0", GUILayout.Width(32));
// cornerInsets[(int)Corners.Front] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Front], GUILayout.Width(32)), 0, 1.0f);
// GUILayout.Label("+X", GUILayout.Width(32));
// cornerInsets[(int)Corners.Right] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Right], GUILayout.Width(32)), 0, 1.0f);
// EditorGUILayout.EndHorizontal();
// EditorGUILayout.BeginHorizontal();
// GUILayout.Label("+Y", GUILayout.Width(32));
// cornerInsets[(int)Corners.Left ] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Left ], GUILayout.Width(32)), 0, 1.0f);
// GUILayout.Label("+XY", GUILayout.Width(32));
// cornerInsets[(int)Corners.Back ] = Mathf.Clamp(EditorGUILayout.FloatField(cornerInsets[(int)Corners.Back ], GUILayout.Width(32)), 0, 1.0f);
// EditorGUILayout.EndHorizontal();
} else if(editMode == EditMode.Paint) {
EditorGUILayout.Separator();
specScrollPos = EditorGUILayout.BeginScrollView(specScrollPos, true, false, GUILayout.Height(80));
EditorGUILayout.BeginHorizontal(GUILayout.Height(64));
//show list of texture specs controls
//a texture spec is a rectangular Texture2D with some metadata
//only for now, there's no metadata.
//this metadata gets stored in the map object, which composes the
//textures into an atlas. uvs are mapped from this atlas.
//changes to the texture spec list force recreation of the mesh.
//texture spec info for each face is stored as part of the MapTile class.
Texture2D[] textures = new Texture2D[m.TileSpecCount+1];
if(specPlaceholderTexture == null) {
specPlaceholderTexture = EditorGUIUtility.LoadRequired("SpecPlaceholder.png") as Texture2D;
}
for(int i = 0; i < m.TileSpecCount; i++) {
Texture2D specTex = m.TileSpecAt(i).texture;
if(specTex != null) {
textures[i] = specTex;
} else {
textures[i] = specPlaceholderTexture;
}
}
textures[m.TileSpecCount] = specPlaceholderTexture;
var names = new Dictionary<string, int>();
for(int i = 0; i < textures.Length; i++) {
Texture2D tex = textures[i];
GUIUpdateTexture(tex, i, names);
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndScrollView();
string n = GUI.GetNameOfFocusedControl();
if(names.ContainsKey(n)) {
if(names[n] < m.TileSpecCount) {
specSelectedSpec = names[n];
}
}
EditorGUI.indentLevel++;
//now, show the parameters for this spec
bool oldEnabled = GUI.enabled;
GUI.enabled = specSelectedSpec < m.TileSpecCount;
if(GUILayout.Button("Delete Tile")) {
RegisterUndo("Delete Tile Spec");
m.RemoveTileSpecAt(specSelectedSpec);
while(specSelectedSpec >= m.TileSpecCount) {
specSelectedSpec--;
if(specSelectedSpec < 0) { specSelectedSpec = 0; break; }
}
}
GUI.enabled = oldEnabled;
EditorGUI.indentLevel--;
EditorGUILayout.Separator();
}
if(GUI.changed) {
EditorUtility.SetDirty(target);
}
}