update standard components

This commit is contained in:
MihailRis 2025-09-13 22:46:45 +03:00
parent df9ea32848
commit 2d29b8c46c
2 changed files with 21 additions and 28 deletions

View File

@ -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

View File

@ -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