New Version 1.42

Moving cam replay.
Fixed the bugs.

New Version 1.42

Moving cam replay.
Fixed the bugs.

New Version 1.42

Moving cam replay,
Fixed the bugs.
This commit is contained in:
SkunkStudios 2025-01-29 09:54:37 +07:00
parent dcb7df5fd1
commit 1c033119df
7079 changed files with 186851 additions and 48991 deletions

View file

@ -0,0 +1,370 @@
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;
namespace TMPro
{
public enum TextContainerAnchors { TopLeft = 0, Top = 1, TopRight = 2, Left = 3, Middle = 4, Right = 5, BottomLeft = 6, Bottom = 7, BottomRight = 8, Custom = 9 };
[RequireComponent(typeof(RectTransform))]
[AddComponentMenu("Layout/Text Container")]
public class TextContainer : UIBehaviour
{
#pragma warning disable 0618 // Disabled warning related to deprecated properties. This is for backwards compatibility.
public bool hasChanged
{
get { return m_hasChanged; }
set { m_hasChanged = value; }
}
private bool m_hasChanged;
// Pivot / Transform Position
public Vector2 pivot
{
get { return m_pivot; }
set { /*Debug.Log("Pivot has changed.");*/ if (m_pivot != value) { m_pivot = value; m_anchorPosition = GetAnchorPosition(m_pivot); m_hasChanged = true; OnContainerChanged(); } }
}
[SerializeField]
private Vector2 m_pivot;
public TextContainerAnchors anchorPosition
{
get { return m_anchorPosition; }
set { /*Debug.Log("Anchor has changed.");*/ if (m_anchorPosition != value) { m_anchorPosition = value; m_pivot = GetPivot(m_anchorPosition); m_hasChanged = true; OnContainerChanged(); } }
}
[SerializeField]
private TextContainerAnchors m_anchorPosition = TextContainerAnchors.Middle;
// Rect which defines the Rectangle
public Rect rect
{
get { return m_rect; }
set { /*Debug.Log("Rectangle has changed.");*/ if (m_rect != value) { m_rect = value; /*m_size = new Vector2(m_rect.width, m_rect.height);*/ m_hasChanged = true; OnContainerChanged(); } }
}
[SerializeField]
private Rect m_rect;
public Vector2 size
{
get { return new Vector2(m_rect.width, m_rect.height); }
set { /*Debug.Log("Size has changed.");*/ if (new Vector2(m_rect.width, m_rect.height) != value) { SetRect(value); m_hasChanged = true; m_isDefaultWidth = false; m_isDefaultHeight = false; OnContainerChanged(); } }
}
// Sets the width of the Text Container.
public float width
{
get { return m_rect.width; }
set { /*Debug.Log("Width has changed.");*/ SetRect(new Vector2(value, m_rect.height)); m_hasChanged = true; m_isDefaultWidth = false; OnContainerChanged(); }
}
// Sets the height of the Text Container.
public float height
{
get { return m_rect.height; }
set { SetRect(new Vector2(m_rect.width, value)); m_hasChanged = true; m_isDefaultHeight = false; OnContainerChanged(); }
}
// Used to determine if the user has changed the width of the Text Container.
public bool isDefaultWidth
{
get { return m_isDefaultWidth; }
}
private bool m_isDefaultWidth;
// Used to determine if the user has changed the height of the Text Container.
public bool isDefaultHeight
{
get { return m_isDefaultHeight; }
}
private bool m_isDefaultHeight;
public bool isAutoFitting
{
get { return m_isAutoFitting; }
set { m_isAutoFitting = value; }
}
private bool m_isAutoFitting = false;
// Corners of the Text Container
public Vector3[] corners
{
get { return m_corners; }
}
private Vector3[] m_corners = new Vector3[4];
public Vector3[] worldCorners
{
get { return m_worldCorners; }
}
private Vector3[] m_worldCorners = new Vector3[4];
//public Vector3 normal
//{
// get { return m_normal; }
//}
//private Vector3 m_normal;
// The margin offset from the Rectangle Bounds
public Vector4 margins
{
get { return m_margins; }
set { if (m_margins != value) { /*Debug.Log("Margins have changed.");*/ m_margins = value; m_hasChanged = true; OnContainerChanged(); } }
}
[SerializeField]
private Vector4 m_margins;
/// <summary>
/// The RectTransform used by the object
/// </summary>
public RectTransform rectTransform
{
get
{
if (m_rectTransform == null) m_rectTransform = GetComponent<RectTransform>();
return m_rectTransform;
}
}
private RectTransform m_rectTransform;
//private Transform m_transform;
//private bool m_isAddingRectTransform;
private static Vector2 k_defaultSize = new Vector2(100, 100);
/// <summary>
///
/// </summary>
public TextMeshPro textMeshPro
{
get
{
if (m_textMeshPro == null) m_textMeshPro = GetComponent<TextMeshPro>();
return m_textMeshPro;
}
}
private TextMeshPro m_textMeshPro;
protected override void Awake()
{
Debug.LogWarning("The Text Container component is now Obsolete and can safely be removed from [" + gameObject.name + "].", this);
return;
}
/// <summary>
///
/// </summary>
protected override void OnEnable()
{
//Debug.Log("Text Container OnEnable() called.");
OnContainerChanged();
}
/// <summary>
///
/// </summary>
protected override void OnDisable()
{
//Debug.Log("OnDisable() called.");
}
/// <summary>
///
/// </summary>
void OnContainerChanged()
{
//Debug.Log("OnContainerChanged");
UpdateCorners();
//UpdateWorldCorners();
if (this.m_rectTransform != null)
{
m_rectTransform.sizeDelta = this.size;
m_rectTransform.hasChanged = true;
}
if (this.textMeshPro != null)
{
m_textMeshPro.SetVerticesDirty();
m_textMeshPro.margin = m_margins;
}
}
#if UNITY_EDITOR
/// <summary>
///
/// </summary>
protected override void OnValidate()
{
//Debug.Log("OnValidate() called.");
m_hasChanged = true;
OnContainerChanged();
}
#endif
/*
void LateUpdate()
{
// Used by the Run Time Text Input Component ... This will have to be changed.
if (m_transform.hasChanged)
UpdateWorldCorners();
}
*/
/// <summary>
/// Callback from Unity to handle RectTransform changes.
/// </summary>
protected override void OnRectTransformDimensionsChange()
{
// Required to add a RectTransform to objects created in previous releases.
if (this.rectTransform == null) m_rectTransform = gameObject.AddComponent<RectTransform>();
if (m_rectTransform.sizeDelta != k_defaultSize)
this.size = m_rectTransform.sizeDelta;
pivot = m_rectTransform.pivot;
m_hasChanged = true;
OnContainerChanged();
}
private void SetRect(Vector2 size)
{
m_rect = new Rect(m_rect.x, m_rect.y, size.x, size.y);
//UpdateCorners();
}
private void UpdateCorners()
{
m_corners[0] = new Vector3(-m_pivot.x * m_rect.width, (- m_pivot.y) * m_rect.height);
m_corners[1] = new Vector3(-m_pivot.x * m_rect.width, (1 - m_pivot.y) * m_rect.height);
m_corners[2] = new Vector3((1 - m_pivot.x) * m_rect.width, (1 - m_pivot.y) * m_rect.height);
m_corners[3] = new Vector3((1 - m_pivot.x) * m_rect.width, (- m_pivot.y) * m_rect.height);
//Debug.Log("Pivot " + m_pivot + " Corners 0: " + m_corners[0] + " 1: " + m_corners[1] + " 2: " + m_corners[2] + " 3: " + m_corners[3]);
if (m_rectTransform != null)
m_rectTransform.pivot = m_pivot;
}
//private void UpdateWorldCorners()
//{
// if (m_transform == null)
// return;
// Vector3 position = m_transform.position;
// m_worldCorners[0] = position + m_transform.TransformDirection(m_corners[0]);
// m_worldCorners[1] = position + m_transform.TransformDirection(m_corners[1]);
// m_worldCorners[2] = position + m_transform.TransformDirection(m_corners[2]);
// m_worldCorners[3] = position + m_transform.TransformDirection(m_corners[3]);
// m_normal = Vector3.Cross(worldCorners[1] - worldCorners[0], worldCorners[3] - worldCorners[0]);
//}
//public Vector3[] GetWorldCorners()
//{
// UpdateWorldCorners();
// return m_worldCorners;
//}
Vector2 GetPivot(TextContainerAnchors anchor)
{
Vector2 pivot = Vector2.zero;
switch (anchor)
{
case TextContainerAnchors.TopLeft:
pivot = new Vector2(0, 1);
break;
case TextContainerAnchors.Top:
pivot = new Vector2(0.5f, 1);
break;
case TextContainerAnchors.TopRight:
pivot = new Vector2(1, 1);
break;
case TextContainerAnchors.Left:
pivot = new Vector2(0, 0.5f);
break;
case TextContainerAnchors.Middle:
pivot = new Vector2(0.5f, 0.5f);
break;
case TextContainerAnchors.Right:
pivot = new Vector2(1, 0.5f);
break;
case TextContainerAnchors.BottomLeft:
pivot = new Vector2(0, 0);
break;
case TextContainerAnchors.Bottom:
pivot = new Vector2(0.5f, 0);
break;
case TextContainerAnchors.BottomRight:
pivot = new Vector2(1, 0);
break;
}
return pivot;
}
// Method which returns the Anchor position based on pivot value.
TextContainerAnchors GetAnchorPosition(Vector2 pivot)
{
if (pivot == new Vector2(0, 1))
return TextContainerAnchors.TopLeft;
else if (pivot == new Vector2(0.5f, 1))
return TextContainerAnchors.Top;
else if (pivot == new Vector2(1f, 1))
return TextContainerAnchors.TopRight;
else if (pivot == new Vector2(0, 0.5f))
return TextContainerAnchors.Left;
else if (pivot == new Vector2(0.5f, 0.5f))
return TextContainerAnchors.Middle;
else if (pivot == new Vector2(1, 0.5f))
return TextContainerAnchors.Right;
else if (pivot == new Vector2(0, 0))
return TextContainerAnchors.BottomLeft;
else if (pivot == new Vector2(0.5f, 0))
return TextContainerAnchors.Bottom;
else if (pivot == new Vector2(1, 0))
return TextContainerAnchors.BottomRight;
else
return TextContainerAnchors.Custom;
}
}
}