void ButtonPressed(Button button) { if (button == this.uiRefs.undoButton) { this.UndoHistoryEvent(this.lastHistoryEventNode.Value); this.lastHistoryEventNode = this.lastHistoryEventNode.Previous; this.UpdateUI(); } else if (button == this.uiRefs.redoButton) { if (this.lastHistoryEventNode != null) { this.lastHistoryEventNode = this.lastHistoryEventNode.Next; } else { this.lastHistoryEventNode = this.historyEvents.First; } this.DoHistoryEvent(this.lastHistoryEventNode.Value); this.UpdateUI(); } else if (button == this.uiRefs.selectNoneButton) { var historyEvent = new SelectionChangeHistoryEvent(); historyEvent.oldSelectedTiles = new List <Vector2i>(this.selectedTiles.Select(x => x.pos)); historyEvent.newSelectedTiles = new List <Vector2i>(); this.AddNewHistoryEvent(historyEvent); } else if (button == this.uiRefs.saveButton) { string jsonText = JsonUtility.ToJson(this.map, true); var sw = new StreamWriter("Maps/" + this.uiRefs.mapNameTextbox.text + ".json"); sw.Write(jsonText); sw.Close(); } else if (button == this.uiRefs.loadButton) { StreamReader sr = new StreamReader("Maps/" + this.uiRefs.mapNameTextbox.text + ".json"); string jsonText = sr.ReadToEnd(); sr.Close(); this.map = JsonUtility.FromJson <BattleMap>(jsonText); this.selectedTiles = new List <MapTile>(); this.historyEvents = new LinkedList <BaseHistoryEvent>(); this.lastHistoryEventNode = null; this.RebuildMapDisplay(); this.UpdateUI(); } }
//////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// // State-dependent functions void SetState(MapEditorState newState) { if (this.state == MapEditorState.Normal) { this.mapDisplay.DisableHoveredTile(); } else if (this.state == MapEditorState.SelectionPaint || this.state == MapEditorState.SelectionErase) { var he = (SelectionChangeHistoryEvent)this.inProgressHistoryEvent; he.newSelectedTiles = new List <Vector2i>(this.selectedTiles.Select(x => x.pos)); if (he.oldSelectedTiles.SequenceEqual(he.newSelectedTiles) == false) { this.AddNewHistoryEvent(he); } this.inProgressHistoryEvent = null; } this.state = newState; if (newState == MapEditorState.SelectionPaint) { var he = new SelectionChangeHistoryEvent(); he.oldSelectedTiles = new List <Vector2i>(this.selectedTiles.Select(x => x.pos)); this.inProgressHistoryEvent = he; if ( this.lastEnteredTile != null && this.selectedTiles.Contains(this.lastEnteredTile) == false ) { this.selectedTiles.Add(this.lastEnteredTile); this.mapDisplay.SetSelectedTiles(this.selectedTiles); } } else if (newState == MapEditorState.SelectionErase) { var he = new SelectionChangeHistoryEvent(); he.oldSelectedTiles = new List <Vector2i>(this.selectedTiles.Select(x => x.pos)); this.inProgressHistoryEvent = he; if ( this.lastEnteredTile != null && this.selectedTiles.Contains(this.lastEnteredTile) == true ) { this.selectedTiles.Remove(this.lastEnteredTile); this.mapDisplay.SetSelectedTiles(this.selectedTiles); } } this.UpdateUI(); }