Files
cell/scripts/loop.js

62 lines
1.3 KiB
JavaScript

// loop.js
var render = use('render') // The refactored file above
var layout = use('clay')
var input = use('input')
var emitter = use('emitter')
var os = use('os')
var event = use('event')
var imgui = use('imgui')
var waittime = 1/240
var last_frame_time = 0
var frame_t = 0
var fpses = []
var timescale = 1
// This was originally your 'imgui_fn' in render.js
function imgui_fn() {
imgui.newframe()
// ... your debug menus, etc. ...
prosperon.imgui()
}
// Pull your old 'render.process' logic here:
function step() {
var now = os.now()
var dt = now - last_frame_time
if (dt < waittime) os.sleep(waittime - dt)
last_frame_time = os.now()
dt = last_frame_time - frame_t
frame_t = last_frame_time
// Input & events
event.engine_input(e => prosperon.dispatch(e.type, e))
layout.newframe()
// Game logic
prosperon.appupdate(dt)
input.procdown()
emitter.update(dt * timescale)
os.update_timers(dt * timescale)
prosperon.update(dt * timescale)
// Scenes or “draw” hooks
// We point to whichever queue we want
render.setup_draw()
render.setup_hud()
// Show your UI or debug
imgui_fn()
// Now do the GPU present (calls gpupresent in render.js)
render._main.present()
tracy.end_frame()
}
// Return or export them so you can call from a main script
return {
step
}