Jump to content
QuantumPixel

Unable to Walk on Terrain

Recommended Posts

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

Share this post


Link to post

Your suggestions did fix the problem that I was having. Unfortunately, it also created new issues. Now my player entity has physics being applied to it, so it falls over and goes bouncing across the terrain if it hits a rock or uneven ground. It looks like I'm going to have to approach this from a different angle. But thanks anyway, guys. I appreciate the help.

Share this post


Link to post

 

This is in c++ but does your code look something like this?

 

 

 

 

 

//Create the player

player = Pivot::Create();

player->SetPosition(0, 4, 0);

player->SetMass(60);

player->SetPhysicsMode(Entity::CharacterPhysics);

 

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...