|
@@ -4,7 +4,7 @@ package hrt.prefab.l3d;
|
|
|
|
|
|
class MeshSprayObject extends h3d.scene.Object {
|
|
class MeshSprayObject extends h3d.scene.Object {
|
|
public var batches : Array<h3d.scene.MeshBatch> = [];
|
|
public var batches : Array<h3d.scene.MeshBatch> = [];
|
|
- public var batchesMap : Map<String,{ batch : h3d.scene.MeshBatch, pivot : h3d.Matrix }> = [];
|
|
|
|
|
|
+ public var batchesMap : Map<Int,Map<String,{ batch : h3d.scene.MeshBatch, pivot : h3d.Matrix }>> = [];
|
|
override function getMaterials( ?arr : Array<h3d.mat.Material>, recursive=true ) {
|
|
override function getMaterials( ?arr : Array<h3d.mat.Material>, recursive=true ) {
|
|
if( !recursive ) {
|
|
if( !recursive ) {
|
|
// batches materials are considered local materials
|
|
// batches materials are considered local materials
|
|
@@ -18,18 +18,42 @@ class MeshSprayObject extends h3d.scene.Object {
|
|
|
|
|
|
class MeshSpray extends Object3D {
|
|
class MeshSpray extends Object3D {
|
|
|
|
|
|
|
|
+ @:s var split : Int;
|
|
|
|
+
|
|
|
|
+ inline function getSplitID( c : Prefab ) {
|
|
|
|
+ var c = c.to(Object3D);
|
|
|
|
+ return (Math.floor(c.x/split) * 39119 + Math.floor(c.y/split)) % 0x7FFFFFFF;
|
|
|
|
+ }
|
|
|
|
+
|
|
override function createObject( ctx : Context ) {
|
|
override function createObject( ctx : Context ) {
|
|
var mspray = new MeshSprayObject(ctx.local3d);
|
|
var mspray = new MeshSprayObject(ctx.local3d);
|
|
// preallocate batches so their materials can be resolved
|
|
// preallocate batches so their materials can be resolved
|
|
|
|
+ var curID = 0, curMap = mspray.batchesMap.get(0);
|
|
|
|
+ if( curMap == null ) {
|
|
|
|
+ curMap = new Map();
|
|
|
|
+ mspray.batchesMap.set(0, curMap);
|
|
|
|
+ }
|
|
for( c in children ) {
|
|
for( c in children ) {
|
|
if( !c.enabled || c.type != "model" ) continue;
|
|
if( !c.enabled || c.type != "model" ) continue;
|
|
- var batch = mspray.batchesMap.get(c.source);
|
|
|
|
|
|
+ if( split > 0 ) {
|
|
|
|
+ var sid = getSplitID(c);
|
|
|
|
+ if( sid != curID ) {
|
|
|
|
+ curID = sid;
|
|
|
|
+ curMap = mspray.batchesMap.get(sid);
|
|
|
|
+ if( curMap == null ) {
|
|
|
|
+ curMap = new Map();
|
|
|
|
+ mspray.batchesMap.set(sid, curMap);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var batch = curMap.get(c.source);
|
|
if( batch == null ) {
|
|
if( batch == null ) {
|
|
var obj = ctx.loadModel(c.source).toMesh();
|
|
var obj = ctx.loadModel(c.source).toMesh();
|
|
var batch = new h3d.scene.MeshBatch(cast(obj.primitive,h3d.prim.MeshPrimitive), obj.material, mspray);
|
|
var batch = new h3d.scene.MeshBatch(cast(obj.primitive,h3d.prim.MeshPrimitive), obj.material, mspray);
|
|
|
|
+ batch.cullingCollider = @:privateAccess batch.instanced.bounds;
|
|
var multi = Std.downcast(obj, h3d.scene.MultiMaterial);
|
|
var multi = Std.downcast(obj, h3d.scene.MultiMaterial);
|
|
if( multi != null ) batch.materials = multi.materials;
|
|
if( multi != null ) batch.materials = multi.materials;
|
|
- mspray.batchesMap.set(c.source, { batch : batch, pivot : obj.defaultTransform.isIdentity() ? null : obj.defaultTransform });
|
|
|
|
|
|
+ curMap.set(c.source, { batch : batch, pivot : obj.defaultTransform.isIdentity() ? null : obj.defaultTransform });
|
|
mspray.batches.push(batch);
|
|
mspray.batches.push(batch);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -47,10 +71,18 @@ class MeshSpray extends Object3D {
|
|
b.begin();
|
|
b.begin();
|
|
b.worldPosition = tmp;
|
|
b.worldPosition = tmp;
|
|
}
|
|
}
|
|
|
|
+ var curID = 0, curMap = mspray.batchesMap.get(0);
|
|
for( c in children ) {
|
|
for( c in children ) {
|
|
if( !c.enabled || c.type != "model" )
|
|
if( !c.enabled || c.type != "model" )
|
|
continue;
|
|
continue;
|
|
- var inf = mspray.batchesMap.get(c.source);
|
|
|
|
|
|
+ if( split > 0 ) {
|
|
|
|
+ var sid = getSplitID(c);
|
|
|
|
+ if( sid != curID ) {
|
|
|
|
+ curMap = mspray.batchesMap.get(sid);
|
|
|
|
+ curID = sid;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var inf = curMap.get(c.source);
|
|
tmp.multiply3x4(c.to(Object3D).getTransform(), pos);
|
|
tmp.multiply3x4(c.to(Object3D).getTransform(), pos);
|
|
if( inf.pivot != null ) tmp.multiply3x4(inf.pivot, tmp);
|
|
if( inf.pivot != null ) tmp.multiply3x4(inf.pivot, tmp);
|
|
inf.batch.emitInstance();
|
|
inf.batch.emitInstance();
|
|
@@ -102,6 +134,7 @@ typedef MeshSprayConfig = {
|
|
var rotationOffset : Float;
|
|
var rotationOffset : Float;
|
|
var zOffset: Float;
|
|
var zOffset: Float;
|
|
var dontRepeatMesh : Bool;
|
|
var dontRepeatMesh : Bool;
|
|
|
|
+ var enableBrush : Bool;
|
|
var orientTerrain : Float;
|
|
var orientTerrain : Float;
|
|
var tiltAmount : Float;
|
|
var tiltAmount : Float;
|
|
}
|
|
}
|
|
@@ -200,6 +233,7 @@ class MeshSpray extends Object3D {
|
|
@:s var defaultConfig: MeshSprayConfig;
|
|
@:s var defaultConfig: MeshSprayConfig;
|
|
@:s var currentPresetName : String = null;
|
|
@:s var currentPresetName : String = null;
|
|
@:s var currentSetName : String = null;
|
|
@:s var currentSetName : String = null;
|
|
|
|
+ @:s var split : Int = 0;
|
|
|
|
|
|
var sceneEditor : hide.comp.SceneEditor;
|
|
var sceneEditor : hide.comp.SceneEditor;
|
|
|
|
|
|
@@ -260,6 +294,7 @@ class MeshSpray extends Object3D {
|
|
rotationOffset: 0,
|
|
rotationOffset: 0,
|
|
zOffset: 0,
|
|
zOffset: 0,
|
|
dontRepeatMesh: true,
|
|
dontRepeatMesh: true,
|
|
|
|
+ enableBrush: true,
|
|
orientTerrain : 0,
|
|
orientTerrain : 0,
|
|
tiltAmount : 0,
|
|
tiltAmount : 0,
|
|
};
|
|
};
|
|
@@ -326,103 +361,6 @@ class MeshSpray extends Object3D {
|
|
}
|
|
}
|
|
sceneEditor = ectx.scene.editor;
|
|
sceneEditor = ectx.scene.editor;
|
|
|
|
|
|
-
|
|
|
|
- var ctx = ectx.getContext(this);
|
|
|
|
- var s2d = @:privateAccess ctx.local2d.getScene();
|
|
|
|
- reset();
|
|
|
|
- interactive = new h2d.Interactive(10000, 10000, s2d);
|
|
|
|
- interactive.propagateEvents = true;
|
|
|
|
- interactive.cancelEvents = false;
|
|
|
|
-
|
|
|
|
- interactive.onWheel = function(e) {
|
|
|
|
-
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- interactive.onKeyUp = function(e) {
|
|
|
|
- if (e.keyCode == hxd.Key.R) {
|
|
|
|
- lastMeshId = -1;
|
|
|
|
- if (lastSpray < Date.now().getTime() - 100) {
|
|
|
|
- if( !K.isDown( K.SHIFT) ) {
|
|
|
|
- if (previewModels.length > 0) {
|
|
|
|
- sceneEditor.deleteElements(previewModels, () -> { }, false);
|
|
|
|
- sceneEditor.selectElements([this]);
|
|
|
|
- previewModels = [];
|
|
|
|
- }
|
|
|
|
- var worldPos = ectx.screenToGround(s2d.mouseX, s2d.mouseY);
|
|
|
|
- previewMeshesAround(ectx, ctx, worldPos);
|
|
|
|
- }
|
|
|
|
- lastSpray = Date.now().getTime();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- interactive.onPush = function(e) {
|
|
|
|
- e.propagate = false;
|
|
|
|
- sprayEnable = true;
|
|
|
|
- var worldPos = ectx.screenToGround(s2d.mouseX, s2d.mouseY);
|
|
|
|
- if( K.isDown( K.SHIFT) )
|
|
|
|
- removeMeshesAround(ctx, worldPos);
|
|
|
|
- else {
|
|
|
|
- addMeshes(ctx);
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- interactive.onRelease = function(e) {
|
|
|
|
- e.propagate = false;
|
|
|
|
- sprayEnable = false;
|
|
|
|
- var addedModels = sprayedModels.copy();
|
|
|
|
- if (sprayedModels.length > 0) {
|
|
|
|
- undo.change(Custom(function(undo) {
|
|
|
|
- if(undo) {
|
|
|
|
- sceneEditor.deleteElements(addedModels, () -> reset(), true, false);
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- sceneEditor.addElements(addedModels, false, true, true);
|
|
|
|
- }
|
|
|
|
- }));
|
|
|
|
- sprayedModels = [];
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- if (previewModels.length > 0) {
|
|
|
|
- sceneEditor.deleteElements(previewModels, () -> { }, false);
|
|
|
|
- sceneEditor.selectElements([this], Nothing);
|
|
|
|
- previewModels = [];
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- interactive.onMove = function(e) {
|
|
|
|
- var worldPos = ectx.screenToGround(s2d.mouseX, s2d.mouseY);
|
|
|
|
-
|
|
|
|
- var shiftPressed = K.isDown( K.SHIFT);
|
|
|
|
-
|
|
|
|
- drawCircle(ctx, worldPos.x, worldPos.y, worldPos.z, (shiftPressed) ? currentConfig.deleteRadius : currentConfig.radius, 5, (shiftPressed) ? 9830400 : 38400);
|
|
|
|
-
|
|
|
|
- if (lastSpray < Date.now().getTime() - 100) {
|
|
|
|
- if (previewModels.length > 0) {
|
|
|
|
- sceneEditor.deleteElements(previewModels, () -> { }, false, false);
|
|
|
|
- previewModels = [];
|
|
|
|
- }
|
|
|
|
- if( !shiftPressed ) {
|
|
|
|
- previewMeshesAround(ectx, ctx, worldPos);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if( K.isDown( K.MOUSE_LEFT) ) {
|
|
|
|
- e.propagate = false;
|
|
|
|
-
|
|
|
|
- if (sprayEnable) {
|
|
|
|
- if( shiftPressed ) {
|
|
|
|
- removeMeshesAround(ctx, worldPos);
|
|
|
|
- } else {
|
|
|
|
- addMeshes(ctx);
|
|
|
|
- if (currentConfig.density == 1) sprayEnable = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- lastSpray = Date.now().getTime();
|
|
|
|
- }
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
var props = new hide.Element('<div class="group" name="Meshes"></div>');
|
|
var props = new hide.Element('<div class="group" name="Meshes"></div>');
|
|
|
|
|
|
var preset = new hide.Element('<div class="btn-list" align="center" ></div>').appendTo(props);
|
|
var preset = new hide.Element('<div class="btn-list" align="center" ></div>').appendTo(props);
|
|
@@ -598,6 +536,10 @@ class MeshSpray extends Object3D {
|
|
Hold down SHIFT to remove meshes
|
|
Hold down SHIFT to remove meshes
|
|
<br/>Push R to randomize preview
|
|
<br/>Push R to randomize preview
|
|
</p>
|
|
</p>
|
|
|
|
+ <p align="center">
|
|
|
|
+ <label><input type="checkbox" id="enableBrush" style="margin-right: 5px;"/> Enable Brush</label>
|
|
|
|
+ </p>
|
|
|
|
+
|
|
</div>
|
|
</div>
|
|
').appendTo(props);
|
|
').appendTo(props);
|
|
|
|
|
|
@@ -606,6 +548,20 @@ class MeshSpray extends Object3D {
|
|
currentConfig.dontRepeatMesh = repeat.is(":checked");
|
|
currentConfig.dontRepeatMesh = repeat.is(":checked");
|
|
}).prop("checked", currentConfig.dontRepeatMesh);
|
|
}).prop("checked", currentConfig.dontRepeatMesh);
|
|
|
|
|
|
|
|
+ var enableBrush = options.find("#enableBrush");
|
|
|
|
+ enableBrush.on("change", function() {
|
|
|
|
+ currentConfig.enableBrush = enableBrush.is(":checked");
|
|
|
|
+ sceneEditor.setLock([this], currentConfig.enableBrush, false);
|
|
|
|
+ removeInteractiveBrush();
|
|
|
|
+ if (currentConfig.enableBrush)
|
|
|
|
+ createInteractiveBrush(ectx);
|
|
|
|
+ else {
|
|
|
|
+ interactive.cancelEvents = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }).prop("checked", currentConfig.enableBrush);
|
|
|
|
+
|
|
|
|
+
|
|
options.find("#select").click(function(_) {
|
|
options.find("#select").click(function(_) {
|
|
var options = selectElement.children().elements();
|
|
var options = selectElement.children().elements();
|
|
for (opt in options) {
|
|
for (opt in options) {
|
|
@@ -649,7 +605,6 @@ class MeshSpray extends Object3D {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
sceneEditor.deleteElements(meshes);
|
|
sceneEditor.deleteElements(meshes);
|
|
- sceneEditor.selectElements([this], Nothing);
|
|
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
|
|
@@ -676,7 +631,114 @@ class MeshSpray extends Object3D {
|
|
saveConfigMeshBatch();
|
|
saveConfigMeshBatch();
|
|
});
|
|
});
|
|
|
|
|
|
|
|
+ sceneEditor.setLock([this], currentConfig.enableBrush, false);
|
|
|
|
+ removeInteractiveBrush();
|
|
|
|
+ if (currentConfig.enableBrush)
|
|
|
|
+ createInteractiveBrush(ectx);
|
|
super.edit(ectx);
|
|
super.edit(ectx);
|
|
|
|
+
|
|
|
|
+ ectx.properties.add(new Element('
|
|
|
|
+ <div class="group" name="Extra">
|
|
|
|
+ <dl>
|
|
|
|
+ <dt>Split</dt><dd><input type="range" min="0" max="2048" field="split"/></dd>
|
|
|
|
+ </dl>
|
|
|
|
+ </div>'), this);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function createInteractiveBrush(ectx : EditContext) {
|
|
|
|
+ var ctx = ectx.getContext(this);
|
|
|
|
+ var s2d = @:privateAccess ctx.local2d.getScene();
|
|
|
|
+ interactive = new h2d.Interactive(10000, 10000, s2d);
|
|
|
|
+ interactive.propagateEvents = true;
|
|
|
|
+ interactive.cancelEvents = false;
|
|
|
|
+
|
|
|
|
+ interactive.onWheel = function(e) {
|
|
|
|
+
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ interactive.onKeyUp = function(e) {
|
|
|
|
+ if (e.keyCode == hxd.Key.R) {
|
|
|
|
+ lastMeshId = -1;
|
|
|
|
+ if (lastSpray < Date.now().getTime() - 100) {
|
|
|
|
+ if( !K.isDown( K.SHIFT) ) {
|
|
|
|
+ if (previewModels.length > 0) {
|
|
|
|
+ sceneEditor.deleteElements(previewModels, () -> { }, false);
|
|
|
|
+ previewModels = [];
|
|
|
|
+ }
|
|
|
|
+ var worldPos = ectx.screenToGround(s2d.mouseX, s2d.mouseY);
|
|
|
|
+ previewMeshesAround(ectx, ctx, worldPos);
|
|
|
|
+ }
|
|
|
|
+ lastSpray = Date.now().getTime();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ interactive.onPush = function(e) {
|
|
|
|
+ e.propagate = false;
|
|
|
|
+ sprayEnable = true;
|
|
|
|
+ var worldPos = ectx.screenToGround(s2d.mouseX, s2d.mouseY);
|
|
|
|
+ if( K.isDown( K.SHIFT) )
|
|
|
|
+ removeMeshesAround(ctx, worldPos);
|
|
|
|
+ else {
|
|
|
|
+ addMeshes(ctx);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ interactive.onRelease = function(e) {
|
|
|
|
+ e.propagate = false;
|
|
|
|
+ sprayEnable = false;
|
|
|
|
+ var addedModels = sprayedModels.copy();
|
|
|
|
+ if (sprayedModels.length > 0) {
|
|
|
|
+ undo.change(Custom(function(undo) {
|
|
|
|
+ if(undo) {
|
|
|
|
+ sceneEditor.deleteElements(addedModels, () -> removeInteractiveBrush(), true, false);
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ sceneEditor.addElements(addedModels, false, true, true);
|
|
|
|
+ }
|
|
|
|
+ }));
|
|
|
|
+ sprayedModels = [];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (previewModels.length > 0) {
|
|
|
|
+ sceneEditor.deleteElements(previewModels, () -> { }, false);
|
|
|
|
+ previewModels = [];
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ interactive.onMove = function(e) {
|
|
|
|
+ var worldPos = ectx.screenToGround(s2d.mouseX, s2d.mouseY);
|
|
|
|
+
|
|
|
|
+ var shiftPressed = K.isDown( K.SHIFT);
|
|
|
|
+
|
|
|
|
+ drawCircle(ctx, worldPos.x, worldPos.y, worldPos.z, (shiftPressed) ? currentConfig.deleteRadius : currentConfig.radius, 5, (shiftPressed) ? 9830400 : 38400);
|
|
|
|
+
|
|
|
|
+ if (lastSpray < Date.now().getTime() - 100) {
|
|
|
|
+ if (previewModels.length > 0) {
|
|
|
|
+ sceneEditor.deleteElements(previewModels, () -> { }, false, false);
|
|
|
|
+ previewModels = [];
|
|
|
|
+ }
|
|
|
|
+ if( !shiftPressed ) {
|
|
|
|
+ previewMeshesAround(ectx, ctx, worldPos);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if( K.isDown( K.MOUSE_LEFT) ) {
|
|
|
|
+ e.propagate = false;
|
|
|
|
+
|
|
|
|
+ if (sprayEnable) {
|
|
|
|
+ if( shiftPressed ) {
|
|
|
|
+ removeMeshesAround(ctx, worldPos);
|
|
|
|
+ } else {
|
|
|
|
+ if (currentConfig.density == 1) sprayEnable = false;
|
|
|
|
+ else addMeshes(ctx);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ lastSpray = Date.now().getTime();
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
function updateConfig() {
|
|
function updateConfig() {
|
|
@@ -694,16 +756,16 @@ class MeshSpray extends Object3D {
|
|
input.change();
|
|
input.change();
|
|
}
|
|
}
|
|
|
|
|
|
- sceneEditor.properties.element.find("#repeatMeshBtn").prop("checked", CONFIG.dontRepeatMesh);
|
|
|
|
|
|
+ sceneEditor.properties.element.find("#repeatMesh").prop("checked", CONFIG.dontRepeatMesh);
|
|
}
|
|
}
|
|
|
|
|
|
override function removeInstance(ctx : Context):Bool {
|
|
override function removeInstance(ctx : Context):Bool {
|
|
- reset();
|
|
|
|
|
|
+ removeInteractiveBrush();
|
|
return super.removeInstance(ctx);
|
|
return super.removeInstance(ctx);
|
|
}
|
|
}
|
|
override function setSelected( ctx : Context, b : Bool ) {
|
|
override function setSelected( ctx : Context, b : Bool ) {
|
|
if( !b ) {
|
|
if( !b ) {
|
|
- reset();
|
|
|
|
|
|
+ removeInteractiveBrush();
|
|
if( gBrushes != null ) {
|
|
if( gBrushes != null ) {
|
|
for (g in gBrushes) g.remove();
|
|
for (g in gBrushes) g.remove();
|
|
gBrushes = null;
|
|
gBrushes = null;
|
|
@@ -712,7 +774,7 @@ class MeshSpray extends Object3D {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
- function reset() {
|
|
|
|
|
|
+ function removeInteractiveBrush() {
|
|
if( interactive != null ) interactive.remove();
|
|
if( interactive != null ) interactive.remove();
|
|
if (previewModels != null && previewModels.length > 0) {
|
|
if (previewModels != null && previewModels.length > 0) {
|
|
sceneEditor.deleteElements(previewModels, () -> { }, false, false);
|
|
sceneEditor.deleteElements(previewModels, () -> { }, false, false);
|
|
@@ -777,7 +839,6 @@ class MeshSpray extends Object3D {
|
|
if (computedDensity == 1)
|
|
if (computedDensity == 1)
|
|
if (previewModels.length > 0) {
|
|
if (previewModels.length > 0) {
|
|
sceneEditor.deleteElements(previewModels, () -> { }, false);
|
|
sceneEditor.deleteElements(previewModels, () -> { }, false);
|
|
- sceneEditor.selectElements([this], Nothing);
|
|
|
|
previewModels = [];
|
|
previewModels = [];
|
|
}
|
|
}
|
|
lastPos = point;
|
|
lastPos = point;
|
|
@@ -879,14 +940,16 @@ class MeshSpray extends Object3D {
|
|
var fakeRadius = currentConfig.deleteRadius * currentConfig.deleteRadius;
|
|
var fakeRadius = currentConfig.deleteRadius * currentConfig.deleteRadius;
|
|
for (child in children) {
|
|
for (child in children) {
|
|
var model = child.to(hrt.prefab.Object3D);
|
|
var model = child.to(hrt.prefab.Object3D);
|
|
- if (distance(point2d.x, point2d.y, model.x, model.y) < fakeRadius) {
|
|
|
|
- childToRemove.push(child);
|
|
|
|
|
|
+ if (model != null) {
|
|
|
|
+ if (distance(point2d.x, point2d.y, model.x, model.y) < fakeRadius) {
|
|
|
|
+ childToRemove.push(child);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
}
|
|
}
|
|
if (childToRemove.length > 0) {
|
|
if (childToRemove.length > 0) {
|
|
wasEdited = true;
|
|
wasEdited = true;
|
|
sceneEditor.deleteElements(childToRemove, () -> { }, false);
|
|
sceneEditor.deleteElements(childToRemove, () -> { }, false);
|
|
- sceneEditor.selectElements([this], Nothing);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -995,6 +1058,19 @@ class MeshSpray extends Object3D {
|
|
return primitive;
|
|
return primitive;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ override function flatten<T:Prefab>( ?cl : Class<T>, ?arr: Array<T> ) : Array<T> {
|
|
|
|
+ if(arr == null)
|
|
|
|
+ arr = [];
|
|
|
|
+ if( cl == null )
|
|
|
|
+ arr.push(cast this);
|
|
|
|
+ else {
|
|
|
|
+ var i = to(cl);
|
|
|
|
+ if(i != null)
|
|
|
|
+ arr.push(i);
|
|
|
|
+ }
|
|
|
|
+ return arr;
|
|
|
|
+ }
|
|
|
|
+
|
|
static var _ = Library.register("meshSpray", MeshSpray);
|
|
static var _ = Library.register("meshSpray", MeshSpray);
|
|
|
|
|
|
}
|
|
}
|