Last active
May 26, 2021 16:47
-
-
Save Stuyk/1ac4ce277f3216028b410b15b0c9c9b3 to your computer and use it in GitHub Desktop.
Ped Edit Camera
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import * as alt from 'alt'; | |
import * as native from 'natives'; | |
let cameraControlsInterval; | |
let camera; | |
let zpos = 0; | |
let fov = 90; | |
let startPosition; | |
let startCamPosition; | |
let timeBetweenAnimChecks = Date.now() + 100; | |
export function createPedEditCamera() { | |
startPosition = { ...alt.Player.local.pos }; | |
if (!camera) { | |
const forwardVector = native.getEntityForwardVector(alt.Player.local.scriptID); | |
const forwardCameraPosition = { | |
x: startPosition.x + forwardVector.x * 1.2, | |
y: startPosition.y + forwardVector.y * 1.2, | |
z: startPosition.z + zpos | |
}; | |
fov = 90; | |
startCamPosition = forwardCameraPosition; | |
camera = native.createCamWithParams( | |
'DEFAULT_SCRIPTED_CAMERA', | |
forwardCameraPosition.x, | |
forwardCameraPosition.y, | |
forwardCameraPosition.z, | |
0, | |
0, | |
0, | |
fov, | |
true, | |
0 | |
); | |
native.pointCamAtCoord(camera, startPosition.x, startPosition.y, startPosition.z); | |
native.setCamActive(camera, true); | |
native.renderScriptCams(true, false, 0, true, false); | |
} | |
if (!cameraControlsInterval) { | |
cameraControlsInterval = alt.setInterval(handleControls, 0); | |
} | |
} | |
export function destroyPedEditCamera() { | |
if (cameraControlsInterval) { | |
alt.clearInterval(cameraControlsInterval); | |
cameraControlsInterval = null; | |
} | |
if (camera) { | |
camera = null; | |
} | |
native.destroyAllCams(true); | |
native.renderScriptCams(false, false, 0, false, false); | |
} | |
function handleControls() { | |
native.disableControlAction(0, 24, true); | |
native.disableControlAction(0, 25, true); | |
native.disableControlAction(0, 32, true); // w | |
native.disableControlAction(0, 33, true); // s | |
native.disableControlAction(0, 34, true); // a | |
native.disableControlAction(0, 35, true); // d | |
const [_, width] = native.getActiveScreenResolution(0, 0); | |
const cursor = alt.getCursorPos(); | |
const _x = cursor.x; | |
let oldHeading = native.getEntityHeading(alt.Player.local.scriptID); | |
// SCroll Up | |
if (native.isDisabledControlPressed(0, 15)) { | |
if (_x < width / 2 + 250 && _x > width / 2 - 250) { | |
fov -= 2; | |
if (fov < 10) { | |
fov = 10; | |
} | |
native.setCamFov(camera, fov); | |
native.setCamActive(camera, true); | |
native.renderScriptCams(true, false, 0, true, false); | |
} | |
} | |
// SCroll Down | |
if (native.isDisabledControlPressed(0, 16)) { | |
if (_x < width / 2 + 250 && _x > width / 2 - 250) { | |
fov += 2; | |
if (fov > 130) { | |
fov = 130; | |
} | |
native.setCamFov(camera, fov); | |
native.setCamActive(camera, true); | |
native.renderScriptCams(true, false, 0, true, false); | |
} | |
} | |
if (native.isDisabledControlPressed(0, 32)) { | |
zpos += 0.01; | |
if (zpos > 1.2) { | |
zpos = 1.2; | |
} | |
native.setCamCoord(camera, startCamPosition.x, startCamPosition.y, startCamPosition.z + zpos); | |
native.pointCamAtCoord(camera, startPosition.x, startPosition.y, startPosition.z + zpos); | |
native.setCamActive(camera, true); | |
native.renderScriptCams(true, false, 0, true, false); | |
} | |
if (native.isDisabledControlPressed(0, 33)) { | |
zpos -= 0.01; | |
if (zpos < -1.2) { | |
zpos = -1.2; | |
} | |
native.setCamCoord(camera, startCamPosition.x, startCamPosition.y, startCamPosition.z + zpos); | |
native.pointCamAtCoord(camera, startPosition.x, startPosition.y, startPosition.z + zpos); | |
native.setCamActive(camera, true); | |
native.renderScriptCams(true, false, 0, true, false); | |
} | |
// rmb | |
if (native.isDisabledControlPressed(0, 25)) { | |
// Rotate Negative | |
if (_x < width / 2) { | |
const newHeading = (oldHeading -= 2); | |
native.setEntityHeading(alt.Player.local.scriptID, newHeading); | |
} | |
// Rotate Positive | |
if (_x > width / 2) { | |
const newHeading = (oldHeading += 2); | |
native.setEntityHeading(alt.Player.local.scriptID, newHeading); | |
} | |
} | |
// d | |
if (native.isDisabledControlPressed(0, 35)) { | |
const newHeading = (oldHeading += 2); | |
native.setEntityHeading(alt.Player.local.scriptID, newHeading); | |
} | |
// a | |
if (native.isDisabledControlPressed(0, 34)) { | |
const newHeading = (oldHeading -= 2); | |
native.setEntityHeading(alt.Player.local.scriptID, newHeading); | |
} | |
if (Date.now() > timeBetweenAnimChecks) { | |
timeBetweenAnimChecks = Date.now() + 1500; | |
if (!native.isEntityPlayingAnim(alt.Player.local.scriptID, 'nm@hands', 'hands_up', 3)) { | |
alt.emit('animation:Play', { | |
dict: 'nm@hands', | |
name: 'hands_up', | |
duration: -1, | |
flag: 2 | |
}); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://natives.altv.mp/#/0xB13C14F66A00D047
L77 :
L87 :
To prevent a behavior where after you reach the fov limit and you keep zooming, later when you want to zoom the other direction it doesn't zoom until it's below/above the limit.