Add presets (table/chair), object count, near_object condition, optimization locks placed objects and randomizes remaining
This commit is contained in:
@@ -26,9 +26,23 @@ export function optimizeWithNN(state: LayoutState, options: NNOptions = {}): { b
|
||||
let targetY = f.shape.y;
|
||||
const needsNearEntrance = f.conditions.some((c) => c.kind === 'near_entrance');
|
||||
const needsCenter = f.conditions.some((c) => c.kind === 'around_open_area');
|
||||
const needsNearObj = f.conditions.find((c) => c.kind === 'near_object');
|
||||
if (entrance && needsNearEntrance) {
|
||||
targetX = entrance.x + (Math.random() - 0.5) * 40;
|
||||
targetY = entrance.y + (Math.random() - 0.5) * 40;
|
||||
} else if (needsNearObj) {
|
||||
const tid = (needsNearObj.params as any)?.targetId;
|
||||
const t = tid ? candidate.furniture.find((x) => x.id === tid) : undefined;
|
||||
if (t) {
|
||||
targetX = t.shape.x + t.shape.width / 2 - f.shape.width / 2 + (Math.random() - 0.5) * 30;
|
||||
targetY = t.shape.y + t.shape.height / 2 - f.shape.height / 2 + (Math.random() - 0.5) * 30;
|
||||
} else if (needsCenter) {
|
||||
targetX = centerX - f.shape.width / 2 + (Math.random() - 0.5) * 60;
|
||||
targetY = centerY - f.shape.height / 2 + (Math.random() - 0.5) * 60;
|
||||
} else {
|
||||
targetX = Math.random() * (candidate.room.width - f.shape.width);
|
||||
targetY = Math.random() * (candidate.room.height - f.shape.height);
|
||||
}
|
||||
} else if (needsCenter) {
|
||||
targetX = centerX - f.shape.width / 2 + (Math.random() - 0.5) * 60;
|
||||
targetY = centerY - f.shape.height / 2 + (Math.random() - 0.5) * 60;
|
||||
|
||||
Reference in New Issue
Block a user