2021-03-13 03:23:58 +00:00
|
|
|
using System;
|
2026-08-10 14:57:50 +01:00
|
|
|
using System.Collections;
|
2026-06-30 19:14:49 +01:00
|
|
|
using System.Collections.Generic;
|
2026-08-10 14:57:50 +01:00
|
|
|
using System.IO;
|
Land RunSave and the one-cache run and player lifecycle (Cut 10)
Owner: ActionGameManager composes the process's one cache. Its CultCache
getter attaches the catalog, GameData/run.cc and GameData/player.cc on
first access, in either scene, and nothing reopens it.
- RunSave (SavedGame.cs) replaces the SavedGame constructor:
- Capture builds the live run as plain documents and writes nothing. Zone
contents are `zone.Contents?.PackZone() ?? zone.PackedContents`, so a
zone generated earlier but not loaded this session keeps its contents
and its orbit and body records instead of being erased by the next save.
- Commit is the only writer of SavedGame and SavedZone: one Commit with
zone i at `savedzone-{i}`, SavedGame.Zones set to those refs, and every
stored SavedZone outside that set removed. Orbits and bodies staged by
zone generation land in the same single-file write.
- Clear removes every run record in one Commit.
- Run begins: New Game's first statement is RunSave.Clear. Run saves:
ActionGameManager.SaveRun at wormhole arrival and quit. Run ends: Die
clears the run, then saves settings.
- Run exists only as the run store's SavedGame global: MainMenu enables
Continue from it (and logs when the run store holds records but no
SavedGame), and StartGame reads it once to pick the new-run or resume
branch.
- PlayerSettings: the getter returns the player store's global and, on
first launch, commits GetDefaultPlayerSettings; it is the only creator.
SavePlayerSettings commits the instance.
- InputDisplayLayout reads its InputLayout from the catalog by the layout
asset's name and throws when the catalog has none.
Tests: new RunSaveTests (5): RepeatedSavesKeepRecordCountConstant,
SaveRemovesZonesNoLongerInTheRun, SaveWritesOnlyTheRunStore,
ResumeThenSaveKeepsUnloadedZoneContents, ClearRemovesEveryRunRecord. Each
fails with its rule mutated out.
Builds: headless, 11 tests pass, Unity batchmode compile reports no error CS.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 22:00:27 +02:00
|
|
|
using System.Linq;
|
2026-08-10 14:57:50 +01:00
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
2026-09-17 18:22:41 +02:00
|
|
|
using MessagePack;
|
2026-08-10 14:57:50 +01:00
|
|
|
using TMPro;
|
2021-03-15 11:40:46 +00:00
|
|
|
using UniRx;
|
2021-03-13 03:23:58 +00:00
|
|
|
using UnityEngine;
|
2021-03-14 03:56:49 +00:00
|
|
|
using UnityEngine.SceneManagement;
|
2021-03-13 03:23:58 +00:00
|
|
|
using UnityEngine.UI;
|
2026-09-14 17:39:12 +02:00
|
|
|
using static CultMath.math;
|
|
|
|
|
using float2 = CultMath.float2;
|
2026-08-10 14:57:50 +01:00
|
|
|
using Random = UnityEngine.Random;
|
2021-03-13 03:23:58 +00:00
|
|
|
|
|
|
|
|
public class MainMenu : MonoBehaviour
|
|
|
|
|
{
|
2022-07-18 08:44:54 +01:00
|
|
|
public VolumeCloudRenderer CloudRenderer;
|
2021-03-20 04:20:17 +00:00
|
|
|
public GameSettings Settings;
|
2021-03-15 11:40:46 +00:00
|
|
|
public ConfirmationDialog Dialog;
|
2021-03-14 03:56:49 +00:00
|
|
|
public bool InGame;
|
2026-08-10 14:57:50 +01:00
|
|
|
public Prototype PanelPrototype;
|
|
|
|
|
public float FadeTime = .5f;
|
|
|
|
|
public float FadeDistance = 512;
|
|
|
|
|
public float FadeAlphaExponent = 2;
|
|
|
|
|
public float FadePositionExponent = 2;
|
|
|
|
|
|
|
|
|
|
private (PropertiesPanel panel, CanvasGroup group) _currentMenu, _nextMenu;
|
|
|
|
|
private bool _fadeFromRight;
|
|
|
|
|
private float _fadeLerp;
|
|
|
|
|
private bool _fading;
|
|
|
|
|
private Vector3 _panelPosition;
|
|
|
|
|
//private Task<DatabaseCache> _databaseLoad;
|
2021-03-13 03:23:58 +00:00
|
|
|
|
|
|
|
|
void Start()
|
|
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
// Start loading the database in the background 'cause it takes a few seconds
|
|
|
|
|
//_databaseLoad = Task.Run(() => ActionGameManager.Database);
|
|
|
|
|
|
|
|
|
|
_panelPosition = PanelPrototype.transform.position;
|
|
|
|
|
|
|
|
|
|
var panel1 = PanelPrototype.Instantiate<PropertiesPanel>();
|
|
|
|
|
_currentMenu = (panel1, panel1.GetComponent<CanvasGroup>());
|
|
|
|
|
|
|
|
|
|
var panel2 = PanelPrototype.Instantiate<PropertiesPanel>();
|
|
|
|
|
_nextMenu = (panel2, panel2.GetComponent<CanvasGroup>());
|
|
|
|
|
|
|
|
|
|
_currentMenu.panel.gameObject.SetActive(false);
|
|
|
|
|
//_saveDirectory = ActionGameManager.GameDataDirectory.CreateSubdirectory("Saves");
|
|
|
|
|
|
|
|
|
|
ShowMain();
|
|
|
|
|
Fade(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
|
{
|
|
|
|
|
if (_fading)
|
|
|
|
|
{
|
|
|
|
|
_fadeLerp += Time.deltaTime / FadeTime;
|
|
|
|
|
|
|
|
|
|
_currentMenu.panel.transform.position =
|
|
|
|
|
_panelPosition + (_fadeFromRight ? Vector3.left : Vector3.right) * (FadeDistance * pow(_fadeLerp, FadePositionExponent));
|
|
|
|
|
_nextMenu.panel.transform.position =
|
|
|
|
|
_panelPosition + (_fadeFromRight ? Vector3.right : Vector3.left) * (FadeDistance * pow(1-_fadeLerp, FadePositionExponent));
|
|
|
|
|
_currentMenu.group.alpha = pow(1 - _fadeLerp, FadeAlphaExponent);
|
|
|
|
|
_nextMenu.group.alpha = pow(_fadeLerp, FadeAlphaExponent);
|
|
|
|
|
|
|
|
|
|
if (_fadeLerp > 1)
|
2026-06-30 19:14:49 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_fading = false;
|
|
|
|
|
_currentMenu.panel.gameObject.SetActive(false);
|
|
|
|
|
var temp = _currentMenu;
|
|
|
|
|
_currentMenu = _nextMenu;
|
|
|
|
|
_nextMenu = temp;
|
2026-06-30 19:14:49 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private string TitleSubtitle(string title, string subtitle) => $"{title}\n<smallcaps><size=50%>{subtitle}";
|
2026-06-30 19:14:49 +01:00
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private void Fade(bool fromRight)
|
2026-06-30 19:14:49 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.gameObject.SetActive(true);
|
|
|
|
|
_nextMenu.group.alpha = 0;
|
|
|
|
|
_fading = true;
|
|
|
|
|
_fadeLerp = 0;
|
|
|
|
|
_fadeFromRight = fromRight;
|
2026-06-30 19:14:49 +01:00
|
|
|
}
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private void ShowMain()
|
2026-06-30 19:14:49 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.Clear();
|
|
|
|
|
_nextMenu.panel.Title.text = TitleSubtitle("aetheria", "terminus");
|
Land RunSave and the one-cache run and player lifecycle (Cut 10)
Owner: ActionGameManager composes the process's one cache. Its CultCache
getter attaches the catalog, GameData/run.cc and GameData/player.cc on
first access, in either scene, and nothing reopens it.
- RunSave (SavedGame.cs) replaces the SavedGame constructor:
- Capture builds the live run as plain documents and writes nothing. Zone
contents are `zone.Contents?.PackZone() ?? zone.PackedContents`, so a
zone generated earlier but not loaded this session keeps its contents
and its orbit and body records instead of being erased by the next save.
- Commit is the only writer of SavedGame and SavedZone: one Commit with
zone i at `savedzone-{i}`, SavedGame.Zones set to those refs, and every
stored SavedZone outside that set removed. Orbits and bodies staged by
zone generation land in the same single-file write.
- Clear removes every run record in one Commit.
- Run begins: New Game's first statement is RunSave.Clear. Run saves:
ActionGameManager.SaveRun at wormhole arrival and quit. Run ends: Die
clears the run, then saves settings.
- Run exists only as the run store's SavedGame global: MainMenu enables
Continue from it (and logs when the run store holds records but no
SavedGame), and StartGame reads it once to pick the new-run or resume
branch.
- PlayerSettings: the getter returns the player store's global and, on
first launch, commits GetDefaultPlayerSettings; it is the only creator.
SavePlayerSettings commits the instance.
- InputDisplayLayout reads its InputLayout from the catalog by the layout
asset's name and throws when the catalog has none.
Tests: new RunSaveTests (5): RepeatedSavesKeepRecordCountConstant,
SaveRemovesZonesNoLongerInTheRun, SaveWritesOnlyTheRunStore,
ResumeThenSaveKeepsUnloadedZoneContents, ClearRemovesEveryRunRecord. Each
fails with its rule mutated out.
Builds: headless, 11 tests pass, Unity batchmode compile reports no error CS.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 22:00:27 +02:00
|
|
|
if (!InGame)
|
|
|
|
|
{
|
|
|
|
|
// A run exists only as the run store's SavedGame global.
|
|
|
|
|
var cache = ActionGameManager.CultCache;
|
|
|
|
|
var saved = cache.GetGlobal<SavedGame>();
|
|
|
|
|
if (saved == null && cache.AllStoredDocuments.Any(stored => RunSave.IsRunRecord(stored.Descriptor.DocumentType)))
|
|
|
|
|
Debug.Log("run store has no SavedGame; Continue disabled");
|
|
|
|
|
_nextMenu.panel.AddButton("Continue", saved == null ? (Action) null : () =>
|
|
|
|
|
{
|
|
|
|
|
ActionGameManager.IsTutorial = saved.IsTutorial;
|
|
|
|
|
ActionGameManager.CurrentGalaxy = new Galaxy(cache, saved, Debug.Log);
|
|
|
|
|
SceneManager.LoadScene("ARPG");
|
|
|
|
|
});
|
|
|
|
|
}
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.AddButton("New Game",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
Land RunSave and the one-cache run and player lifecycle (Cut 10)
Owner: ActionGameManager composes the process's one cache. Its CultCache
getter attaches the catalog, GameData/run.cc and GameData/player.cc on
first access, in either scene, and nothing reopens it.
- RunSave (SavedGame.cs) replaces the SavedGame constructor:
- Capture builds the live run as plain documents and writes nothing. Zone
contents are `zone.Contents?.PackZone() ?? zone.PackedContents`, so a
zone generated earlier but not loaded this session keeps its contents
and its orbit and body records instead of being erased by the next save.
- Commit is the only writer of SavedGame and SavedZone: one Commit with
zone i at `savedzone-{i}`, SavedGame.Zones set to those refs, and every
stored SavedZone outside that set removed. Orbits and bodies staged by
zone generation land in the same single-file write.
- Clear removes every run record in one Commit.
- Run begins: New Game's first statement is RunSave.Clear. Run saves:
ActionGameManager.SaveRun at wormhole arrival and quit. Run ends: Die
clears the run, then saves settings.
- Run exists only as the run store's SavedGame global: MainMenu enables
Continue from it (and logs when the run store holds records but no
SavedGame), and StartGame reads it once to pick the new-run or resume
branch.
- PlayerSettings: the getter returns the player store's global and, on
first launch, commits GetDefaultPlayerSettings; it is the only creator.
SavePlayerSettings commits the instance.
- InputDisplayLayout reads its InputLayout from the catalog by the layout
asset's name and throws when the catalog has none.
Tests: new RunSaveTests (5): RepeatedSavesKeepRecordCountConstant,
SaveRemovesZonesNoLongerInTheRun, SaveWritesOnlyTheRunStore,
ResumeThenSaveKeepsUnloadedZoneContents, ClearRemovesEveryRunRecord. Each
fails with its rule mutated out.
Builds: headless, 11 tests pass, Unity batchmode compile reports no error CS.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 22:00:27 +02:00
|
|
|
RunSave.Clear(ActionGameManager.CultCache);
|
2026-08-10 14:57:50 +01:00
|
|
|
var generatorState = "Loading Database Contents";
|
|
|
|
|
Action<string> setState = s => generatorState = s;
|
2026-06-30 19:14:49 +01:00
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
Fade(true);
|
|
|
|
|
_nextMenu.panel.gameObject.SetActive(false);
|
|
|
|
|
Dialog.Clear();
|
|
|
|
|
Dialog.Title.text = "Generating Galaxy";
|
|
|
|
|
Dialog.AddProperty(() => generatorState);
|
|
|
|
|
Dialog.Show();
|
2026-06-16 21:08:20 +01:00
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
if (ActionGameManager.PlayerSettings.TutorialPassed)
|
2026-06-21 09:37:54 +01:00
|
|
|
{
|
2026-09-17 18:22:41 +02:00
|
|
|
var backgroundSettings = MessagePackSerializer.Deserialize<SectorBackgroundSettings>(
|
|
|
|
|
MessagePackSerializer.Serialize(Settings.SectorBackgroundSettings));
|
|
|
|
|
backgroundSettings.NoisePosition = Random.value * 1000;
|
2026-08-10 14:57:50 +01:00
|
|
|
ActionGameManager.IsTutorial = false;
|
|
|
|
|
Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
var sector = new Galaxy(
|
|
|
|
|
Settings.SectorGenerationSettings,
|
2026-09-17 18:22:41 +02:00
|
|
|
backgroundSettings,
|
2026-08-10 14:57:50 +01:00
|
|
|
Settings.NameGeneratorSettings,
|
|
|
|
|
ActionGameManager.CultCache,
|
|
|
|
|
Debug.Log,
|
|
|
|
|
setState);
|
|
|
|
|
Observable.NextFrame().Subscribe(_ =>
|
|
|
|
|
{
|
|
|
|
|
ActionGameManager.CurrentGalaxy = sector;
|
|
|
|
|
SceneManager.LoadScene("ARPG");
|
|
|
|
|
});
|
Remove dead code, unused plugins, and multiplayer remnants
Delete Economy.Server/Economy.Shared, LiteNetLib, network message types,
the texture-based Gravity duplicate, unreferenced scripts and agent
states, and unused plugins (MSAGL, NaughtyAttributes, AsyncAwaitUtil,
Allegorithmic, Localization samples, MrtTest, ThinkGear, QuickGraph),
plus vendored sample scenes, root zips/logs, and the stray Obsidian
folder. MainMenu logs faulted galaxy-generation tasks directly instead of
AsyncAwaitUtil's WrapErrors. Stop tracking UserSettings and the Wwise
.backup folder; ignore generated .sln/.csproj by pattern.
Game-system test scenes are kept. Playdead stays: VolumeCloudRenderer
derives from its EffectBase.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 22:14:57 +02:00
|
|
|
}).ContinueWith(t => Debug.LogException(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
|
2026-06-21 09:37:54 +01:00
|
|
|
}
|
2026-08-10 14:57:50 +01:00
|
|
|
else
|
|
|
|
|
{
|
2026-09-17 18:22:41 +02:00
|
|
|
var backgroundSettings = MessagePackSerializer.Deserialize<SectorBackgroundSettings>(
|
|
|
|
|
MessagePackSerializer.Serialize(Settings.TutorialBackgroundSettings));
|
2026-08-10 14:57:50 +01:00
|
|
|
int iteration = 1;
|
|
|
|
|
do
|
|
|
|
|
{
|
2026-09-17 18:22:41 +02:00
|
|
|
backgroundSettings.NoisePosition = Random.value * 1000;
|
2026-08-10 14:57:50 +01:00
|
|
|
setState($"Finding Galaxy Position: iteration {iteration++}");
|
2026-09-17 18:22:41 +02:00
|
|
|
} while (backgroundSettings.CloudDensity(float2(0.5f)) < .5f);
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
ActionGameManager.IsTutorial = true;
|
|
|
|
|
Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
var sector = new Galaxy(
|
|
|
|
|
Settings.TutorialGenerationSettings,
|
2026-09-17 18:22:41 +02:00
|
|
|
backgroundSettings,
|
2026-08-10 14:57:50 +01:00
|
|
|
Settings.NameGeneratorSettings,
|
|
|
|
|
ActionGameManager.CultCache,
|
|
|
|
|
ActionGameManager.PlayerSettings,
|
|
|
|
|
ActionGameManager.GameDataDirectory.CreateSubdirectory("Narrative"),
|
|
|
|
|
Debug.Log,
|
|
|
|
|
setState);
|
|
|
|
|
Observable.NextFrame().Subscribe(_ =>
|
|
|
|
|
{
|
|
|
|
|
ActionGameManager.CurrentGalaxy = sector;
|
|
|
|
|
SceneManager.LoadScene("ARPG");
|
|
|
|
|
});
|
Remove dead code, unused plugins, and multiplayer remnants
Delete Economy.Server/Economy.Shared, LiteNetLib, network message types,
the texture-based Gravity duplicate, unreferenced scripts and agent
states, and unused plugins (MSAGL, NaughtyAttributes, AsyncAwaitUtil,
Allegorithmic, Localization samples, MrtTest, ThinkGear, QuickGraph),
plus vendored sample scenes, root zips/logs, and the stray Obsidian
folder. MainMenu logs faulted galaxy-generation tasks directly instead of
AsyncAwaitUtil's WrapErrors. Stop tracking UserSettings and the Wwise
.backup folder; ignore generated .sln/.csproj by pattern.
Game-system test scenes are kept. Playdead stays: VolumeCloudRenderer
derives from its EffectBase.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-11 22:14:57 +02:00
|
|
|
}).ContinueWith(t => Debug.LogException(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
|
2026-08-10 14:57:50 +01:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
_nextMenu.panel.AddButton("Settings",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowSettings();
|
|
|
|
|
Fade(true);
|
|
|
|
|
});
|
|
|
|
|
_nextMenu.panel.AddButton("Quit", Application.Quit);
|
2026-06-17 06:10:41 +01:00
|
|
|
}
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private void ShowSettings()
|
2026-06-17 11:24:36 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.Clear();
|
|
|
|
|
_nextMenu.panel.Title.text = "settings";
|
|
|
|
|
_nextMenu.panel.AddButton("Gameplay",
|
|
|
|
|
() =>
|
2026-06-17 12:14:16 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
ShowGameplaySettings();
|
|
|
|
|
Fade(true);
|
|
|
|
|
});
|
|
|
|
|
_nextMenu.panel.AddButton("Graphics",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowGraphicsSettings();
|
|
|
|
|
Fade(true);
|
|
|
|
|
});
|
|
|
|
|
_nextMenu.panel.AddButton("Input",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowInputSettings();
|
|
|
|
|
Fade(true);
|
|
|
|
|
});
|
|
|
|
|
_nextMenu.panel.AddButton("Audio",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowAudioSettings();
|
|
|
|
|
Fade(true);
|
|
|
|
|
});
|
|
|
|
|
_nextMenu.panel.AddButton("Back",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowMain();
|
|
|
|
|
Fade(false);
|
|
|
|
|
});
|
2026-06-17 11:24:36 +01:00
|
|
|
}
|
2026-08-10 14:57:50 +01:00
|
|
|
|
|
|
|
|
private void ShowGameplaySettings()
|
|
|
|
|
{
|
|
|
|
|
_nextMenu.panel.Clear();
|
|
|
|
|
_nextMenu.panel.Title.text = TitleSubtitle("gameplay", "settings");
|
|
|
|
|
_nextMenu.panel.AddField("Name",
|
|
|
|
|
() => ActionGameManager.PlayerSettings.Name,
|
|
|
|
|
s => ActionGameManager.PlayerSettings.Name = s);
|
|
|
|
|
_nextMenu.panel.AddField("Temperature Unit",
|
|
|
|
|
() => (int) ActionGameManager.PlayerSettings.GameplaySettings.TemperatureUnit,
|
|
|
|
|
i => ActionGameManager.PlayerSettings.GameplaySettings.TemperatureUnit = (TemperatureUnit) i,
|
|
|
|
|
Enum.GetNames(typeof(TemperatureUnit)));
|
|
|
|
|
_nextMenu.panel.AddField("Significant Digits",
|
|
|
|
|
() => ActionGameManager.PlayerSettings.GameplaySettings.SignificantDigits,
|
|
|
|
|
i => ActionGameManager.PlayerSettings.GameplaySettings.SignificantDigits = i);
|
|
|
|
|
_nextMenu.panel.AddButton("Back",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ActionGameManager.SavePlayerSettings();
|
|
|
|
|
ShowSettings();
|
|
|
|
|
Fade(false);
|
|
|
|
|
});
|
2026-06-16 21:08:20 +01:00
|
|
|
}
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private void ShowGraphicsSettings()
|
2026-06-16 19:05:00 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.Clear();
|
|
|
|
|
_nextMenu.panel.Title.text = TitleSubtitle("graphics", "settings");
|
|
|
|
|
_nextMenu.panel.AddField("Nebula Quality",
|
|
|
|
|
() => (int)ActionGameManager.PlayerSettings.GraphicsSettings.NebulaQuality,
|
|
|
|
|
i =>
|
|
|
|
|
{
|
|
|
|
|
ActionGameManager.PlayerSettings.GraphicsSettings.NebulaQuality = (Quality)i;
|
|
|
|
|
CloudRenderer.quality = ActionGameManager.PlayerSettings.GraphicsSettings.NebulaQuality;
|
|
|
|
|
},
|
|
|
|
|
Enum.GetNames(typeof(Quality)));
|
|
|
|
|
_nextMenu.panel.AddField("Show Asteroids in Minimap",
|
|
|
|
|
() => ActionGameManager.PlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap,
|
|
|
|
|
b => ActionGameManager.PlayerSettings.GraphicsSettings.ShowAsteroidsInMinimap = b);
|
|
|
|
|
_nextMenu.panel.AddButton("Back",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowSettings();
|
|
|
|
|
Fade(false);
|
|
|
|
|
});
|
2026-06-16 19:05:00 +01:00
|
|
|
}
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private void ShowInputSettings()
|
2026-06-16 19:05:00 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.Clear();
|
|
|
|
|
_nextMenu.panel.Title.text = TitleSubtitle("input", "settings");
|
|
|
|
|
_nextMenu.panel.AddButton("Back",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowSettings();
|
|
|
|
|
Fade(false);
|
|
|
|
|
});
|
2026-06-30 19:14:49 +01:00
|
|
|
}
|
|
|
|
|
|
2026-08-10 14:57:50 +01:00
|
|
|
private void ShowAudioSettings()
|
2026-06-30 19:14:49 +01:00
|
|
|
{
|
2026-08-10 14:57:50 +01:00
|
|
|
_nextMenu.panel.Clear();
|
|
|
|
|
_nextMenu.panel.Title.text = TitleSubtitle("audio", "settings");
|
|
|
|
|
_nextMenu.panel.AddButton("Back",
|
|
|
|
|
() =>
|
|
|
|
|
{
|
|
|
|
|
ShowSettings();
|
|
|
|
|
Fade(false);
|
|
|
|
|
});
|
2026-06-15 22:47:15 +01:00
|
|
|
}
|
2021-03-13 03:23:58 +00:00
|
|
|
}
|