Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

3rd person camera chase


Recommended Posts

I'm setting my camera based on my model's position/rotation but i'd like the camera to be positioned a little further back so i can actually see the model move, i think what i'm looking for is something like vector forward.

 

Right now, i'm setting it at the exact same x/z coordinates.

 Vec3 pos = player_entity->model->GetPosition();
 camera->SetPosition(Vec3(pos.x, pos.y + 2, pos.z));

 

What would be required to re-calculate the new x/z coordinates of the camera?

Link to post

Some TPS working camera example for you.

Remove all uneeded code laugh.png

 

import "Scripts/AnimationManager.lua"
Script.Camera = "" --entity


Script.teamid=1

function Script:Start()
--self.btnExit = Button:Create("Exit", 0, 0, 100, 50, self, self.btnExit_Click)
self.playerMovement = Vec3(0,0,0)
self.cameraYaw = 0
self.cameraPitch = 10
self.dx = 0
self.dy = 0
self.mousePos = 100
self.trapMode = false
self.stars = 0
self.shooting = false
self.moveSpeed = 10
self.fireRate = 500
self.lastFireRate = 0
self.alive = true
self.dyingAnimationComplete = false
-- 2 "layers" of animations. the base layer and the upper body layer
self.baseAnimMgr = AnimationManager:Create(self.entity)
self.entity:SetKeyValue("type", "player")




self.state="idle"
self.attackName=""


self.pick = PickInfo()
self.entity:SetPickMode(0,true)

end


function Script:UpdateWorld()
if self.alive == false then return end

self.entity:SetRotation(0,180,0,true)


self:Movement()

self:CameraRotation()

self:Animations()

end



function Script:attackEnd()
self.state="idle"
end


function Script:CameraRotation()
-- rotate yaw and tell the player about it so the character can use it in SetInput()
local mpos = App.window:GetMousePosition()
self.dx = Math:Curve((mpos.x - self.mousePos) / 10.0, self.dx, 3.0 / Time:GetSpeed())
self.cameraYaw = self.cameraYaw + self.dx
-- rotate pitch
self.dy = Math:Curve((mpos.y - self.mousePos) / 10.0, self.dy, 3.0 / Time:GetSpeed())
local pitch = self.cameraPitch + self.dy
if pitch > -25 and pitch < 55 then
self.cameraPitch = pitch
end
-- reset the mouse position
App.window:SetMousePosition(self.mousePos, self.mousePos)
end

function Script:Movement()


-- handle player movement
self.playerMovement.z = ((App.window:KeyDown(Key.W) and 1 or 0) - (App.window:KeyDown(Key.S)and 1 or 0)) * Time:GetSpeed() * self.moveSpeed
--self.playerMovement.x = ((App.window:KeyDown(Key.D) and 1 or 0) - (App.window:KeyDown(Key.A)and 1 or 0)) * Time:GetSpeed() * self.moveSpeed
if self.state=="attack" then
 self.playerMovement.z=0
end
-- reduce speed when moving backwards
--if self.playerMovement.z < 0 then
--self.playerMovement.z = self.playerMovement.z
--end
if self.playerMovement.z > 0 and self.state~="attack" then
self.state="walk"
end

if self.playerMovement.z == 0 and self.state~="attack" then
self.state="idle"
end


-- move the camera to the player and set the yaw from 3rd person view
self.Camera:SetPosition(self.entity:GetPosition(true), true)
self.Camera:SetRotation(Vec3(self.cameraPitch, self.cameraYaw, 0), true)
-- offset the camera up and back
self.Camera:Move(0, 5, -15)
-- rotate the model along with the camera
self.entity:SetRotation(Vec3(0, self.cameraYaw +180, 0))
-- move the controller in the rotation of the player
self.entity:SetInput(self.cameraYaw, self.playerMovement.z, 0 --[[self.playerMovement.x]], 0, false, 1)


if App.window:MouseHit(1) and self.state~="attack" then
self.state="attack"
self.baseAnimMgr:SetAnimationSequence("attack", 0.01, 50,1,self,self.attackEnd)

end

end


function Script:Animations()
-- consider base animations here
if self.state=="idle" and self.state~="attack" then
self.baseAnimMgr:SetAnimationSequence("idle", 0.005, 200)
end
if self.state=="walk" and self.state~="attack" then
self.baseAnimMgr:SetAnimationSequence("walk", 0.01, 200)
end



end

function Script:UpdatePhysics()


end

function Script:Draw()
-- the order we put these in matters!
self.baseAnimMgr:Update()
end


function Script:PostRender(context)

end
function Script:Delete()

end

Link to post
  • 2 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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.

Facebook Twitter Youtube Github Steam
×
×
  • Create New...