ami.js
Version:
<p align="center"> <img src="https://cloud.githubusercontent.com/assets/214063/23213764/78ade038-f90c-11e6-8208-4fcade5f3832.png" width="60%"> </p>
154 lines (123 loc) • 3.05 kB
JavaScript
/**
*
*/
export default class WidgetsBase extends THREE.Object3D {
constructor(container) {
// init THREE Object 3D
super();
// is widget enabled?
this._enabled = true;
// STATE, ENUM might be better
this._selected = false;
this._hovered = false;
this._active = false;
// thos._state = 'SELECTED';
this._colors = {
default: '#00B0FF',
active: '#FFEB3B',
hover: '#F50057',
select: '#76FF03',
};
this._color = this._colors.default;
this._dragged = false;
// can not call it visible because it conflicts with THREE.Object3D
this._displayed = true;
this._container = container;
}
initOffsets() {
const box = this._container.getBoundingClientRect();
const body = document.body;
const docEl = document.documentElement;
const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
const scrollLeft =
window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
const clientTop = docEl.clientTop || body.clientTop || 0;
const clientLeft = docEl.clientLeft || body.clientLeft || 0;
const top = box.top + scrollTop - clientTop;
const left = box.left + scrollLeft - clientLeft;
this._offsets = {
top: Math.round(top),
left: Math.round(left),
};
}
offsetChanged() {
this.initOffsets();
this.update();
}
getMouseOffsets(event, container) {
return {
x: (event.clientX - this._offsets.left) / container.offsetWidth * 2 - 1,
y: -((event.clientY - this._offsets.top) / container.offsetHeight)
* 2 + 1,
screenX: event.clientX - this._offsets.left,
screenY: event.clientY - this._offsets.top,
};
}
update() {
// to be overloaded
window.console.log('update() should be overloaded!');
}
free() {
this._container = null;
}
updateColor() {
if (this._active) {
this._color = this._colors.active;
} else if (this._hovered) {
this._color = this._colors.hover;
} else if (this._selected) {
this._color = this._colors.select;
} else {
this._color = this._colors.default;
}
}
get enabled() {
return this._enabled;
}
set enabled(enabled) {
this._enabled = enabled;
this.update();
}
get selected() {
return this._selected;
}
set selected(selected) {
this._selected = selected;
this.update();
}
get hovered() {
return this._hovered;
}
set hovered(hovered) {
this._hovered = hovered;
this.update();
}
get dragged() {
return this._dragged;
}
set dragged(dragged) {
this._dragged = dragged;
this.update();
}
get displayed() {
return this._displayed;
}
set displayed(displayed) {
this._displayed = displayed;
this.update();
}
get active() {
return this._active;
}
set active(active) {
this._active = active;
this.update();
}
get color() {
return this._color;
}
set color(color) {
this._color = color;
this.update();
}
}