move 'player.noclip' and 'player.flight' handlers to Lua

This commit is contained in:
MihailRis 2024-12-23 13:51:12 +03:00
parent 9164edf971
commit 3d33de502d
6 changed files with 58 additions and 43 deletions

View File

@ -23,30 +23,4 @@ function on_hud_open()
local velocity = vec3.add(throw_force, vec3.add(pvel, DROP_INIT_VEL))
drop.rigidbody:set_vel(velocity)
end)
input.add_callback("player.pick", function ()
if hud.is_paused() or hud.is_inventory_open() then
return
end
local pid = hud.get_player()
local x, y, z = player.get_selected_block(pid)
if x == nil then
return
end
local id = block.get_picking_item(block.get(x, y, z))
local inv, cur_slot = player.get_inventory(pid)
local slot = inventory.find_by_item(inv, id, 0, 9)
if slot then
player.set_selected_slot(pid, slot)
return
end
if not rules.get("allow-content-access") then
return
end
slot = inventory.find_by_item(inv, 0, 0, 9)
if slot then
cur_slot = slot
end
player.set_selected_slot(pid, cur_slot)
inventory.set(inv, cur_slot, id, 1)
end)
end

58
res/scripts/hud.lua Normal file
View File

@ -0,0 +1,58 @@
function on_hud_open()
input.add_callback("player.pick", function ()
if hud.is_paused() or hud.is_inventory_open() then
return
end
local pid = hud.get_player()
local x, y, z = player.get_selected_block(pid)
if x == nil then
return
end
local id = block.get_picking_item(block.get(x, y, z))
local inv, cur_slot = player.get_inventory(pid)
local slot = inventory.find_by_item(inv, id, 0, 9)
if slot then
player.set_selected_slot(pid, slot)
return
end
if not rules.get("allow-content-access") then
return
end
slot = inventory.find_by_item(inv, 0, 0, 9)
if slot then
cur_slot = slot
end
player.set_selected_slot(pid, cur_slot)
inventory.set(inv, cur_slot, id, 1)
end)
input.add_callback("player.noclip", function ()
if hud.is_paused() or hud.is_inventory_open() then
return
end
local pid = hud.get_player()
if player.is_noclip(pid) then
player.set_flight(pid, false)
player.set_noclip(pid, false)
else
player.set_flight(pid, true)
player.set_noclip(pid, true)
end
end)
input.add_callback("player.flight", function ()
if hud.is_paused() or hud.is_inventory_open() then
return
end
local pid = hud.get_player()
if player.is_noclip(pid) then
return
end
if player.is_flight(pid) then
player.set_flight(pid, false)
else
player.set_flight(pid, true)
player.set_vel(pid, 0, 1, 0)
end
end)
end

View File

@ -21,8 +21,6 @@ inline const std::string BIND_MOVE_CROUCH = "movement.crouch";
inline const std::string BIND_MOVE_CHEAT = "movement.cheat";
inline const std::string BIND_CAM_ZOOM = "camera.zoom";
inline const std::string BIND_CAM_MODE = "camera.mode";
inline const std::string BIND_PLAYER_NOCLIP = "player.noclip";
inline const std::string BIND_PLAYER_FLIGHT = "player.flight";
inline const std::string BIND_PLAYER_ATTACK = "player.attack";
inline const std::string BIND_PLAYER_DESTROY = "player.destroy";
inline const std::string BIND_PLAYER_BUILD = "player.build";

View File

@ -288,8 +288,6 @@ void PlayerController::updateKeyboard() {
input.jump = Events::active(BIND_MOVE_JUMP);
input.zoom = Events::active(BIND_CAM_ZOOM);
input.cameraMode = Events::jactive(BIND_CAM_MODE);
input.noclip = Events::jactive(BIND_PLAYER_NOCLIP);
input.flight = Events::jactive(BIND_PLAYER_FLIGHT);
}
void PlayerController::resetKeyboard() {

View File

@ -135,18 +135,7 @@ void Player::updateInput(PlayerInput& input, float delta) {
hitbox->velocity.y = JUMP_FORCE;
}
if ((input.flight && !noclip) || (input.noclip && flight == noclip)) {
flight = !flight;
if (flight) {
hitbox->velocity.y += 1.0f;
}
}
hitbox->type = noclip ? BodyType::KINEMATIC : BodyType::DYNAMIC;
if (input.noclip) {
noclip = !noclip;
}
input.noclip = false;
input.flight = false;
}
void Player::updateSelectedEntity() {

View File

@ -27,8 +27,6 @@ struct PlayerInput {
bool shift : 1;
bool cheat : 1;
bool jump : 1;
bool noclip : 1;
bool flight : 1;
};
struct CursorSelection {