blob: bf92aec25b92f254c8f3993a53c98353c7094369 (
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
using System;
using System.Collections.Generic;
using UnityEngine;
namespace NGS.MeshFusionPro;
public class DynamicMeshFusionSource : MeshFusionSource
{
[SerializeField]
[HideInInspector]
private MeshRenderer _renderer;
[SerializeField]
[HideInInspector]
private MeshFilter _filter;
[SerializeField]
[HideInInspector]
private Mesh _mesh;
private DynamicCombineSource[] _sources;
private DynamicCombinedObjectPart[] _parts;
public override bool TryGetBounds(ref Bounds bounds)
{
if (_renderer != null)
{
bounds = _renderer.bounds;
return true;
}
return false;
}
protected override void OnSourceCombinedInternal(ICombinedObject root, ICombinedObjectPart part)
{
for (int i = 0; i < _parts.Length; i++)
{
if (_parts[i] == null)
{
_parts[i] = (DynamicCombinedObjectPart)part;
return;
}
}
throw new Exception("Unexpected Behaviour");
}
protected override bool CheckCompatibilityAndGetComponents(out string incompatibilityReason)
{
incompatibilityReason = "";
return CanCreateCombineSource(base.gameObject, ref incompatibilityReason, ref _renderer, ref _filter, ref _mesh);
}
protected override void CreateSources()
{
if (_sources == null)
{
_sources = new DynamicCombineSource[_mesh.subMeshCount];
}
if (_parts == null)
{
_parts = new DynamicCombinedObjectPart[_mesh.subMeshCount];
}
for (int i = 0; i < _sources.Length; i++)
{
_sources[i] = new DynamicCombineSource(_mesh, _renderer, i);
}
}
protected override IEnumerable<ICombineSource> GetCombineSources()
{
if (_sources == null)
{
yield break;
}
for (int i = 0; i < _sources.Length; i++)
{
DynamicCombineSource dynamicCombineSource = _sources[i];
if (dynamicCombineSource == null)
{
break;
}
yield return dynamicCombineSource;
}
}
protected override IEnumerable<ICombinedObjectPart> GetCombinedParts()
{
if (_parts == null)
{
yield break;
}
for (int i = 0; i < _parts.Length; i++)
{
DynamicCombinedObjectPart dynamicCombinedObjectPart = _parts[i];
if (dynamicCombinedObjectPart == null)
{
break;
}
yield return dynamicCombinedObjectPart;
}
}
protected override void ClearSources()
{
if (_sources != null)
{
for (int i = 0; i < _sources.Length && _sources[i] != null; i++)
{
_sources[i] = null;
}
}
}
protected override void ClearParts()
{
if (_parts != null)
{
for (int i = 0; i < _parts.Length; i++)
{
_parts[i] = null;
}
}
}
protected override void ToggleComponents(bool enabled)
{
_renderer.enabled = enabled;
}
}
|