summaryrefslogtreecommitdiff
path: root/Runtime/Filters/Mesh/LodMeshFilter.cpp
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/Filters/Mesh/LodMeshFilter.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Filters/Mesh/LodMeshFilter.cpp')
-rw-r--r--Runtime/Filters/Mesh/LodMeshFilter.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/Runtime/Filters/Mesh/LodMeshFilter.cpp b/Runtime/Filters/Mesh/LodMeshFilter.cpp
new file mode 100644
index 0000000..512f153
--- /dev/null
+++ b/Runtime/Filters/Mesh/LodMeshFilter.cpp
@@ -0,0 +1,96 @@
+#include "UnityPrefix.h"
+#include "LodMeshFilter.h"
+#include "LodMesh.h"
+#include "MeshRenderer.h"
+#include "Runtime/Filters/Particles/MeshParticleEmitter.h"
+#include "Runtime/Serialize/TransferFunctions/SerializeTransfer.h"
+#include "Runtime/Serialize/TransferFunctions/TransferNameConversions.h"
+
+MeshFilter::MeshFilter (MemLabelId label, ObjectCreationMode mode)
+: Super(label, mode)
+{
+ m_Mesh = NULL;
+}
+
+MeshFilter::~MeshFilter ()
+{
+}
+
+void MeshFilter::OnDidAddMesh ()
+{
+ AssignMeshToRenderer ();
+}
+
+void MeshFilter::AssignMeshToRenderer ()
+{
+ if (GetGameObjectPtr())
+ {
+ MeshRenderer* renderer = QueryComponent(MeshRenderer);
+ if (renderer && renderer->GetSharedMesh() != m_Mesh)
+ renderer->SetSharedMesh(m_Mesh);
+
+ MeshParticleEmitter* emitter = QueryComponent(MeshParticleEmitter);
+ if (emitter && emitter->GetMesh() != m_Mesh)
+ emitter->SetMesh(m_Mesh);
+ }
+}
+
+void MeshFilter::SetSharedMesh (PPtr<Mesh> mesh)
+{
+ m_Mesh = mesh;
+
+ MeshRenderer* renderer = QueryComponent(MeshRenderer);
+ if (renderer)
+ renderer->SetSharedMesh(m_Mesh);
+
+ MeshParticleEmitter* emitter = QueryComponent(MeshParticleEmitter);
+ if (emitter)
+ emitter->SetMesh(m_Mesh);
+
+ SetDirty ();
+}
+
+PPtr<Mesh> MeshFilter::GetSharedMesh ()
+{
+ return m_Mesh;
+}
+
+Mesh* MeshFilter::GetInstantiatedMesh ()
+{
+ Mesh* instantiated = &Mesh::GetInstantiatedMesh (m_Mesh, *this);
+ if (PPtr<Mesh> (instantiated) != m_Mesh)
+ {
+ SetSharedMesh(instantiated);
+ }
+
+ return instantiated;
+}
+
+void MeshFilter::SetInstantiatedMesh (Mesh* mesh)
+{
+ SetSharedMesh(mesh);
+}
+
+IMPLEMENT_CLASS_HAS_INIT (MeshFilter)
+IMPLEMENT_OBJECT_SERIALIZE (MeshFilter)
+
+template<class TransferFunction> inline
+void MeshFilter::Transfer (TransferFunction& transfer)
+{
+ Super::Transfer (transfer);
+ transfer.Transfer (m_Mesh, "m_Mesh", kSimpleEditorMask);
+}
+
+void MeshFilter::InitializeClass ()
+{
+ RegisterAllowNameConversion(GetClassStringStatic(), "m_LodMesh", "m_Mesh");
+ RegisterAllowTypeNameConversion ("PPtr<LodMesh>", "PPtr<Mesh>");
+
+ REGISTER_MESSAGE_VOID(MeshFilter, kDidAddComponent, OnDidAddMesh);
+}
+
+void MeshFilter::AwakeFromLoad (AwakeFromLoadMode awakeMode)
+{
+ Super::AwakeFromLoad (awakeMode);
+ AssignMeshToRenderer ();
+}