diff --git a/root.tscn b/root.tscn index 97f822f..194c3f5 100644 --- a/root.tscn +++ b/root.tscn @@ -1,10 +1,13 @@ -[gd_scene load_steps=3 format=3 uid="uid://cgx0nawwjjj7g"] +[gd_scene load_steps=4 format=3 uid="uid://cgx0nawwjjj7g"] [ext_resource type="PackedScene" uid="uid://c0epfh4sqjcjq" path="res://data_structure/db_items.tscn" id="1_pyidc"] [ext_resource type="PackedScene" uid="uid://mkfitwqnerku" path="res://scenes/world/world.tscn" id="2_vvh5c"] +[ext_resource type="PackedScene" uid="uid://c7fj7wla8bd70" path="res://scenes/ui/ui.tscn" id="3_vvh5c"] [node name="Root" type="Node"] [node name="DBItems" parent="." instance=ExtResource("1_pyidc")] [node name="World" parent="." instance=ExtResource("2_vvh5c")] + +[node name="UI" parent="." instance=ExtResource("3_vvh5c")] diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 82b7be0..642c1a8 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -12,6 +12,9 @@ func _ready() -> void: _apply_materials() +func get_id() -> String: + return id + func set_id(block_id: String) -> void: id = block_id _get_resource_data() diff --git a/scenes/characters/player.gd b/scenes/player/player.gd similarity index 89% rename from scenes/characters/player.gd rename to scenes/player/player.gd index f4df7ef..5e5c21a 100644 --- a/scenes/characters/player.gd +++ b/scenes/player/player.gd @@ -7,8 +7,8 @@ extends CharacterBody3D @export var mouse_sensitivity_vertical: float = 0.002 @export var speed: float = 5.0 - @onready var camera: Camera3D = $Camera3D +@onready var ray_cast: RayCast3D = $RayCast3D func _physics_process(delta: float) -> void: @@ -20,7 +20,7 @@ func _physics_process(delta: float) -> void: func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseMotion: - handle_mouse_movement(event) + handle_mouse_look(event) func apply_gravity(delta: float) -> void: @@ -32,10 +32,11 @@ func handle_jump() -> void: if not is_on_floor(): return velocity.y = jump_velocity -func handle_mouse_movement(event: InputEvent) -> void: +func handle_mouse_look(event: InputEvent) -> void: rotation.y = rotation.y - event.relative.x * mouse_sensitivity_horizontal camera.rotation.x = camera.rotation.x - event.relative.y * mouse_sensitivity_vertical camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-90), deg_to_rad(90)) + ray_cast.rotation.x = camera.rotation.x func handle_movement() -> void: var input_dir: Vector2 = Input.get_vector("move_left", "move_right", "move_forward", "move_backward") diff --git a/scenes/characters/player.gd.uid b/scenes/player/player.gd.uid similarity index 100% rename from scenes/characters/player.gd.uid rename to scenes/player/player.gd.uid diff --git a/scenes/characters/player.tscn b/scenes/player/player.tscn similarity index 57% rename from scenes/characters/player.tscn rename to scenes/player/player.tscn index cd5d4a9..8183d97 100644 --- a/scenes/characters/player.tscn +++ b/scenes/player/player.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=4 format=3 uid="uid://cggiju8k3bkoc"] +[gd_scene load_steps=5 format=3 uid="uid://cggiju8k3bkoc"] -[ext_resource type="Script" uid="uid://b6xiwiwwbdapd" path="res://scenes/characters/player.gd" id="1_rp718"] +[ext_resource type="Script" uid="uid://b6xiwiwwbdapd" path="res://scenes/player/player.gd" id="1_rp718"] +[ext_resource type="Script" uid="uid://bruuttf8j7wet" path="res://scenes/player/ray_cast_3d.gd" id="2_dovo2"] [sub_resource type="BoxShape3D" id="BoxShape3D_wocps"] size = Vector3(1, 1.9, 1) @@ -20,4 +21,10 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.953133, 0) mesh = SubResource("BoxMesh_rp718") [node name="Camera3D" type="Camera3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.86156, -0.00542843) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8, -0.005) + +[node name="RayCast3D" type="RayCast3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8, 0) +target_position = Vector3(0, 0, -5) +debug_shape_custom_color = Color(1, 0, 0, 1) +script = ExtResource("2_dovo2") diff --git a/scenes/player/ray_cast_3d.gd b/scenes/player/ray_cast_3d.gd new file mode 100644 index 0000000..83b785e --- /dev/null +++ b/scenes/player/ray_cast_3d.gd @@ -0,0 +1,12 @@ +extends RayCast3D + + +func _process(_delta: float) -> void: + if is_colliding(): + var collider: Object = get_collider() + + if collider is Block: + var id: String = collider.get_id() + Waila.ref.hook_target(id) + else: + Waila.ref.release_target() # Not seeing anything diff --git a/scenes/player/ray_cast_3d.gd.uid b/scenes/player/ray_cast_3d.gd.uid new file mode 100644 index 0000000..29fa2f9 --- /dev/null +++ b/scenes/player/ray_cast_3d.gd.uid @@ -0,0 +1 @@ +uid://bruuttf8j7wet diff --git a/scenes/ui/ui.tscn b/scenes/ui/ui.tscn new file mode 100644 index 0000000..62c0fe2 --- /dev/null +++ b/scenes/ui/ui.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=2 format=3 uid="uid://c7fj7wla8bd70"] + +[ext_resource type="PackedScene" uid="uid://dvogu3djluqsn" path="res://scenes/ui/waila.tscn" id="1_u7n8c"] + +[node name="UI" type="CanvasLayer"] + +[node name="Crosshair" type="CenterContainer" parent="."] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HSeparator" type="HSeparator" parent="Crosshair"] +custom_minimum_size = Vector2(16, 16) +layout_mode = 2 +mouse_filter = 2 + +[node name="VSeparator" type="VSeparator" parent="Crosshair"] +custom_minimum_size = Vector2(16, 16) +layout_mode = 2 +mouse_filter = 2 + +[node name="Waila" parent="." instance=ExtResource("1_u7n8c")] diff --git a/scenes/ui/waila.gd b/scenes/ui/waila.gd new file mode 100644 index 0000000..3fc22dd --- /dev/null +++ b/scenes/ui/waila.gd @@ -0,0 +1,33 @@ +## What Am I Looking At (Waila) +class_name Waila +extends MarginContainer + + +#region Singleton +static var ref: Waila + +func _init() -> void: + if not ref: + ref = self + else: + queue_free() +#endregion + + +@onready var name_label: Label = $PanelContainer/MarginContainer/VBoxContainer/Name +@onready var description_label: Label = $PanelContainer/MarginContainer/VBoxContainer/Description + +func _ready() -> void: + release_target() + + +func hook_target(id: String) -> void: + var item: ItemResource = DBItems.ref.data[id] + name_label.text = item.name + description_label.text = item.description + + visible = true + +## Not looking at anything, hide Waila +func release_target() -> void: + visible = false diff --git a/scenes/ui/waila.gd.uid b/scenes/ui/waila.gd.uid new file mode 100644 index 0000000..4a53da6 --- /dev/null +++ b/scenes/ui/waila.gd.uid @@ -0,0 +1 @@ +uid://b76vloo54ieyo diff --git a/scenes/ui/waila.tscn b/scenes/ui/waila.tscn new file mode 100644 index 0000000..d2484c4 --- /dev/null +++ b/scenes/ui/waila.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=2 format=3 uid="uid://dvogu3djluqsn"] + +[ext_resource type="Script" uid="uid://b76vloo54ieyo" path="res://scenes/ui/waila.gd" id="1_j6ccr"] + +[node name="Waila" type="MarginContainer"] +editor_description = "What am I looking at (Waila)" +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -20.0 +offset_right = 20.0 +offset_bottom = 40.0 +grow_horizontal = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 +script = ExtResource("1_j6ccr") + +[node name="PanelContainer" type="PanelContainer" parent="."] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer"] +layout_mode = 2 + +[node name="Name" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +theme_type_variation = &"HeaderSmall" +text = "Entity Name" +horizontal_alignment = 1 + +[node name="Description" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Entity Description (longer than name usually)" +horizontal_alignment = 1 diff --git a/scenes/world/world.gd b/scenes/world/world.gd index 4a3e89c..42d6173 100644 --- a/scenes/world/world.gd +++ b/scenes/world/world.gd @@ -23,4 +23,9 @@ func _initialize_ground() -> void: for x: int in range(-10, 11): for z: int in range(-10, 11): var ground_position: Vector3 = Vector3(x, 0, z) - create_block("001", ground_position) + + var random: int = randi_range(0, 1) + if random: + create_block("001", ground_position) + else: + create_block("002", ground_position) diff --git a/scenes/world/world.tscn b/scenes/world/world.tscn index a9a65e9..135f58f 100644 --- a/scenes/world/world.tscn +++ b/scenes/world/world.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=6 format=3 uid="uid://mkfitwqnerku"] [ext_resource type="Script" uid="uid://c0jbvki2cylct" path="res://scenes/world/world.gd" id="1_6m72w"] -[ext_resource type="PackedScene" uid="uid://cggiju8k3bkoc" path="res://scenes/characters/player.tscn" id="2_sl2e5"] +[ext_resource type="PackedScene" uid="uid://cggiju8k3bkoc" path="res://scenes/player/player.tscn" id="2_sl2e5"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_4rhad"] sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)