diff --git a/entities/interactables/compost/scripts/compost.gd b/entities/interactables/compost/scripts/compost.gd index 1c7af54..4480d9a 100644 --- a/entities/interactables/compost/scripts/compost.gd +++ b/entities/interactables/compost/scripts/compost.gd @@ -4,13 +4,13 @@ class_name Compost @export var value_per_seed : float = 0.5 -var fill_value : float = 0. +@onready var fill_value : float = 0. func _process(_delta): %ProgressBar.value = lerp(%ProgressBar.value, fill_value * 100, 0.5) -func _ready(): - fill_value = 0. +func inspected_text(): + return "Compost" func can_interact(p : Player) -> bool: return p.inventory.get_item() and p.inventory.get_item() is Seed diff --git a/entities/interactables/item_object/script/item_object.gd b/entities/interactables/item_object/script/item_object.gd index 7da5ce7..7898f7c 100644 --- a/entities/interactables/item_object/script/item_object.gd +++ b/entities/interactables/item_object/script/item_object.gd @@ -2,7 +2,7 @@ extends Interactable class_name ItemObject -const ITEM_AREA_WIDTH = 10 +const ITEM_AREA_WIDTH = 20 const ITEM_SPRITE_SIZE = 40. const SPRITE_SCENE : PackedScene = preload("res://entities/interactables/item_object/item_object_sprite.tscn") @@ -19,7 +19,10 @@ func _init(_item = null): item = _item func _ready(): - generate_collision(10) + generate_collision(ITEM_AREA_WIDTH) + +func inspected_text(): + return item.name + (" Seed" if item is Seed else "") func interact(player : Player) -> bool: var swapped_item = player.inventory.get_item() diff --git a/entities/interactables/scripts/interactable.gd b/entities/interactables/scripts/interactable.gd index 26610c1..69dc33c 100644 --- a/entities/interactables/scripts/interactable.gd +++ b/entities/interactables/scripts/interactable.gd @@ -1,11 +1,8 @@ -extends Area2D +extends InspectableEntity class_name Interactable var available : bool = true -func _ready(): - printerr("Abstract Interactable class used") - func can_interact(_p : Player) -> bool: return true diff --git a/entities/plants/plant_sprite.tscn b/entities/plants/plant_sprite.tscn index df1291c..5026b7d 100644 --- a/entities/plants/plant_sprite.tscn +++ b/entities/plants/plant_sprite.tscn @@ -99,7 +99,6 @@ script = ExtResource("1_pq8o7") [node name="Sprite2D" type="Sprite2D" parent="."] scale = Vector2(0.15, 0.15) texture = ExtResource("2_hyinx") -offset = Vector2(0, -100) [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { diff --git a/entities/plants/scripts/plant.gd b/entities/plants/scripts/plant.gd index 2ed95fd..a0d3091 100644 --- a/entities/plants/scripts/plant.gd +++ b/entities/plants/scripts/plant.gd @@ -1,7 +1,7 @@ -extends Area2D +extends InspectableEntity class_name Plant -const PLANT_AREA_WIDTH = 10 +const PLANT_AREA_WIDTH = 20 const HARVESTED_SEED_POSITION_RANGE = 100 const RANDOM_MAX_GROW_INTERVAL = 0.4 @@ -23,6 +23,11 @@ func _init(_plant_type = null, _planet = null): plant_type = _plant_type planet = _planet +func inspected_text(): + var state_text = "Growing" + if state == State.MATURE: state_text = "Mature" + return state_text + " " + plant_type.name + func generate_sprite() -> PlantSprite: var spriteObject : PlantSprite = SPRITE_SCENE.instantiate() diff --git a/entities/scripts/inspectable_entity.gd b/entities/scripts/inspectable_entity.gd new file mode 100644 index 0000000..4d3ca2d --- /dev/null +++ b/entities/scripts/inspectable_entity.gd @@ -0,0 +1,27 @@ +extends Area2D +class_name InspectableEntity + +const MODULATE_INSPECTED_COLOR = Color.GRAY + +@onready var default_modulate : Color = modulate +@onready var mouse_signals_setuped : bool = setup_mouse_signals() + +var inspected : bool = false : + set(v): + print(v) + inspected = v + modulate = MODULATE_INSPECTED_COLOR if inspected else default_modulate + +func setup_mouse_signals() -> bool: + mouse_entered.connect(_on_mouse_entered) + mouse_exited.connect(_on_mouse_excited) + return true + +func _on_mouse_entered(): + Pointer.inspect_entity(self) + +func _on_mouse_excited(): + Pointer.stop_inspect_entity(self) + +func inspected_text(): + return "" \ No newline at end of file diff --git a/entities/scripts/inspectable_entity.gd.uid b/entities/scripts/inspectable_entity.gd.uid new file mode 100644 index 0000000..15a1011 --- /dev/null +++ b/entities/scripts/inspectable_entity.gd.uid @@ -0,0 +1 @@ +uid://d3bk52402ylvl diff --git a/entities/underground_loot/scripts/underground_loot.gd b/entities/underground_loot/scripts/underground_loot.gd index ee05360..f1df297 100644 --- a/entities/underground_loot/scripts/underground_loot.gd +++ b/entities/underground_loot/scripts/underground_loot.gd @@ -1,7 +1,7 @@ -extends Area2D +extends InspectableEntity class_name UndergroundLoot -const AREA_WIDTH = 10 +const AREA_WIDTH = 20 const LOOTED_ITEM_RANDOM_RANGE = 100 const SPRITE_SCENE : PackedScene = preload("res://entities/underground_loot/underground_loot_sprite.tscn") @@ -15,6 +15,9 @@ var planet : Planet # mis à jour par la classe Planet func _init(_planet = null): planet = _planet +func inspected_text(): + return "Buried Loot" + func generate_sprite() -> Node2D: var object = SPRITE_SCENE.instantiate() diff --git a/gui/game/game_gui.tscn b/gui/game/game_gui.tscn index 4e43e22..8b7fa7f 100644 --- a/gui/game/game_gui.tscn +++ b/gui/game/game_gui.tscn @@ -257,6 +257,7 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 3 size_flags_vertical = 3 +mouse_filter = 1 script = ExtResource("1_udau0") [node name="GameAction" type="TextureButton" parent="."] @@ -266,6 +267,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 1 [node name="MarginContainer" type="MarginContainer" parent="."] layout_mode = 1 @@ -343,6 +345,7 @@ layout_mode = 2 size_flags_horizontal = 8 size_flags_vertical = 8 focus_mode = 0 +mouse_filter = 1 theme = ExtResource("2_nq5i2") text = "Recharge" icon = ExtResource("4_k4juk") @@ -455,6 +458,7 @@ layout_mode = 2 size_flags_horizontal = 8 size_flags_vertical = 0 focus_mode = 0 +mouse_filter = 1 icon = ExtResource("9_2wykm") [node name="RechargeFade" type="ColorRect" parent="."] diff --git a/gui/game/mouse/scripts/mouse.gd b/gui/game/mouse/scripts/mouse.gd new file mode 100644 index 0000000..482e3a1 --- /dev/null +++ b/gui/game/mouse/scripts/mouse.gd @@ -0,0 +1,10 @@ +extends Control +class_name Mouse + +@export var default_cursor : Texture2D + +func _ready(): + Input.set_custom_mouse_cursor(default_cursor) + +func _process(_delta): + position = get_viewport().get_mouse_position() diff --git a/gui/game/mouse/scripts/mouse.gd.uid b/gui/game/mouse/scripts/mouse.gd.uid new file mode 100644 index 0000000..71532a4 --- /dev/null +++ b/gui/game/mouse/scripts/mouse.gd.uid @@ -0,0 +1 @@ +uid://dm0d2sxki2ljd diff --git a/gui/game/pause/scripts/pause.gd b/gui/game/pause/scripts/pause.gd index a8b962d..0cb8f44 100644 --- a/gui/game/pause/scripts/pause.gd +++ b/gui/game/pause/scripts/pause.gd @@ -2,7 +2,6 @@ extends Control var pause = false : set(v): - print(pause) pause = v visible = pause get_tree().paused = pause diff --git a/gui/pointer/assets/cursors/pointer.svg b/gui/pointer/assets/cursors/pointer.svg new file mode 100644 index 0000000..15cd6c1 --- /dev/null +++ b/gui/pointer/assets/cursors/pointer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/gui/pointer/assets/cursors/pointer.svg.import b/gui/pointer/assets/cursors/pointer.svg.import new file mode 100644 index 0000000..9f17eef --- /dev/null +++ b/gui/pointer/assets/cursors/pointer.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bspffyprdywgc" +path="res://.godot/imported/pointer.svg-7e9852b8fc87e59d7ede00033ef3f170.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://gui/pointer/assets/cursors/pointer.svg" +dest_files=["res://.godot/imported/pointer.svg-7e9852b8fc87e59d7ede00033ef3f170.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/gui/pointer/pointer.tscn b/gui/pointer/pointer.tscn new file mode 100644 index 0000000..b0cbd7a --- /dev/null +++ b/gui/pointer/pointer.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=3 format=3 uid="uid://0yr6b2jtuttm"] + +[ext_resource type="Script" uid="uid://vhumsfntpqcl" path="res://gui/pointer/scripts/pointer.gd" id="1_1pe2k"] +[ext_resource type="Texture2D" uid="uid://bspffyprdywgc" path="res://gui/pointer/assets/cursors/pointer.svg" id="2_q4bvb"] + +[node name="Pointer" type="Node"] +process_mode = 3 +script = ExtResource("1_1pe2k") +default_cursor = ExtResource("2_q4bvb") + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = 128 + +[node name="Inspector" type="Control" parent="CanvasLayer"] +unique_name_in_owner = true +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +mouse_filter = 2 + +[node name="InspectorText" type="Label" parent="CanvasLayer/Inspector"] +unique_name_in_owner = true +z_index = 1 +layout_mode = 1 +offset_left = 26.0 +offset_right = 66.0 +offset_bottom = 23.0 diff --git a/gui/pointer/scripts/pointer.gd b/gui/pointer/scripts/pointer.gd new file mode 100644 index 0000000..92e5ab2 --- /dev/null +++ b/gui/pointer/scripts/pointer.gd @@ -0,0 +1,26 @@ +extends Node + +@export var default_cursor : Texture2D + +var inspected_entity : InspectableEntity = null + +func _ready(): + Input.set_custom_mouse_cursor(default_cursor) + +func _process(_delta): + %Inspector.position = get_viewport().get_mouse_position() + +func inspect_entity(entity : InspectableEntity): + if inspected_entity and inspected_entity != entity: + inspected_entity.inspected = false + %InspectorText.text = entity.inspected_text() + %InspectorText.visible = true + inspected_entity = entity + inspected_entity.inspected = true + +func stop_inspect_entity(entity : InspectableEntity): + entity.inspected = false + if inspected_entity == entity: + %InspectorText.visible = false + inspected_entity = null + diff --git a/gui/pointer/scripts/pointer.gd.uid b/gui/pointer/scripts/pointer.gd.uid new file mode 100644 index 0000000..1cb32e6 --- /dev/null +++ b/gui/pointer/scripts/pointer.gd.uid @@ -0,0 +1 @@ +uid://vhumsfntpqcl diff --git a/project.godot b/project.godot index f82facb..23ee1e5 100644 --- a/project.godot +++ b/project.godot @@ -17,6 +17,10 @@ run/main_scene="uid://c5bruelvqbm1k" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="uid://df0y0s666ui4h" +[autoload] + +Pointer="*res://gui/pointer/pointer.tscn" + [input] move_right={ diff --git a/root.tscn b/root.tscn index 8102b17..6edc511 100644 --- a/root.tscn +++ b/root.tscn @@ -15,6 +15,7 @@ start_scene_path = "uid://d28cp7a21kwou" [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="Background1" type="TextureRect" parent="CanvasLayer"] +z_index = -1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -25,6 +26,7 @@ expand_mode = 2 stretch_mode = 6 [node name="Background2" type="TextureRect" parent="CanvasLayer"] +z_index = -1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0