first_person_player: finished first pass of movement and input
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import "system/first_person_player.modifier.api" for API, Modifier, APIGet, APISet, Wire, Fields, State, Op
|
||||
import "fpkit: system/first_person_player.modifier.api" for API, Modifier, APIGet, APISet, Wire, Fields, State, Op
|
||||
import "luxe: io" for IO
|
||||
import "luxe: assets" for Strings
|
||||
import "luxe: input" for Input
|
||||
@ -18,6 +18,13 @@ class Data {
|
||||
var jump_impulse: Num = 20
|
||||
var jump_grace_time: Num = 0.1
|
||||
|
||||
var event_forward: String = "up"
|
||||
var event_backward: String = "down"
|
||||
var event_strafe_left: String = "left"
|
||||
var event_strafe_right: String = "right"
|
||||
var event_sprint: String = "run"
|
||||
var event_jump: String = "jump"
|
||||
|
||||
#hidden
|
||||
var input_target: Float3 = [0, 0, 0]
|
||||
|
||||
@ -35,10 +42,10 @@ class Data {
|
||||
}
|
||||
|
||||
#api
|
||||
#display = "First-Person Player"
|
||||
#display = "FPKit: First-Person Player"
|
||||
#desc = "**Player movement system**. Takes the player's input and moves the player's character."
|
||||
#icon = "luxe: image/modifier/modifier.svg"
|
||||
class PlayerInput is API {
|
||||
class FirstPersonPlayer is API {
|
||||
set_movement_active(entity: Entity, active: Bool) {
|
||||
system(entity).movement_active = active
|
||||
}
|
||||
@ -60,14 +67,12 @@ class System is Modifier {
|
||||
_world = world
|
||||
}
|
||||
|
||||
#hidden
|
||||
attach(player: Entity, data: Data) {
|
||||
if (!Character3D.has(player)) return
|
||||
Character3D.set.speed(player, data.speed_walk)
|
||||
data.target_speed = data.speed_walk
|
||||
}
|
||||
|
||||
#hidden
|
||||
tick(delta: Num) {
|
||||
each {|player: Entity, data: Data|
|
||||
if (!Character3D.has(player)) return
|
||||
@ -87,6 +92,12 @@ class System is Modifier {
|
||||
data.is_grounded = true
|
||||
}
|
||||
|
||||
// Get player's movement input
|
||||
var fore = Input.event_active(data.event_forward, "game") ? -1 : 0
|
||||
var back = Input.event_active(data.event_backward, "game") ? 1 : 0
|
||||
var left = Input.event_active(data.event_strafe_left, "game") ? -1 : 0
|
||||
var right = Input.event_active(data.event_strafe_right, "game") ? 1 : 0
|
||||
|
||||
// Turn this into a Float3 of (Left/Right, 0, Forward/Backward) that is relative to the player's facing direction
|
||||
data.input_target = Math.normalized(Math.mult(Transform.local_dir_to_world(_camera, right + left, 0, fore + back), [1, 0, 1]))
|
||||
data.input_target = move_toward_vec(Character3D.get.input(player), data.input_target, data, delta * 6)
|
||||
|
||||
Reference in New Issue
Block a user