mirror of
https://github.com/GrahamKracker/UnityExplorer.git
synced 2025-07-03 03:52:28 +08:00

* Added InteractiveColor UI editor to make changing a Color easier * Added a "Scene Loader" helper which allows you to load any Scene that the game was built with. In some cases you may not find all the Scenes that the game uses, they may be loaded through AssetBundles or other means and won't show up here yet * Adjusted the SceneExplorer UI, the "Hide" button is now always on the left of the window * * Handled some errors related to UI unstripping that could occur in rare cases
111 lines
3.3 KiB
C#
111 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityExplorer.Core.Unity;
|
|
using UnityExplorer.UI;
|
|
using UnityExplorer.UI.CacheObject;
|
|
|
|
namespace UnityExplorer.UI.InteractiveValues
|
|
{
|
|
public class InteractiveBool : InteractiveValue
|
|
{
|
|
public InteractiveBool(object value, Type valueType) : base(value, valueType) { }
|
|
|
|
public override bool HasSubContent => false;
|
|
public override bool SubContentWanted => false;
|
|
public override bool WantInspectBtn => false;
|
|
|
|
internal Toggle m_toggle;
|
|
internal Button m_applyBtn;
|
|
|
|
public override void OnValueUpdated()
|
|
{
|
|
base.OnValueUpdated();
|
|
}
|
|
|
|
public override void RefreshUIForValue()
|
|
{
|
|
GetDefaultLabel();
|
|
|
|
if (Owner.HasEvaluated)
|
|
{
|
|
var val = (bool)Value;
|
|
|
|
if (Owner.CanWrite)
|
|
{
|
|
if (!m_toggle.gameObject.activeSelf)
|
|
m_toggle.gameObject.SetActive(true);
|
|
|
|
if (!m_applyBtn.gameObject.activeSelf)
|
|
m_applyBtn.gameObject.SetActive(true);
|
|
|
|
if (val != m_toggle.isOn)
|
|
m_toggle.isOn = val;
|
|
}
|
|
|
|
var color = val
|
|
? "6bc981" // on
|
|
: "c96b6b"; // off
|
|
|
|
m_baseLabel.text = $"<color=#{color}>{val}</color>";
|
|
}
|
|
else
|
|
{
|
|
m_baseLabel.text = DefaultLabel;
|
|
}
|
|
}
|
|
|
|
public override void OnException(CacheMember member)
|
|
{
|
|
base.OnException(member);
|
|
|
|
if (Owner.CanWrite)
|
|
{
|
|
if (m_toggle.gameObject.activeSelf)
|
|
m_toggle.gameObject.SetActive(false);
|
|
|
|
if (m_applyBtn.gameObject.activeSelf)
|
|
m_applyBtn.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
internal void OnToggleValueChanged(bool val)
|
|
{
|
|
Value = val;
|
|
RefreshUIForValue();
|
|
}
|
|
|
|
public override void ConstructUI(GameObject parent, GameObject subGroup)
|
|
{
|
|
base.ConstructUI(parent, subGroup);
|
|
|
|
var baseLayout = m_baseLabel.gameObject.GetComponent<LayoutElement>();
|
|
baseLayout.flexibleWidth = 0;
|
|
baseLayout.minWidth = 50;
|
|
|
|
if (Owner.CanWrite)
|
|
{
|
|
var toggleObj = UIFactory.CreateToggle(m_mainContent, "InteractiveBoolToggle", out m_toggle, out _, new Color(0.1f, 0.1f, 0.1f));
|
|
UIFactory.SetLayoutElement(toggleObj, minWidth: 24);
|
|
m_toggle.onValueChanged.AddListener(OnToggleValueChanged);
|
|
|
|
m_baseLabel.transform.SetAsLastSibling();
|
|
|
|
m_applyBtn = UIFactory.CreateButton(m_mainContent,
|
|
"ApplyButton",
|
|
"Apply",
|
|
() => { Owner.SetValue(); },
|
|
new Color(0.2f, 0.2f, 0.2f));
|
|
|
|
UIFactory.SetLayoutElement(m_applyBtn.gameObject, minWidth: 50, minHeight: 25, flexibleWidth: 0);
|
|
|
|
toggleObj.SetActive(false);
|
|
m_applyBtn.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
}
|