From f5d479f7ffea46e33b252c778a15cfbc734fa59c Mon Sep 17 00:00:00 2001 From: Bo Thompson Date: Thu, 4 Dec 2025 10:12:34 -0500 Subject: [PATCH] More work on implementing quests and tech trees --- data/quest.gd | 6 +- external/glowing-line.png | Bin 0 -> 820 bytes external/glowing-line.png.import | 40 ++++++++++++ project.godot | 3 +- scripts/employee_panel.gd | 17 +++++ scripts/employee_panel.gd.uid | 1 + scripts/enemy.gd | 1 + scripts/game_manager.gd | 5 +- scripts/guild_employee.gd | 13 ++++ scripts/player.gd | 2 +- shaders/glowing_line.gdshader | 13 ++++ shaders/glowing_line.gdshader.uid | 1 + templates/employee_develop_tree.tscn | 94 +++++++++++++++++++++++++++ templates/employee_panel.tscn | 34 ++++++++++ templates/enemies/feral_pig.tscn | 6 ++ templates/receptionist.tscn | 15 ++++- 16 files changed, 241 insertions(+), 10 deletions(-) create mode 100644 external/glowing-line.png create mode 100644 external/glowing-line.png.import create mode 100644 scripts/employee_panel.gd create mode 100644 scripts/employee_panel.gd.uid create mode 100644 shaders/glowing_line.gdshader create mode 100644 shaders/glowing_line.gdshader.uid create mode 100644 templates/employee_develop_tree.tscn create mode 100644 templates/employee_panel.tscn diff --git a/data/quest.gd b/data/quest.gd index 26b9e40..0f3b3a4 100644 --- a/data/quest.gd +++ b/data/quest.gd @@ -19,10 +19,6 @@ enum Locations{ } class Event: - var enemy_types: Dictionary[String, PackedScene] = { - "feral pig": preload("res://templates/enemies/feral_pig.tscn"), - "goo": preload("res://templates/enemies/goo.tscn") - } enum Type{ WAIT, COMBAT, @@ -73,7 +69,7 @@ class Event: combat_state = CombatState.FIGHTING var enemy_list = [] for enemy_name in enemies: - enemy_list.append(enemy_types[enemy_name].instantiate()) + enemy_list.append(Enemy.list[enemy_name].instantiate()) quest.questview.set_questor_animation("idle") for enemy in enemy_list: enemy.flip_h() diff --git a/external/glowing-line.png b/external/glowing-line.png new file mode 100644 index 0000000000000000000000000000000000000000..948a757f5e345c8065475ca63d2cf6171d23c985 GIT binary patch literal 820 zcmV-41Izr0P)Px%?ny*JRCt{2o6(NbFc3vgTC?zk5E9~-_;>z;HxL3OSV0L7TesuMc@7IQe zr(6PB085ZHlJ_QXkV`-kE|FiG5SHyH57;v$UE>X^iZL)jmIccL){r2Vmz{7Q`Nu^e9_2m4E27(H{^$T{u0ZHJ9$ z?@5RNycG>{OB~b#H7|b-uCWW~NyvI_0N!&}WUo4x0-_$&n>Fj1+VE98_uqh$L;fX}4l_1S=YP#==$Y;7*HYaM>n zp7dP0)JnuB0(>Ps6ZFmn!T)xU{jA+2M^d+YJ5g?@$_X9YB1d_Aw+p}*QsUl0sT?4l zB}gnK2zpCbdOHF5#M$*>`X@7xlJ&^7CJz4cjW|tei~(>au1|@)m|&H22EkhIZ{9F2V>b$PuDSY>a()+hzOq)vVaS>FKGmbg^n5j9?#c)%ZQ(rcS}iR$GLfZx>5 zzV-54-4amc0l)BFeJ!q^gX;~sC172xmn|LMq@4sfsKz;4-jZQ*2*9JNEV=qx1&~Mt yI5-_Qj~D}TxQl<8c`WwYFiIZK(b3VdY5W5i void: + self.employee = employee + global_position = Vector2(get_viewport().get_mouse_position()) - size / 2 + return + +func display_develop_tree() -> void: + pass + +func _on_develop_button_pressed() -> void: + display_develop_tree() + +func _on_focus_exited() -> void: + queue_free() diff --git a/scripts/employee_panel.gd.uid b/scripts/employee_panel.gd.uid new file mode 100644 index 0000000..fba7980 --- /dev/null +++ b/scripts/employee_panel.gd.uid @@ -0,0 +1 @@ +uid://pwj0ai6mg7o2 diff --git a/scripts/enemy.gd b/scripts/enemy.gd index 8bd5bb1..175fc52 100644 --- a/scripts/enemy.gd +++ b/scripts/enemy.gd @@ -15,6 +15,7 @@ static func load_enemy_list() -> void: list[template.name] = template filename = dir.get_next() dir.list_dir_end() + func attack(target : QuestSprite) -> void: diff --git a/scripts/game_manager.gd b/scripts/game_manager.gd index 7f24c17..60e8a13 100644 --- a/scripts/game_manager.gd +++ b/scripts/game_manager.gd @@ -54,7 +54,10 @@ func toggle_player_profile(): func start_shift(shift_num) -> void: current_shift = shift_num - panel.reset_timer(shifts[shift_num]) + if len(shifts) < 1: + panel.reset_timer(600) + else: + panel.reset_timer(shifts[shift_num]) func end_shift() -> void: take_screenshot() diff --git a/scripts/guild_employee.gd b/scripts/guild_employee.gd index 47173a7..c1fd234 100644 --- a/scripts/guild_employee.gd +++ b/scripts/guild_employee.gd @@ -1,5 +1,7 @@ class_name GuildEmployee extends AdventurerSprite +const employee_panel_template = preload("res://templates/employee_panel.tscn") + @export var speech :String @onready var queue : GuildQueue = $Queue @@ -10,3 +12,14 @@ func interact(interactor, type : String = "") -> void: Guild.register_guild_member(interactor.data, true) #interactor.advance_ service_provided.emit() + + +func _on_mouse_area_input_event(viewport: Node, event: InputEvent, shape_idx: int) -> void: + if event is not InputEventMouseButton: + return + var evt = event as InputEventMouseButton + if evt.button_index == MOUSE_BUTTON_RIGHT: + var emp_panel : PanelContainer = employee_panel_template.instantiate() + get_tree().root.add_child(emp_panel) + emp_panel.setup(self) + emp_panel.grab_focus() diff --git a/scripts/player.gd b/scripts/player.gd index 3f13234..0b495cf 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -50,7 +50,7 @@ func _physics_process(delta: float) -> void: func _unhandled_input(event: InputEvent) -> void: var evt : InputEventMouseButton = event as InputEventMouseButton - if evt and evt.pressed: + if evt and evt.button_index == MOUSE_BUTTON_LEFT and evt.pressed: approach(evt.global_position) nav_agent.target_desired_distance = stop_range interaction_target = null diff --git a/shaders/glowing_line.gdshader b/shaders/glowing_line.gdshader new file mode 100644 index 0000000..18a8691 --- /dev/null +++ b/shaders/glowing_line.gdshader @@ -0,0 +1,13 @@ +// NOTE: Shader automatically converted from Godot Engine 4.5.1.stable.mono's CanvasItemMaterial. + +shader_type canvas_item; +render_mode blend_mix; +uniform sampler2D main_texture; + +void vertex() { +} + +void fragment() { + vec4 col = texture(main_texture, UV); + COLOR = col; +} \ No newline at end of file diff --git a/shaders/glowing_line.gdshader.uid b/shaders/glowing_line.gdshader.uid new file mode 100644 index 0000000..fe1a002 --- /dev/null +++ b/shaders/glowing_line.gdshader.uid @@ -0,0 +1 @@ +uid://cm3u77icj5agh diff --git a/templates/employee_develop_tree.tscn b/templates/employee_develop_tree.tscn new file mode 100644 index 0000000..87d51ec --- /dev/null +++ b/templates/employee_develop_tree.tscn @@ -0,0 +1,94 @@ +[gd_scene load_steps=4 format=3 uid="uid://dv4pmw8f0qr3i"] + +[sub_resource type="Environment" id="Environment_dkoub"] +ambient_light_source = 1 +reflected_light_source = 1 +glow_enabled = true +glow_intensity = 8.0 +glow_strength = 2.0 +glow_bloom = 1.0 + +[sub_resource type="Shader" id="Shader_dkoub"] +code = "// NOTE: Shader automatically converted from Godot Engine 4.5.1.stable.mono's CanvasItemMaterial. + +shader_type canvas_item; +render_mode blend_mix; +uniform sampler2D main_texture; + +void vertex() { +} + +void fragment() { + vec4 col = texture(main_texture, UV); + COLOR = col; +}" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_000fu"] +shader = SubResource("Shader_dkoub") + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_dkoub") + +[node name="PanelContainer" type="PanelContainer" parent="."] +layout_mode = 0 +offset_right = 800.0 +offset_bottom = 427.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="PanelContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="PanelContainer/VBoxContainer/PanelContainer"] +layout_mode = 2 +text = "Development Options" + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer"] +custom_minimum_size = Vector2(800, 400) +layout_mode = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 + +[node name="Container" type="Control" parent="PanelContainer/VBoxContainer/MarginContainer"] +layout_mode = 2 + +[node name="Button" type="Button" parent="PanelContainer/VBoxContainer/MarginContainer/Container"] +layout_mode = 0 +offset_top = 152.0 +offset_right = 97.0 +offset_bottom = 183.0 +text = "Sign-up List" + +[node name="Button2" type="Button" parent="PanelContainer/VBoxContainer/MarginContainer/Container"] +layout_mode = 0 +offset_left = 189.0 +offset_top = 152.0 +offset_right = 340.0 +offset_bottom = 183.0 +text = "Roster Sheet" + +[node name="Button3" type="Button" parent="PanelContainer/VBoxContainer/MarginContainer/Container"] +layout_mode = 0 +offset_left = 412.0 +offset_top = 151.0 +offset_right = 559.0 +offset_bottom = 182.0 +text = "Roster Book" + +[node name="Line2D" type="Line2D" parent="PanelContainer/VBoxContainer/MarginContainer/Container"] +material = SubResource("ShaderMaterial_000fu") +position = Vector2(101, 168) +points = PackedVector2Array(0, 0, 84, 0) +width = 3.0 +begin_cap_mode = 2 +antialiased = true diff --git a/templates/employee_panel.tscn b/templates/employee_panel.tscn new file mode 100644 index 0000000..dc98a59 --- /dev/null +++ b/templates/employee_panel.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=2 format=3 uid="uid://ejiv2wdgeeva"] + +[ext_resource type="Script" uid="uid://pwj0ai6mg7o2" path="res://scripts/employee_panel.gd" id="1_ls6g8"] + +[node name="Employee Panel" type="PanelContainer"] +offset_right = 126.0 +offset_bottom = 70.0 +focus_mode = 1 +script = ExtResource("1_ls6g8") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 +mouse_filter = 2 + +[node name="Label" type="Label" parent="VBoxContainer/PanelContainer"] +layout_mode = 2 +text = "Employee Name" + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 3 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 0 + +[node name="DevelopButton" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Develop" + +[connection signal="focus_exited" from="." to="." method="_on_focus_exited"] +[connection signal="pressed" from="VBoxContainer/DevelopButton" to="." method="_on_develop_button_pressed"] diff --git a/templates/enemies/feral_pig.tscn b/templates/enemies/feral_pig.tscn index 221e063..bad0a03 100644 --- a/templates/enemies/feral_pig.tscn +++ b/templates/enemies/feral_pig.tscn @@ -257,3 +257,9 @@ offset_bottom = 22.0 text = "Feral Pig" horizontal_alignment = 1 metadata/_edit_lock_ = true + +[node name="Button" type="Button" parent="."] +layout_mode = 0 +offset_right = 8.0 +offset_bottom = 8.0 +toggle_mode = true diff --git a/templates/receptionist.tscn b/templates/receptionist.tscn index cab024a..63e97b3 100644 --- a/templates/receptionist.tscn +++ b/templates/receptionist.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://cf6nnjyp8kv78"] +[gd_scene load_steps=9 format=3 uid="uid://cf6nnjyp8kv78"] [ext_resource type="Script" uid="uid://b2unuudq5qfl" path="res://scripts/guild_employee.gd" id="1_vwytd"] [ext_resource type="Texture2D" uid="uid://nrhxsevqn82" path="res://graphics/receptionist.png" id="2_dlmqr"] @@ -12,6 +12,10 @@ height = 54.0 [sub_resource type="BlackboardPlan" id="BlackboardPlan_xsrct"] +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_51mum"] +radius = 29.0 +height = 108.0 + [node name="Receptionist" type="CharacterBody2D"] script = ExtResource("1_vwytd") @@ -38,3 +42,12 @@ position = Vector2(44, -93) [node name="BTPlayer" type="BTPlayer" parent="."] behavior_tree = ExtResource("7_qmbsn") blackboard_plan = SubResource("BlackboardPlan_xsrct") + +[node name="MouseArea" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="MouseArea"] +position = Vector2(0, -50) +shape = SubResource("CapsuleShape2D_51mum") +debug_color = Color(0.19833331, 0.7, 0, 0.41960785) + +[connection signal="input_event" from="MouseArea" to="." method="_on_mouse_area_input_event"]