예제 #1
0
    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();
        }
    }
예제 #2
0
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    // 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();
    }