You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

434 lines
10 KiB
C#

4 years ago
using System;
using System.Collections.Generic;
using UnityEngine;
// Token: 0x0200015C RID: 348
public class UnityTextSprite : UnitySprite
{
// Token: 0x060009FB RID: 2555 RVA: 0x0002C3F4 File Offset: 0x0002A5F4
public UnityTextSprite(bool IsSprite = true, GameObject parent = null) : base(IsSprite, parent, true)
{
this.mFilter = this.obj.GetComponent<MeshFilter>();
this.mesh = this.mFilter.sharedMesh;
if (this.mesh == null)
{
this.mesh = new Mesh();
this.mesh.hideFlags = HideFlags.DontSave;
this.mFilter.sharedMesh = this.mesh;
}
this.IsUseTex = true;
}
// Token: 0x1700013C RID: 316
// (get) Token: 0x060009FC RID: 2556 RVA: 0x0002C4E0 File Offset: 0x0002A6E0
// (set) Token: 0x060009FD RID: 2557 RVA: 0x0002C4F4 File Offset: 0x0002A6F4
public override int w
{
get
{
return (int)((float)this.OrgW * this.fWidth);
}
set
{
this.fWidth = (float)(value / this.OrgW);
}
}
// Token: 0x1700013D RID: 317
// (get) Token: 0x060009FE RID: 2558 RVA: 0x0002C508 File Offset: 0x0002A708
// (set) Token: 0x060009FF RID: 2559 RVA: 0x0002C51C File Offset: 0x0002A71C
public override int h
{
get
{
return (int)((float)this.OrgH * this.fHeight);
}
set
{
this.fHeight = (float)(value / this.OrgH);
}
}
// Token: 0x1700013E RID: 318
// (get) Token: 0x06000A00 RID: 2560 RVA: 0x0002C530 File Offset: 0x0002A730
// (set) Token: 0x06000A01 RID: 2561 RVA: 0x0002C538 File Offset: 0x0002A738
public int MarginX
{
get
{
return this.marginX;
}
set
{
this.marginX = value;
}
}
// Token: 0x1700013F RID: 319
// (get) Token: 0x06000A02 RID: 2562 RVA: 0x0002C544 File Offset: 0x0002A744
// (set) Token: 0x06000A03 RID: 2563 RVA: 0x0002C54C File Offset: 0x0002A74C
public int MarginY
{
get
{
return this.marginY;
}
set
{
this.marginY = value;
}
}
// Token: 0x06000A04 RID: 2564 RVA: 0x0002C558 File Offset: 0x0002A758
public void SetPosition(int nX, int nY, UnityTextSprite.PositionType px = UnityTextSprite.PositionType.TopLeft, UnityTextSprite.PositionType py = UnityTextSprite.PositionType.TopLeft)
{
if (px != UnityTextSprite.PositionType.TopLeft || py != UnityTextSprite.PositionType.TopLeft)
{
this.CalcSize();
this.x = nX + this.calcOfs(this.w, px);
this.y = nY + this.calcOfs(this.h, py);
}
else
{
this.x = nX;
this.y = nY;
}
}
// Token: 0x06000A05 RID: 2565 RVA: 0x0002C5B8 File Offset: 0x0002A7B8
private int calcOfs(int wh, UnityTextSprite.PositionType p)
{
switch (p)
{
case UnityTextSprite.PositionType.TopLeft:
return 0;
case UnityTextSprite.PositionType.Center:
return -wh / 2;
case UnityTextSprite.PositionType.BottomRight:
return -wh;
default:
return 0;
}
}
// Token: 0x17000140 RID: 320
// (get) Token: 0x06000A06 RID: 2566 RVA: 0x0002C5EC File Offset: 0x0002A7EC
// (set) Token: 0x06000A07 RID: 2567 RVA: 0x0002C5F4 File Offset: 0x0002A7F4
public UIFont Font
{
get
{
return this.font;
}
set
{
this.font = value;
if (this.font != null)
{
this.tex = this.font.texture;
}
}
}
// Token: 0x17000141 RID: 321
// (get) Token: 0x06000A08 RID: 2568 RVA: 0x0002C620 File Offset: 0x0002A820
public override bool IsTexRelease
{
get
{
return false;
}
}
// Token: 0x06000A09 RID: 2569 RVA: 0x0002C624 File Offset: 0x0002A824
public void ClearText()
{
this.text.Clear();
this.linePos.Clear();
this.charPosX = 0;
this.charPosY = 0;
}
// Token: 0x06000A0A RID: 2570 RVA: 0x0002C658 File Offset: 0x0002A858
public bool AddText(string str_, int size)
{
int charSize = this.font.Font.charSize;
float scale_ = this.Scale(charSize, size);
foreach (char c in str_)
{
if (c == '\n')
{
this.charPosX = 0;
this.charPosY += size + this.MarginY;
this.linePos.Add(this.text.Count);
}
else
{
BMGlyph glyph = this.font.Font.GetGlyph((int)c);
int num = size;
if (glyph != null)
{
this.text.Add(new CharObject(c, size, this.charPosX, this.charPosY, glyph, scale_, this.textColor));
float num2 = (float)glyph.advance / (float)this.font.Font.charSize;
num = (int)((float)size * num2);
}
this.charPosX += num + this.MarginX;
}
}
this.isUpdate = true;
return true;
}
// Token: 0x06000A0B RID: 2571 RVA: 0x0002C76C File Offset: 0x0002A96C
public bool Normalize()
{
int top_y = 0;
int num = 0;
int num2;
if (this.linePos.Count > 0)
{
for (int i = 0; i < this.linePos.Count; i++)
{
num2 = this.linePos[i];
top_y = this.SortUnderLine(num, num2, top_y) + this.MarginY;
num = num2;
}
}
num2 = this.text.Count;
if (num2 != num)
{
top_y = this.SortUnderLine(num, num2, top_y);
}
this.isUpdate = true;
return true;
}
// Token: 0x06000A0C RID: 2572 RVA: 0x0002C7F4 File Offset: 0x0002A9F4
public bool SetArray(CharObject[] array)
{
int charSize = this.font.Font.charSize;
this.ClearText();
foreach (CharObject charObject in array)
{
if (charObject.color.a != 0)
{
if (charObject.code != '\0')
{
if (charObject.size != 0)
{
if (charObject.glyph == null)
{
charObject.glyph = this.font.Font.GetGlyph((int)charObject.code);
}
if (charObject.glyph != null)
{
charObject.scale = this.Scale(charSize, charObject.size);
this.text.Add(charObject);
}
}
}
}
}
this.isUpdate = true;
return true;
}
// Token: 0x06000A0D RID: 2573 RVA: 0x0002C8C0 File Offset: 0x0002AAC0
public void CalcSize()
{
if (this.isUpdate)
{
int num = 0;
int num2 = 0;
foreach (CharObject charObject in this.text)
{
num2 = Math.Max(charObject.X + charObject.Width, num2);
num = Math.Max(charObject.Y + charObject.Height, num);
}
this.OrgW = (this.UW = num2);
this.OrgH = (this.VH = num);
}
}
// Token: 0x06000A0E RID: 2574 RVA: 0x0002C97C File Offset: 0x0002AB7C
public void Clear()
{
this.text.Clear();
this.linePos.Clear();
this.mesh.Clear();
this.verts.Clear();
this.uv.Clear();
this.color.Clear();
int num = 0;
this.y = num;
this.x = num;
this.fWidth = 1f;
this.fHeight = 1f;
this.isUpdate = true;
}
// Token: 0x06000A0F RID: 2575 RVA: 0x0002C9F8 File Offset: 0x0002ABF8
public override void Update(int ScrW, int ScrH, float worldZ)
{
if (this.isUpdate)
{
this.CalcSize();
this.verts.Clear();
this.uv.Clear();
this.color.Clear();
this.font.Print(this.text, this.verts, this.uv, this.color);
this.BuildMesh();
this.isUpdate = false;
}
if (this.IsUseTex)
{
if (this.tex != null)
{
4 years ago
this.obj.GetComponent<Renderer>().material.mainTexture = this.tex.m_Texture;
4 years ago
}
else
{
4 years ago
this.obj.GetComponent<Renderer>().material.mainTexture = null;
4 years ago
}
}
this.obj.transform.localPosition = new Vector3((float)(this.x - ScrW / 2), (float)(-(float)this.y + ScrH / 2), worldZ);
this.obj.transform.localScale = new Vector3(this.fWidth, this.fHeight, 0f);
4 years ago
this.obj.GetComponent<Renderer>().material.color = new Color((float)this.R / 255f, (float)this.G / 255f, (float)this.B / 255f, (float)this.A / 255f);
4 years ago
this.obj.SetActive(this.Show);
}
// Token: 0x06000A10 RID: 2576 RVA: 0x0002CB6C File Offset: 0x0002AD6C
private void BuildMesh()
{
int count = this.verts.Count;
int num = (count >> 1) * 3;
bool flag = this.mIndices == null || this.mIndices.Length != num;
if (flag)
{
int num2 = 0;
this.mIndices = new int[num];
for (int i = 0; i < count; i += 4)
{
this.mIndices[num2++] = i;
this.mIndices[num2++] = i + 1;
this.mIndices[num2++] = i + 2;
this.mIndices[num2++] = i + 2;
this.mIndices[num2++] = i + 3;
this.mIndices[num2++] = i;
}
this.mesh.Clear();
}
if (this.verts.Count > 0)
{
this.mesh.vertices = this.verts.ToArray();
}
if (this.uv.Count > 0)
{
this.mesh.uv = this.uv.ToArray();
}
if (this.color.Count > 0)
{
this.mesh.colors32 = this.color.ToArray();
}
if (flag)
{
this.mesh.triangles = this.mIndices;
}
this.mesh.RecalculateBounds();
4 years ago
if (this.mFilter != null)
{
this.mFilter.mesh = this.mesh;
}
4 years ago
}
// Token: 0x06000A11 RID: 2577 RVA: 0x0002CCE4 File Offset: 0x0002AEE4
private float Scale(int size, int base_size)
{
return (float)base_size / (float)size;
}
// Token: 0x06000A12 RID: 2578 RVA: 0x0002CCEC File Offset: 0x0002AEEC
private int SortUnderLine(int now, int end, int top_y)
{
int num = 0;
foreach (CharObject charObject in this.text.GetRange(now, end - now))
{
num = Math.Max(num, Math.Max(charObject.Y, top_y) + charObject.Height);
}
foreach (CharObject charObject2 in this.text.GetRange(now, end - now))
{
charObject2.Y = num - charObject2.Height;
}
return num;
}
// Token: 0x06000A13 RID: 2579 RVA: 0x0002CDD8 File Offset: 0x0002AFD8
public void SetTextColor(Color32 col_)
{
this.textColor = col_;
}
// Token: 0x04000823 RID: 2083
private UIFont font;
// Token: 0x04000824 RID: 2084
private List<CharObject> text = new List<CharObject>();
// Token: 0x04000825 RID: 2085
private List<int> linePos = new List<int>();
// Token: 0x04000826 RID: 2086
private bool isUpdate;
// Token: 0x04000827 RID: 2087
private Mesh mesh;
// Token: 0x04000828 RID: 2088
private MeshFilter mFilter;
// Token: 0x04000829 RID: 2089
private List<Vector3> verts = new List<Vector3>();
// Token: 0x0400082A RID: 2090
private List<Vector2> uv = new List<Vector2>();
// Token: 0x0400082B RID: 2091
private List<Color32> color = new List<Color32>();
// Token: 0x0400082C RID: 2092
private Color32 textColor = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue);
// Token: 0x0400082D RID: 2093
private int[] mIndices;
// Token: 0x0400082E RID: 2094
private int charPosX;
// Token: 0x0400082F RID: 2095
private int charPosY;
// Token: 0x04000830 RID: 2096
private float fWidth = 1f;
// Token: 0x04000831 RID: 2097
private float fHeight = 1f;
// Token: 0x04000832 RID: 2098
private int marginX;
// Token: 0x04000833 RID: 2099
private int marginY = 1;
// Token: 0x0200015D RID: 349
public enum PositionType
{
// Token: 0x04000835 RID: 2101
TopLeft,
// Token: 0x04000836 RID: 2102
Center,
// Token: 0x04000837 RID: 2103
BottomRight
}
}