Skip to content

Commit

Permalink
[scene-editor] fix broken ordering when duplicating prefabs
Browse files Browse the repository at this point in the history
  • Loading branch information
EspeuteClement committed Apr 25, 2024
1 parent fbdfec6 commit 5c8d815
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 6 deletions.
11 changes: 5 additions & 6 deletions hide/comp/SceneEditor.hx
Original file line number Diff line number Diff line change
Expand Up @@ -3786,13 +3786,12 @@ class SceneEditor {
var undoes = [];
var newElements = [];
var lastElem = elements[elements.length-1];
var lastIndex = lastElem.parent.children.indexOf(lastElem) + 1;
for(elt in elements) {
@:pirvateAccess var clone = hrt.prefab.Prefab.createFromDynamic(haxe.Json.parse(haxe.Json.stringify(elt.serialize())), elt.parent, elt.parent.shared);
var index = lastIndex+1;
elt.parent.children.remove(clone);
var lastIndex = lastElem.parent.children.indexOf(lastElem);
for(i => elt in elements) {
@:pirvateAccess var clone = hrt.prefab.Prefab.createFromDynamic(haxe.Json.parse(haxe.Json.stringify(elt.serialize())), null, elt.parent.shared);
var index = lastIndex+1+i;
elt.parent.children.insert(index, clone);

@:bypassAccessor clone.parent = elt.parent;
clone.shared.current2d = elt.parent.findFirstLocal2d();
clone.shared.current3d = elt.parent.findFirstLocal3d();
clone.make();
Expand Down
44 changes: 44 additions & 0 deletions hrt/prefab/l3d/Spline.hx
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,50 @@ class Spline extends Object3D {
return result;
}

function getClosestPointOnSpline(p : h3d.col.Point, ?out: h3d.col.Point) : h3d.col.Point {
var out = out ?? new h3d.col.Point();

if( data == null )
computeSplineData();

var closestSq = hxd.Math.POSITIVE_INFINITY;

var c = p;

for (i in 0...data.samples.length-1) {
var a = data.samples[i].pos;
var b = data.samples[i+1].pos;
var d = inline new h3d.col.Point();

var ab = inline b.sub(a);
var ca = inline c.sub(a);
var t = inline ca.dot(ab);

if (t <= 0.0) {
t = 0.0;
d.load(a);
} else {
var denom = ab.dot(ab);
if (t >= denom) {
t = 1.0;
d.load(b);
} else {
t /= denom;
d.load(inline a.add(inline ab.scaled(t)));
}
}

var cd = inline d.sub(c);
var lenSq = cd.lengthSq();
if (lenSq < closestSq) {
out.load(d);
closestSq = lenSq;
}
}

return out;
}

// Return the point on the curve between p1 and p2 at t, 0 <= t <= 1
inline function getPointBetween( t : Float, p1 : SplinePoint, p2 : SplinePoint ) : h3d.col.Point {
return switch (shape) {
Expand Down

0 comments on commit 5c8d815

Please sign in to comment.