update standard components
This commit is contained in:
parent
df9ea32848
commit
2d29b8c46c
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user