summaryrefslogtreecommitdiff
path: root/Runtime/Physics2D/Collider2D.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Physics2D/Collider2D.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Physics2D/Collider2D.h')
-rw-r--r--Runtime/Physics2D/Collider2D.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/Runtime/Physics2D/Collider2D.h b/Runtime/Physics2D/Collider2D.h
new file mode 100644
index 0000000..8b62ce5
--- /dev/null
+++ b/Runtime/Physics2D/Collider2D.h
@@ -0,0 +1,90 @@
+#pragma once
+
+#if ENABLE_2D_PHYSICS || DOXYGEN
+
+#include "Runtime/BaseClasses/GameObject.h"
+#include "Runtime/GameCode/Behaviour.h"
+#include "Runtime/Math/Quaternion.h"
+#include "Runtime/Math/Vector2.h"
+#include "Runtime/Math/Vector3.h"
+#include "Runtime/Utilities/dynamic_array.h"
+#include "External/Box2D/Box2D/Box2D.h"
+
+class Rigidbody2D;
+class Transform;
+class Matrix4x4f;
+class PhysicsMaterial2D;
+
+
+// --------------------------------------------------------------------------
+
+
+class Collider2D : public Behaviour
+{
+public:
+ typedef dynamic_array<b2Fixture*> FixtureArray;
+
+public:
+ REGISTER_DERIVED_ABSTRACT_CLASS (Collider2D, Behaviour)
+ DECLARE_OBJECT_SERIALIZE (Collider2D)
+
+ Collider2D (MemLabelId label, ObjectCreationMode mode);
+ // virtual ~Collider2D (); declared-by-macro
+
+ static void InitializeClass ();
+ static void CleanupClass () {}
+
+ virtual void Reset ();
+ virtual void AwakeFromLoad(AwakeFromLoadMode mode);
+ virtual void Deactivate (DeactivateOperation operation);
+ void Cleanup ();
+
+ // Colliders are recreated when deleting a rigibody component from existing game object;
+ // since colliders now have to be attached to the "static body". Old RigidBody2D component
+ // is not destroyed at this point yet, and thus it should be ignored when finding which
+ // RB to attach colliders to.
+ void RecreateCollider (const Rigidbody2D* ignoreRigidbody);
+
+ virtual void AddToManager ();
+ virtual void RemoveFromManager ();
+
+ void SetIsTrigger (bool trigger);
+ bool GetIsTrigger () const { return m_IsTrigger; }
+
+ PPtr<PhysicsMaterial2D> GetMaterial ();
+ void SetMaterial (PPtr<PhysicsMaterial2D> material);
+
+ bool OverlapPoint (const Vector2f& point) const;
+
+ // Shapes.
+ inline int GetShapeCount() const { return m_Shapes.size(); }
+ const b2Fixture* GetShape() const { return (m_Shapes.size() ? m_Shapes[0] : 0); }
+ b2Fixture* GetShape() { return (m_Shapes.size() ? m_Shapes[0] : 0); }
+ const FixtureArray& GetShapes() const { return m_Shapes; }
+ FixtureArray& GetShapes() { return m_Shapes; }
+
+ Rigidbody2D* GetRigidbody ();
+
+ void TransformChanged (int changeMask);
+
+protected:
+ virtual void Create (const Rigidbody2D* ignoreRigidbody = NULL) = 0;
+ void FinalizeCreate (b2FixtureDef& def, b2Body* body, const dynamic_array<b2Shape*>* shapes = 0);
+ void CalculateColliderTransformation (const Rigidbody2D* ignoreRigidbody, b2Body** attachedBody, Matrix4x4f& matrix);
+
+ bool HasLocalTransformChanged () const;
+ void UpdateLocalTransform ();
+
+protected:
+ PPtr<PhysicsMaterial2D> m_Material;
+ bool m_IsTrigger;
+ bool m_IsStaticBody;
+ FixtureArray m_Shapes;
+
+private:
+ Vector3f m_LocalPosition;
+ Quaternionf m_LocalRotation;
+ bool m_LocalTransformInitialized;
+};
+
+#endif