UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

99 lines (87 loc) 2.17 kB
import {Vector2} from 'three'; import {Color} from 'three'; import {BaseNodeType} from '../_Base'; import {NodeEvent} from '../../poly/NodeEvent'; import {isNumber} from '../../../core/Type'; export interface NodeUIDataJson { x: number; y: number; comment?: string; } export class UIData { private _position: Vector2 = new Vector2(); protected _width: number = 50; // private _border_radius: number = 3; private _color: Color = new Color(0.75, 0.75, 0.75); // private _icon: string | null = null; private _layoutVertical: boolean = true; private _comment: string | undefined; private _json: NodeUIDataJson = { x: 0, y: 0, }; constructor(private node: BaseNodeType, x: number = 0, y: number = 0) { this._position.x = x; this._position.y = y; } dispose() { this._comment = undefined; } setComment(comment: string | undefined) { this._comment = comment; this.node.emit(NodeEvent.UI_DATA_COMMENT_UPDATED); } comment(): string | undefined { return this._comment; } setColor(color: Color) { this._color = color; } color() { return this._color; } // setIcon(icon: string) { // this._icon = icon; // } // icon() { // return this._icon; // } setLayoutHorizontal() { this._layoutVertical = false; } isLayoutVertical() { return this._layoutVertical; } copy(ui_data: UIData) { this._position.copy(ui_data.position()); this._color.copy(ui_data.color()); } position() { return this._position; } setPosition(newPosition: Vector2 | number, y: number = 0) { if (isNumber(newPosition)) { const x = newPosition; this._position.set(x, y); } else { this._position.copy(newPosition); } this.node.emit(NodeEvent.UI_DATA_POSITION_UPDATED); return this; } translate(offset: Vector2, snap: boolean = false) { this._position.add(offset); if (snap) { this._position.x = Math.round(this._position.x); this._position.y = Math.round(this._position.y); } this.node.emit(NodeEvent.UI_DATA_POSITION_UPDATED); return this; } toJSON(): NodeUIDataJson { this._json.x = this._position.x; this._json.y = this._position.y; this._json.comment = this._comment; return this._json; } }