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

174 lines
4.3 KiB
C#

using System;
using UnityEngine;
[Serializable]
public class MegaCacheImageFrame
{
public int vc;
public int nc;
public int tc;
public int uvc;
public Vector3 bmin;
public Vector3 uvmin;
public Vector3 bsize;
public Vector3 uvsize;
public byte[] verts;
public byte[] norms;
public byte[] tangents;
public byte[] uvs;
public byte[] tris;
public int subcount;
public int[] suboffs;
public int[] sublen;
public MegaCacheImageFace[] subs;
public void LoadSection(MegaCacheOBJ cache)
{
float num = 1f / 127f;
for (int i = 0; i < vc; i++)
{
int num2 = i * 6;
cache.vertcache[i].x = bmin.x + (float)(int)BitConverter.ToUInt16(verts, num2) * bsize.x;
cache.vertcache[i].y = bmin.y + (float)(int)BitConverter.ToUInt16(verts, num2 + 2) * bsize.y;
cache.vertcache[i].z = bmin.z + (float)(int)BitConverter.ToUInt16(verts, num2 + 4) * bsize.z;
}
for (int j = 0; j < nc; j++)
{
int num3 = j * 3;
cache.normcache[j].x = ((float)(int)norms[num3] - 127f) * num;
cache.normcache[j].y = ((float)(int)norms[num3 + 1] - 127f) * num;
cache.normcache[j].z = ((float)(int)norms[num3 + 2] - 127f) * num;
}
for (int k = 0; k < tc; k++)
{
int num4 = k * 4;
cache.tangentcache[k].x = ((float)(int)tangents[num4] - 127f) * num;
cache.tangentcache[k].y = ((float)(int)tangents[num4 + 1] - 127f) * num;
cache.tangentcache[k].z = ((float)(int)tangents[num4 + 2] - 127f) * num;
cache.tangentcache[k].w = ((float)(int)tangents[num4 + 3] - 127f) * num;
}
for (int l = 0; l < uvc; l++)
{
int num5 = l * 2;
cache.uvcache[l].x = uvmin.x + (float)(int)uvs[num5] * uvsize.x;
cache.uvcache[l].y = uvmin.y + (float)(int)uvs[num5 + 1] * uvsize.y;
}
for (int m = 0; m < subcount; m++)
{
int num6 = suboffs[m];
for (int n = 0; n < sublen[m]; n++)
{
cache.subs[m].tris[n] = BitConverter.ToUInt16(tris, num6 + n * 2);
}
for (int num7 = sublen[m]; num7 < cache.subs[m].max; num7++)
{
cache.subs[m].tris[num7] = cache.subs[m].tris[sublen[m]];
}
}
}
public void SetMesh(Mesh mesh, MegaCacheOBJ cache)
{
mesh.subMeshCount = subcount;
mesh.vertices = cache.vertcache;
if (nc > 0)
{
mesh.normals = cache.normcache;
}
if (uvc > 0)
{
mesh.uv = cache.uvcache;
}
if (tc > 0)
{
mesh.tangents = cache.tangentcache;
}
for (int i = 0; i < subcount; i++)
{
mesh.SetTriangles(cache.subs[i].tris, i);
}
mesh.RecalculateBounds();
}
public void GetMesh(Mesh mesh, MegaCacheOBJ cache)
{
float num = 1f / 127f;
cache.framevertcount = vc;
for (int i = 0; i < vc; i++)
{
int num2 = i * 6;
cache.vertcache[i].x = bmin.x + (float)(int)BitConverter.ToUInt16(verts, num2) * bsize.x;
cache.vertcache[i].y = bmin.y + (float)(int)BitConverter.ToUInt16(verts, num2 + 2) * bsize.y;
cache.vertcache[i].z = bmin.z + (float)(int)BitConverter.ToUInt16(verts, num2 + 4) * bsize.z;
}
for (int j = 0; j < nc; j++)
{
int num3 = j * 3;
cache.normcache[j].x = ((float)(int)norms[num3] - 127f) * num;
cache.normcache[j].y = ((float)(int)norms[num3 + 1] - 127f) * num;
cache.normcache[j].z = ((float)(int)norms[num3 + 2] - 127f) * num;
}
for (int k = 0; k < tc; k++)
{
int num4 = k * 4;
cache.tangentcache[k].x = ((float)(int)tangents[num4] - 127f) * num;
cache.tangentcache[k].y = ((float)(int)tangents[num4 + 1] - 127f) * num;
cache.tangentcache[k].z = ((float)(int)tangents[num4 + 2] - 127f) * num;
cache.tangentcache[k].w = ((float)(int)tangents[num4 + 3] - 127f) * num;
}
for (int l = 0; l < uvc; l++)
{
int num5 = l * 2;
cache.uvcache[l].x = uvmin.x + (float)(int)uvs[num5] * uvsize.x;
cache.uvcache[l].y = uvmin.y + (float)(int)uvs[num5 + 1] * uvsize.y;
}
mesh.subMeshCount = subcount;
mesh.vertices = cache.vertcache;
if (nc > 0)
{
mesh.normals = cache.normcache;
}
if (uvc > 0)
{
mesh.uv = cache.uvcache;
}
if (tc > 0)
{
mesh.tangents = cache.tangentcache;
}
for (int m = 0; m < subcount; m++)
{
int num6 = suboffs[m];
for (int n = 0; n < sublen[m]; n++)
{
cache.subs[m].tris[n] = BitConverter.ToUInt16(tris, num6 + n * 2);
}
for (int num7 = sublen[m]; num7 < cache.subs[m].max; num7++)
{
cache.subs[m].tris[num7] = cache.subs[m].tris[sublen[m]];
}
}
for (int num8 = 0; num8 < subcount; num8++)
{
mesh.SetTriangles(cache.subs[num8].tris, num8);
}
mesh.RecalculateBounds();
}
}