diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Physics2D/SpriteCollider2D.cpp |
Diffstat (limited to 'Runtime/Physics2D/SpriteCollider2D.cpp')
-rw-r--r-- | Runtime/Physics2D/SpriteCollider2D.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/Runtime/Physics2D/SpriteCollider2D.cpp b/Runtime/Physics2D/SpriteCollider2D.cpp new file mode 100644 index 0000000..772bf0d --- /dev/null +++ b/Runtime/Physics2D/SpriteCollider2D.cpp @@ -0,0 +1,91 @@ +#include "UnityPrefix.h" + +#if ENABLE_2D_PHYSICS && ENABLE_SPRITECOLLIDER + +#include "Runtime/Physics2D/SpriteCollider2D.h" +#include "Runtime/Physics2D/RigidBody2D.h" +#include "Runtime/Physics2D/Physics2DManager.h" +#include "Runtime/Graphics/Transform.h" +#include "Runtime/Serialize/TransferFunctions/SerializeTransfer.h" +#include "Runtime/Profiler/Profiler.h" +#include "Runtime/Filters/Mesh/SpriteRenderer.h" + +#include "External/Box2D/Box2D/Box2D.h" +#include "External/libtess2/libtess2/tesselator.h" + +PROFILER_INFORMATION(gPhysics2DProfileSpriteColliderCreate, "Physics2D.SpriteColliderCreate", kProfilerPhysics) +PROFILER_INFORMATION(gPhysics2DProfileSpriteColliderDecomposition, "Physics2D.SpriteColliderDecomposition", kProfilerPhysics) + +IMPLEMENT_CLASS_INIT_ONLY (SpriteCollider2D) +IMPLEMENT_OBJECT_SERIALIZE (SpriteCollider2D) + + +// -------------------------------------------------------------------------- + + +static Polygon2D gEmptyPolygon2D; +void SpriteCollider2D::InitializeClass() +{ + gEmptyPolygon2D.Clear(); +} + + +SpriteCollider2D::SpriteCollider2D (MemLabelId label, ObjectCreationMode mode) +: Super(label, mode) +{ +} + + +SpriteCollider2D::~SpriteCollider2D () +{ +} + + +template<class TransferFunction> +void SpriteCollider2D::Transfer (TransferFunction& transfer) +{ + Super::Transfer (transfer); + + TRANSFER (m_Sprite); +} + + +void SpriteCollider2D::Reset () +{ + Super::Reset (); + + m_Sprite = NULL; +} + + +void SpriteCollider2D::SmartReset () +{ + Super::SmartReset (); +#if UNITY_EDITOR + GameObject* go = GetGameObjectPtr(); + if (go) + { + SpriteRenderer* sr = go->QueryComponent(SpriteRenderer); + if (sr) + m_Sprite = sr->GetSprite(); + } +#endif +} + +void SpriteCollider2D::SetSprite(PPtr<Sprite> sprite) +{ + if (m_Sprite != sprite) + { + m_Sprite = sprite; + + Create(); + SetDirty(); + } +} + +const Polygon2D& SpriteCollider2D::GetPoly() const +{ + return m_Sprite.IsNull() ? gEmptyPolygon2D : m_Sprite->GetPoly(); +} + +#endif // #if ENABLE_2D_PHYSICS |