Greetings all,
I am very new to using the Leadwerks engine and I am having trouble getting my player entity to move across the terrain I've created. The FPSPlayer.lua script works in this regard, but it was not compatible with what I needed for this project, so I had to write my own character controller script. Everything I've tried results in either the player entity falling through the terrain upon start or moving along the origin plane and passing through the terrain instead of climbing/colliding with it. I have dug through the FPSPlayer.lua script trying to find where this functionality was implemented, but I am unable to find it. Any help would be greatly appreciated.
Here is my script"
Script.moveSpeed = 4.0 --float "Movement Speed"
Script.mouseTurn = 6.0 --float "Mouse Rotation Speed"
function Script:Start()
-- Create Camera
self.camera = Camera:Create()
self.pivot = Pivot:Create()
self.camera:SetParent(self.pivot)
self.camera:Move(0, 2, -2)
self.camera:SetRotation(25, 0, 0)
self.entity:SetKeyValue("type","player")
end
-- Adjust the camera orientation relative to the player
function Script:UpdateCamera()
self.pivot:SetPosition(self.entity:GetPosition())
self.pivot:SetRotation(self.pivot:GetRotation().x, self.pivot:GetRotation().y, 0)
end
function Script:UpdateWorld()
local MoveX = 0
local MoveZ = 0
if window:KeyDown(Key.W) then
self.entity:SetRotation(0, self.pivot:GetRotation().y, 0)
MoveZ = MoveZ + 1
end
if window:KeyDown(Key.S) then
self.entity:SetRotation(0, self.pivot:GetRotation().y, 0)
MoveZ = MoveZ - 1
end
if window:KeyDown(Key.D) then MoveX = MoveX + 1 end
if window:KeyDown(Key.A) then MoveX = MoveX - 1 end
self.entity:Move(MoveX * self.moveSpeed / 2, 0, MoveZ * self.moveSpeed, false)
if window:MouseDown(2) then
if window:GetMousePosition().x > self.lastMouseX then self.pivot:Turn(0, self.mouseTurn, 0) end
if window:GetMousePosition().x < self.lastMouseX then self.pivot:Turn(0, -self.mouseTurn, 0) end
if window:GetMousePosition().y > self.lastMouseY then self.pivot:Turn(self.mouseTurn / 2, 0 ,0) end
if window:GetMousePosition().y < self.lastMouseY then self.pivot:Turn(-self.mouseTurn / 2, 0, 0) end
window:SetMousePosition(context:GetWidth() / 2, context:GetHeight() / 2)
end
self.lastMouseX = window:GetMousePosition().x
self.lastMouseY = window:GetMousePosition().y
-- Update The Camera Each Loop
self:UpdateCamera()
end