hellbound/Assets/Sources/Feel/MMTools/Tools/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs

117 lines
3.6 KiB
C#
Raw Normal View History

2021-11-26 11:16:25 +03:00
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace MoreMountains.Tools
{
/// <summary>
/// A class used to handle the display of a debug log tab in a MMDebugMenu
/// </summary>
public class MMDebugMenuDebugTab : MonoBehaviour
{
/// the scrollrect where the log will be displayed
public ScrollRect DebugScrollRect;
/// the text container
public Text DebugText;
/// the prompt input
public InputField CommandPrompt;
/// a decorative prompt character
public Text CommandPromptCharacter;
/// whether or not the touch screen is visible
public bool TouchScreenVisible = false;
protected TouchScreenKeyboard _touchScreenKeyboard;
protected RectTransform _rectTransform;
protected float _mobileMenuOffset = -1000f;
protected bool _touchScreenVisibleLastFrame;
/// <summary>
/// On awake we prepare our prompt listener
/// </summary>
protected virtual void Awake()
{
MMDebug.MMDebugLogEvent.Register(OnMMDebugLogEvent);
DebugText.text = "";
_rectTransform = this.gameObject.GetComponent<RectTransform>();
CommandPrompt.onEndEdit.AddListener(val =>
{
CommandPrompt.text = "";
if (val != "")
{
MMDebug.DebugLogCommand(val);
}
});
}
/// <summary>
/// if the mobile touchscreen is open, we move away
/// </summary>
protected virtual void Update()
{
TouchScreenVisible = TouchScreenKeyboard.visible;
if (TouchScreenVisible)
{
_rectTransform.MMSetBottom(650f);
}
else
{
_rectTransform.MMSetBottom(0f);
}
}
/// <summary>
/// on late update we scroll to the bottom if needed
/// </summary>
protected virtual void LateUpdate()
{
if (_touchScreenVisibleLastFrame != TouchScreenVisible)
{
StartCoroutine(ScrollToLogBottomCo());
}
_touchScreenVisibleLastFrame = TouchScreenVisible;
}
/// <summary>
/// Scrolls to the bottom on enable
/// </summary>
protected virtual void OnEnable()
{
StartCoroutine(ScrollToLogBottomCo());
}
/// <summary>
/// when we get a new log event, we update our text and scroll to the bottom
/// </summary>
/// <param name="item"></param>
protected virtual void OnMMDebugLogEvent(MMDebug.DebugLogItem item)
{
DebugText.text = MMDebug.LogHistoryText;
if (this.gameObject.activeInHierarchy)
{
StartCoroutine(ScrollToLogBottomCo());
}
}
/// <summary>
/// A coroutine used to scroll to the bottom
/// </summary>
/// <returns></returns>
protected virtual IEnumerator ScrollToLogBottomCo()
{
yield return new WaitForEndOfFrame();
DebugScrollRect.normalizedPosition = Vector2.zero;
}
/// <summary>
/// Stops listening for events
/// </summary>
public virtual void OnDestroy()
{
MMDebug.MMDebugLogEvent.Unregister(OnMMDebugLogEvent);
}
}
}