Пример #1
0
        public override bool Open()
        {
            var files = parentDirectory.GetFilesFromDirectory <FileActor>();

            List <string> definitions = new List <string>();

            foreach (var file in files)
            {
                definitions.AddRange(file.GetDefinitionList());
            }

            PrefabEditor editor = new PrefabEditor(file);

            editor.InitEditor(definitions);

            return(true);
        }
Пример #2
0
 private void OnEnable()
 {
     m_instance = this;
 }
Пример #3
0
    public void OnEnable()
    {
        VisualElement root = this.rootVisualElement;

        root.style.flexDirection = FlexDirection.Row;
        root.style.paddingTop    = 20;
        root.style.paddingBottom = 20;



        VisualElement gameRoot = new VisualElement()
        {
            style =
            {
                width        = width * 0.22f,
                paddingRight =            20,
                paddingLeft  = 20
            }
        };
        VisualElement mapRoot = new VisualElement()
        {
            style =
            {
                alignContent = Align.Center,
                width        = width * 0.56f
            }
        };
        VisualElement levelRoot = new VisualElement()
        {
            style =
            {
                width        = width * 0.22f,
                paddingLeft  =            20,
                paddingRight = 20
            }
        };

        root.Add(gameRoot);
        root.Add(mapRoot);
        root.Add(levelRoot);

        //game root
        {
            gameRoot.Add(new Label("Choose a Gauntlet Game:"));
            gameData            = new ObjectField();
            gameData.objectType = typeof(GauntletGame);
            gameRoot.Add(gameData);

            gameData.RegisterCallback <ChangeEvent <UnityEngine.Object> >((evt) =>
            {
                var change       = (evt.target as ObjectField).value;
                game             = change as GauntletGame;
                levelData.value  = null;
                playerData.value = null;
                rebindLevelListView();
            });

            Button createGameButton = new Button(() =>
            {
                var newGame = CreateInstance <GauntletGame>();
                var path    = "Assets/Resources/Gauntlet/GameData";
                AssetDatabase.CreateAsset(newGame, AssetDatabase.GenerateUniqueAssetPath(path + "/GameData-00.asset"));
                EditorUtility.SetDirty(newGame);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
                gameData.value = newGame;
            });
            createGameButton.text = "Create New Game";
            gameRoot.Add(createGameButton);


            Button saveDataButton = new Button(() =>
            {
                if (game != null)
                {
                    var path = EditorUtility.OpenFolderPanel("Export Game Data", "", "");

                    if (path == null)
                    {
                        return;
                    }

                    if (path.Length != 0)
                    {
                        game.saveGameData(path);
                    }
                }
            });
            saveDataButton.text = "Save Game Data";
            gameRoot.Add(saveDataButton);

            VisualElement levelListDataRoot = new VisualElement()
            {
                style =
                {
                    flexDirection = FlexDirection.Row,
                    paddingTop    =                20,
                    paddingBottom =                40,
                    height        = 300
                }
            };

            VisualElement levelListRoot = new VisualElement()
            {
                style =
                {
                    flexGrow = 0.75f
                }
            };

            VisualElement levelButtonsRoot = new VisualElement()
            {
                style =
                {
                    flexGrow       =          0.25f,
                    justifyContent = Justify.Center,
                    paddingLeft    =             10,
                    paddingRight   = 10
                }
            };

            levelListDataRoot.Add(levelListRoot);
            levelListDataRoot.Add(levelButtonsRoot);
            gameRoot.Add(levelListDataRoot);

            Label levelLabel = new Label("List of Levels:");
            levelListRoot.Add(levelLabel);
            levelListRoot.Add(createLevelListView());

            Button upButton = new Button(() =>
            {
                if (game != null)
                {
                    int newIndex = game.changeLevelOrder(levelListView.selectedIndex, true);
                    rebindLevelListView();
                    levelListView.selectedIndex = newIndex;
                }
            });
            Button downButton = new Button(() =>
            {
                if (game != null)
                {
                    int newIndex = game.changeLevelOrder(levelListView.selectedIndex, false);
                    rebindLevelListView();
                    levelListView.selectedIndex = newIndex;
                }
            });
            Button removeButton = new Button(() =>
            {
                if (game != null && levelListView.selectedIndex >= 0)
                {
                    game.levels.RemoveAt(levelListView.selectedIndex);
                    rebindLevelListView();
                }
            });
            Button editButton = new Button(() =>
            {
                if (game != null && levelListView.selectedIndex >= 0)
                {
                    levelData.value = game.levels[levelListView.selectedIndex];
                }
            });
            upButton.text     = "Move Up";
            downButton.text   = "Move Down";
            removeButton.text = "Remove";
            editButton.text   = "Edit";
            levelButtonsRoot.Add(upButton);
            levelButtonsRoot.Add(downButton);
            levelButtonsRoot.Add(removeButton);
            levelButtonsRoot.Add(editButton);


            gameRoot.Add(new Label("Choose a Player for this Game:"));
            playerData            = new ObjectField();
            playerData.objectType = typeof(Player);
            gameRoot.Add(playerData);

            playerData.RegisterCallback <ChangeEvent <UnityEngine.Object> >((evt) =>
            {
                var change = (evt.target as ObjectField).value;
                if (game)
                {
                    game.playerObject = change as Player;
                }
            });

            // Level
            gameRoot.Add(new Label("Choose a Level to edit:"));
            levelData            = new ObjectField();
            levelData.objectType = typeof(GauntletLevel);
            gameRoot.Add(levelData);
            gameRoot.Add(new Label("Level Name:"));

            levelData.RegisterCallback <ChangeEvent <UnityEngine.Object> >((evt) =>
            {
                var change = (evt.target as ObjectField).value;
                level      = change as GauntletLevel;
                UpdateLevelBinding();
                tileMap.createGrid(level);
            });

            var levelName = new TextField();
            levelName.bindingPath = "levelName";
            gameRoot.Add(levelName);
            Button addLevelButton = new Button(() =>
            {
                if (game != null && level != null)
                {
                    game.levels.Add(level);
                    EditorUtility.SetDirty(game);
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                    rebindLevelListView();
                }
            });
            addLevelButton.text = "Add Level To Game";
            gameRoot.Add(addLevelButton);

            // New Level
            Button newLevelButton = new Button(() =>
            {
                var newLevel = CreateInstance <GauntletLevel>();
                newLevel.initialize("TestLevel", levelSizeSlider.value, 570);
                var path = "Assets/Resources/Gauntlet/LevelData";
                AssetDatabase.CreateAsset(newLevel, AssetDatabase.GenerateUniqueAssetPath(path + "/LevelData-00.asset"));
                EditorUtility.SetDirty(newLevel);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
                levelData.value = newLevel;
            });

            newLevelButton.text            = "Create New Level";
            newLevelButton.style.marginTop = 40;
            gameRoot.Add(newLevelButton);

            levelSizeSlider       = new SliderInt(5, 35);
            levelSizeSlider.value = 20;
            var levelSizeLabel = new Label("Size of New Level:" + levelSizeSlider.value);
            gameRoot.Add(levelSizeLabel);
            levelSizeSlider.RegisterCallback <ChangeEvent <int> >((evt) =>
            {
                levelSizeLabel.text = "Size of New Level:  " + evt.newValue;
            });

            gameRoot.Add(levelSizeSlider);
        }


        tileMap             = new TileMap();
        tileMap.levelEditor = this;
        mapRoot.Add(tileMap.gridContainer);


        // Level Root
        levelRoot.Add(new Label("Choose a prefab to place:"));
        MapPrefabTypesField = new EnumField(MapPrefabTypes.GroundTile);
        MapPrefabTypesField.RegisterCallback <ChangeEvent <Enum> >((evt) =>
        {
            rebindPrefabListView();
        });
        levelRoot.Add(MapPrefabTypesField);
        //levelRoot.Add(createSpriteList());
        levelRoot.Add(createMapTileList());

        var eraseToggle = new Toggle("Erase Mode");

        eraseToggle.RegisterCallback <ChangeEvent <bool> >((evt) =>
        {
            tileMap.eraseMode = evt.newValue;
        });
        levelRoot.Add(eraseToggle);
        var timeLimit      = new SliderInt(60, 600);
        var timeLimitLabel = new Label("Time Limit:   " + timeLimit.value + " seconds");

        levelRoot.Add(timeLimitLabel);
        timeLimit.RegisterCallback <ChangeEvent <int> >((evt) =>
        {
            timeLimitLabel.text = "Time Limit:   " + evt.newValue + " seconds";
        });
        timeLimit.bindingPath = "timeLimit";
        levelRoot.Add(timeLimit);
        levelRoot.Add(new Label("Current Layer:"));

        EnumField mapLayers = new EnumField(MapLayers.Layer1);

        mapLayers.RegisterCallback <ChangeEvent <Enum> >((evt) =>
        {
            var change = evt.newValue;
            tileMap.changeLayer(Convert.ToInt32(change));
        });

        levelRoot.Add(mapLayers);
        levelRoot.Add(new Label("Viewable layers in editor:"));
        var layer1Toggle = new Toggle("Layer 1")
        {
            value = true
        };
        var layer2Toggle = new Toggle("Layer 2")
        {
            value = true
        };
        var layer3Toggle = new Toggle("Layer 3")
        {
            value = true
        };

        layer1Toggle.RegisterCallback <ChangeEvent <bool> >((evt) =>
        {
            tileMap.layersOn[0] = evt.newValue;
        });

        layer2Toggle.RegisterCallback <ChangeEvent <bool> >((evt) =>
        {
            tileMap.layersOn[1] = evt.newValue;
        });

        layer3Toggle.RegisterCallback <ChangeEvent <bool> >((evt) =>
        {
            tileMap.layersOn[2] = evt.newValue;
        });

        levelRoot.Add(layer1Toggle);
        levelRoot.Add(layer2Toggle);
        levelRoot.Add(layer3Toggle);


        levelRoot.Add(new Label("Type of asset to create/edit:"));
        EnumField prefabEnums = new EnumField(PrefabTypes.GroundTile);

        levelRoot.Add(prefabEnums);
        Button createEditPrefabButton = new Button(() =>
        {
            switch (prefabEnums.value)
            {
            case PrefabTypes.Player:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletPlayerEditor>(_window, "Player Editor");
                    break;
                }

            case PrefabTypes.Enemy:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletEnemyEditor>(_window, "Enemy Editor");
                    break;
                }

            case PrefabTypes.GroundTile:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletGroundTileEditor>(_window, "Ground Tile Editor");
                    break;
                }

            case PrefabTypes.SpawnFactory:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletSpawnFactoryEditor>(_window, "Spawn Factory Editor");
                    break;
                }

            case PrefabTypes.Projectile:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletProjectileEditor>(_window, "Projectile Editor");
                    break;
                }

            case PrefabTypes.Item:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletItemEditor>(_window, "Item Editor");
                    break;
                }

            case PrefabTypes.Portal:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletPortalEditor>(_window, " Portal Editor");
                    break;
                }

            case PrefabTypes.SpawnPoint:
                {
                    assetWindow = PrefabEditor.createWindow <GauntletSpawnPointEditor>(_window, "Spawn Point Editor");
                    break;
                }

            default: break;
            }
        });

        createEditPrefabButton.text = "Create/Edit Prefab";
        levelRoot.Add(createEditPrefabButton);
    }