From 15740faf9fe9fe4be08965098bbf2947e096aeeb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Aug 2019 22:50:43 +0800 Subject: +Unity Runtime code --- Runtime/Filters/Mesh/LodMeshFilter.cpp | 96 ++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Runtime/Filters/Mesh/LodMeshFilter.cpp (limited to 'Runtime/Filters/Mesh/LodMeshFilter.cpp') 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) +{ + 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 MeshFilter::GetSharedMesh () +{ + return m_Mesh; +} + +Mesh* MeshFilter::GetInstantiatedMesh () +{ + Mesh* instantiated = &Mesh::GetInstantiatedMesh (m_Mesh, *this); + if (PPtr (instantiated) != m_Mesh) + { + SetSharedMesh(instantiated); + } + + return instantiated; +} + +void MeshFilter::SetInstantiatedMesh (Mesh* mesh) +{ + SetSharedMesh(mesh); +} + +IMPLEMENT_CLASS_HAS_INIT (MeshFilter) +IMPLEMENT_OBJECT_SERIALIZE (MeshFilter) + +template 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", "PPtr"); + + REGISTER_MESSAGE_VOID(MeshFilter, kDidAddComponent, OnDidAddMesh); +} + +void MeshFilter::AwakeFromLoad (AwakeFromLoadMode awakeMode) +{ + Super::AwakeFromLoad (awakeMode); + AssignMeshToRenderer (); +} -- cgit v1.1-26-g67d0