public override void OnInspectorGUI() { PuzzleStageScriptableObject ps = (PuzzleStageScriptableObject)target; ps.rowCount = Mathf.Max(1, EditorGUILayout.IntField("Row Count:", ps.rowCount)); ps.colCount = Mathf.Max(1, EditorGUILayout.IntField("Col Count:", ps.colCount)); base.OnInspectorGUI(); resize(ps); for (int i = ps.rowCount - 1; i >= 0; i--) { GUILayout.BeginHorizontal(); for (int j = 0; j < ps.colCount; j++) { ps.matrix[j].entries[i] = (PuzzleManager.PuzzleObject)EditorGUILayout.EnumPopup(ps.matrix[j].entries[i]); } GUILayout.EndHorizontal(); } if (GUILayout.Button("Set dirty")) { EditorUtility.SetDirty(ps); } }
void resize(PuzzleStageScriptableObject ps) { if (ps.matrix == null) { ps.matrix = new PuzzleStageScriptableObject.Row[ps.colCount]; for (int i = 0; i < ps.colCount; i++) { ps.matrix[i] = new PuzzleStageScriptableObject.Row(); ps.matrix[i].entries = new PuzzleManager.PuzzleObject[ps.rowCount]; } } else { if (ps.matrix.Length != ps.rowCount || ps.matrix[0].entries.Length != ps.colCount) { var new_matrix = new PuzzleStageScriptableObject.Row[ps.colCount]; for (int i = 0; i < ps.colCount; i++) { new_matrix[i] = new PuzzleStageScriptableObject.Row(); new_matrix[i].entries = new PuzzleManager.PuzzleObject[ps.rowCount]; } for (int i = 0; i < ps.colCount && i < ps.matrix.Length; i++) { for (int j = 0; j < ps.rowCount && j < ps.matrix[0].entries.Length; j++) { new_matrix[i].entries[j] = ps.matrix[i].entries[j]; } } ps.matrix = new_matrix; } } }