r2mods/ilspy_dump/ror2_csproj/EntityStates.VoidBarnacle/FindSurface.cs

53 lines
1.6 KiB
C#

using System;
using RoR2;
using UnityEngine;
namespace EntityStates.VoidBarnacle;
public class FindSurface : NoCastSpawn
{
public static int raycastCount;
public static float maxRaycastLength;
public static float raycastSphereYOffset;
public static float raycastMinimumAngle;
public static float raycastMaximumAngle;
private const float _cRadianConversionCoeficcient = MathF.PI / 180f;
public override void OnEnter()
{
base.OnEnter();
RaycastHit hitInfo = default(RaycastHit);
Vector3 origin = new Vector3(base.characterBody.corePosition.x, base.characterBody.corePosition.y + raycastSphereYOffset, base.characterBody.corePosition.z);
if (!base.isAuthority)
{
return;
}
raycastMinimumAngle = Mathf.Clamp(raycastMinimumAngle, 0f, raycastMaximumAngle);
raycastMaximumAngle = Mathf.Clamp(raycastMaximumAngle, raycastMinimumAngle, 90f);
raycastCount = Mathf.Abs(raycastCount);
float num = 360f / (float)raycastCount;
for (int i = 0; i < raycastCount; i++)
{
float minInclusive = num * (float)i;
float maxInclusive = num * (float)(i + 1) - 1f;
float f = UnityEngine.Random.Range(minInclusive, maxInclusive) * (MathF.PI / 180f);
float f2 = UnityEngine.Random.Range(raycastMinimumAngle, raycastMaximumAngle) * (MathF.PI / 180f);
float x = Mathf.Cos(f);
float y = Mathf.Sin(f2);
float z = Mathf.Sin(f);
Vector3 direction = new Vector3(x, y, z);
if (Physics.Raycast(origin, direction, out hitInfo, maxRaycastLength, LayerIndex.world.mask))
{
base.transform.position = hitInfo.point;
base.transform.up = hitInfo.normal;
break;
}
}
}
}