forked from funnymemellama/funnymemellama
First draft Quake movement
Pure shit
This commit is contained in:
parent
a627998aed
commit
ead2b57917
4 changed files with 118 additions and 39 deletions
|
@ -33,7 +33,7 @@ size = Vector3(1, 1.5, 1)
|
|||
script = ExtResource("1_omu2m")
|
||||
|
||||
[node name="Koob" type="CSGMesh3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.20345, 0)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.816788, 0)
|
||||
mesh = SubResource("BoxMesh_sbsxh")
|
||||
material = SubResource("StandardMaterial3D_8bjqg")
|
||||
|
||||
|
|
2
Debug.gd
2
Debug.gd
|
@ -8,7 +8,7 @@ func _ready():
|
|||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
$Speed.text = 'Speed: {0}'.format([$Player.velocity.length()])
|
||||
|
||||
|
||||
func _input(event: InputEvent):
|
||||
|
|
137
Player.gd
137
Player.gd
|
@ -1,14 +1,18 @@
|
|||
extends CharacterBody3D
|
||||
|
||||
# Member variables
|
||||
var walk_speed = 1.0
|
||||
const QUAKE = 8 * 0.013888888888888888
|
||||
const g = -800 * QUAKE
|
||||
const MAX_SPEED = 2000 * QUAKE
|
||||
const FRICTION = 4 * QUAKE
|
||||
const STOP_SPEED = 100 * QUAKE
|
||||
const ACCEL= 10 * QUAKE
|
||||
const FORWARD_SPEED = 200 * QUAKE
|
||||
const SIDE_SPEED = 350 * QUAKE
|
||||
const UP_SPEED = 270 * QUAKE
|
||||
|
||||
var g = -9.8
|
||||
const MAX_SPEED = 5
|
||||
const JUMP_SPEED = 5
|
||||
const ACCEL= 8
|
||||
const DEACCEL= 8
|
||||
const MAX_SLOPE_ANGLE = 30
|
||||
# const DEACCEL= 8
|
||||
# const MAX_SLOPE_ANGLE = 30
|
||||
|
||||
@onready
|
||||
var camera = $CSGMesh3D/Camera3D
|
||||
|
@ -22,49 +26,116 @@ func _ready():
|
|||
|
||||
|
||||
func _physics_process(delta):
|
||||
var move_dir = Vector3() # Where does the player intend to walk to
|
||||
var cam_xform = camera.get_global_transform()
|
||||
# Shamelessly stolen code from quake :)
|
||||
|
||||
var fmove = 0.0
|
||||
var smove = 0.0
|
||||
var upmove = 0.0
|
||||
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
move_dir += -cam_xform.basis.z
|
||||
fmove += -FORWARD_SPEED
|
||||
if Input.is_action_pressed("move_backwards"):
|
||||
move_dir += cam_xform.basis.z
|
||||
fmove += FORWARD_SPEED
|
||||
if Input.is_action_pressed("move_left"):
|
||||
move_dir += -cam_xform.basis.x
|
||||
smove += -SIDE_SPEED
|
||||
if Input.is_action_pressed("move_right"):
|
||||
move_dir += cam_xform.basis.x
|
||||
|
||||
if not _noclip:
|
||||
move_dir.y = 0
|
||||
move_dir = move_dir.normalized()
|
||||
|
||||
var target = move_dir * MAX_SPEED
|
||||
smove += SIDE_SPEED
|
||||
if Input.is_action_pressed("jump"):
|
||||
upmove += UP_SPEED
|
||||
if Input.is_action_pressed("run"):
|
||||
target *= 5
|
||||
fmove *= 2.0
|
||||
smove *= 2.0
|
||||
upmove *= 2.0
|
||||
|
||||
var accel
|
||||
if move_dir.dot(target) > 0:
|
||||
accel = ACCEL
|
||||
else:
|
||||
accel = DEACCEL
|
||||
var wishvel = Vector3()
|
||||
var cam_xform: Transform3D = camera.get_global_transform()
|
||||
var cam_basis: Basis = cam_xform.basis
|
||||
|
||||
var new_vel = velocity.lerp(target, accel * delta)
|
||||
wishvel = cam_basis.z * fmove + cam_basis.x * smove
|
||||
|
||||
velocity.x = new_vel.x
|
||||
velocity.z = new_vel.z
|
||||
if _noclip:
|
||||
velocity.y = new_vel.y
|
||||
wishvel.y = upmove
|
||||
# else:
|
||||
# wishvel.y = upmove
|
||||
|
||||
var wishdir = wishvel.normalized()
|
||||
var wishspeed = wishvel.length()
|
||||
|
||||
if wishspeed > MAX_SPEED:
|
||||
wishvel *= MAX_SPEED / wishspeed
|
||||
wishspeed = MAX_SPEED
|
||||
|
||||
if is_on_floor():
|
||||
velocity.y += upmove
|
||||
var vel = velocity
|
||||
if _noclip:
|
||||
vel = wishvel
|
||||
elif is_on_floor():
|
||||
vel = _apply_friction(vel, delta)
|
||||
vel = _apply_accel(vel, wishdir, wishspeed, delta)
|
||||
else:
|
||||
vel = _apply_air_accel(vel, wishvel, wishspeed, delta)
|
||||
|
||||
if not _noclip:
|
||||
velocity.y += g * delta
|
||||
|
||||
if is_on_floor() and Input.is_action_pressed("jump"):
|
||||
velocity.y += JUMP_SPEED
|
||||
vel.y += g * delta
|
||||
|
||||
velocity = vel
|
||||
move_and_slide()
|
||||
|
||||
$Ball.global_position = camera.global_position - camera.global_transform.basis.z * 2.0
|
||||
|
||||
func _apply_friction(vel: Vector3, delta: float):
|
||||
var speed = sqrt(vel.x ** 2 + vel.z ** 2)
|
||||
if(speed == 0.0): return vel
|
||||
|
||||
# TODO: edge detect friction?
|
||||
var friction = FRICTION
|
||||
|
||||
var control = 0.0
|
||||
if speed < STOP_SPEED:
|
||||
control = STOP_SPEED
|
||||
else:
|
||||
control = speed
|
||||
|
||||
var newspeed = speed - delta * control * friction
|
||||
|
||||
if newspeed < 0.0:
|
||||
newspeed = 0.0
|
||||
|
||||
newspeed /= speed
|
||||
|
||||
return vel * newspeed
|
||||
|
||||
func _apply_accel(vel: Vector3, wishdir: Vector3, wishspeed: float, delta: float):
|
||||
var currentspeed = vel.dot(wishdir)
|
||||
var addspeed = wishspeed - currentspeed
|
||||
if addspeed <= 0.0:
|
||||
return vel
|
||||
|
||||
var accelspeed = ACCEL * delta * wishspeed
|
||||
if accelspeed > addspeed:
|
||||
accelspeed = addspeed
|
||||
|
||||
return vel + accelspeed * wishdir
|
||||
|
||||
func _apply_air_accel(vel: Vector3, wishvel: Vector3, wishspeed: float, delta: float):
|
||||
var wishveloc = wishvel.normalized()
|
||||
var wishspd = wishvel.length()
|
||||
|
||||
if wishspd > 30 * QUAKE:
|
||||
wishspd = 30 * QUAKE
|
||||
|
||||
var currentspeed = vel.dot(wishveloc)
|
||||
var addspeed = wishspd - currentspeed
|
||||
if addspeed <= 0:
|
||||
return vel
|
||||
|
||||
var accelspeed = ACCEL * wishspeed * delta
|
||||
if accelspeed > addspeed:
|
||||
accelspeed = addspeed
|
||||
|
||||
return vel + accelspeed * wishveloc
|
||||
|
||||
func _input(event):
|
||||
if event.is_action_pressed("pause"):
|
||||
_paused = not _paused
|
||||
|
|
|
@ -42,6 +42,7 @@ offset_left = 21.0
|
|||
offset_top = 2.0
|
||||
offset_right = 214.0
|
||||
offset_bottom = 118.0
|
||||
text = "KEY OVERLAY"
|
||||
label_settings = SubResource("LabelSettings_1j5am")
|
||||
uppercase = true
|
||||
script = ExtResource("6_crgb3")
|
||||
|
@ -50,3 +51,10 @@ script = ExtResource("6_crgb3")
|
|||
|
||||
[node name="hazardcourse" parent="." instance=ExtResource("8_t5ilw")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -81.92, 1.28, -16.64)
|
||||
|
||||
[node name="Speed" type="Label" parent="."]
|
||||
offset_left = 23.0
|
||||
offset_top = 99.0
|
||||
offset_right = 113.0
|
||||
offset_bottom = 136.0
|
||||
text = "SPEED"
|
||||
|
|
Loading…
Reference in a new issue