Esempio n. 1
0
    private void OnGUI()
    {
        GUI.skin.customStyles[0] = new GUIStyle(GUI.skin.label);
        GUI.skin.customStyles[0].alignment = TextAnchor.MiddleRight;
        GUI.skin.customStyles[0].fixedWidth = labelW;
        GUI.skin.customStyles[0].padding.right = 10;

        GUI.Box(new Rect(Screen.width / 2 - width / 2 + 4.5f, 25, width - 10, Screen.height - 64), "");
        GUI.Box(new Rect(Screen.width / 2 - width / 2 + 5, 27, width - 10, 3), "");
        GUI.Box(new Rect(Screen.width / 2 - width / 2 + 5, Screen.height - 38, width - 10, 3), "");

        GUILayout.BeginArea(new Rect(Screen.width / 2 - width / 2, 0, width, Screen.height));

        GUILayout.Space(2);

        GUILayout.BeginHorizontal();
        if (GUILayout.Button(selectedPage == StateEditorPage.Main ? "<b>❖ Main</b>" : "Main", GUILayout.Width(navW))) selectedPage = StateEditorPage.Main;
        if (GUILayout.Button(selectedPage == StateEditorPage.Journal ? "<b>❖ Journal</b>" : "Journal", GUILayout.Width(navW))) selectedPage = StateEditorPage.Journal;
        if (GUILayout.Button(selectedPage == StateEditorPage.Quests ? "<b>❖ Quests</b>" : "Quests", GUILayout.Width(navW))) selectedPage = StateEditorPage.Quests;
        if (GUILayout.Button(selectedPage == StateEditorPage.Artifacts ? "<b>❖ Artifacts</b>" : "Artifacts", GUILayout.Width(navW))) selectedPage = StateEditorPage.Artifacts;
        if (GUILayout.Button(selectedPage == StateEditorPage.Phrases ? "<b>❖ Phrases</b>" : "Phrases", GUILayout.Width(navW))) selectedPage = StateEditorPage.Phrases;
        GUILayout.EndHorizontal();

        scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(width - 5), GUILayout.Height(Screen.height - 64));

        GUILayout.Space(10);

        if (selectedPage == StateEditorPage.Main)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Save data verion: ", GUI.skin.customStyles[0]);
            GUILayout.Label(string.Format("{0}.{1}.{2}", State.VersionMajor, State.VersionMiddle, State.VersionMinor), GUILayout.Width(singleW));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Game status:</color> ", GUI.skin.customStyles[0]);
            GUILayout.Label(string.Format("<b>{0}</b>", State.GameStatus.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Total days: ", GUI.skin.customStyles[0]);
            State.TotalDays = int.Parse(GUILayout.TextField(State.TotalDays.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current day:</color> ", GUI.skin.customStyles[0]);
            State.CurrentDay = int.Parse(GUILayout.TextField(State.CurrentDay.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Max AP: ", GUI.skin.customStyles[0]);
            State.MaxAP = int.Parse(GUILayout.TextField(State.MaxAP.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current AP:</color> ", GUI.skin.customStyles[0]);
            State.CurrentAP = int.Parse(GUILayout.TextField(State.CurrentAP.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix engine AP cost: ", GUI.skin.customStyles[0]);
            State.FixEngineAPCost = int.Parse(GUILayout.TextField(State.FixEngineAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK1 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK1][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK1][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK1][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK1][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK1][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK1][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK2 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK2][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK2][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK2][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK2][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK2][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK2][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK3 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK3][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK3][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK3][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK3][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK3][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK3][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK4 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK4][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK4][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK4][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK4][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK4][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK4][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current breakage type:</color> ", GUI.skin.customStyles[0]);
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK1 ? "<b>❖ BRK1</b>" : "BRK1", GUILayout.Width(quadroW))) State.BreakageType = BreakageType.BRK1;
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK2 ? "<b>❖ BRK2</b>" : "BRK2", GUILayout.Width(quadroW))) State.BreakageType = BreakageType.BRK2;
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK3 ? "<b>❖ BRK3</b>" : "BRK3", GUILayout.Width(quadroW))) State.BreakageType = BreakageType.BRK3;
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK4 ? "<b>❖ BRK4</b>" : "BRK4", GUILayout.Width(quadroW))) State.BreakageType = BreakageType.BRK4;
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current Wiring, Alloy, Chips:</color> ", GUI.skin.customStyles[0]);
            State.Wiring = int.Parse(GUILayout.TextField(State.Wiring.ToString(), GUILayout.Width(tripleW)));
            State.Alloy = int.Parse(GUILayout.TextField(State.Alloy.ToString(), GUILayout.Width(tripleW)));
            State.Chips = int.Parse(GUILayout.TextField(State.Chips.ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Engine is fixed:</color> ", GUI.skin.customStyles[0]);
            State.EngineFixed = GUILayout.Toggle(State.EngineFixed, "");
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Synth fuel AP cost: ", GUI.skin.customStyles[0]);
            State.FuelSynthAPCost = int.Parse(GUILayout.TextField(State.FuelSynthAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Synth fuel grace: ", GUI.skin.customStyles[0]);
            State.FuelSynthGrace = int.Parse(GUILayout.TextField(State.FuelSynthGrace.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Synth fuel summ: ", GUI.skin.customStyles[0]);
            State.FuelSynthSumm = int.Parse(GUILayout.TextField(State.FuelSynthSumm.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current fuel synth formula (A, B, C):</color> ", GUI.skin.customStyles[0]);
            State.FuelSynthFormula[0] = int.Parse(GUILayout.TextField(State.FuelSynthFormula[0].ToString(), GUILayout.Width(tripleW)));
            State.FuelSynthFormula[1] = int.Parse(GUILayout.TextField(State.FuelSynthFormula[1].ToString(), GUILayout.Width(tripleW)));
            State.FuelSynthFormula[2] = int.Parse(GUILayout.TextField(State.FuelSynthFormula[2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current minerals count (A, B, C):</color> ", GUI.skin.customStyles[0]);
            State.MineralA = int.Parse(GUILayout.TextField(State.MineralA.ToString(), GUILayout.Width(tripleW)));
            State.MineralB = int.Parse(GUILayout.TextField(State.MineralB.ToString(), GUILayout.Width(tripleW)));
            State.MineralC = int.Parse(GUILayout.TextField(State.MineralC.ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Fuel is synthed:</color> ", GUI.skin.customStyles[0]);
            State.FuelSynthed = GUILayout.Toggle(State.FuelSynthed, "");
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Enter sector AP cost: ", GUI.skin.customStyles[0]);
            State.EnterSectorAPCost = int.Parse(GUILayout.TextField(State.EnterSectorAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Loot charges: ", GUI.skin.customStyles[0]);
            State.LootCharges = int.Parse(GUILayout.TextField(State.LootCharges.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 1 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 1).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 1).MineralA = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 1).MineralB = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 1).MineralC = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 2 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 2).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 2).MineralA = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 2).MineralB = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 2).MineralC = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 3 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 3).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 3).MineralA = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 3).MineralB = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 3).MineralC = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 4 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 4).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 4).MineralA = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 4).MineralB = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 4).MineralC = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Analyze artifact AP cost: ", GUI.skin.customStyles[0]);
            State.AnalyzeArtifactAPCost = int.Parse(GUILayout.TextField(State.AnalyzeArtifactAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();
        }

        if (selectedPage == StateEditorPage.Journal)
        {
            for (int i = 0; i < State.JournalRecords.Count; i++)
            {
                var record = State.JournalRecords[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Journal record ID: ", GUI.skin.customStyles[0]);
                record.ID = GUILayout.TextField(record.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Journal record text: ", GUI.skin.customStyles[0]);
                GUILayout.TextArea(Text.Get(record.ID), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day requirements (min, specific, max): ", GUI.skin.customStyles[0]);
                record.Requirements.MinDay = int.Parse(GUILayout.TextField(record.Requirements.MinDay.ToString(), GUILayout.Width(tripleW)));
                record.Requirements.Day = int.Parse(GUILayout.TextField(record.Requirements.Day.ToString(), GUILayout.Width(tripleW)));
                record.Requirements.MaxDay = int.Parse(GUILayout.TextField(record.Requirements.MaxDay.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("AP requirements (min, max): ", GUI.skin.customStyles[0]);
                record.Requirements.MinAP = int.Parse(GUILayout.TextField(record.Requirements.MinAP.ToString(), GUILayout.Width(doubleW)));
                record.Requirements.MaxAP = int.Parse(GUILayout.TextField(record.Requirements.MaxAP.ToString(), GUILayout.Width(doubleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest requirements: ", GUI.skin.customStyles[0]);
                if (record.Requirements.CompletedQuests.Count < 1)
                    record.Requirements.CompletedQuests = new List<string>() { "" };
                record.Requirements.CompletedQuests[0] = GUILayout.TextField(record.Requirements.CompletedQuests[0], GUILayout.Width(tripleW));
                if (record.Requirements.CompletedQuests.Count < 2)
                    record.Requirements.CompletedQuests = new List<string>() { record.Requirements.CompletedQuests[0], "" };
                record.Requirements.CompletedQuests[1] = GUILayout.TextField(record.Requirements.CompletedQuests[1], GUILayout.Width(tripleW));
                if (record.Requirements.CompletedQuests.Count < 3)
                    record.Requirements.CompletedQuests = new List<string>() { record.Requirements.CompletedQuests[0], record.Requirements.CompletedQuests[1], "" };
                record.Requirements.CompletedQuests[2] = GUILayout.TextField(record.Requirements.CompletedQuests[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact requirements: ", GUI.skin.customStyles[0]);
                if (record.Requirements.AnalyzedArtifacts.Count < 1)
                    record.Requirements.AnalyzedArtifacts = new List<string>() { "" };
                record.Requirements.AnalyzedArtifacts[0] = GUILayout.TextField(record.Requirements.AnalyzedArtifacts[0], GUILayout.Width(tripleW));
                if (record.Requirements.AnalyzedArtifacts.Count < 2)
                    record.Requirements.AnalyzedArtifacts = new List<string>() { record.Requirements.AnalyzedArtifacts[0], "" };
                record.Requirements.AnalyzedArtifacts[1] = GUILayout.TextField(record.Requirements.AnalyzedArtifacts[1], GUILayout.Width(tripleW));
                if (record.Requirements.AnalyzedArtifacts.Count < 3)
                    record.Requirements.AnalyzedArtifacts = new List<string>() { record.Requirements.AnalyzedArtifacts[0], record.Requirements.AnalyzedArtifacts[1], "" };
                record.Requirements.AnalyzedArtifacts[2] = GUILayout.TextField(record.Requirements.AnalyzedArtifacts[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Has already been written at day:</color> ", GUI.skin.customStyles[0]);
                record.AssignedDay = int.Parse(GUILayout.TextField(record.AssignedDay.ToString(), GUILayout.Width(singleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.JournalRecords.Remove(record);
                        State.JournalRecords.Insert(i - 1, record);
                    }
                }
                else GUILayout.Space(35);
                if (i < State.JournalRecords.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.JournalRecords.Remove(record);
                        State.JournalRecords.Insert(i + 1, record);
                    }
                }
                else GUILayout.Space(35);
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                    State.JournalRecords.Remove(record);
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                    State.JournalRecords.Insert(i, (new JournalRecord("Journal" + (State.JournalRecords.Count + 1).ToString(), new Requirements(day: -1))));
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        if (selectedPage == StateEditorPage.Quests)
        {
            for (int i = 0; i < State.QuestRecords.Count; i++)
            {
                var quest = State.QuestRecords[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest ID: ", GUI.skin.customStyles[0]);
                quest.ID = GUILayout.TextField(quest.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day requirements (min, specific, max): ", GUI.skin.customStyles[0]);
                quest.Requirements.MinDay = int.Parse(GUILayout.TextField(quest.Requirements.MinDay.ToString(), GUILayout.Width(tripleW)));
                quest.Requirements.Day = int.Parse(GUILayout.TextField(quest.Requirements.Day.ToString(), GUILayout.Width(tripleW)));
                quest.Requirements.MaxDay = int.Parse(GUILayout.TextField(quest.Requirements.MaxDay.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("AP requirements (min, max): ", GUI.skin.customStyles[0]);
                quest.Requirements.MinAP = int.Parse(GUILayout.TextField(quest.Requirements.MinAP.ToString(), GUILayout.Width(doubleW)));
                quest.Requirements.MaxAP = int.Parse(GUILayout.TextField(quest.Requirements.MaxAP.ToString(), GUILayout.Width(doubleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest requirements: ", GUI.skin.customStyles[0]);
                if (quest.Requirements.CompletedQuests.Count < 1)
                    quest.Requirements.CompletedQuests = new List<string>() { "" };
                quest.Requirements.CompletedQuests[0] = GUILayout.TextField(quest.Requirements.CompletedQuests[0], GUILayout.Width(tripleW));
                if (quest.Requirements.CompletedQuests.Count < 2)
                    quest.Requirements.CompletedQuests = new List<string>() { quest.Requirements.CompletedQuests[0], "" };
                quest.Requirements.CompletedQuests[1] = GUILayout.TextField(quest.Requirements.CompletedQuests[1], GUILayout.Width(tripleW));
                if (quest.Requirements.CompletedQuests.Count < 3)
                    quest.Requirements.CompletedQuests = new List<string>() { quest.Requirements.CompletedQuests[0], quest.Requirements.CompletedQuests[1], "" };
                quest.Requirements.CompletedQuests[2] = GUILayout.TextField(quest.Requirements.CompletedQuests[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact requirements: ", GUI.skin.customStyles[0]);
                if (quest.Requirements.AnalyzedArtifacts.Count < 1)
                    quest.Requirements.AnalyzedArtifacts = new List<string>() { "" };
                quest.Requirements.AnalyzedArtifacts[0] = GUILayout.TextField(quest.Requirements.AnalyzedArtifacts[0], GUILayout.Width(tripleW));
                if (quest.Requirements.AnalyzedArtifacts.Count < 2)
                    quest.Requirements.AnalyzedArtifacts = new List<string>() { quest.Requirements.AnalyzedArtifacts[0], "" };
                quest.Requirements.AnalyzedArtifacts[1] = GUILayout.TextField(quest.Requirements.AnalyzedArtifacts[1], GUILayout.Width(tripleW));
                if (quest.Requirements.AnalyzedArtifacts.Count < 3)
                    quest.Requirements.AnalyzedArtifacts = new List<string>() { quest.Requirements.AnalyzedArtifacts[0], quest.Requirements.AnalyzedArtifacts[1], "" };
                quest.Requirements.AnalyzedArtifacts[2] = GUILayout.TextField(quest.Requirements.AnalyzedArtifacts[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Current quest status:</color> ", GUI.skin.customStyles[0]);
                if (GUILayout.Button(quest.Status == QuestStatus.NotStarted ? "<b>❖ NotStarted</b>" : "NotStarted", GUILayout.Width(tripleW))) quest.Status = QuestStatus.NotStarted;
                if (GUILayout.Button(quest.Status == QuestStatus.Started ? "<b>❖ Started</b>" : "Started", GUILayout.Width(tripleW))) quest.Status = QuestStatus.Started;
                if (GUILayout.Button(quest.Status == QuestStatus.Completed ? "<b>❖ Completed</b>" : "Completed", GUILayout.Width(tripleW))) quest.Status = QuestStatus.Completed;
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Current quest block:</color> ", GUI.skin.customStyles[0]);
                quest.CurrentBlock = GUILayout.TextField(quest.CurrentBlock, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.QuestRecords.Remove(quest);
                        State.QuestRecords.Insert(i - 1, quest);
                    }
                }
                else GUILayout.Space(35);
                if (i < State.QuestRecords.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.QuestRecords.Remove(quest);
                        State.QuestRecords.Insert(i + 1, quest);
                    }
                }
                else GUILayout.Space(35);
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                    State.QuestRecords.Remove(quest);
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                    State.QuestRecords.Insert(i, new Quest("Quest" + (State.QuestRecords.Count + 1).ToString(), new Requirements(minAP: -1)));
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        if (selectedPage == StateEditorPage.Artifacts)
        {
            for (int i = 0; i < State.Artifacts.Count; i++)
            {
                var artifact = State.Artifacts[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact ID: ", GUI.skin.customStyles[0]);
                artifact.ID = GUILayout.TextField(artifact.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact name: ", GUI.skin.customStyles[0]);
                GUILayout.TextField(Text.Get(artifact.ID), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact scan info: ", GUI.skin.customStyles[0]);
                GUILayout.TextArea(Text.Get(artifact.ID + "ScanInfo"), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Assigned sector (0 for any-random): ", GUI.skin.customStyles[0]);
                artifact.Sector = int.Parse(GUILayout.TextField(artifact.Sector.ToString(), GUILayout.Width(singleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact contents (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
                artifact.Wiring = int.Parse(GUILayout.TextField(artifact.Wiring.ToString(), GUILayout.Width(tripleW)));
                artifact.Alloy = int.Parse(GUILayout.TextField(artifact.Alloy.ToString(), GUILayout.Width(tripleW)));
                artifact.Chips = int.Parse(GUILayout.TextField(artifact.Chips.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact identity: ", GUI.skin.customStyles[0]);
                if (GUILayout.Button(artifact.Identity == null ? "<b>❖ NONE</b>" : "NONE", GUILayout.Width(tettroW))) artifact.Identity = null;
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK1 ? "<b>❖ BRK1</b>" : "BRK1", GUILayout.Width(tettroW))) artifact.Identity = BreakageType.BRK1;
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK2 ? "<b>❖ BRK2</b>" : "BRK2", GUILayout.Width(tettroW))) artifact.Identity = BreakageType.BRK2;
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK3 ? "<b>❖ BRK3</b>" : "BRK3", GUILayout.Width(tettroW))) artifact.Identity = BreakageType.BRK3;
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK4 ? "<b>❖ BRK4</b>" : "BRK4", GUILayout.Width(tettroW))) artifact.Identity = BreakageType.BRK4;
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Artifact current status:</color> ", GUI.skin.customStyles[0]);
                if (GUILayout.Button(artifact.Status == ArtifactStatus.NotFound ? "<b>❖ NotFound</b>" : "NotFound", GUILayout.Width(quadroW))) artifact.Status = ArtifactStatus.NotFound;
                if (GUILayout.Button(artifact.Status == ArtifactStatus.Found ? "<b>❖ Found</b>" : "Found", GUILayout.Width(quadroW))) artifact.Status = ArtifactStatus.Found;
                if (GUILayout.Button(artifact.Status == ArtifactStatus.Analyzing ? "<b>❖ Analyzing</b>" : "Analyzing", GUILayout.Width(quadroW))) artifact.Status = ArtifactStatus.Analyzing;
                if (GUILayout.Button(artifact.Status == ArtifactStatus.Analyzed ? "<b>❖ Analyzed</b>" : "Analyzed", GUILayout.Width(quadroW))) artifact.Status = ArtifactStatus.Analyzed;
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.Artifacts.Remove(artifact);
                        State.Artifacts.Insert(i - 1, artifact);
                    }
                }
                else GUILayout.Space(35);
                if (i < State.Artifacts.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.Artifacts.Remove(artifact);
                        State.Artifacts.Insert(i + 1, artifact);
                    }
                }
                else GUILayout.Space(35);
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                    State.Artifacts.Remove(artifact);
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                    State.Artifacts.Insert(i, new Artifact("Artifact" + (State.Artifacts.Count + 1).ToString(), 0, null, 0, 0, 0));
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        if (selectedPage == StateEditorPage.Phrases)
        {
            for (int i = 0; i < State.Phrases.Count; i++)
            {
                var phrase = State.Phrases[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Phrase ID: ", GUI.skin.customStyles[0]);
                phrase.ID = GUILayout.TextField(phrase.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Phrase text: ", GUI.skin.customStyles[0]);
                GUILayout.TextArea(Text.Get(phrase.ID), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Associated quest: ", GUI.skin.customStyles[0]);
                phrase.AssociatedQuest = GUILayout.TextField(phrase.AssociatedQuest, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day requirements (min, specific, max): ", GUI.skin.customStyles[0]);
                phrase.Requirements.MinDay = int.Parse(GUILayout.TextField(phrase.Requirements.MinDay.ToString(), GUILayout.Width(tripleW)));
                phrase.Requirements.Day = int.Parse(GUILayout.TextField(phrase.Requirements.Day.ToString(), GUILayout.Width(tripleW)));
                phrase.Requirements.MaxDay = int.Parse(GUILayout.TextField(phrase.Requirements.MaxDay.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("AP requirements (min, max): ", GUI.skin.customStyles[0]);
                phrase.Requirements.MinAP = int.Parse(GUILayout.TextField(phrase.Requirements.MinAP.ToString(), GUILayout.Width(doubleW)));
                phrase.Requirements.MaxAP = int.Parse(GUILayout.TextField(phrase.Requirements.MaxAP.ToString(), GUILayout.Width(doubleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest requirements: ", GUI.skin.customStyles[0]);
                if (phrase.Requirements.CompletedQuests.Count < 1)
                    phrase.Requirements.CompletedQuests = new List<string>() { "" };
                phrase.Requirements.CompletedQuests[0] = GUILayout.TextField(phrase.Requirements.CompletedQuests[0], GUILayout.Width(tripleW));
                if (phrase.Requirements.CompletedQuests.Count < 2)
                    phrase.Requirements.CompletedQuests = new List<string>() { phrase.Requirements.CompletedQuests[0], "" };
                phrase.Requirements.CompletedQuests[1] = GUILayout.TextField(phrase.Requirements.CompletedQuests[1], GUILayout.Width(tripleW));
                if (phrase.Requirements.CompletedQuests.Count < 3)
                    phrase.Requirements.CompletedQuests = new List<string>() { phrase.Requirements.CompletedQuests[0], phrase.Requirements.CompletedQuests[1], "" };
                phrase.Requirements.CompletedQuests[2] = GUILayout.TextField(phrase.Requirements.CompletedQuests[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact requirements: ", GUI.skin.customStyles[0]);
                if (phrase.Requirements.AnalyzedArtifacts.Count < 1)
                    phrase.Requirements.AnalyzedArtifacts = new List<string>() { "" };
                phrase.Requirements.AnalyzedArtifacts[0] = GUILayout.TextField(phrase.Requirements.AnalyzedArtifacts[0], GUILayout.Width(tripleW));
                if (phrase.Requirements.AnalyzedArtifacts.Count < 2)
                    phrase.Requirements.AnalyzedArtifacts = new List<string>() { phrase.Requirements.AnalyzedArtifacts[0], "" };
                phrase.Requirements.AnalyzedArtifacts[1] = GUILayout.TextField(phrase.Requirements.AnalyzedArtifacts[1], GUILayout.Width(tripleW));
                if (phrase.Requirements.AnalyzedArtifacts.Count < 3)
                    phrase.Requirements.AnalyzedArtifacts = new List<string>() { phrase.Requirements.AnalyzedArtifacts[0], phrase.Requirements.AnalyzedArtifacts[1], "" };
                phrase.Requirements.AnalyzedArtifacts[2] = GUILayout.TextField(phrase.Requirements.AnalyzedArtifacts[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.Phrases.Remove(phrase);
                        State.Phrases.Insert(i - 1, phrase);
                    }
                }
                else GUILayout.Space(35);
                if (i < State.Phrases.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.Phrases.Remove(phrase);
                        State.Phrases.Insert(i + 1, phrase);
                    }
                }
                else GUILayout.Space(35);
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                    State.Phrases.Remove(phrase);
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                    State.Phrases.Insert(i, (new Phrase("Phrase" + (State.Phrases.Count + 1).ToString(), new Requirements(day: -1))));
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        GUILayout.EndScrollView();

        GUILayout.Space(2);

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("<b><color=#60c367><size=45>☑</size></color>    Save and return to menu</b>\n", GUILayout.Height(30))) SaveAndExit();
        if (GUILayout.Button("<b><color=#d9614d><size=45>☒</size></color>    Total reset</b>\n", GUILayout.Height(30), GUILayout.Width(150))) State.Reset(true);
        if (GUILayout.Button("<b><color=#6b9fb8><size=45>☯</size></color>    Update text</b>\n", GUILayout.Height(30), GUILayout.Width(150))) ServiceLocator.Text = new GoogleText();
        GUILayout.EndHorizontal();

        GUILayout.EndArea();
    }
Esempio n. 2
0
    private void OnGUI()
    {
        GUI.skin.customStyles[0]               = new GUIStyle(GUI.skin.label);
        GUI.skin.customStyles[0].alignment     = TextAnchor.MiddleRight;
        GUI.skin.customStyles[0].fixedWidth    = labelW;
        GUI.skin.customStyles[0].padding.right = 10;

        GUI.Box(new Rect(Screen.width / 2 - width / 2 + 4.5f, 25, width - 10, Screen.height - 64), "");
        GUI.Box(new Rect(Screen.width / 2 - width / 2 + 5, 27, width - 10, 3), "");
        GUI.Box(new Rect(Screen.width / 2 - width / 2 + 5, Screen.height - 38, width - 10, 3), "");

        GUILayout.BeginArea(new Rect(Screen.width / 2 - width / 2, 0, width, Screen.height));

        GUILayout.Space(2);

        GUILayout.BeginHorizontal();
        if (GUILayout.Button(selectedPage == StateEditorPage.Main ? "<b>❖ Main</b>" : "Main", GUILayout.Width(navW)))
        {
            selectedPage = StateEditorPage.Main;
        }
        if (GUILayout.Button(selectedPage == StateEditorPage.Journal ? "<b>❖ Journal</b>" : "Journal", GUILayout.Width(navW)))
        {
            selectedPage = StateEditorPage.Journal;
        }
        if (GUILayout.Button(selectedPage == StateEditorPage.Quests ? "<b>❖ Quests</b>" : "Quests", GUILayout.Width(navW)))
        {
            selectedPage = StateEditorPage.Quests;
        }
        if (GUILayout.Button(selectedPage == StateEditorPage.Artifacts ? "<b>❖ Artifacts</b>" : "Artifacts", GUILayout.Width(navW)))
        {
            selectedPage = StateEditorPage.Artifacts;
        }
        if (GUILayout.Button(selectedPage == StateEditorPage.Phrases ? "<b>❖ Phrases</b>" : "Phrases", GUILayout.Width(navW)))
        {
            selectedPage = StateEditorPage.Phrases;
        }
        GUILayout.EndHorizontal();

        scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(width - 5), GUILayout.Height(Screen.height - 64));

        GUILayout.Space(10);

        if (selectedPage == StateEditorPage.Main)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Save data verion: ", GUI.skin.customStyles[0]);
            GUILayout.Label(string.Format("{0}.{1}.{2}", State.VersionMajor, State.VersionMiddle, State.VersionMinor), GUILayout.Width(singleW));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Game status:</color> ", GUI.skin.customStyles[0]);
            GUILayout.Label(string.Format("<b>{0}</b>", State.GameStatus.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Total days: ", GUI.skin.customStyles[0]);
            State.TotalDays = int.Parse(GUILayout.TextField(State.TotalDays.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current day:</color> ", GUI.skin.customStyles[0]);
            State.CurrentDay = int.Parse(GUILayout.TextField(State.CurrentDay.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Max AP: ", GUI.skin.customStyles[0]);
            State.MaxAP = int.Parse(GUILayout.TextField(State.MaxAP.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current AP:</color> ", GUI.skin.customStyles[0]);
            State.CurrentAP = int.Parse(GUILayout.TextField(State.CurrentAP.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix engine AP cost: ", GUI.skin.customStyles[0]);
            State.FixEngineAPCost = int.Parse(GUILayout.TextField(State.FixEngineAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK1 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK1][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK1][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK1][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK1][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK1][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK1][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK2 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK2][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK2][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK2][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK2][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK2][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK2][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK3 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK3][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK3][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK3][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK3][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK3][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK3][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Fix BRK4 requirements (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
            State.FixEngineRequirements[BreakageType.BRK4][0] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK4][0].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK4][1] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK4][1].ToString(), GUILayout.Width(tripleW)));
            State.FixEngineRequirements[BreakageType.BRK4][2] = int.Parse(GUILayout.TextField(State.FixEngineRequirements[BreakageType.BRK4][2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current breakage type:</color> ", GUI.skin.customStyles[0]);
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK1 ? "<b>❖ BRK1</b>" : "BRK1", GUILayout.Width(quadroW)))
            {
                State.BreakageType = BreakageType.BRK1;
            }
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK2 ? "<b>❖ BRK2</b>" : "BRK2", GUILayout.Width(quadroW)))
            {
                State.BreakageType = BreakageType.BRK2;
            }
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK3 ? "<b>❖ BRK3</b>" : "BRK3", GUILayout.Width(quadroW)))
            {
                State.BreakageType = BreakageType.BRK3;
            }
            if (GUILayout.Button(State.BreakageType == BreakageType.BRK4 ? "<b>❖ BRK4</b>" : "BRK4", GUILayout.Width(quadroW)))
            {
                State.BreakageType = BreakageType.BRK4;
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current Wiring, Alloy, Chips:</color> ", GUI.skin.customStyles[0]);
            State.Wiring = int.Parse(GUILayout.TextField(State.Wiring.ToString(), GUILayout.Width(tripleW)));
            State.Alloy  = int.Parse(GUILayout.TextField(State.Alloy.ToString(), GUILayout.Width(tripleW)));
            State.Chips  = int.Parse(GUILayout.TextField(State.Chips.ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Engine is fixed:</color> ", GUI.skin.customStyles[0]);
            State.EngineFixed = GUILayout.Toggle(State.EngineFixed, "");
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Synth fuel AP cost: ", GUI.skin.customStyles[0]);
            State.FuelSynthAPCost = int.Parse(GUILayout.TextField(State.FuelSynthAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Synth fuel grace: ", GUI.skin.customStyles[0]);
            State.FuelSynthGrace = int.Parse(GUILayout.TextField(State.FuelSynthGrace.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Synth fuel summ: ", GUI.skin.customStyles[0]);
            State.FuelSynthSumm = int.Parse(GUILayout.TextField(State.FuelSynthSumm.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current fuel synth formula (A, B, C):</color> ", GUI.skin.customStyles[0]);
            State.FuelSynthFormula[0] = int.Parse(GUILayout.TextField(State.FuelSynthFormula[0].ToString(), GUILayout.Width(tripleW)));
            State.FuelSynthFormula[1] = int.Parse(GUILayout.TextField(State.FuelSynthFormula[1].ToString(), GUILayout.Width(tripleW)));
            State.FuelSynthFormula[2] = int.Parse(GUILayout.TextField(State.FuelSynthFormula[2].ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Current minerals count (A, B, C):</color> ", GUI.skin.customStyles[0]);
            State.MineralA = int.Parse(GUILayout.TextField(State.MineralA.ToString(), GUILayout.Width(tripleW)));
            State.MineralB = int.Parse(GUILayout.TextField(State.MineralB.ToString(), GUILayout.Width(tripleW)));
            State.MineralC = int.Parse(GUILayout.TextField(State.MineralC.ToString(), GUILayout.Width(tripleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("<color=#93dedf>✎ Fuel is synthed:</color> ", GUI.skin.customStyles[0]);
            State.FuelSynthed = GUILayout.Toggle(State.FuelSynthed, "");
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            GUILayout.Label("Enter sector AP cost: ", GUI.skin.customStyles[0]);
            State.EnterSectorAPCost = int.Parse(GUILayout.TextField(State.EnterSectorAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Loot charges: ", GUI.skin.customStyles[0]);
            State.LootCharges = int.Parse(GUILayout.TextField(State.LootCharges.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 1 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 1).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 1).MineralA      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 1).MineralB      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 1).MineralC      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 1).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 2 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 2).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 2).MineralA      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 2).MineralB      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 2).MineralC      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 2).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 3 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 3).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 3).MineralA      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 3).MineralB      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 3).MineralC      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 3).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Sector 4 parameters (loot spots, A, B, C): ", GUI.skin.customStyles[0]);
            State.SectorsParameters.Find(x => x.SectorID == 4).LootSpotCount = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).LootSpotCount.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 4).MineralA      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).MineralA.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 4).MineralB      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).MineralB.ToString(), GUILayout.Width(quadroW)));
            State.SectorsParameters.Find(x => x.SectorID == 4).MineralC      = int.Parse(GUILayout.TextField(State.SectorsParameters.Find(x => x.SectorID == 4).MineralC.ToString(), GUILayout.Width(quadroW)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Analyze artifact AP cost: ", GUI.skin.customStyles[0]);
            State.AnalyzeArtifactAPCost = int.Parse(GUILayout.TextField(State.AnalyzeArtifactAPCost.ToString(), GUILayout.Width(singleW)));
            GUILayout.EndHorizontal();
        }

        if (selectedPage == StateEditorPage.Journal)
        {
            for (int i = 0; i < State.JournalRecords.Count; i++)
            {
                var record = State.JournalRecords[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Journal record ID: ", GUI.skin.customStyles[0]);
                record.ID = GUILayout.TextField(record.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Journal record text: ", GUI.skin.customStyles[0]);
                GUILayout.TextArea(Text.Get(record.ID), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day requirements (min, specific, max): ", GUI.skin.customStyles[0]);
                record.Requirements.MinDay = int.Parse(GUILayout.TextField(record.Requirements.MinDay.ToString(), GUILayout.Width(tripleW)));
                record.Requirements.Day    = int.Parse(GUILayout.TextField(record.Requirements.Day.ToString(), GUILayout.Width(tripleW)));
                record.Requirements.MaxDay = int.Parse(GUILayout.TextField(record.Requirements.MaxDay.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("AP requirements (min, max): ", GUI.skin.customStyles[0]);
                record.Requirements.MinAP = int.Parse(GUILayout.TextField(record.Requirements.MinAP.ToString(), GUILayout.Width(doubleW)));
                record.Requirements.MaxAP = int.Parse(GUILayout.TextField(record.Requirements.MaxAP.ToString(), GUILayout.Width(doubleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest requirements: ", GUI.skin.customStyles[0]);
                if (record.Requirements.CompletedQuests.Count < 1)
                {
                    record.Requirements.CompletedQuests = new List <string>()
                    {
                        ""
                    }
                }
                ;
                record.Requirements.CompletedQuests[0] = GUILayout.TextField(record.Requirements.CompletedQuests[0], GUILayout.Width(tripleW));
                if (record.Requirements.CompletedQuests.Count < 2)
                {
                    record.Requirements.CompletedQuests = new List <string>()
                    {
                        record.Requirements.CompletedQuests[0], ""
                    }
                }
                ;
                record.Requirements.CompletedQuests[1] = GUILayout.TextField(record.Requirements.CompletedQuests[1], GUILayout.Width(tripleW));
                if (record.Requirements.CompletedQuests.Count < 3)
                {
                    record.Requirements.CompletedQuests = new List <string>()
                    {
                        record.Requirements.CompletedQuests[0], record.Requirements.CompletedQuests[1], ""
                    }
                }
                ;
                record.Requirements.CompletedQuests[2] = GUILayout.TextField(record.Requirements.CompletedQuests[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact requirements: ", GUI.skin.customStyles[0]);
                if (record.Requirements.AnalyzedArtifacts.Count < 1)
                {
                    record.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        ""
                    }
                }
                ;
                record.Requirements.AnalyzedArtifacts[0] = GUILayout.TextField(record.Requirements.AnalyzedArtifacts[0], GUILayout.Width(tripleW));
                if (record.Requirements.AnalyzedArtifacts.Count < 2)
                {
                    record.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        record.Requirements.AnalyzedArtifacts[0], ""
                    }
                }
                ;
                record.Requirements.AnalyzedArtifacts[1] = GUILayout.TextField(record.Requirements.AnalyzedArtifacts[1], GUILayout.Width(tripleW));
                if (record.Requirements.AnalyzedArtifacts.Count < 3)
                {
                    record.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        record.Requirements.AnalyzedArtifacts[0], record.Requirements.AnalyzedArtifacts[1], ""
                    }
                }
                ;
                record.Requirements.AnalyzedArtifacts[2] = GUILayout.TextField(record.Requirements.AnalyzedArtifacts[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Has already been written at day:</color> ", GUI.skin.customStyles[0]);
                record.AssignedDay = int.Parse(GUILayout.TextField(record.AssignedDay.ToString(), GUILayout.Width(singleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.JournalRecords.Remove(record);
                        State.JournalRecords.Insert(i - 1, record);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (i < State.JournalRecords.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.JournalRecords.Remove(record);
                        State.JournalRecords.Insert(i + 1, record);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                {
                    State.JournalRecords.Remove(record);
                }
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                {
                    State.JournalRecords.Insert(i, (new JournalRecord("Journal" + (State.JournalRecords.Count + 1).ToString(), new Requirements(day: -1))));
                }
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        if (selectedPage == StateEditorPage.Quests)
        {
            for (int i = 0; i < State.QuestRecords.Count; i++)
            {
                var quest = State.QuestRecords[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest ID: ", GUI.skin.customStyles[0]);
                quest.ID = GUILayout.TextField(quest.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day requirements (min, specific, max): ", GUI.skin.customStyles[0]);
                quest.Requirements.MinDay = int.Parse(GUILayout.TextField(quest.Requirements.MinDay.ToString(), GUILayout.Width(tripleW)));
                quest.Requirements.Day    = int.Parse(GUILayout.TextField(quest.Requirements.Day.ToString(), GUILayout.Width(tripleW)));
                quest.Requirements.MaxDay = int.Parse(GUILayout.TextField(quest.Requirements.MaxDay.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("AP requirements (min, max): ", GUI.skin.customStyles[0]);
                quest.Requirements.MinAP = int.Parse(GUILayout.TextField(quest.Requirements.MinAP.ToString(), GUILayout.Width(doubleW)));
                quest.Requirements.MaxAP = int.Parse(GUILayout.TextField(quest.Requirements.MaxAP.ToString(), GUILayout.Width(doubleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest requirements: ", GUI.skin.customStyles[0]);
                if (quest.Requirements.CompletedQuests.Count < 1)
                {
                    quest.Requirements.CompletedQuests = new List <string>()
                    {
                        ""
                    }
                }
                ;
                quest.Requirements.CompletedQuests[0] = GUILayout.TextField(quest.Requirements.CompletedQuests[0], GUILayout.Width(tripleW));
                if (quest.Requirements.CompletedQuests.Count < 2)
                {
                    quest.Requirements.CompletedQuests = new List <string>()
                    {
                        quest.Requirements.CompletedQuests[0], ""
                    }
                }
                ;
                quest.Requirements.CompletedQuests[1] = GUILayout.TextField(quest.Requirements.CompletedQuests[1], GUILayout.Width(tripleW));
                if (quest.Requirements.CompletedQuests.Count < 3)
                {
                    quest.Requirements.CompletedQuests = new List <string>()
                    {
                        quest.Requirements.CompletedQuests[0], quest.Requirements.CompletedQuests[1], ""
                    }
                }
                ;
                quest.Requirements.CompletedQuests[2] = GUILayout.TextField(quest.Requirements.CompletedQuests[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact requirements: ", GUI.skin.customStyles[0]);
                if (quest.Requirements.AnalyzedArtifacts.Count < 1)
                {
                    quest.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        ""
                    }
                }
                ;
                quest.Requirements.AnalyzedArtifacts[0] = GUILayout.TextField(quest.Requirements.AnalyzedArtifacts[0], GUILayout.Width(tripleW));
                if (quest.Requirements.AnalyzedArtifacts.Count < 2)
                {
                    quest.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        quest.Requirements.AnalyzedArtifacts[0], ""
                    }
                }
                ;
                quest.Requirements.AnalyzedArtifacts[1] = GUILayout.TextField(quest.Requirements.AnalyzedArtifacts[1], GUILayout.Width(tripleW));
                if (quest.Requirements.AnalyzedArtifacts.Count < 3)
                {
                    quest.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        quest.Requirements.AnalyzedArtifacts[0], quest.Requirements.AnalyzedArtifacts[1], ""
                    }
                }
                ;
                quest.Requirements.AnalyzedArtifacts[2] = GUILayout.TextField(quest.Requirements.AnalyzedArtifacts[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Current quest status:</color> ", GUI.skin.customStyles[0]);
                if (GUILayout.Button(quest.Status == QuestStatus.NotStarted ? "<b>❖ NotStarted</b>" : "NotStarted", GUILayout.Width(tripleW)))
                {
                    quest.Status = QuestStatus.NotStarted;
                }
                if (GUILayout.Button(quest.Status == QuestStatus.Started ? "<b>❖ Started</b>" : "Started", GUILayout.Width(tripleW)))
                {
                    quest.Status = QuestStatus.Started;
                }
                if (GUILayout.Button(quest.Status == QuestStatus.Completed ? "<b>❖ Completed</b>" : "Completed", GUILayout.Width(tripleW)))
                {
                    quest.Status = QuestStatus.Completed;
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Current quest block:</color> ", GUI.skin.customStyles[0]);
                quest.CurrentBlock = GUILayout.TextField(quest.CurrentBlock, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.QuestRecords.Remove(quest);
                        State.QuestRecords.Insert(i - 1, quest);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (i < State.QuestRecords.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.QuestRecords.Remove(quest);
                        State.QuestRecords.Insert(i + 1, quest);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                {
                    State.QuestRecords.Remove(quest);
                }
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                {
                    State.QuestRecords.Insert(i, new Quest("Quest" + (State.QuestRecords.Count + 1).ToString(), new Requirements(minAP: -1)));
                }
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        if (selectedPage == StateEditorPage.Artifacts)
        {
            for (int i = 0; i < State.Artifacts.Count; i++)
            {
                var artifact = State.Artifacts[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact ID: ", GUI.skin.customStyles[0]);
                artifact.ID = GUILayout.TextField(artifact.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact name: ", GUI.skin.customStyles[0]);
                GUILayout.TextField(Text.Get(artifact.ID), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact scan info: ", GUI.skin.customStyles[0]);
                GUILayout.TextArea(Text.Get(artifact.ID + "ScanInfo"), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Assigned sector (0 for any-random): ", GUI.skin.customStyles[0]);
                artifact.Sector = int.Parse(GUILayout.TextField(artifact.Sector.ToString(), GUILayout.Width(singleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact contents (wiring, alloy, chips): ", GUI.skin.customStyles[0]);
                artifact.Wiring = int.Parse(GUILayout.TextField(artifact.Wiring.ToString(), GUILayout.Width(tripleW)));
                artifact.Alloy  = int.Parse(GUILayout.TextField(artifact.Alloy.ToString(), GUILayout.Width(tripleW)));
                artifact.Chips  = int.Parse(GUILayout.TextField(artifact.Chips.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact identity: ", GUI.skin.customStyles[0]);
                if (GUILayout.Button(artifact.Identity == null ? "<b>❖ NONE</b>" : "NONE", GUILayout.Width(tettroW)))
                {
                    artifact.Identity = null;
                }
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK1 ? "<b>❖ BRK1</b>" : "BRK1", GUILayout.Width(tettroW)))
                {
                    artifact.Identity = BreakageType.BRK1;
                }
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK2 ? "<b>❖ BRK2</b>" : "BRK2", GUILayout.Width(tettroW)))
                {
                    artifact.Identity = BreakageType.BRK2;
                }
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK3 ? "<b>❖ BRK3</b>" : "BRK3", GUILayout.Width(tettroW)))
                {
                    artifact.Identity = BreakageType.BRK3;
                }
                if (GUILayout.Button(artifact.Identity == BreakageType.BRK4 ? "<b>❖ BRK4</b>" : "BRK4", GUILayout.Width(tettroW)))
                {
                    artifact.Identity = BreakageType.BRK4;
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("<color=#93dedf>✎ Artifact current status:</color> ", GUI.skin.customStyles[0]);
                if (GUILayout.Button(artifact.Status == ArtifactStatus.NotFound ? "<b>❖ NotFound</b>" : "NotFound", GUILayout.Width(quadroW)))
                {
                    artifact.Status = ArtifactStatus.NotFound;
                }
                if (GUILayout.Button(artifact.Status == ArtifactStatus.Found ? "<b>❖ Found</b>" : "Found", GUILayout.Width(quadroW)))
                {
                    artifact.Status = ArtifactStatus.Found;
                }
                if (GUILayout.Button(artifact.Status == ArtifactStatus.Analyzing ? "<b>❖ Analyzing</b>" : "Analyzing", GUILayout.Width(quadroW)))
                {
                    artifact.Status = ArtifactStatus.Analyzing;
                }
                if (GUILayout.Button(artifact.Status == ArtifactStatus.Analyzed ? "<b>❖ Analyzed</b>" : "Analyzed", GUILayout.Width(quadroW)))
                {
                    artifact.Status = ArtifactStatus.Analyzed;
                }
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.Artifacts.Remove(artifact);
                        State.Artifacts.Insert(i - 1, artifact);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (i < State.Artifacts.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.Artifacts.Remove(artifact);
                        State.Artifacts.Insert(i + 1, artifact);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                {
                    State.Artifacts.Remove(artifact);
                }
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                {
                    State.Artifacts.Insert(i, new Artifact("Artifact" + (State.Artifacts.Count + 1).ToString(), 0, null, 0, 0, 0));
                }
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        if (selectedPage == StateEditorPage.Phrases)
        {
            for (int i = 0; i < State.Phrases.Count; i++)
            {
                var phrase = State.Phrases[i];

                GUILayout.BeginHorizontal();
                GUILayout.Label("Phrase ID: ", GUI.skin.customStyles[0]);
                phrase.ID = GUILayout.TextField(phrase.ID, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Phrase text: ", GUI.skin.customStyles[0]);
                GUILayout.TextArea(Text.Get(phrase.ID), GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Associated quest: ", GUI.skin.customStyles[0]);
                phrase.AssociatedQuest = GUILayout.TextField(phrase.AssociatedQuest, GUILayout.Width(singleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Day requirements (min, specific, max): ", GUI.skin.customStyles[0]);
                phrase.Requirements.MinDay = int.Parse(GUILayout.TextField(phrase.Requirements.MinDay.ToString(), GUILayout.Width(tripleW)));
                phrase.Requirements.Day    = int.Parse(GUILayout.TextField(phrase.Requirements.Day.ToString(), GUILayout.Width(tripleW)));
                phrase.Requirements.MaxDay = int.Parse(GUILayout.TextField(phrase.Requirements.MaxDay.ToString(), GUILayout.Width(tripleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("AP requirements (min, max): ", GUI.skin.customStyles[0]);
                phrase.Requirements.MinAP = int.Parse(GUILayout.TextField(phrase.Requirements.MinAP.ToString(), GUILayout.Width(doubleW)));
                phrase.Requirements.MaxAP = int.Parse(GUILayout.TextField(phrase.Requirements.MaxAP.ToString(), GUILayout.Width(doubleW)));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Quest requirements: ", GUI.skin.customStyles[0]);
                if (phrase.Requirements.CompletedQuests.Count < 1)
                {
                    phrase.Requirements.CompletedQuests = new List <string>()
                    {
                        ""
                    }
                }
                ;
                phrase.Requirements.CompletedQuests[0] = GUILayout.TextField(phrase.Requirements.CompletedQuests[0], GUILayout.Width(tripleW));
                if (phrase.Requirements.CompletedQuests.Count < 2)
                {
                    phrase.Requirements.CompletedQuests = new List <string>()
                    {
                        phrase.Requirements.CompletedQuests[0], ""
                    }
                }
                ;
                phrase.Requirements.CompletedQuests[1] = GUILayout.TextField(phrase.Requirements.CompletedQuests[1], GUILayout.Width(tripleW));
                if (phrase.Requirements.CompletedQuests.Count < 3)
                {
                    phrase.Requirements.CompletedQuests = new List <string>()
                    {
                        phrase.Requirements.CompletedQuests[0], phrase.Requirements.CompletedQuests[1], ""
                    }
                }
                ;
                phrase.Requirements.CompletedQuests[2] = GUILayout.TextField(phrase.Requirements.CompletedQuests[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Label("Artifact requirements: ", GUI.skin.customStyles[0]);
                if (phrase.Requirements.AnalyzedArtifacts.Count < 1)
                {
                    phrase.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        ""
                    }
                }
                ;
                phrase.Requirements.AnalyzedArtifacts[0] = GUILayout.TextField(phrase.Requirements.AnalyzedArtifacts[0], GUILayout.Width(tripleW));
                if (phrase.Requirements.AnalyzedArtifacts.Count < 2)
                {
                    phrase.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        phrase.Requirements.AnalyzedArtifacts[0], ""
                    }
                }
                ;
                phrase.Requirements.AnalyzedArtifacts[1] = GUILayout.TextField(phrase.Requirements.AnalyzedArtifacts[1], GUILayout.Width(tripleW));
                if (phrase.Requirements.AnalyzedArtifacts.Count < 3)
                {
                    phrase.Requirements.AnalyzedArtifacts = new List <string>()
                    {
                        phrase.Requirements.AnalyzedArtifacts[0], phrase.Requirements.AnalyzedArtifacts[1], ""
                    }
                }
                ;
                phrase.Requirements.AnalyzedArtifacts[2] = GUILayout.TextField(phrase.Requirements.AnalyzedArtifacts[2], GUILayout.Width(tripleW));
                GUILayout.EndHorizontal();

                GUILayout.BeginHorizontal();
                GUILayout.Space(controlW);
                if (i > 0)
                {
                    if (GUILayout.Button("<color=#c8c174>▲</color>", GUILayout.Width(30)))
                    {
                        State.Phrases.Remove(phrase);
                        State.Phrases.Insert(i - 1, phrase);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (i < State.Phrases.Count - 1)
                {
                    if (GUILayout.Button("<color=#c8c174>▼</color>", GUILayout.Width(30)))
                    {
                        State.Phrases.Remove(phrase);
                        State.Phrases.Insert(i + 1, phrase);
                    }
                }
                else
                {
                    GUILayout.Space(35);
                }
                if (GUILayout.Button("<color=red>─</color>", GUILayout.Width(30)))
                {
                    State.Phrases.Remove(phrase);
                }
                if (GUILayout.Button("<color=green>✚</color>", GUILayout.Width(30)))
                {
                    State.Phrases.Insert(i, (new Phrase("Phrase" + (State.Phrases.Count + 1).ToString(), new Requirements(day: -1))));
                }
                GUILayout.EndHorizontal();

                GUILayout.Space(20);
            }
        }

        GUILayout.EndScrollView();

        GUILayout.Space(2);

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("<b><color=#60c367><size=45>☑</size></color>    Save and return to menu</b>\n", GUILayout.Height(30)))
        {
            SaveAndExit();
        }
        if (GUILayout.Button("<b><color=#d9614d><size=45>☒</size></color>    Total reset</b>\n", GUILayout.Height(30), GUILayout.Width(150)))
        {
            State.Reset(true);
        }
        if (GUILayout.Button("<b><color=#6b9fb8><size=45>☯</size></color>    Update text</b>\n", GUILayout.Height(30), GUILayout.Width(150)))
        {
            ServiceLocator.Text = new GoogleText();
        }
        GUILayout.EndHorizontal();

        GUILayout.EndArea();
    }
}