Files
Fishing2/Assets/ThirdParty/Rewired/Extras/Glyphs/Scripts/GlyphOrTextBase.cs
2025-05-10 12:49:47 +08:00

117 lines
3.7 KiB
C#

// Copyright (c) 2024 Augie R. Maddox, Guavaman Enterprises. All rights reserved.
#pragma warning disable 0649
namespace Rewired.Glyphs {
public abstract class GlyphOrTextBase : UnityEngine.MonoBehaviour {
protected abstract string textString { get; set; }
public abstract void ShowText(string text);
public abstract void ShowGlyph(object glyph);
public virtual void Hide() {
Hide(TypeFlags.All);
}
protected abstract void Hide(TypeFlags flags);
[System.Flags]
protected enum TypeFlags {
None = 0,
Glyph = 1,
Text = 2,
All = ~0
}
}
public abstract class GlyphOrTextBase<TGlyphComponent, TGlyphGraphic, TTextComponent> : GlyphOrTextBase
where TGlyphComponent : UnityEngine.Behaviour
where TGlyphGraphic : class
where TTextComponent : UnityEngine.Behaviour
{
[UnityEngine.SerializeField]
private TTextComponent _textComponent;
[UnityEngine.SerializeField]
private TGlyphComponent _glyphComponent;
public TTextComponent textComponent {
get {
return _textComponent;
}
set {
_textComponent = value;
}
}
public TGlyphComponent glyphComponent {
get {
return _glyphComponent;
}
set {
_glyphComponent = value;
}
}
protected abstract TGlyphGraphic glyphGraphic { get; set; }
public override void ShowText(string text) {
if (_textComponent == null) return;
if (!string.Equals(textString, text, System.StringComparison.Ordinal)) {
textString = text;
}
if (!_textComponent.gameObject.activeSelf) {
_textComponent.gameObject.SetActive(true);
if (!gameObject.activeSelf) {
gameObject.SetActive(true);
}
}
Hide(TypeFlags.Glyph);
}
public override void ShowGlyph(object glyph) {
if (glyph != null && !(glyph is TGlyphGraphic)) {
UnityEngine.Debug.LogError("Rewired: Glyph does not implement " + typeof(TGlyphGraphic).Name + ".");
return;
}
ShowGlyph((TGlyphGraphic)glyph);
}
public virtual void ShowGlyph(TGlyphGraphic glyph) {
if (_glyphComponent == null) return;
if (glyphGraphic != glyph) {
glyphGraphic = glyph;
}
if (!_glyphComponent.gameObject.activeSelf) {
_glyphComponent.gameObject.SetActive(true);
if (!gameObject.activeSelf) {
gameObject.SetActive(true);
}
}
Hide(TypeFlags.Text);
}
protected override void Hide(TypeFlags flags) {
if (_textComponent != null) {
if ((flags & TypeFlags.Text) != 0) {
if (_textComponent.gameObject.activeSelf) {
_textComponent.gameObject.SetActive(false);
}
}
}
if (_glyphComponent != null) {
if ((flags & TypeFlags.Glyph) != 0) {
if (_glyphComponent.gameObject.activeSelf) {
_glyphComponent.gameObject.SetActive(false);
}
}
}
if ((_glyphComponent == null || !_glyphComponent.gameObject.activeSelf) &&
(_textComponent == null || !_textComponent.gameObject.activeSelf)
) {
gameObject.SetActive(false);
}
}
}
}