Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/TextOutline.cs
2026-02-21 16:45:37 +08:00

111 lines
2.8 KiB
C#

using System.Collections.Generic;
using BitStrap;
using UnityEngine;
public class TextOutline : MonoBehaviour
{
public float pixelSize = 1f;
public Color outlineColor = Color.black;
public bool resolutionDependant;
public int doubleResolution = 1024;
public Material outlineMaterial;
private TextMesh textMesh;
private MeshRenderer meshRenderer;
public List<TextMesh> outlineChildren = new List<TextMesh>();
private void Start()
{
textMesh = GetComponent<TextMesh>();
meshRenderer = GetComponent<MeshRenderer>();
for (int i = 0; i < 8; i++)
{
GameObject gameObject = new GameObject("outline", typeof(TextMesh));
gameObject.transform.parent = base.transform;
gameObject.transform.localScale = new Vector3(1f, 1f, 1f);
gameObject.transform.localEulerAngles = Vector3.zero;
MeshRenderer component = gameObject.GetComponent<MeshRenderer>();
component.material = outlineMaterial;
component.castShadows = false;
component.receiveShadows = false;
component.sortingLayerID = meshRenderer.sortingLayerID;
component.sortingLayerName = meshRenderer.sortingLayerName;
TextMesh component2 = gameObject.GetComponent<TextMesh>();
component2.color = outlineColor;
component2.text = textMesh.text;
component2.alignment = textMesh.alignment;
component2.anchor = textMesh.anchor;
component2.characterSize = textMesh.characterSize;
component2.font = textMesh.font;
component2.fontSize = textMesh.fontSize;
component2.fontStyle = textMesh.fontStyle;
component2.richText = textMesh.richText;
component2.tabSize = textMesh.tabSize;
component2.lineSpacing = textMesh.lineSpacing;
component2.offsetZ = textMesh.offsetZ;
outlineChildren.Add(component2);
}
MakeLateUpdate();
}
private void LateUpdate()
{
MakeLateUpdate();
}
[Button]
public void UpdateText()
{
for (int i = 0; i < outlineChildren.Count; i++)
{
TextMesh textMesh = outlineChildren[i];
textMesh.text = this.textMesh.text;
}
}
[Button]
public void MakeLateUpdate()
{
if (!(textMesh == null))
{
Vector3 vector = GameController.Instance.fishingPlayer.ufpsCameraCamera.WorldToScreenPoint(base.transform.position);
for (int i = 0; i < outlineChildren.Count; i++)
{
Vector3 position = GameController.Instance.fishingPlayer.ufpsCameraCamera.ScreenToWorldPoint(vector + GetOffset(i) * pixelSize);
outlineChildren[i].transform.position = position;
}
}
}
private Vector3 GetOffset(int i)
{
switch (i % 8)
{
case 0:
return new Vector3(0f, 1f, 0f);
case 1:
return new Vector3(1f, 1f, 0f);
case 2:
return new Vector3(1f, 0f, 0f);
case 3:
return new Vector3(1f, -1f, 0f);
case 4:
return new Vector3(0f, -1f, 0f);
case 5:
return new Vector3(-1f, -1f, 0f);
case 6:
return new Vector3(-1f, 0f, 0f);
case 7:
return new Vector3(-1f, 1f, 0f);
default:
return Vector3.zero;
}
}
}