Jump to content

[SNIPPET][CLIENT] First Person View Exploring


Borov

Recommended Posts

So, I always wanted to try making GTA first person view, just for the heck of it. The code below can be inserted into your client side script, and to use it, you go in the game and use the command "/fps on" and "/fps off" to toggle the view. You can run around the map in first person view mode, and of course you'll be able to see your hands and feet. I'm not able to implement first person driving and targeting, due to certain limitations, but perhaps in later releases we can do that. also try ducking, and you'll see the camera lowers as well. Please feel free to expand on it so it becomes more fun.

EDIT: now you can see from the driver's view when you sit in a car. if it doesn't work, just hold aim button and release.

  
--global variables 
g_root = getRootElement() 
cameraFixed = false 
  
--custom functions 
  
function toggleCameraFixedModeEx(mode) 
    if (mode == false) then 
        toggleCameraFixedMode(false) 
        cameraFixed = false 
    else 
        toggleCameraFixedMode(true) 
        --setCameraLookAt(2000, 2000, 0) 
        cameraFixed = true 
    end 
end 
  
function getCameraModeEx() 
    return cameraFixed 
end 
  
---places player camera in front of player every frame 
isFPS = false 
function turnCamera(cursorX, cursorY, absoluteX, absoluteY, wX, wY, wZ) 
    if (fpsOff() == true) then 
        toggleCameraFixedModeEx(false) 
        return true 
    elseif (getCameraModeEx() == false) then 
        toggleCameraFixedModeEx(true) 
    end 
    setCameraLookAt(wX, wY, wZ) 
  
    local player = getLocalPlayer() 
    local x,y,z = getElementPosition(player) 
    local r = 0 
    local dx = wX-x 
    local dy = wY-y 
    local backing = getControlState("backwards") 
     
    if (dx < 0 and dy >0) then 
        --II 
        r = math.deg((math.atan((wY-y)/(wX-x))))+180 
    elseif (dx < 0 and dy < 0) then 
        --III 
        r = math.deg((math.atan((wY-y)/(wX-x))))+180 
    else 
        --I and IV 
        r = math.deg((math.atan((wY-y)/(wX-x)))) 
    end 
    r = r-90 
     
    if (r < 0) then 
        r = r + 360 
    elseif (r > 360) then 
        r = r - 360 
    end 
    if (backing == false) then 
        setPlayerRotation(player, r) 
         
        x = x + 0.4 * math.cos(math.rad(r+90)) 
        y = y + 0.4 * math.sin(math.rad(r+90)) 
        if (isPlayerDucked(player) == false) then 
            setCameraPosition(x, y, z+0.7) 
        else 
            setCameraPosition(x, y, z) 
        end 
    end 
     
end 
  
addEventHandler("onClientCursorMove", g_root, turnCamera) 
  
function moveCamera() 
    if (fpsOff() == true) then 
        toggleCameraFixedModeEx(false) 
        return true 
    elseif (getCameraModeEx() == false) then 
        toggleCameraFixedModeEx(true) 
    end 
    local player = getLocalPlayer() 
    --getting new camera position 
    local x,y,z = getElementPosition(player) 
    local r = getPlayerRotation(player) 
     
    x = x + 0.4 * math.cos(math.rad(r+90)) 
    y = y + 0.4 * math.sin(math.rad(r+90)) 
  
  
    if (isPlayerDucked(player) == false) then 
        setCameraPosition(x, y, z+0.7) 
    else 
        setCameraPosition(x, y, z) 
    end 
  
end 
addEventHandler("onClientRender", g_root, moveCamera) 
  
function fpsOff() 
    local player = getLocalPlayer() 
    --if (isPlayerInVehicle(player) == true) then 
        --return false 
    if (getControlState("aim_weapon") == true) then 
        return true 
    elseif (isFPS == false) then 
        return true 
    else 
        return false 
    end 
end 
  
function fixCamera ( command, state) 
    if (state == "on") then 
        toggleCameraFixedModeEx(true) 
        isFPS = true 
    elseif (state == "off") then 
        toggleCameraFixedModeEx(false) 
        isFPS = false 
    end 
end 
addCommandHandler("fps", fixCamera) 
  
function refixCamera(theVehicle, seat) 
    if (isFPS == "true") then 
        toggleCameraFixedModeEx(true) 
    end 
end 
addEventHandler("onClientPlayerVehicleEnter", g_root, refixCamera) 
  

Link to comment
  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...