97 lines
2.2 KiB
C#
97 lines
2.2 KiB
C#
namespace Fusion.Addons.KCC
|
|
{
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
public sealed class KCCShapeCastHit
|
|
{
|
|
// PUBLIC MEMBERS
|
|
|
|
public EColliderType Type;
|
|
public Collider Collider;
|
|
public Transform Transform;
|
|
public bool IsTrigger;
|
|
public bool IsPrimitive;
|
|
public RaycastHit RaycastHit;
|
|
|
|
// PRIVATE MEMBERS
|
|
|
|
private static readonly Type SphereColliderType = typeof(SphereCollider);
|
|
private static readonly Type CapsuleColliderType = typeof(CapsuleCollider);
|
|
private static readonly Type BoxColliderType = typeof(BoxCollider);
|
|
private static readonly Type MeshColliderType = typeof(MeshCollider);
|
|
#if !KCC_DISABLE_TERRAIN
|
|
private static readonly Type TerrainColliderType = typeof(TerrainCollider);
|
|
#endif
|
|
|
|
// PUBLIC METHODS
|
|
|
|
public bool IsValid() => Type != EColliderType.None;
|
|
|
|
public bool Set(RaycastHit raycastHit)
|
|
{
|
|
Collider collider = raycastHit.collider;
|
|
Type colliderType = collider.GetType();
|
|
|
|
if (colliderType == BoxColliderType)
|
|
{
|
|
Type = EColliderType.Box;
|
|
IsPrimitive = true;
|
|
}
|
|
else if (colliderType == MeshColliderType)
|
|
{
|
|
Type = EColliderType.Mesh;
|
|
IsPrimitive = false;
|
|
}
|
|
#if !KCC_DISABLE_TERRAIN
|
|
else if (colliderType == TerrainColliderType)
|
|
{
|
|
Type = EColliderType.Terrain;
|
|
IsPrimitive = false;
|
|
}
|
|
#endif
|
|
else if (colliderType == SphereColliderType)
|
|
{
|
|
Type = EColliderType.Sphere;
|
|
IsPrimitive = true;
|
|
}
|
|
else if (colliderType == CapsuleColliderType)
|
|
{
|
|
Type = EColliderType.Capsule;
|
|
IsPrimitive = true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Collider = collider;
|
|
Transform = collider.transform;
|
|
IsTrigger = collider.isTrigger;
|
|
RaycastHit = raycastHit;
|
|
|
|
return true;
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
Type = EColliderType.None;
|
|
Collider = default;
|
|
Transform = default;
|
|
IsTrigger = default;
|
|
IsPrimitive = default;
|
|
RaycastHit = default;
|
|
}
|
|
|
|
public void CopyFromOther(KCCShapeCastHit other)
|
|
{
|
|
Type = other.Type;
|
|
Collider = other.Collider;
|
|
Transform = other.Transform;
|
|
IsTrigger = other.IsTrigger;
|
|
IsPrimitive = other.IsPrimitive;
|
|
RaycastHit = other.RaycastHit;
|
|
}
|
|
}
|
|
}
|