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
|
local flight = false
|
||||||
|
|
||||||
function jump(multiplier)
|
function jump(multiplier)
|
||||||
if body:is_grounded() then
|
local vel = body:get_vel()
|
||||||
local vel = body:get_vel()
|
body:set_vel(
|
||||||
body:set_vel(
|
vec3.add(vel, {0, props.jump_force * (multiplier or 1.0), 0}, vel))
|
||||||
vec3.add(vel, {0, props.jump_force * (multiplier or 1.0), 0}, vel))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function elevate(speed, delta, vel)
|
function move_vertical(speed, vel)
|
||||||
vel = vel or body:get_vel()
|
vel = vel or body:get_vel()
|
||||||
body:set_vel(
|
vel[2] = vel[2] * 0.2 + speed * 0.8
|
||||||
vec3.add(vel, {0, speed * delta * props.movement_speed, 0}, vel))
|
body:set_vel(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))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function move_horizontal(speed, dir, vel)
|
local function move_horizontal(speed, dir, vel)
|
||||||
vel = vel or body:get_vel()
|
vel = vel or body:get_vel()
|
||||||
if vec3.length(dir) > 0.0 then
|
if vec2.length(dir) > 0.0 then
|
||||||
vec3.normalize(dir, dir)
|
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(
|
if magnitude <= 1e-4 or (magnitude < speed or vec2.dot(
|
||||||
{vel[1] / magnitude, 0.0, vel[3] / magnitude}, dir) < 0.9)
|
{vel[1] / magnitude, vel[3] / magnitude}, dir) < 0.9)
|
||||||
then
|
then
|
||||||
vel[1] = vel[1] + dir[1] * speed * 0.8
|
vel[1] = vel[1] * 0.2 + dir[1] * speed * 0.8
|
||||||
vel[3] = vel[3] + dir[3] * speed * 0.8
|
vel[3] = vel[3] * 0.2 + dir[2] * speed * 0.8
|
||||||
end
|
end
|
||||||
magnitude = vec3.length({vel[1], 0, vel[3]})
|
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[1] = vel[1] / magnitude * speed
|
||||||
vel[3] = vel[3] / magnitude * speed
|
vel[3] = vel[3] / magnitude * speed
|
||||||
end
|
end
|
||||||
@ -128,7 +120,8 @@ function look_at(point, change_dir)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function follow_waypoints(pathfinding)
|
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()
|
local waypoint = pathfinding.next_waypoint()
|
||||||
if not waypoint then
|
if not waypoint then
|
||||||
return
|
return
|
||||||
@ -142,7 +135,7 @@ function follow_waypoints(pathfinding)
|
|||||||
local upper = dir[2] > 0
|
local upper = dir[2] > 0
|
||||||
dir[2] = 0.0
|
dir[2] = 0.0
|
||||||
vec3.normalize(dir, dir)
|
vec3.normalize(dir, dir)
|
||||||
move_horizontal(speed, dir, vel)
|
move_horizontal(speed, {dir[1], dir[3]}, vel)
|
||||||
if upper and body:is_grounded() then
|
if upper and body:is_grounded() then
|
||||||
jump(1.0)
|
jump(1.0)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -37,16 +37,16 @@ local function process_player_inputs(pid, delta)
|
|||||||
if isleft then vec3.sub(dir, right, dir) end
|
if isleft then vec3.sub(dir, right, dir) end
|
||||||
|
|
||||||
if vec3.length(dir) > 0.0 then
|
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
|
end
|
||||||
|
|
||||||
if mob.is_flight() then
|
if mob.is_flight() then
|
||||||
if isjump then
|
if isjump then
|
||||||
mob.elevate(speed * 24, delta)
|
mob.move_vertical(speed * 8)
|
||||||
elseif iscrouch then
|
elseif iscrouch then
|
||||||
mob.lower(speed * 24, delta)
|
mob.move_vertical(-speed * 8)
|
||||||
end
|
end
|
||||||
elseif isjump then
|
elseif body:is_grounded() and isjump then
|
||||||
mob.jump()
|
mob.jump()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user