예제 #1
0
파일: MapPopulator.cs 프로젝트: jaoel/LD44
 public void Initialize(LCG random, InteractiveDungeonObject interactiveObjectContainer, SpawnableContainer spawnKeyframes,
                        TrapContainer trapContainer, MapPainter mapPainter)
 {
     _timer  = new Timer();
     _random = random;
     _interactiveObjectContainer = interactiveObjectContainer;
     _spawnKeyframes             = spawnKeyframes;
     _trapContainer = trapContainer;
     _mapPainter    = mapPainter;
 }
예제 #2
0
    public override void OnInspectorGUI()
    {
        targetContainer           = (SpawnableContainer)target;
        targetContainer.keyframes = targetContainer.keyframes.OrderBy(x => x.keyframeIndex).ToList();

        foreach (SpawnableKeyframe keyframe in targetContainer.keyframes)
        {
            foreach (SpawnableKeyframe other in targetContainer.keyframes)
            {
                other.spawnableObjects.ForEach(x =>
                {
                    if (x.spawnablePrefab != null)
                    {
                        if (!keyframe.spawnableObjects.Any(y => y.spawnablePrefab == x.spawnablePrefab))
                        {
                            keyframe.spawnableObjects.Add(new Spawnable());
                            keyframe.spawnableObjects.Last().spawnablePrefab = x.spawnablePrefab;
                        }
                    }
                });
            }
        }

        //serializedObject.Update();
        EditorGUILayout.LabelField("Droppable Item data");
        EditorGUILayout.PropertyField(_droppableItems, true);

        EditorGUILayout.Space();
        DrawUILine(Color.gray);
        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Spawnable keyframe data");
        EditorGUILayout.LabelField("Number of keyframes: " + _keyframes.arraySize);

        EditorGUILayout.Space();
        EditorGUILayout.Space();

        for (int i = 0; i < _keyframes.arraySize; i++)
        {
            SerializedProperty keyframe = _keyframes.GetArrayElementAtIndex(i);

            float height = _lineHeight;

            if (keyframe.isExpanded)
            {
                height += _lineHeight * 4;
                SerializedProperty spawnableList = keyframe.FindPropertyRelative("spawnableObjects");
                height += spawnableList.arraySize * _lineHeight;
            }

            GUILayoutOption rowHeight = GUILayout.Height(height);
            EditorGUILayout.PropertyField(keyframe, rowHeight);

            if (keyframe.isExpanded)
            {
                if (GUILayout.Button("Delete keyframe"))
                {
                    _keyframes.DeleteArrayElementAtIndex(i);
                }
            }

            EditorGUILayout.Space();
            DrawUILine(Color.gray);
        }

        if (GUILayout.Button("Add keyframe"))
        {
            SpawnableContainer container   = (SpawnableContainer)target;
            SpawnableKeyframe  newKeyframe = new SpawnableKeyframe();

            if (container.keyframes.Count > 0)
            {
                newKeyframe.keyframeIndex    = container.keyframes.Last().keyframeIndex + 1;
                newKeyframe.spawnableObjects = new List <Spawnable>();
                container.keyframes.Last().spawnableObjects.ForEach(x =>
                {
                    Spawnable newSpawnable       = new Spawnable();
                    newSpawnable.spawnablePrefab = x.spawnablePrefab;
                    newSpawnable.density         = x.density;
                    newKeyframe.spawnableObjects.Add(newSpawnable);
                });
            }

            container.keyframes.Add(newKeyframe);
        }

        serializedObject.ApplyModifiedProperties();
    }