prendy
Version:
Make games with prerendered backdrops using babylonjs and repond
55 lines (54 loc) • 2 kB
JavaScript
import { onNextTick, setState } from "repond";
import { addSubEvents, makeEventTypes, setLiveEventState } from "repond-events";
import { getStateAtPath } from "repond";
export const basicEvents = makeEventTypes(({ event }) => ({
wait: event({
run: ({ time }, { runMode, liveId, elapsedTime }) => {
if (runMode === "start")
setLiveEventState(liveId, { goalEndTime: elapsedTime + time * 1000 });
},
params: { time: 1 },
isParallel: false,
}),
log: event({
run: ({ text }, { runMode, liveId, elapsedTime }) => {
console.log("log", { text });
// if (runMode === "add") console.log("log added");
if (runMode === "start")
console.log(text);
},
params: { text: "" },
isParallel: false,
}),
setState: event({
run: ({ state }, { runMode, isFirstStart }) => {
if (isFirstStart)
onNextTick(() => setState(state));
},
params: { state: {} },
isParallel: false,
}),
runEventsIf: event({
run: async ({ events, elseEvents, state: statePath }, { runMode, liveId }) => {
if (runMode !== "start")
return;
if (!statePath[0])
return console.error("runEventsIf: statePath[0] is empty");
let shouldRunEvents = getStateAtPath(statePath);
// if (shouldRunEvents ===)
if (shouldRunEvents) {
if (events)
addSubEvents(liveId, events);
}
else {
if (elseEvents)
addSubEvents(liveId, elseEvents);
}
},
params: {
state: ["", "", ""],
events: undefined, // NOTE can't use EventTuple because typescript will go into itself
elseEvents: undefined, // NOTE can't use EventTuple because typescript will go into itself
},
}),
}));