proof of concept key bindings
This commit is contained in:
parent
a5ddd78299
commit
45d59d0bbc
4 changed files with 130 additions and 22 deletions
123
src/mesh/api.js
123
src/mesh/api.js
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue