コード例 #1
0
    /**
     * Renders the entire editor window from helper class
     */
    void OnGUI()
    {
        GUILayout.BeginArea(new Rect(20, 20, 760, 80));

        spawnerData.SpawnerName = EditorGUILayout.TextField("Spawner name", spawnerData.SpawnerName);
        spawnerCountBuffer      = EditorGUILayout.IntField("Enemy count", spawnerCountBuffer);

        spawnerData.SpawnerSpawnCount = spawnerCountBuffer;

        GUILayout.EndArea();

        List <SpawnInfo> infos = spawnerData.SpawnerInfo;
        int diff = spawnerData.SpawnerSpawnCount - infos.Count;

        if (diff > 0)
        {
            for (int nData = 0; nData < diff; ++nData)
            {
                infos.Add(new SpawnInfo());
            }
        }

        GUILayout.BeginArea(new Rect(20, 100, 760, 350));
        scrollBarPosition = GUILayout.BeginScrollView(scrollBarPosition, false, true, GUIStyle.none, GUI.skin.verticalScrollbar);

        // Displays all
        for (int nData = 0; nData < spawnerData.SpawnerSpawnCount; ++nData)
        {
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Remove", GUILayout.Width(80)))
            {
                infos.RemoveAt(nData);

                spawnerCountBuffer            -= 1;
                spawnerData.SpawnerSpawnCount -= 1;

                return;
            }

            GUILayout.Space(20);
            EditorGUILayout.LabelField("Prefab", GUILayout.Width(45));
            infos[nData].SpawnPrefab = EditorGUILayout.ObjectField(infos[nData].SpawnPrefab, typeof(GameObject), true) as GameObject;

            GUILayout.Space(20);
            EditorGUILayout.LabelField("Timing", GUILayout.Width(45));
            infos[nData].SpawnTiming = EditorGUILayout.FloatField(infos[nData].SpawnTiming, GUILayout.Width(50));

            GUILayout.Space(20);
            EditorGUILayout.LabelField("Position", GUILayout.Width(55));
            infos[nData].SpawnPosition = EditorGUILayout.Vector3Field("", infos[nData].SpawnPosition, GUILayout.Width(120));

            GUILayout.Space(20);
            Transform selected = null;
            selected = EditorGUILayout.ObjectField(selected, typeof(Transform), true, GUILayout.Width(100)) as Transform;

            if (selected != null)
            {
                infos[nData].SpawnPosition = selected.position;
            }

            EditorGUILayout.EndHorizontal();
            GUILayout.Space(5);
        }

        EditorGUILayout.EndScrollView();
        GUILayout.EndArea();

        GUILayout.BeginArea(new Rect(20, 470, 760, 30));
        if (editorState == EditionState.Creation)
        {
            if (GUILayout.Button("Create"))
            {
                // Apply list modifications
                diff = spawnerData.SpawnerSpawnCount - infos.Count;

                if (diff < 0)
                {
                    for (int nData = 0; nData < (diff * -1); ++nData)
                    {
                        infos.RemoveAt(infos.Count - 1);
                    }
                }

                spawnerData.SortSpawnerInfo();
                StageEditorSpawnerController.SaveAsset(spawnerData);
                Close();
            }
        }
        else
        {
            if (GUILayout.Button("Close"))
            {
                Close();
            }
        }
        GUILayout.EndArea();
    }