107 lines
4.1 KiB
C#
107 lines
4.1 KiB
C#
using DunGen;
|
|
using DunGenPlus.DevTools.UIElements;
|
|
using DunGenPlus.DevTools.UIElements.Collections;
|
|
using LethalLevelLoader;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace DunGenPlus.DevTools.Panels {
|
|
internal class MainPanel : BasePanel {
|
|
|
|
public static MainPanel Instance { get; internal set; }
|
|
|
|
internal IntInputField seedInputField;
|
|
internal TextUIElement lengthMultiplierField;
|
|
|
|
internal ExtendedLevel[] levels;
|
|
internal IEnumerable<string> levelOptions;
|
|
|
|
private GameObject asyncParentGameobject;
|
|
|
|
public override void AwakeCall(){
|
|
Instance = this;
|
|
|
|
GetAllLevels();
|
|
|
|
var gen = dungeon.Generator;
|
|
var parentTransform = mainGameObject.transform;
|
|
|
|
manager.CreateHeaderUIField(parentTransform, "Dungeon Generator");
|
|
seedInputField = manager.CreateIntInputField(parentTransform, "Seed", gen.Seed, SetSeed);
|
|
manager.CreateBoolInputField(parentTransform, ("Randomize Seed", "If true, creates and saves a new seed when generating the dungeon."), gen.ShouldRandomizeSeed, SetRandomSeed);
|
|
manager.CreateSpaceUIField(parentTransform);
|
|
|
|
manager.CreateIntInputField(parentTransform, ("Max Attempts", "Maximum number of dungeon generation attempts before giving up."), new IntParameter(gen.MaxAttemptCount, 0, 500, 0), SetMaxAttempts);
|
|
manager.CreateSpaceUIField(parentTransform);
|
|
|
|
var asyncTransform = manager.CreateVerticalLayoutUIField(parentTransform);
|
|
asyncParentGameobject = asyncTransform.gameObject;
|
|
manager.CreateBoolInputField(parentTransform, ("Generate Async", "If true, visually generates the dungeon tile by tile."), gen.GenerateAsynchronously, SetGenerateAsync);
|
|
manager.CreateFloatInputField(asyncTransform, "Max Async (ms)", new FloatParameter(gen.MaxAsyncFrameMilliseconds, 0f, float.MaxValue), SetMaxAsync);
|
|
manager.CreateFloatInputField(asyncTransform, "Pause Between Rooms", new FloatParameter(gen.PauseBetweenRooms, 0f, float.MaxValue), SetPauseBetweenRooms);
|
|
asyncTransform.SetAsLastSibling();
|
|
manager.CreateSpaceUIField(parentTransform);
|
|
|
|
manager.CreateHeaderUIField(parentTransform, "Levels");
|
|
manager.CreateLevelOptionsUIField(parentTransform, "Level", 0, SetLevel);
|
|
lengthMultiplierField = manager.CreateTextUIField(parentTransform, ("Length Multiplier", "Dungeon size multiplier based on the level."));
|
|
SetLevel(levels[0]);
|
|
|
|
asyncParentGameobject.SetActive(gen.GenerateAsynchronously);
|
|
}
|
|
|
|
public void SetSeed(int value) {
|
|
dungeon.Generator.Seed = value;
|
|
}
|
|
|
|
public void SetRandomSeed(bool state) {
|
|
dungeon.Generator.ShouldRandomizeSeed = state;
|
|
}
|
|
|
|
public void SetMaxAttempts(int value) {
|
|
dungeon.Generator.MaxAttemptCount = value;
|
|
}
|
|
|
|
public void SetGenerateAsync(bool state) {
|
|
dungeon.Generator.GenerateAsynchronously = state;
|
|
asyncParentGameobject.SetActive(state);
|
|
}
|
|
|
|
public void SetMaxAsync(float value) {
|
|
dungeon.Generator.MaxAsyncFrameMilliseconds = value;
|
|
}
|
|
|
|
public void SetPauseBetweenRooms(float value) {
|
|
dungeon.Generator.PauseBetweenRooms = value;
|
|
}
|
|
|
|
private void GetAllLevels(){
|
|
levels = LethalLevelLoader.PatchedContent.ExtendedLevels.ToArray();
|
|
levelOptions = levels.Select(l => l.NumberlessPlanetName);
|
|
}
|
|
|
|
public void SetLevel(ExtendedLevel level){
|
|
var currentLevelLengthMultlpier = GetLevelMultiplier(level);
|
|
dungeon.Generator.LengthMultiplier = currentLevelLengthMultlpier;
|
|
manager.UpdateDungeonBounds();
|
|
lengthMultiplierField.SetText($"Length multiplier: {currentLevelLengthMultlpier.ToString("F2")}");
|
|
}
|
|
|
|
private float GetLevelMultiplier(ExtendedLevel level){
|
|
var roundManager = RoundManager.Instance;
|
|
if (roundManager == null) {
|
|
Plugin.logger.LogError("RoundManager somehow null. Can't set level length multiplier");
|
|
return 1f;
|
|
}
|
|
|
|
return roundManager.mapSizeMultiplier * level.SelectableLevel.factorySizeMultiplier;
|
|
}
|
|
|
|
}
|
|
}
|