Initial commit
This commit is contained in:
29
src/character/camera_controller.gd
Normal file
29
src/character/camera_controller.gd
Normal file
@@ -0,0 +1,29 @@
|
||||
extends Node3D
|
||||
|
||||
@export var target : Node3D
|
||||
@onready var camera = $Camera3D
|
||||
var lookInput : Vector2 = Vector2.ZERO
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
lookInput.x += event.relative.y
|
||||
lookInput.y += event.relative.x
|
||||
return
|
||||
|
||||
var zoom = .0
|
||||
if event.is_action_released("zoom_in"):
|
||||
zoom -= .2
|
||||
if event.is_action_released("zoom_out"):
|
||||
zoom += .2
|
||||
|
||||
camera.position.z = clamp(camera.position.z + zoom, 0, 4)
|
||||
|
||||
func _process(delta):
|
||||
lookInput += Input.get_vector('look_left','look_right', 'look_down', 'look_up')
|
||||
|
||||
global_position = target.global_position
|
||||
|
||||
rotation.x = clamp(rotation.x - lookInput.x * delta * 0.3, PI*-0.48, PI*0.2)
|
||||
rotation.y -= lookInput.y * delta * 0.3
|
||||
|
||||
lookInput = Vector2.ZERO
|
||||
52
src/character/character_controller.gd
Normal file
52
src/character/character_controller.gd
Normal file
@@ -0,0 +1,52 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
var input3D : Vector3
|
||||
|
||||
@export var SPEED = 1.4
|
||||
@export var SPRINT_SPEED = 3.0
|
||||
@export var JUMP_VELOCITY = 4.5
|
||||
|
||||
var speed = .0
|
||||
|
||||
@onready var camera : Camera3D = get_viewport().get_camera_3d()
|
||||
|
||||
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
|
||||
func _ready():
|
||||
process_priority = 2
|
||||
|
||||
func getCameraRelativeInput() -> Vector3 :
|
||||
var cam_basis = camera.global_transform.basis
|
||||
cam_basis.x.y = 0
|
||||
cam_basis.x = cam_basis.x.normalized()
|
||||
cam_basis.z.y = 0
|
||||
cam_basis.z = cam_basis.z.normalized()
|
||||
|
||||
var input = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||
var relativeInput = Vector3.ZERO
|
||||
relativeInput += input.x * cam_basis.x
|
||||
relativeInput += input.y * cam_basis.z
|
||||
|
||||
return relativeInput
|
||||
|
||||
func _physics_process(delta):
|
||||
if not is_on_floor():
|
||||
velocity.y -= gravity * delta
|
||||
|
||||
if Input.is_action_just_pressed("jump") and is_on_floor():
|
||||
velocity.y = JUMP_VELOCITY
|
||||
|
||||
input3D = getCameraRelativeInput()
|
||||
|
||||
speed = SPEED + Input.get_action_strength("sprint") * SPRINT_SPEED
|
||||
|
||||
var direction = input3D.normalized()
|
||||
if direction:
|
||||
velocity.x = direction.x * speed
|
||||
velocity.z = direction.z * speed
|
||||
look_at(direction + global_position)
|
||||
else:
|
||||
velocity.x = move_toward(velocity.x, 0, speed)
|
||||
velocity.z = move_toward(velocity.z, 0, speed)
|
||||
|
||||
move_and_slide()
|
||||
28
src/character/physics_interpolate.gd
Normal file
28
src/character/physics_interpolate.gd
Normal file
@@ -0,0 +1,28 @@
|
||||
extends Node3D
|
||||
|
||||
@export var physicsObject : PhysicsBody3D
|
||||
|
||||
var physics_delta : float = 1
|
||||
|
||||
var target : Transform3D
|
||||
var prev : Transform3D
|
||||
|
||||
func _ready():
|
||||
target = physicsObject.global_transform
|
||||
prev = physicsObject.global_transform
|
||||
|
||||
var d = 0
|
||||
func _process(delta):
|
||||
d += delta
|
||||
|
||||
var t = d / physics_delta
|
||||
|
||||
global_transform = prev.interpolate_with(target, t)
|
||||
|
||||
func _physics_process(delta):
|
||||
physics_delta = delta
|
||||
d = 0
|
||||
|
||||
global_transform = target
|
||||
prev = target
|
||||
target = physicsObject.global_transform
|
||||
20
src/game_manager.gd
Normal file
20
src/game_manager.gd
Normal file
@@ -0,0 +1,20 @@
|
||||
extends Node
|
||||
|
||||
var pause_menu_res = preload('res://ui/pause_menu.tscn')
|
||||
var pause_menu: PauseMenu
|
||||
|
||||
func _ready() -> void:
|
||||
pause_menu = pause_menu_res.instantiate()
|
||||
get_tree().root.add_child.call_deferred(pause_menu)
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed('ui_cancel'):
|
||||
pause_game(not get_tree().paused)
|
||||
|
||||
func quit_game():
|
||||
get_tree().quit()
|
||||
|
||||
func pause_game(pause = true):
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if pause else Input.MOUSE_MODE_CAPTURED
|
||||
get_tree().paused = pause
|
||||
pause_menu.visible = pause
|
||||
10
src/shaders/ui/blur.gdshader
Normal file
10
src/shaders/ui/blur.gdshader
Normal file
@@ -0,0 +1,10 @@
|
||||
shader_type canvas_item;
|
||||
render_mode blend_disabled;
|
||||
|
||||
uniform float blur_amount : hint_range(0,5) = 5.0;
|
||||
uniform vec4 tint : source_color = vec4(.5, .5, .5, 1.0);
|
||||
uniform sampler2D screen_texture : hint_screen_texture, filter_linear_mipmap;
|
||||
|
||||
void fragment() {
|
||||
COLOR = textureLod(screen_texture, SCREEN_UV, blur_amount) * tint;
|
||||
}
|
||||
12
src/spawner.gd
Normal file
12
src/spawner.gd
Normal file
@@ -0,0 +1,12 @@
|
||||
class_name Spawner extends Node3D
|
||||
|
||||
@export var object_to_spawn: PackedScene
|
||||
@export var auto_spawn: bool = true
|
||||
|
||||
func _ready() -> void:
|
||||
if auto_spawn:
|
||||
spawn.call_deferred()
|
||||
|
||||
func spawn() -> void:
|
||||
var object = object_to_spawn.instantiate()
|
||||
get_parent_node_3d().add_child(object)
|
||||
Reference in New Issue
Block a user