您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

101 行
3.5 KiB

using TMPro;
using UnityEngine;
namespace BoatAttack.UI
{
public class MainMenuHelper : MonoBehaviour
{
[Header("Level Selection")] public EnumSelector levelSelector;
public EnumSelector lapSelector;
public EnumSelector reverseSelector;
[Header("Boat Selection")] public GameObject[] boatMeshes;
public TextMeshProUGUI boatName;
public EnumSelector boatHullSelector;
public ColorSelector boatPrimaryColorSelector;
public ColorSelector boatTrimColorSelector;
private void OnEnable()
{
// level stuff
levelSelector.updateVal += SetLevel;
lapSelector.updateVal += SetLaps;
reverseSelector.updateVal += SetReverse;
// boat stuff
boatHullSelector.updateVal += UpdateBoat;
boatPrimaryColorSelector.updateVal += UpdatePrimaryColor;
boatTrimColorSelector.updateVal += UpdateTrimColor;
}
private void SetupDefaults()
{
// level stuff
SetLevel(levelSelector.CurrentOption);
SetLaps(lapSelector.CurrentOption);
SetReverse(reverseSelector.CurrentOption);
// boat stuff
SetSinglePlayerName(boatName.text);
UpdateBoat(0);
UpdateBoatColor(boatPrimaryColorSelector.CurrentOption, true);
UpdateBoatColor(boatTrimColorSelector.CurrentOption, false);
}
private void UpdateBoat(int index)
{
RaceManager.SetHull(0, index);
for (var i = 0; i < boatMeshes.Length; i++)
{
boatMeshes[i].SetActive(i == index);
}
}
public void SetupSingleplayerGame()
{
RaceManager.SetGameType(RaceManager.GameType.Singleplayer);
SetupDefaults();
}
public void SetupSpectatorGame()
{
RaceManager.SetGameType(RaceManager.GameType.Spectator);
SetupDefaults();
}
private static void SetLevel(int index) => RaceManager.SetLevel(index);
private static void SetLaps(int index) => RaceManager.RaceData.laps = ConstantData.Laps[index];
private static void SetReverse(int reverse) => RaceManager.RaceData.reversed = reverse == 1;
public void StartRace() => RaceManager.LoadGame();
public void SetSinglePlayerName(string playerName) => RaceManager.RaceData.boats[0].boatName = playerName;
private void UpdatePrimaryColor(int index) => UpdateBoatColor(index, true);
private void UpdateTrimColor(int index) => UpdateBoatColor(index, false);
private void UpdateBoatColor(int index, bool primary)
{
// update racedata
if (primary)
{
RaceManager.RaceData.boats[0].livery.primaryColor = ConstantData.GetPaletteColor(index);
}
else
{
RaceManager.RaceData.boats[0].livery.trimColor = ConstantData.GetPaletteColor(index);
}
// update menu boats
foreach (var t in boatMeshes)
{
var renderers = t.GetComponentsInChildren<MeshRenderer>(true);
foreach (var rend in renderers)
{
rend.material.SetColor(primary ? "_Color1" : "_Color2", ConstantData.GetPaletteColor(index));
}
}
}
}
}