improcket/js/gui/element.mjs
2018-03-05 22:29:35 +00:00

53 lines
1.1 KiB
JavaScript

import {Rect} from './misc.mjs';
const defaultOptions = {
draw: true, // Whether the element itself will be rendered.
drawChildren: true // Whether children will be rendered.
}
export default class GuiElement extends Rect {
constructor(x, y, w, h, options = {}) {
super(x, y, w, h);
this.children = new Set();
this.parent = null;
this.type = 'element';
this.options = Object.assign({}, defaultOptions, options);
}
tickElement() {
this.tickMouse();
this.tick();
this.children.forEach(c => c.tickElement());
}
tick() {
}
append(element) {
this.children.add(element);
element.parent = this;
element.x += this.x;
element.y += this.y;
}
clear() {
this.children.clear();
}
// Code should be self-describing, comments are for fucking about.
// - Albert Einstein
posRelative({x = null, xc = 0, y = null, yc = 0, w = null, h = null}) {
if (x !== null) {
this.x = (this.parent.w * x) - (this.w * xc) + this.parent.x;
}
if (y !== null)
this.y = (this.parent.h * y) - (this.h * yc) + this.parent.y;
if (w !== null)
this.w = this.parent.w * w;
if (h !== null)
this.h = this.parent.h * h;
}
}