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(); 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; } } }