public static int SampleSurface(Transform transform, SurfaceEffectsData data, out Vector3 hitPoint) { hitPoint = Vector3.zero; int result = -1; if (Physics.Raycast(transform.position + Vector3.up * 0.9f, Vector3.down, out var hitInfo, 2f, LayerConstants.GetSurfaceSamplerLayerCollisionMask())) { hitPoint = hitInfo.point; result = GetSurfaceType(ref hitInfo, data); } return(result); }
public static int GetSurfaceType(ref RaycastHit hit, SurfaceEffectsData data) { int result = -1; if (hit.collider != null) { int num = 1 << hit.collider.gameObject.layer; for (int i = 0; i < data.Effects.Length; i++) { if (num == data.Effects[i].SurfaceLayer.value) { result = i; break; } if (!string.IsNullOrEmpty(data.Effects[i].SurfaceTag) && hit.collider.CompareTag(data.Effects[i].SurfaceTag)) { result = i; break; } } } return(result); }