117 lines
2.4 KiB
C#
117 lines
2.4 KiB
C#
using UnityEngine;
|
|
|
|
public class TyreRipple : MonoBehaviour
|
|
{
|
|
public MegaDynamicRipple surface;
|
|
|
|
public float force = 1f;
|
|
|
|
private bool lastdown;
|
|
|
|
private float lastrow;
|
|
|
|
private float lastcol;
|
|
|
|
private Collider col;
|
|
|
|
private Vector3 lastpos = Vector3.zero;
|
|
|
|
private void Update()
|
|
{
|
|
if (!surface)
|
|
{
|
|
return;
|
|
}
|
|
col = surface.GetComponent<Collider>();
|
|
if ((bool)col)
|
|
{
|
|
Vector3 position = base.transform.position;
|
|
if (position != lastpos)
|
|
{
|
|
lastpos = position;
|
|
Ray ray = new Ray(position, Vector3.down);
|
|
RaycastHit hitInfo;
|
|
if (col.Raycast(ray, out hitInfo, 20f))
|
|
{
|
|
if (col is BoxCollider)
|
|
{
|
|
Vector3 vector = surface.transform.worldToLocalMatrix.MultiplyPoint(hitInfo.point);
|
|
BoxCollider boxCollider = (BoxCollider)col;
|
|
if (boxCollider.size.x != 0f)
|
|
{
|
|
vector.x /= boxCollider.size.x;
|
|
}
|
|
if (boxCollider.size.y != 0f)
|
|
{
|
|
vector.y /= boxCollider.size.y;
|
|
}
|
|
if (boxCollider.size.z != 0f)
|
|
{
|
|
vector.z /= boxCollider.size.z;
|
|
}
|
|
vector.x += 0.5f;
|
|
vector.y += 0.5f;
|
|
vector.z += 0.5f;
|
|
float num = 0f;
|
|
float num2 = 0f;
|
|
switch (surface.axis)
|
|
{
|
|
case MegaAxis.X:
|
|
num = vector.y * (float)(surface.cols - 1);
|
|
num2 = vector.z * (float)(surface.rows - 1);
|
|
break;
|
|
case MegaAxis.Y:
|
|
num = vector.x * (float)(surface.cols - 1);
|
|
num2 = vector.z * (float)(surface.rows - 1);
|
|
break;
|
|
case MegaAxis.Z:
|
|
num = vector.x * (float)(surface.cols - 1);
|
|
num2 = vector.y * (float)(surface.rows - 1);
|
|
break;
|
|
}
|
|
if (lastdown)
|
|
{
|
|
surface.Line(lastcol, lastrow, num, num2, 0f - force);
|
|
}
|
|
else
|
|
{
|
|
surface.wakeAtPointAdd1((int)num, (int)num2, 0f - force);
|
|
}
|
|
lastdown = true;
|
|
lastrow = num2;
|
|
lastcol = num;
|
|
}
|
|
else
|
|
{
|
|
float num3 = (1f - hitInfo.textureCoord.x) * (float)(surface.cols - 1);
|
|
float num4 = hitInfo.textureCoord.y * (float)(surface.rows - 1);
|
|
if (lastdown)
|
|
{
|
|
surface.Line(lastcol, lastrow, num3, num4, 0f - force);
|
|
}
|
|
else
|
|
{
|
|
surface.wakeAtPointAdd1((int)num3, (int)num4, 0f - force);
|
|
}
|
|
lastdown = true;
|
|
lastrow = num4;
|
|
lastcol = num3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lastdown = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lastdown = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
lastdown = false;
|
|
}
|
|
}
|
|
}
|