GQ_Communicate/GQ_TongXin/Assets/Obi/Scripts/Collisions/ObiCollider2D.cs

68 lines
1.7 KiB
C#

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
namespace Obi{
/**
* Add this component to any Collider that you want to be considered by Obi.
*/
[ExecuteInEditMode]
[RequireComponent(typeof(Collider2D))]
public class ObiCollider2D : ObiColliderBase
{
/**
* Creates an OniColliderTracker of the appropiate type.
*/
protected override void CreateTracker(){
if (unityCollider is CircleCollider2D)
tracker = new ObiCircleShapeTracker2D((CircleCollider2D)unityCollider);
else if (unityCollider is BoxCollider2D)
tracker = new ObiBoxShapeTracker2D((BoxCollider2D)unityCollider);
else if (unityCollider is CapsuleCollider2D)
tracker = new ObiCapsuleShapeTracker2D((CapsuleCollider2D)unityCollider);
else if (unityCollider is EdgeCollider2D)
tracker = new ObiEdgeShapeTracker2D((EdgeCollider2D)unityCollider);
else
Debug.LogWarning("Collider2D type not supported by Obi.");
}
protected override bool IsUnityColliderEnabled(){
return ((Collider2D)unityCollider).enabled;
}
protected override void UpdateColliderAdaptor(){
adaptor.Set((Collider2D)unityCollider,phase, thickness);
foreach(ObiSolver solver in solvers){
if (solver.simulateInLocalSpace){
adaptor.SetSpaceTransform(solver.transform);
if (solvers.Count > 1){
Debug.LogWarning("ObiColliders used by ObiSolvers simulating in local space cannot be shared by multiple solvers."+
"Please duplicate the collider if you want to use it in other solvers.");
return;
}
}
}
}
protected override void Awake(){
unityCollider = GetComponent<Collider2D>();
if (unityCollider == null)
return;
base.Awake();
}
}
}