State machine and crosshair

This commit is contained in:
Rendo 2025-11-21 00:56:23 +05:00
commit a32ac09b04
12 changed files with 116 additions and 5 deletions

View file

@ -16,6 +16,7 @@ environment = ExtResource("1_i6jab")
[node name="Player" parent="." instance=ExtResource("2_ajphm")] [node name="Player" parent="." instance=ExtResource("2_ajphm")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.073462, 1.5000002, -0.5869317) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.073462, 1.5000002, -0.5869317)
SPEED = 10.0
TOGGLE_CROUCH = false TOGGLE_CROUCH = false
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."] [node name="CSGCombiner3D" type="CSGCombiner3D" parent="."]

View file

@ -15,6 +15,10 @@ run/main_scene="uid://cqrh2cc7m2i7f"
config/features=PackedStringArray("4.5", "Forward Plus") config/features=PackedStringArray("4.5", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[autoload]
PlayerGlobal="*res://scritps/player/player_global.gd"
[input] [input]
plr_forward={ plr_forward={

View file

@ -1,6 +1,7 @@
[gd_scene load_steps=9 format=3 uid="uid://dpsr6ug3pkb40"] [gd_scene load_steps=10 format=3 uid="uid://dpsr6ug3pkb40"]
[ext_resource type="Script" uid="uid://3dphlay25fih" path="res://scritps/player/player.gd" id="1_g2els"] [ext_resource type="Script" uid="uid://3dphlay25fih" path="res://scritps/player/player.gd" id="1_g2els"]
[ext_resource type="Script" uid="uid://dalwlndejfdhm" path="res://scritps/player/crosshair.gd" id="3_dqkch"]
[ext_resource type="Script" uid="uid://bjhbdh6xsjgnn" path="res://scritps/player/player_camera.gd" id="3_qhqgy"] [ext_resource type="Script" uid="uid://bjhbdh6xsjgnn" path="res://scritps/player/player_camera.gd" id="3_qhqgy"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u8vuu"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_u8vuu"]
@ -44,9 +45,6 @@ tracks/2/keys = {
"values": [Vector3(0, 2, 0), Vector3(0, 1.5, 0)] "values": [Vector3(0, 2, 0), Vector3(0, 1.5, 0)]
} }
[sub_resource type="Animation" id="Animation_qhqgy"]
resource_name = "Stand"
[sub_resource type="Animation" id="Animation_dqkch"] [sub_resource type="Animation" id="Animation_dqkch"]
length = 0.001 length = 0.001
tracks/0/type = "value" tracks/0/type = "value"
@ -86,6 +84,9 @@ tracks/2/keys = {
"values": [Vector3(0, 2, 0)] "values": [Vector3(0, 2, 0)]
} }
[sub_resource type="Animation" id="Animation_qhqgy"]
resource_name = "Stand"
[sub_resource type="AnimationLibrary" id="AnimationLibrary_qlg0r"] [sub_resource type="AnimationLibrary" id="AnimationLibrary_qlg0r"]
_data = { _data = {
&"Crouch": SubResource("Animation_g2els"), &"Crouch": SubResource("Animation_g2els"),
@ -125,3 +126,31 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("CapsuleShape3D_g2els") shape = SubResource("CapsuleShape3D_g2els")
debug_color = Color(0.9878064, 0, 0.31407458, 0.41960785) debug_color = Color(0.9878064, 0, 0.31407458, 0.41960785)
debug_fill = false debug_fill = false
[node name="HUD" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Crosshair" type="Control" parent="HUD"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -20.0
offset_right = 20.0
offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("3_dqkch")
crosses_width = 2.0
crosses_length = 6.0
crosses_offset = 3.0
[node name="MovementMachine" type="Node" parent="."]

View file

@ -0,0 +1,21 @@
extends Control
@export var outline: bool = true
@export var outline_color: Color = Color.BLACK
@export var outline_width: float = 0.1
@export var dot_radius: float = 1.0
@export var dot_color: Color = Color.WHITE
@export var crosses_width: float = 1.0
@export var crosses_length: float = 2.0
@export var crosses_offset: float = 0.2
@export var crosses_color: Color = Color.WHITE
func _draw() -> void:
draw_circle(Vector2(0,0),dot_radius,dot_color,true,outline_width)
for i in range(0,4):
var direction: Vector2 = Vector2.RIGHT.rotated(i*PI/2)
var offset_position: Vector2 = direction * crosses_offset
draw_line(offset_position,direction*crosses_length+offset_position,crosses_color,crosses_width)

View file

@ -0,0 +1 @@
uid://dalwlndejfdhm

View file

@ -22,7 +22,7 @@ var crouched: bool = false:
var potential_crouched: bool = crouched var potential_crouched: bool = crouched
func _process(delta: float) -> void: func _process(_delta: float) -> void:
if potential_crouched != crouched: if potential_crouched != crouched:
crouched = potential_crouched crouched = potential_crouched

View file

@ -0,0 +1,4 @@
extends Node
var player: CharacterBody3D

View file

@ -0,0 +1 @@
uid://dv3pm11t6p4si

View file

@ -0,0 +1,36 @@
extends Node
class_name StateMachine
@export var current_state: State
var states: Dictionary[StringName,State] = {}
func _ready() -> void:
for child in get_children():
if child is State:
states[child.name] = child
child.transition.connect(on_transition_required)
else:
push_warning("Child of state machine is not state")
func on_transition_required(to: StringName):
if states.has(to) == false:
push_warning("Incorrect state request: " + to)
return
current_state.exit()
current_state = states[to]
current_state.enter()
func _process(delta: float) -> void:
if current_state == null:
push_error("State is not set")
return
current_state.update(delta)
func _physics_process(delta: float) -> void:
if current_state == null:
push_error("State is not set")
return
current_state.physics_update(delta)

View file

@ -0,0 +1 @@
uid://3777rkbebgjm

View file

@ -0,0 +1,12 @@
@abstract
extends Node
class_name State
signal transition(to: StringName)
@abstract func enter() -> void
@abstract func exit() -> void
@abstract func update(delta: float) -> void
@abstract func physics_update(delta: float) -> void

View file

@ -0,0 +1 @@
uid://cmsphnymgquwq