Heroes_of_Hiis/Assets/Polaris - Low Poly Ecosystem/Polaris - Low Poly Terrain .../Runtime/Scripts/Utilities/GGrassUtilities.cs

136 lines
4.8 KiB
C#

#if GRIFFIN
using System.Collections.Generic;
using UnityEngine;
namespace Pinwheel.Griffin
{
public static class GGrassUtilities
{
public static Vector3[] GetVertices(GGrassShape shape, Matrix4x4 matrix)
{
Vector3[] vertices = null;
if (shape == GGrassShape.Quad)
{
vertices = new Vector3[]
{
new Vector3(-0.5f, 0, 0), new Vector3(-0.5f, 1, 0), new Vector3(0.5f, 1, 0),
new Vector3(-0.5f, 0, 0), new Vector3(0.5f, 1, 0), new Vector3(0.5f, 0, 0)
};
}
else if (shape == GGrassShape.Cross)
{
vertices = new Vector3[]
{
new Vector3(-0.5f, 0, 0), new Vector3(-0.5f, 1, 0), new Vector3(0.5f, 1, 0),
new Vector3(-0.5f, 0, 0), new Vector3(0.5f, 1, 0), new Vector3(0.5f, 0, 0),
new Vector3(0, 0, -0.5f), new Vector3(0, 1, -0.5f), new Vector3(0, 1, 0.5f),
new Vector3(0, 0, -0.5f), new Vector3(0, 1, 0.5f), new Vector3(0, 0, 0.5f),
};
}
else if (shape == GGrassShape.TriCross)
{
Vector3[] quads = new Vector3[]
{
new Vector3(-0.5f, 0, 0), new Vector3(-0.5f, 1, 0), new Vector3(0.5f, 1, 0),
new Vector3(-0.5f, 0, 0), new Vector3(0.5f, 1, 0), new Vector3(0.5f, 0, 0)
};
List<Vector3> verts = new List<Vector3>();
verts.AddRange(quads);
Matrix4x4 rotate60 = Matrix4x4.Rotate(Quaternion.Euler(0, -60, 0));
for (int i = 0; i < quads.Length; ++i)
{
verts.Add(rotate60.MultiplyPoint(quads[i]));
}
Matrix4x4 rotate120 = Matrix4x4.Rotate(Quaternion.Euler(0, -120, 0));
for (int i = 0; i < quads.Length; ++i)
{
verts.Add(rotate120.MultiplyPoint(quads[i]));
}
vertices = verts.ToArray();
}
for (int i = 0; i < vertices.Length; ++i)
{
vertices[i] = matrix.MultiplyPoint(vertices[i]);
}
return vertices;
}
public static Vector2[] GetUVs(GGrassShape shape)
{
Vector2[] uvs = null;
if (shape == GGrassShape.Quad)
{
uvs = new Vector2[]
{
Vector2.zero, Vector2.up, Vector2.one,
Vector2.zero, Vector2.one, Vector2.right
};
}
else if (shape == GGrassShape.Cross)
{
uvs = new Vector2[]
{
Vector2.zero, Vector2.up, Vector2.one,
Vector2.zero, Vector2.one, Vector2.right,
Vector2.zero, Vector2.up, Vector2.one,
Vector2.zero, Vector2.one, Vector2.right
};
}
else if (shape == GGrassShape.TriCross)
{
uvs = new Vector2[]
{
Vector2.zero, Vector2.up, Vector2.one,
Vector2.zero, Vector2.one, Vector2.right,
Vector2.zero, Vector2.up, Vector2.one,
Vector2.zero, Vector2.one, Vector2.right,
Vector2.zero, Vector2.up, Vector2.one,
Vector2.zero, Vector2.one, Vector2.right
};
}
return uvs;
}
public static Color[] GetColors(GGrassShape shape)
{
Color[] colors = null;
if (shape == GGrassShape.Quad)
{
colors = new Color[]
{
Color.clear, Color.white, Color.white,
Color.clear, Color.white, Color.clear
};
}
else if (shape == GGrassShape.Cross)
{
colors = new Color[]
{
Color.clear, Color.white, Color.white,
Color.clear, Color.white, Color.clear,
Color.clear, Color.white, Color.white,
Color.clear, Color.white, Color.clear
};
}
else if (shape == GGrassShape.TriCross)
{
colors = new Color[]
{
Color.clear, Color.white, Color.white,
Color.clear, Color.white, Color.clear,
Color.clear, Color.white, Color.white,
Color.clear, Color.white, Color.clear,
Color.clear, Color.white, Color.white,
Color.clear, Color.white, Color.clear
};
}
return colors;
}
}
}
#endif