blob: 512f15396a18390143f4f42dccd3ef4231430643 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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 ();
}
|