133 lines
3.0 KiB
C#
133 lines
3.0 KiB
C#
using UnityEngine;
|
|
|
|
namespace FIMSpace
|
|
{
|
|
public abstract class FImp_ColliderData_Base
|
|
{
|
|
public enum EFColliderType
|
|
{
|
|
Box = 0,
|
|
Sphere = 1,
|
|
Capsule = 2,
|
|
Mesh = 3,
|
|
Terrain = 4
|
|
}
|
|
|
|
public bool Is2D;
|
|
|
|
protected Vector3 previousPosition = Vector3.zero;
|
|
|
|
protected Quaternion previousRotation = Quaternion.identity;
|
|
|
|
protected Vector3 previousScale = Vector3.one;
|
|
|
|
public Transform Transform { get; protected set; }
|
|
|
|
public Collider Collider { get; protected set; }
|
|
|
|
public Collider2D Collider2D { get; protected set; }
|
|
|
|
public bool IsStatic { get; private set; }
|
|
|
|
public EFColliderType ColliderType { get; protected set; }
|
|
|
|
public static FImp_ColliderData_Base GetColliderDataFor(Collider collider)
|
|
{
|
|
SphereCollider sphereCollider = collider as SphereCollider;
|
|
if ((bool)sphereCollider)
|
|
{
|
|
return new FImp_ColliderData_Sphere(sphereCollider);
|
|
}
|
|
CapsuleCollider capsuleCollider = collider as CapsuleCollider;
|
|
if ((bool)capsuleCollider)
|
|
{
|
|
return new FImp_ColliderData_Capsule(capsuleCollider);
|
|
}
|
|
BoxCollider boxCollider = collider as BoxCollider;
|
|
if ((bool)boxCollider)
|
|
{
|
|
return new FImp_ColliderData_Box(boxCollider);
|
|
}
|
|
MeshCollider meshCollider = collider as MeshCollider;
|
|
if ((bool)meshCollider)
|
|
{
|
|
return new FImp_ColliderData_Mesh(meshCollider);
|
|
}
|
|
TerrainCollider terrainCollider = collider as TerrainCollider;
|
|
if ((bool)terrainCollider)
|
|
{
|
|
return new FImp_ColliderData_Terrain(terrainCollider);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static FImp_ColliderData_Base GetColliderDataFor(Collider2D collider)
|
|
{
|
|
CircleCollider2D circleCollider2D = collider as CircleCollider2D;
|
|
if ((bool)circleCollider2D)
|
|
{
|
|
return new FImp_ColliderData_Sphere(circleCollider2D);
|
|
}
|
|
CapsuleCollider2D capsuleCollider2D = collider as CapsuleCollider2D;
|
|
if ((bool)capsuleCollider2D)
|
|
{
|
|
return new FImp_ColliderData_Capsule(capsuleCollider2D);
|
|
}
|
|
BoxCollider2D boxCollider2D = collider as BoxCollider2D;
|
|
if ((bool)boxCollider2D)
|
|
{
|
|
return new FImp_ColliderData_Box(boxCollider2D);
|
|
}
|
|
PolygonCollider2D polygonCollider2D = collider as PolygonCollider2D;
|
|
if ((bool)polygonCollider2D)
|
|
{
|
|
return new FImp_ColliderData_Mesh(polygonCollider2D);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public virtual void RefreshColliderData()
|
|
{
|
|
if (Transform.gameObject.isStatic)
|
|
{
|
|
IsStatic = true;
|
|
}
|
|
else
|
|
{
|
|
IsStatic = false;
|
|
}
|
|
}
|
|
|
|
public virtual bool PushIfInside(ref Vector3 point, float pointRadius, Vector3 pointOffset)
|
|
{
|
|
if ((bool)(Collider as SphereCollider))
|
|
{
|
|
Debug.Log("It shouldn't appear");
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public virtual bool PushIfInside2D(ref Vector3 point, float pointRadius, Vector3 pointOffset)
|
|
{
|
|
return PushIfInside(ref point, pointRadius, pointOffset);
|
|
}
|
|
|
|
public static bool VIsSame(Vector3 vec1, Vector3 vec2)
|
|
{
|
|
if (vec1.x != vec2.x)
|
|
{
|
|
return false;
|
|
}
|
|
if (vec1.y != vec2.y)
|
|
{
|
|
return false;
|
|
}
|
|
if (vec1.z != vec2.z)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
}
|