-
-
Save m5tuff/b015fa532741dd1d1a078d7681e8267a to your computer and use it in GitHub Desktop.
This file contains 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
extends KinematicBody | |
var playerCam = Vector3() | |
var character = Vector3() | |
const mouseSensitivity = 10.0 | |
var moveFB = 0.0 | |
var moveLR = 0.0 | |
var moveF = 0.0 | |
var moveB = 0.0 | |
var moveL = 0.0 | |
var moveR = 0.0 | |
var moveSpeed = 0.0 | |
const maxSpeed = 8.0 | |
var zoom | |
const zoomSpeed = 0.75 | |
const zoomMin = 2.0 | |
const zoomMax = 10.0 | |
const JumpHeight = 20 | |
var cameraPos = Vector3() | |
var cameraY | |
var cameraX | |
var cameraAngle | |
var zoomCounter | |
var centerPointPos = Vector3() | |
var movement = Vector3() | |
var cameraHeight = 1.7 | |
var rotSpeed = 0.0 | |
var rotTransform = Vector3() | |
var thisRotation = Quat() | |
var gravity = -9.8 * 3.5 | |
var velocity = Vector3() | |
var sprintMultiplier = 2 | |
const accelerationSpeed = 40.0 | |
var hzAirMove = Vector2() | |
var ACCELERATION = 20.0 | |
var DEACCELERATION = 50.0 | |
func _ready(): | |
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) | |
zoomCounter = 3.0 | |
cameraAngle = 0.0 | |
cameraX = 0.0 | |
cameraY = 0.0 | |
moveFB = 0.0 | |
moveLR = 0.0 | |
moveF = 0.0 | |
moveB = 0.0 | |
moveL = 0.0 | |
moveR = 0.0 | |
moveSpeed = 0.0 | |
func _input(event): | |
if Input.is_mouse_button_pressed(BUTTON_WHEEL_UP) or Input.is_mouse_button_pressed(BUTTON_WHEEL_DOWN): | |
if Input.is_mouse_button_pressed(BUTTON_WHEEL_UP): | |
zoom = -zoomSpeed | |
zoomCounter += -zoomSpeed | |
if Input.is_mouse_button_pressed(BUTTON_WHEEL_DOWN): | |
zoom = zoomSpeed | |
zoomCounter += zoomSpeed | |
if zoomCounter < zoomMin: | |
zoom = 0 | |
zoomCounter = zoomMin | |
if zoomCounter > zoomMax: | |
zoom = 0 | |
zoomCounter = zoomMax | |
cameraPos = $"../CenterPoint/Camera_RotX/Camera_RotY/Camera".get_transform() | |
cameraPos.origin += Vector3(0,0,zoom) | |
$"../CenterPoint/Camera_RotX/Camera_RotY/Camera".set_transform(cameraPos) | |
# INPUT EVEN OPTIMIZATION | |
if event is InputEventMouseMotion: | |
var cameraX = -event.relative.x / mouseSensitivity | |
$"../CenterPoint/Camera_RotX".rotate_y(deg2rad(cameraX)) | |
var cameraY = -event.relative.y / mouseSensitivity | |
if cameraY + cameraAngle < 89 and cameraY + cameraAngle > -89: | |
$"../CenterPoint/Camera_RotX/Camera_RotY".rotate_x(deg2rad(cameraY)) | |
cameraAngle += cameraY | |
if Input.is_action_just_pressed("sprint"): | |
moveSpeed = moveSpeed * sprintMultiplier | |
if Input.is_action_just_released("sprint"): | |
moveSpeed = moveSpeed / sprintMultiplier | |
if event is InputEventKey: | |
if Input.is_action_pressed("move_forward"): | |
moveF = 1 | |
elif Input.is_action_just_released("move_forward"): | |
moveF = 0 | |
if Input.is_action_pressed("move_backward"): | |
moveB = 1 | |
elif Input.is_action_just_released("move_backward"): | |
moveB = 0 | |
if Input.is_action_pressed("move_left"): | |
moveL = 1 | |
elif Input.is_action_just_released("move_left"): | |
moveL = 0 | |
if Input.is_action_pressed("move_right"): | |
moveR = 1 | |
elif Input.is_action_just_released("move_right"): | |
moveR = 0 | |
if is_on_floor() and Input.is_action_just_pressed("jump"): | |
velocity.y = JumpHeight | |
if Input.is_action_pressed("end"): | |
get_tree().quit() | |
func _process(delta): | |
if moveF + moveB + moveL + moveR > 0: | |
moveSpeed += delta*ACCELERATION*(moveF + moveB) | |
if moveSpeed > maxSpeed: | |
moveSpeed = maxSpeed | |
print(-moveF + moveB) | |
moveSpeed += delta*ACCELERATION*(moveL + moveR) | |
if moveSpeed > maxSpeed: | |
moveSpeed = maxSpeed | |
if moveF + moveB + moveL + moveR == 0: | |
moveSpeed += -delta*DEACCELERATION | |
if moveSpeed < 0: | |
moveSpeed = 0.0 | |
velocity.z = (-moveF + moveB) * moveSpeed | |
velocity.x = (-moveL + moveR) * moveSpeed | |
print(moveSpeed) | |
centerPointPos = $"../CenterPoint".get_transform().origin | |
$"../CenterPoint/Camera_RotX/Camera_RotY/Camera".look_at(centerPointPos, Vector3(0,1,0)) | |
if Input.is_action_pressed("move_forward") or Input.is_action_pressed("move_backward") or Input.is_action_pressed("move_left") or Input.is_action_pressed("move_right"): | |
set_rotation(Transform($"../CenterPoint/Camera_RotX".get_transform().basis,$"../CenterPoint/Camera_RotX".get_transform().origin).basis.get_euler()) | |
thisRotation = Quat($"CharacterRot".get_transform().basis).slerp($"../CenterPoint/Camera_RotX".get_transform().basis, rotSpeed) | |
rotSpeed += delta | |
if rotSpeed > .2: | |
rotSpeed = .2 | |
$"CharacterRot".set_rotation(Transform(thisRotation,$"../CenterPoint/Camera_RotX".get_transform().origin).basis.get_euler()) | |
if Input.is_action_just_released("move_forward") or Input.is_action_just_released("move_backward") or Input.is_action_just_released("moveleft") or Input.is_action_just_released("move_right"): | |
rotSpeed = 0 | |
velocity.y += delta * gravity | |
print(velocity) | |
velocity = move_and_slide(velocity.rotated(Vector3(0,1,0), get_transform().basis.get_euler().y), Vector3(0,1,0)) | |
character = get_transform().origin - $"../CenterPoint".get_transform().origin | |
$"../CenterPoint".global_translate(Vector3(character.x, character.y + cameraHeight, character.z)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment