forked from LeenkxTeam/LNXSDK
Repe [T3DU] Update - 31f26d171bba0355ce2a77031e3aad4c64dbc7e9
This commit is contained in:
73
leenkx/Sources/leenkx/logicnode/ConvexBreakNode.hx
Normal file
73
leenkx/Sources/leenkx/logicnode/ConvexBreakNode.hx
Normal file
@ -0,0 +1,73 @@
|
||||
package leenkx.logicnode;
|
||||
|
||||
import iron.object.Object;
|
||||
import iron.object.MeshObject;
|
||||
import leenkx.object.BreakerExtension;
|
||||
import iron.math.Vec4;
|
||||
|
||||
class ConvexBreakNode extends LogicNode {
|
||||
|
||||
public var property0: String;
|
||||
|
||||
var objects: Array<Object>;
|
||||
|
||||
public function new(tree: LogicTree) {
|
||||
super(tree);
|
||||
}
|
||||
|
||||
override function run(from: Int) {
|
||||
objects = [];
|
||||
var object: Object = inputs[1].get();
|
||||
|
||||
var breaker: ConvexBreaker = new ConvexBreaker(0.1);
|
||||
@:privateAccess breaker.scaleUV = inputs[3].get();
|
||||
@:privateAccess breaker.flatShading = inputs[4].get();
|
||||
|
||||
breaker.initBreakableObject(cast object, 0, 0, new Vec4(), new Vec4(), true);
|
||||
|
||||
var debris: Array<MeshObject> = [];
|
||||
|
||||
if (property0 == 'Plane')
|
||||
debris = breaker.subdivideByPlane(cast object, inputs[3].get(), inputs[2].get());
|
||||
else
|
||||
debris = breaker.subdivideByImpact(cast object, inputs[2].get(), inputs[3].get(), 1, 1);
|
||||
|
||||
for (o in debris) {
|
||||
var obj: Object = cast o;
|
||||
obj.name = o.data.raw.name;
|
||||
|
||||
var dims = new kha.arrays.Float32Array(3);
|
||||
dims[0] = o.data.geom.aabb.x;
|
||||
dims[1] = o.data.geom.aabb.y;
|
||||
dims[2] = o.data.geom.aabb.z;
|
||||
|
||||
obj.raw = cast {
|
||||
type: "mesh_object",
|
||||
name: obj.name,
|
||||
data_ref: obj.name,
|
||||
dimensions: dims
|
||||
};
|
||||
|
||||
obj.addTrait(new leenkx.trait.internal.UniformsManager());
|
||||
|
||||
var ud = breaker.userDataMap.get(cast o);
|
||||
if (ud == null) continue;
|
||||
objects.push(obj);
|
||||
}
|
||||
|
||||
if (objects.length > 1){
|
||||
for (obj in objects)
|
||||
obj.setParent(iron.Scene.active.root);
|
||||
object.remove();
|
||||
runOutput(1);
|
||||
}
|
||||
else
|
||||
runOutput(2);
|
||||
|
||||
runOutput(0);
|
||||
}
|
||||
|
||||
override function get(from: Int): Dynamic {
|
||||
return objects;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user