private void Save(WaveEditor waveEditor) { string path = EditorUtility.SaveFilePanelInProject("Save WaveData", "Wave", "asset", "Save WaveData"); if (string.IsNullOrWhiteSpace(path)) { return; } WaveData waveData = CreateInstance <WaveData>(); waveData.startingPosition = waveEditor.transform.position; waveData.speed = waveEditor.speed; waveData.fireCooldown = waveEditor.fireCooldown; waveData.columns = new ColumnData[waveEditor.transform.childCount]; for (int i = 0; i < waveEditor.transform.childCount; ++i) { Transform column = waveEditor.transform.GetChild(i); waveData.columns[i].enemies = new EnemyData[column.childCount]; for (int j = 0; j < column.childCount; ++j) { Transform enemy = column.transform.GetChild(j); waveData.columns[i].enemies[j].prefab = PrefabUtility.GetCorrespondingObjectFromSource(enemy.gameObject); waveData.columns[i].enemies[j].position = enemy.position - waveEditor.transform.position; } } AssetDatabase.CreateAsset(waveData, path); AssetDatabase.SaveAssets(); }
static void Init() { //get existing open window or if none, make a new one: waveEditor = (WaveEditor)EditorWindow.GetWindowWithRect(typeof(WaveEditor), new Rect(0, 0, 800, 400), false, "Wave Settings"); //automatically repaint whenever the scene has changed (for caution) waveEditor.autoRepaintOnSceneChange = true; }
public void LoadNewWaveObject(int index) { currentWaveEditorObject = Instantiate(waveEditPrefabs[currentWaveIdx]) as GameObject; currentWaveEditor = currentWaveEditorObject.GetComponent <WaveEditor>(); currentWaveEditor.SetWaveEditorManager(this); currentWaveEditor.SetWorldManager(worldManager); }
public override void OnInspectorGUI() { DrawDefaultInspector(); WaveEditor waveEditor = (WaveEditor)target; if (GUILayout.Button("Save Wave")) { Save(waveEditor); } if (GUILayout.Button("Load Wave")) { Load(waveEditor); } }
private void Load(WaveEditor waveEditor) { string path = EditorUtility.OpenFilePanelWithFilters("Load WaveData", "Assets/Prefabs/Levels", new string[] { "WaveData", "asset" }); if (string.IsNullOrWhiteSpace(path)) { return; } for (int i = waveEditor.transform.childCount - 1; i >= 0; --i) { DestroyImmediate(waveEditor.transform.GetChild(i).gameObject); } if (path.StartsWith(Application.dataPath)) { path = "Assets" + path.Substring(Application.dataPath.Length); } WaveData waveData = AssetDatabase.LoadAssetAtPath <WaveData>(path); waveEditor.speed = waveData.speed; waveEditor.fireCooldown = waveData.fireCooldown; waveEditor.transform.position = waveData.startingPosition; foreach (ColumnData columnData in waveData.columns) { GameObject newColumn = new GameObject("Column"); newColumn.transform.parent = waveEditor.transform; newColumn.transform.localPosition = Vector3.zero; foreach (EnemyData enemyData in columnData.enemies) { GameObject newEnemy = (GameObject)PrefabUtility.InstantiatePrefab(enemyData.prefab, newColumn.transform); newEnemy.transform.localPosition = enemyData.position; newEnemy.SetActive(true); } } }
// Called when this GLWidget has a valid GraphicsContext protected virtual void OnInitialized(object sender, WaveEditor.Viewport.Game e) { this.gameApp = new GameApp(this.Allocation.Width, this.Allocation.Height); this.gameApp.Initialize(); // Use clock this.stopwatch = new global::System.Diagnostics.Stopwatch(); if (this.Initialized != null) { this.Initialized(this, this.gameApp); } }
static void ShowEditor() { WaveEditor editor = EditorWindow.GetWindow <WaveEditor>(); editor.Init(); }
public Editor(Player player, GameObject parent) : base("Editor", parent) { session = new Session(new Player()); session.Hide(); waveData = Assets.Get(Assets.WaveDataSets.Default); stageData = Assets.Get(Assets.StageDataSets.Default); objectData = Assets.Get(Assets.ObjectDataSets.Default); campaignData = Assets.Get(Assets.CampaignDataSets.Default); if (waveData == null) { waveData = Assets.Create <WaveData>(Assets.waveDataPath); } if (stageData == null) { stageData = Assets.Create <StageData>(Assets.stageDataPath); } if (campaignData == null) { campaignData = Assets.Create <CampaignData>(Assets.campaignDataPath); } if (objectData == null) { objectData = Assets.Create <ObjectData>(Assets.objectDataPath); } if (objectData.enemySets.Count == 0) { ScriptableObjects.Add(ScriptableObject.CreateInstance <EnemySet>(), objectData); } if (objectData.itemSets.Count == 0) { ScriptableObjects.Add(ScriptableObject.CreateInstance <ItemSet>(), objectData); } if (objectData.heroSets.Count == 0) { ScriptableObjects.Add(ScriptableObject.CreateInstance <HeroSet>(), objectData); } for (int i = objectData.enemySets[(int)Assets.ObjectDataSets.Default].enemyDefinitions.Count; (int)Definitions.Enemies.Count > i; i++) { ScriptableObjects.Add(ScriptableObject.CreateInstance <EnemyDefinition>().Initialize(((Definitions.Enemies)i).ToString(), 2, 1, (Definitions.Enemies)i), objectData.enemySets[(int)Assets.ObjectDataSets.Default]); } for (int i = objectData.heroSets[(int)Assets.ObjectDataSets.Default].heroDefinitions.Count; (int)Definitions.Heroes.Count > i; i++) { ScriptableObjects.Add(ScriptableObject.CreateInstance <HeroDefinition>().Initialize(((Definitions.Heroes)i).ToString(), 2, 1, (Definitions.Heroes)i), objectData.heroSets[(int)Assets.ObjectDataSets.Default]); } for (int i = objectData.itemSets[(int)Assets.ObjectDataSets.Default].itemDefinitions.Count; (int)Definitions.Items.Count > i; i++) { ScriptableObjects.Add(ScriptableObject.CreateInstance <ItemDefinition>().Initialize(((Definitions.Items)i).ToString(), 2, 1, (Definitions.Items)i), objectData.itemSets[(int)Assets.ObjectDataSets.Default]); } Definitions.Initialize(objectData); Add(testButton = new Button("Test", 1.5f, 0.5f, container, "Test", fontSize: 20, Enter: (Button button) => button.SetColor(stage != null && missionEditor.selectedMission != null ? Color.green : button.color), Stay: (Button button) => { if (stage != null && missionEditor.selectedMission != null && Input.GetMouseButtonDown(0)) { if (level == null) { stage.conveyor.Show(); session.SetLevel(new Level(missionEditor.selectedMission.duration, showProgress: false)); for (int i = 0; missionEditor.selectedMission.waveDefinitions.Count > i; i++) { Wave wave = new Wave(missionEditor.selectedMission.waveTimes[i] * missionEditor.selectedMission.duration, stage); level.Add(wave); for (int j = 0; missionEditor.selectedMission.waveDefinitions[i].waveEvents.Count > j; j++) { switch ((WaveEvent.Type)missionEditor.selectedMission.waveDefinitions[i].waveEvents[j].type) { case WaveEvent.Type.SpawnEnemy: wave.Add(new SpawnEnemyEvent(Definitions.Enemy((Definitions.Enemies)missionEditor.selectedMission.waveDefinitions[i].waveEvents[j].subType), missionEditor.selectedMission.waveDefinitions[i].waveEvents[j])); break; } } } button.SetLabel("Stop"); button.SetPosition(saveButton.position); saveButton.Hide(); saveButton.Disable(); objectsButton.Hide(); campaignButton.Hide(); stageEditor.HideStageSets(); stageEditor.HideStageEditor(); stageEditor.HideStageDefinitions(); missionEditor.HideMissionEditor(); waveEditor.HideWaveEventButtons(); session.Start(); } else { session.Stop(); stage.ClearLanes(); conveyor.Hide(); conveyor.Clear(); button.SetLabel("Test"); level.DestroyProgress(); session.SetLevel(null); _heldItem = null; _itemTime = 0; saveButton.Show(); saveButton.Enable(); objectsButton.Show(); campaignButton.Show(); stageEditor.ShowStageSets(); stageEditor.ShowStageEditor(); missionEditor.ShowMissionEditor(); testButton.SetPosition(saveButton.position + Vector3.right * (saveButton.width)); if (waveEditor.selectedWaveDefinition != null) { waveEditor.ShowWaveEventButtons(); } } } }, Exit: (Button button) => button.SetColor(Color.white))); Add(saveButton = new Button("Save", 1.5f, 0.5f, container, "Save", fontSize: 20, Enter: (Button button) => button.SetColor(Color.green), Stay: (Button button) => { if (Input.GetMouseButtonDown(0)) { EditorUtility.SetDirty(campaignData); EditorUtility.SetDirty(objectData); EditorUtility.SetDirty(stageData); EditorUtility.SetDirty(waveData); ScriptableObjects.Save(); } }, Exit: (Button button) => button.SetColor(Color.white))); saveButton.SetViewportPosition(new Vector2(0, 1)); saveButton.SetPosition(saveButton.position + Vector3.up); testButton.SetPosition(saveButton.position + Vector3.right * (saveButton.width)); testButton.Disable(); testButton.Hide(); Add(campaignButton = new Button("Campaigns", 2, 0.5f, container, "CampaignsButton", fontSize: 20, Enter: (Button button) => button.SetColor(button.selected ? button.color : Color.green), Stay: (Button button) => { if (!button.selected && Input.GetMouseButtonDown(0)) { ShowCampaignEditor(); } }, Exit: (Button button) => button.SetColor(button.selected ? button.color : Color.white))); campaignButton.SetViewportPosition(new Vector2(1, 1)); campaignButton.SetPosition(campaignButton.position + (Vector3.left * campaignButton.width) + Vector3.up); Add(objectsButton = new Button("Objects", 2, 0.5f, container, "ObjectsButton", fontSize: 20, Enter: (Button button) => button.SetColor(button.selected ? button.color : Color.green), Stay: (Button button) => { if (!button.selected && Input.GetMouseButtonDown(0)) { ShowObjectEditors(); } }, Exit: (Button button) => button.SetColor(button.selected ? button.color : Color.white))); objectsButton.SetPosition(campaignButton.position + Vector3.left * (objectsButton.width)); Add(campaignMapEditor = new CampaignMapEditor(this, container)); Add(campaignEditor = new CampaignEditor(this, Vector3.zero, container)); Add(timelineEditor = new TimelineEditor(this, container)); Add(missionEditor = new MissionEditor(this, container)); Add(stageEditor = new StageEditor(this, container)); Add(enemyEditor = new EnemyEditor(this, container)); Add(waveEditor = new WaveEditor(this, container)); Add(itemEditor = new ItemEditor(this, container)); Add(heroEditor = new HeroEditor(this, container)); ShowCampaignEditor(); }