proof of concept key bindings

This commit is contained in:
Stewart Allen 2021-12-31 14:12:42 -05:00
commit 45d59d0bbc
4 changed files with 130 additions and 22 deletions

View file

@ -19,35 +19,110 @@ if (mesh.api) return;
let space = moto.Space;
let groups = [];
let selected = [];
let selection = {
list() {
return selected.slice()
},
set(objects) {
selected = objects;
},
add(object) {
selected.addOnce(object);
},
remove(object) {
selected.remove(object);
},
clear() {
selected = [];
},
move(dx = 0, dy = 0, dz = 0) {
for (let s of selected) {
s.move(dx, dy, dz);
}
return selection;
},
rotate(dx = 0, dy = 0, dz = 0) {
for (let s of selected) {
let { x, y, z } = s.rotation();
s.rotation(x + dx, y + dy, z + dz);
}
return selection;
},
scale(dx = 0, dy = 0, dz = 0) {
for (let s of selected) {
let { x, y, z } = s.scale();
s.scale(x + dx, y + dy, z + dz);
}
return selection;
},
floor() {
for (let s of selected) {
s.floor(...arguments);
}
return selection;
},
centerXY() {
for (let s of selected) {
s.floor(...arguments);
}
return selection;
},
home() {
return selection.centerXY().floor();
}
};
let group = {
// @returns {MeshGroup[]}
list() {
return groups.slice();
},
// @param group {MeshModel[]}
new: (models) => {
return group.add(new mesh.group(models));
},
// @param group {MeshGroup}
add: (group) => {
groups.addOnce(group);
space.world.add(group.group);
space.update();
selection.set([group]);
return group;
},
// @param group {MeshGroup}
remove: (group) => {
groups.remove(group);
space.world.remove(group.group);
space.update();
}
};
let api = mesh.api = {
group: {
// @returns {MeshGroup[]}
list() {
return groups.slice();
},
// @param group {MeshModel[]}
new: (models) => {
api.group.add(new mesh.group(models));
},
// @param group {MeshGroup}
add: (group) => {
groups.addOnce(group);
space.world.add(group.group);
space.update();
},
// @param group {MeshGroup}
remove: (group) => {
groups.remove(group);
space.world.remove(group.group);
space.update();
clear: () => {
for (let group of group.list()) {
group.remove(group);
}
},
selection,
group,
model: {
// @returns {MeshModel[]}
list() {