10using System.Collections.Generic;
27 public readonly EditorApi editor;
32 AssertHelper.AssertEditorOnly();
34 Assert.IsNotNull(renderingMethodType);
37 editor =
new EditorApi(
this);
38 editor.ChangeRenderingMethod(renderingMethodType, addFeatures:
true);
41 public class EditorApi {
48 public void OnValidate() {
49 if (!Application.isPlaying) {
50 _group._addRemoveSupported =
true;
51 if (_group._renderingMethod.Value !=
null) {
52 _group._addRemoveSupported &= typeof(
ISupportsAddRemove).IsAssignableFrom(_group._renderingMethod.Value.GetType());
56 for (
int i = _group._features.Count; i-- != 0;) {
57 if (_group._features[i] ==
null) {
58 _group._features.RemoveAt(i);
62 Assert.IsNotNull(_group._renderingMethod.Value,
"Rendering method of a group should never be null.");
65 public void OnDestroy() {
66 if (_group._renderingMethod.Value !=
null) {
67 _group._renderingMethod.Value.OnDisableRendererEditor();
78 public void ChangeRenderingMethod(Type renderingMethodType,
bool addFeatures) {
79 AssertHelper.AssertEditorOnly();
80 Assert.IsNotNull(renderingMethodType);
82 if (_group._renderingMethod.Value !=
null) {
83 _group._renderingMethod.Value.OnDisableRendererEditor();
84 _group._renderingMethod.Value =
null;
87 _group._renderingMethod.Value = Activator.CreateInstance(renderingMethodType) as
LeapRenderingMethod;
88 Assert.IsNotNull(_group._renderingMethod.Value);
91 renderingMethodInternal.
renderer = _group._renderer;
92 renderingMethodInternal.
group = _group;
95 List<Type> dataObjTypes =
new List<Type>();
96 var allGraphics = _group.renderer.GetComponentsInChildren<
LeapGraphic>();
97 foreach (var graphic
in allGraphics) {
98 if (_group._renderingMethod.Value.IsValidGraphic(graphic)) {
100 List<Type> types =
new List<Type>();
101 for (
int i = 0; i < graphic.featureData.Count; i++) {
102 var dataObj = graphic.featureData[i];
103 var dataType = dataObj.GetType();
104 if (!dataObjTypes.Contains(dataType)) {
109 foreach (var type
in types) {
110 if (dataObjTypes.Query().Count(t => t == type) < types.Query().Count(t => t == type)) {
111 dataObjTypes.Add(type);
117 foreach (var type
in dataObjTypes) {
119 if (featureType !=
null) {
120 AddFeature(featureType);
125 _group._renderingMethod.Value.OnEnableRendererEditor();
138 AssertHelper.AssertEditorOnly();
139 _group._renderer.editor.ScheduleRebuild();
141 Undo.RecordObject(_group.renderer,
"Added feature");
144 _group._features.Add(feature);
146 _group.RebuildFeatureData();
147 _group.RebuildFeatureSupportInfo();
156 public void RemoveFeature(
int featureIndex) {
157 AssertHelper.AssertEditorOnly();
159 Undo.RecordObject(_group.renderer,
"Removed feature");
161 _group._features.RemoveAt(featureIndex);
163 _group.RebuildFeatureData();
164 _group.RebuildFeatureSupportInfo();
166 _group._renderer.editor.ScheduleRebuild();
174 public void RebuildEditorPickingMeshes() {
176 foreach (var graphic
in _group._graphics) {
177 graphic.editor.RebuildEditorPickingMesh();
182 public void ValidateGraphicList() {
184 var
set = Pool<HashSet<LeapGraphic>>.Spawn();
186 for (
int i = _group._graphics.Count; i-- != 0;) {
187 var graphic = _group._graphics[i];
188 if (
set.Contains(graphic)) {
189 Debug.LogWarning(
"Removing duplicate graphic " + graphic);
190 _group._graphics.RemoveAt(i);
197 Pool<HashSet<LeapGraphic>>.Recycle(
set);
200 for (
int i = _group._graphics.Count; i-- != 0;) {
201 if (_group._graphics[i] ==
null || _group.graphics[i].attachedGroup != _group) {
202 _group._graphics.RemoveAt(i);
206 if (!_group._graphics[i].transform.IsChildOf(_group.renderer.transform)) {
207 _group.TryRemoveGraphic(_group._graphics[i]);
213 public void UpdateRendererEditor() {
214 AssertHelper.AssertEditorOnly();
216 _group._renderingMethod.Value.OnUpdateRendererEditor();
LeapGraphicRenderer renderer
Gets the renderer this group is attached to.
static string GetTagName(Type type)
LeapGraphicRenderer renderer
LeapGraphicRenderer renderer
A utility struct for ease of use when you want to wrap a piece of code in a Profiler....