Skip to content

Instantly share code, notes, and snippets.

@m5tuff

m5tuff/player.gd Secret

Created February 23, 2018 12:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save m5tuff/b015fa532741dd1d1a078d7681e8267a to your computer and use it in GitHub Desktop.
Save m5tuff/b015fa532741dd1d1a078d7681e8267a to your computer and use it in GitHub Desktop.
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