private void resetGrid() { activeLevel = null; mapObjects = new List <ListLayerWrapper>(); rowCount = 0; columnCount = 0; cellSize = 0; numLayers = 0; }
public void createGrid(GauntletLevel level) { if (level == null) { resetGrid(); return; } rowCount = level.rowCount; columnCount = level.columnCount; cellSize = level.cellSize; numLayers = level.numLayers; mapObjects = level.levelLayers; activeLevel = level; }
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); }