Add optional Lua scripting module, examples, and validation
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
local Player = faset.behavior {
|
||||
id = "example.lua_player",
|
||||
version = 1,
|
||||
name = "Lua Player",
|
||||
fields = {
|
||||
move_speed = {
|
||||
name = "Move speed", type = "number", default = 5,
|
||||
min = 0, max = 30, units = "m/s"
|
||||
},
|
||||
jump_speed = {
|
||||
name = "Jump speed", type = "number", default = 7,
|
||||
min = 0, max = 20, units = "m/s"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Player:on_start()
|
||||
self.state.origin = self.entity:transform()
|
||||
self.state.jumps = 0
|
||||
faset.log("Lua player ready: A/D move, Space jump, E reset")
|
||||
end
|
||||
|
||||
function Player:fixed_update(delta)
|
||||
local input = faset.input()
|
||||
if input.interact_pressed then
|
||||
self.entity:teleport(self.state.origin)
|
||||
self.entity:set_velocity { x = 0, y = 0, z = 0 }
|
||||
self.state.jumps = 0
|
||||
return
|
||||
end
|
||||
|
||||
local velocity = self.entity:velocity()
|
||||
velocity.x = input.horizontal * self.fields.move_speed
|
||||
if input.jump_pressed and self.entity:is_grounded() then
|
||||
velocity.y = self.fields.jump_speed
|
||||
self.state.jumps = self.state.jumps + 1
|
||||
faset.log("Jump", self.state.jumps)
|
||||
end
|
||||
self.entity:set_velocity(velocity)
|
||||
|
||||
if self.entity:transform().position.y < -10 then
|
||||
self.entity:teleport(self.state.origin)
|
||||
self.entity:set_velocity { x = 0, y = 0, z = 0 }
|
||||
end
|
||||
end
|
||||
|
||||
return Player
|
||||
Reference in New Issue
Block a user