simplify input handling

This commit is contained in:
2024-11-07 10:05:36 -06:00
parent 7563cb5d38
commit 413812b249
3 changed files with 30 additions and 23 deletions

View File

@@ -340,16 +340,12 @@ var Player = {
},
raw_input(cmd, state, ...args) {
this.pawns = this.pawns.filter(x => x.inputs);
for (var pawn of this.pawns.reversed()) {
if (!pawn.inputs) {
console.error(`pawn no longer has inputs object.`);
continue;
}
var inputs = pawn.inputs;
var block = pawn.inputs.block;
if (!pawn.inputs[cmd]) {
if (pawn.inputs.block) return;
if (!inputs[cmd]) {
if (inputs.block) return;
continue;
}
@@ -357,29 +353,27 @@ var Player = {
switch (state) {
case "pressed":
fn = pawn.inputs[cmd];
fn = inputs[cmd];
break;
case "rep":
fn = pawn.inputs[cmd].rep ? pawn.inputs[cmd] : null;
fn = inputs[cmd].rep ? inputs[cmd] : null;
break;
case "released":
fn = pawn.inputs[cmd].released;
fn = inputs[cmd].released;
break;
case "down":
if (typeof pawn.inputs[cmd].down === "function") fn = pawn.inputs[cmd].down;
else if (pawn.inputs[cmd].down) fn = pawn.inputs[cmd];
if (typeof inputs[cmd].down === "function") fn = inputs[cmd].down;
else if (inputs[cmd].down) fn = inputs[cmd];
}
if (typeof fn === "function") fn.call(pawn, ...args);
if (!pawn.inputs)
if (block) return;
else continue;
if (state === "released") pawn.inputs.release_post?.call(pawn);
if (!pawn.inputs.fallthru) return;
if (pawn.inputs.block) return;
var consumed = false;
if (typeof fn === "function") {
fn.call(pawn, ...args);
consumed = true;
}
if (state === "released") inputs.release_post?.call(pawn);
if (inputs.block) return;
if (consumed) return;
}
},

View File

@@ -217,6 +217,8 @@ clay.button = function(str, action, config = {})
config.action = action;
}
var hovered = undefined;
layout.newframe = function() { hovered = undefined; }
layout.draw_commands = function(cmds, pos = [0,0])
{
var mousepos = prosperon.camera.screen2hud(input.mouse.screenpos());
@@ -229,6 +231,7 @@ layout.draw_commands = function(cmds, pos = [0,0])
if (config.hovered && geometry.rect_point_inside(cmd.boundingbox, mousepos)) {
config.hovered.__proto__ = config;
config = config.hovered;
hovered = config;
}
if (config.background_image)
@@ -255,5 +258,13 @@ layout.draw_debug = function(cmds, pos = [0,0])
}
}
layout.inputs = {};
layout.inputs.lm = function()
{
if (hovered && hovered.action) hovered.action();
}
layout.toString = _ => "layout"
return layout;

View File

@@ -1438,6 +1438,7 @@ prosperon.render = function () {
};
prosperon.process = function process() {
layout.newframe();
profile.report("frame");
var dt = profile.secs(profile.now()) - frame_t;
frame_t = profile.secs(profile.now());
@@ -1493,6 +1494,7 @@ prosperon.process = function process() {
profile.endreport('frame');
profile.capture_data();
};
return { render };