Adding basic car

This commit is contained in:
2026-01-21 17:59:14 -06:00
parent 900951b1a7
commit 582b2c43cb
14 changed files with 452 additions and 279 deletions
+53 -17
View File
@@ -20,11 +20,14 @@ var current_number_of_jumps := 0
var _pending_mouse_delta := Vector2.ZERO
var _last_move_forward := Vector3(0, 0, 1)
var _last_move_right := Vector3(1, 0, 0)
var _camera_offset_local := Vector3.ZERO
var _camera_yaw := 0.0
var _camera_pitch := 0.0
@export var camera_follow_speed := 10.0
var _camera_offset_local := Vector3.ZERO
var _camera_yaw := 0.0
var _camera_pitch := 0.0
var _in_vehicle := false
var _vehicle_collision_layer := 0
var _vehicle_collision_mask := 0
@export var camera_follow_speed := 10.0
var jump_sound = preload("res://assets/audio/jump.ogg")
var audio_player = AudioStreamPlayer.new()
@@ -35,7 +38,7 @@ var audio_player = AudioStreamPlayer.new()
@onready var phone: CanvasLayer = get_node(phone_path) if phone_path != NodePath("") else null
var phone_visible := false
func _ready() -> void:
func _ready() -> void:
axis_lock_angular_x = true
axis_lock_angular_z = true
angular_damp = 6.0
@@ -44,7 +47,7 @@ func _ready() -> void:
add_child(audio_player)
audio_player.stream = jump_sound
audio_player.volume_db = -20
if cam:
if cam:
_camera_offset_local = cam.transform.origin
_camera_pitch = cam.rotation.x
_camera_yaw = global_transform.basis.get_euler().y
@@ -58,11 +61,16 @@ func _ready() -> void:
right.y = 0.0
if forward.length() > 0.0001:
_last_move_forward = forward.normalized()
if right.length() > 0.0001:
_last_move_right = right.normalized()
func _integrate_forces(state):
if cameraMoveMode and _pending_mouse_delta != Vector2.ZERO:
if right.length() > 0.0001:
_last_move_right = right.normalized()
_vehicle_collision_layer = collision_layer
_vehicle_collision_mask = collision_mask
func _integrate_forces(state):
if _in_vehicle:
linear_velocity = Vector3.ZERO
return
if cameraMoveMode and _pending_mouse_delta != Vector2.ZERO:
rotation_x -= _pending_mouse_delta.y * mouse_sensitivity
rotation_y -= _pending_mouse_delta.x * mouse_sensitivity
rotation_x = clamp(rotation_x, deg_to_rad(-90), deg_to_rad(90)) # Prevent flipping
@@ -126,8 +134,10 @@ func _integrate_forces(state):
cam.global_position = cam.global_position.lerp(target_pos, camera_follow_speed * state.step)
cam.global_rotation = Vector3(_camera_pitch, _camera_yaw, 0.0)
func _input(event):
if event is InputEventMouseButton:
func _input(event):
if _in_vehicle:
return
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_MIDDLE:
if event.pressed:
cameraMoveMode = true
@@ -148,7 +158,33 @@ func _input(event):
if event.is_action_pressed("player_light"):
$SpotLight3D.visible = !$SpotLight3D.visible
func zoom_camera(factor):
var new_fov = cam.fov * factor
cam.fov = clamp(new_fov, MIN_FOV, MAX_FOV)
func zoom_camera(factor):
var new_fov = cam.fov * factor
cam.fov = clamp(new_fov, MIN_FOV, MAX_FOV)
func enter_vehicle(_vehicle: Node, seat: Node3D, vehicle_camera: Camera3D) -> void:
_in_vehicle = true
freeze = true
sleeping = true
collision_layer = 0
collision_mask = 0
if seat:
global_transform = seat.global_transform
if cam:
cam.current = false
if vehicle_camera:
vehicle_camera.current = true
func exit_vehicle(exit_point: Node3D, vehicle_camera: Camera3D) -> void:
_in_vehicle = false
freeze = false
sleeping = false
collision_layer = _vehicle_collision_layer
collision_mask = _vehicle_collision_mask
if exit_point:
global_transform = exit_point.global_transform
if vehicle_camera:
vehicle_camera.current = false
if cam:
cam.current = true