lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
70 lines • 2.46 kB
JavaScript
import { mouseDefaults, mouseSchema, SimpleMouseEvent } from "../interface/IMouse";
import store from "@lincode/reactivity";
import { onBeforeRender } from "../events/onBeforeRender";
import { getWorldPlayComputed } from "../states/useWorldPlayComputed";
import Appendable from "./core/Appendable";
import { onMouseDown } from "../events/onMouseDown";
import { onMouseUp } from "../events/onMouseUp";
import { onMouseRightClick } from "../events/onMouseRightClick";
import { onMouseClick } from "../events/onMouseClick";
import { onMouseMove } from "../events/onMouseMove";
class Mouse extends Appendable {
static componentName = "mouse";
static defaults = mouseDefaults;
static schema = mouseSchema;
onClick;
onRightClick;
onMouseMove;
onMouseDown;
onMouseUp;
onMousePress;
constructor() {
super();
let currentPayload = new SimpleMouseEvent(0, 0, 0, 0);
const [setDown, getDown] = store(false);
this.createEffect(() => {
const { onMousePress } = this;
if (!getDown() || !onMousePress)
return;
const handle = onBeforeRender(() => onMousePress(currentPayload));
return () => {
handle.cancel();
};
}, [getDown]);
this.createEffect(() => {
if (!getWorldPlayComputed())
return;
const handle0 = onMouseMove((e) => {
this.onMouseMove?.(e);
currentPayload = e;
});
const handle1 = onMouseClick((e) => {
this.onClick?.(e);
currentPayload = e;
});
const handle2 = onMouseRightClick((e) => {
this.onRightClick?.(e);
currentPayload = e;
});
const handle3 = onMouseDown((e) => {
this.onMouseDown?.(e);
currentPayload = e;
setDown(true);
});
const handle4 = onMouseUp((e) => {
this.onMouseUp?.(e);
currentPayload = e;
setDown(false);
});
return () => {
handle0.cancel();
handle1.cancel();
handle2.cancel();
handle3.cancel();
handle4.cancel();
};
}, [getWorldPlayComputed]);
}
}
export default Mouse;
//# sourceMappingURL=Mouse.js.map