예제 #1
0
        public static ColliderPrefab CreateColliderPrefab(ColliderData data)
        {
            CBaseShape collider = null;

            if (LMath.Abs(data.deg - 45) < 1)
            {
            }

            //warning data.deg is unity deg
            //changed unity deg to ccw deg
            var collisionDeg = -data.deg + 90;

            if (data.radius > 0)
            {
                //circle
                collider = new CCircle(data.radius);
            }
            else
            {
                //obb
                collider = new COBB(data.size, collisionDeg);
            }

            collider.high = data.high;
            var colFab = new ColliderPrefab();

            colFab.parts.Add(new ColliderPart()
            {
                transform = new CTransform2D(data.pos, data.y, data.deg),
                collider  = collider
            });
            return(colFab);
        }
        public static ColliderPrefab CreateColliderPrefab(GameObject fab, ColliderData data)
        {
            Debug.Trace("CreateColliderPrefab " + fab.name);
            CBaseShape collider = null;

            if (data == null)
            {
                Debug.LogError(fab.name + " Miss ColliderDataMono ");
                return(null);
            }

            if (data.radius > 0)
            {
                //circle
                collider = new CCircle(data.radius);
            }
            else
            {
                //obb
                collider = new COBB(data.size, data.deg);
            }
            Debug.Trace($"{fab.name} !!!CreateCollider  deg: {data.deg} up:{data.size} radius:{data.radius}");
            var colFab = new ColliderPrefab();

            colFab.parts.Add(new ColliderPart()
            {
                transform = new CTransform2D(LVector2.zero),
                collider  = collider
            });
            return(colFab);
        }
예제 #3
0
        public static ColliderPrefab CreateColliderPrefab(GameObject fab)
        {
            Collider unityCollider = null;
            var      colliders     = fab.GetComponents <Collider>();

            foreach (var col in colliders)
            {
                if (col.isTrigger)
                {
                    unityCollider = col;
                    break;
                }
            }

            if (unityCollider == null)
            {
                foreach (var col in colliders)
                {
                    unityCollider = col;
                    break;
                }
            }

            if (unityCollider == null)
            {
                return(null);
            }
            CBaseShape collider = null;

            if (unityCollider is BoxCollider boxCol)
            {
                collider = new COBB(boxCol.size.ToLVector2XZ(), LFloat.zero);
            }

            if (unityCollider is SphereCollider cirCol)
            {
                collider = new CCircle(cirCol.radius.ToLFloat());
            }

            if (unityCollider is CapsuleCollider capCol)
            {
                collider = new CCircle(capCol.radius.ToLFloat());
            }

            var colFab = new ColliderPrefab();

            colFab.parts.Add(new ColliderPart()
            {
                transform = new CTransform2D(LVector2.zero),
                collider  = collider
            });
            return(colFab);
        }
예제 #4
0
 private static bool CheckAABB_OBB(CAABB col1, COBB col2, Transform2D trans1, Transform2D trans2)
 {
     return(Utils.TestAABBOBB(
                trans1.pos, col1.radius, col1.size,
                trans2.pos, col2.radius, col2.size, col2.up));
 }
예제 #5
0
 private static bool CheckCircle_OBB(CCircle col1, COBB col2, Transform2D trans1, Transform2D trans2)
 {
     return(Utils.TestCircleOBB(
                trans1.pos, col1.radius,
                trans2.pos, col2.radius, col2.size, col2.up));
 }
예제 #6
0
 private static bool CheckRay_OBB(CRay col1, COBB col2, Transform2D trans1, Transform2D trans2)
 {
     return(false);
 }
예제 #7
0
 private static bool CheckSeg_OBB(CSegment col1, COBB col2, Transform2D trans1, Transform2D trans2)
 {
     return(false);
 }
예제 #8
0
 private static bool CheckOBB_Polygon(COBB col1, CPolygon col2, Transform2D trans1, Transform2D trans2)
 {
     return(false);
 }
예제 #9
0
        public static ColliderPrefab CreateColliderPrefab(GameObject fab)
        {
            Debug.Trace("CreateColliderPrefab " + fab.name);
#if false
            Collider unityCollider = null;
            var      colliders     = fab.GetComponents <Collider>();
            foreach (var col in colliders)
            {
                if (col.isTrigger)
                {
                    unityCollider = col;
                    break;
                }
            }

            if (unityCollider == null)
            {
                foreach (var col in colliders)
                {
                    unityCollider = col;
                    break;
                }
            }

            if (unityCollider == null)
            {
                return(null);
            }
            CBaseShape collider = null;
            if (unityCollider is BoxCollider boxCol)
            {
                collider = new COBB(boxCol.size.ToLVector2XZ(), LFloat.zero);
            }

            if (unityCollider is SphereCollider cirCol)
            {
                collider = new CCircle(cirCol.radius.ToLFloat());
            }

            if (unityCollider is CapsuleCollider capCol)
            {
                collider = new CCircle(capCol.radius.ToLFloat());
            }

            if (collider is COBB tObb)
            {
                Debug.LogTrace($"{fab.name} CreateCollider OBB deg: {tObb.deg} up:{tObb.up} radius:{tObb.radius}");
            }
            if (collider is CCircle tCircle)
            {
                Debug.LogTrace($"{fab.name} CreateCollider Circle deg: radius:{tCircle.radius}");
            }
#else
            CBaseShape collider = null;
            var        data     = fab.GetComponent <ColliderDataMono>()?.colliderData;
            if (data == null)
            {
                Debug.LogError(fab.name + " Miss ColliderDataMono ");
                return(null);
            }

            if (data.radius > 0)
            {
                //circle
                collider = new CCircle(data.radius);
            }
            else
            {
                //obb
                collider = new COBB(data.size, data.deg);
            }
            Debug.Trace($"{fab.name} !!!CreateCollider  deg: {data.deg} up:{data.size} radius:{data.radius}");
#endif
            var colFab = new ColliderPrefab();
            colFab.parts.Add(new ColliderPart()
            {
                transform = new CTransform2D(LVector2.zero),
                collider  = collider
            });
            return(colFab);
        }