From 2d29b8c46ce3522649c270f9d347ffbab6c7f774 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 13 Sep 2025 22:46:45 +0300 Subject: [PATCH] update standard components --- res/scripts/components/mob.lua | 41 +++++++++++++------------------ res/scripts/components/player.lua | 8 +++--- 2 files changed, 21 insertions(+), 28 deletions(-) diff --git a/res/scripts/components/mob.lua b/res/scripts/components/mob.lua index 4086572c..422a8d33 100644 --- a/res/scripts/components/mob.lua +++ b/res/scripts/components/mob.lua @@ -44,40 +44,32 @@ local dir = mat4.mul(tsf:get_rot(), {0, 0, -1}) local flight = false function jump(multiplier) - if body:is_grounded() then - local vel = body:get_vel() - body:set_vel( - vec3.add(vel, {0, props.jump_force * (multiplier or 1.0), 0}, vel)) - end + local vel = body:get_vel() + body:set_vel( + vec3.add(vel, {0, props.jump_force * (multiplier or 1.0), 0}, vel)) end -function elevate(speed, delta, vel) +function move_vertical(speed, vel) vel = vel or body:get_vel() - body:set_vel( - vec3.add(vel, {0, speed * delta * props.movement_speed, 0}, vel)) -end - -function lower(speed, delta, vel) - vel = vel or body:get_vel() - body:set_vel( - vec3.add(vel, {0, -speed * delta * props.movement_speed, 0}, vel)) + vel[2] = vel[2] * 0.2 + speed * 0.8 + body:set_vel(vel) end local function move_horizontal(speed, dir, vel) vel = vel or body:get_vel() - if vec3.length(dir) > 0.0 then - vec3.normalize(dir, dir) + if vec2.length(dir) > 0.0 then + vec2.normalize(dir, dir) - local magnitude = vec3.length({vel[1], 0, vel[3]}) + local magnitude = vec2.length({vel[1], vel[3]}) - if magnitude <= 1e-4 or (magnitude < speed or vec3.dot( - {vel[1] / magnitude, 0.0, vel[3] / magnitude}, dir) < 0.9) + if magnitude <= 1e-4 or (magnitude < speed or vec2.dot( + {vel[1] / magnitude, vel[3] / magnitude}, dir) < 0.9) then - vel[1] = vel[1] + dir[1] * speed * 0.8 - vel[3] = vel[3] + dir[3] * speed * 0.8 + vel[1] = vel[1] * 0.2 + dir[1] * speed * 0.8 + vel[3] = vel[3] * 0.2 + dir[2] * speed * 0.8 end magnitude = vec3.length({vel[1], 0, vel[3]}) - if vec3.dot({vel[1] / magnitude, 0.0, vel[3] / magnitude}, dir) > 0.5 then + if vec2.dot({vel[1] / magnitude, vel[3] / magnitude}, dir) > 0.5 then vel[1] = vel[1] / magnitude * speed vel[3] = vel[3] / magnitude * speed end @@ -128,7 +120,8 @@ function look_at(point, change_dir) end function follow_waypoints(pathfinding) - local pos = tsf:get_pos() + pathfinding = pathfinding or entity:require_component("core:pathfinding") + local pos = tsf:get_pos() local waypoint = pathfinding.next_waypoint() if not waypoint then return @@ -142,7 +135,7 @@ function follow_waypoints(pathfinding) local upper = dir[2] > 0 dir[2] = 0.0 vec3.normalize(dir, dir) - move_horizontal(speed, dir, vel) + move_horizontal(speed, {dir[1], dir[3]}, vel) if upper and body:is_grounded() then jump(1.0) end diff --git a/res/scripts/components/player.lua b/res/scripts/components/player.lua index 1f3b5797..585c2b81 100644 --- a/res/scripts/components/player.lua +++ b/res/scripts/components/player.lua @@ -37,16 +37,16 @@ local function process_player_inputs(pid, delta) if isleft then vec3.sub(dir, right, dir) end if vec3.length(dir) > 0.0 then - mob.go(dir, speed, issprint, iscrouch, vel) + mob.go({dir[1], dir[3]}, speed, issprint, iscrouch, vel) end if mob.is_flight() then if isjump then - mob.elevate(speed * 24, delta) + mob.move_vertical(speed * 8) elseif iscrouch then - mob.lower(speed * 24, delta) + mob.move_vertical(-speed * 8) end - elseif isjump then + elseif body:is_grounded() and isjump then mob.jump() end end