summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-12-04 17:32:05 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-12-04 17:32:05 +0200
commitf97ee1d7c41e07296b6c31b9b85aa299805ba2f1 (patch)
treeb2276e82bb73544f6dd0d3853f81ed9a6fe6e80e
parent6686bf1a7a6e81b30c8482cc1d2856f1401f4531 (diff)
Add test NPC
-rw-r--r--game_camera.gd5
-rw-r--r--project.godot1
-rw-r--r--ps_cinematic.gd16
-rw-r--r--ps_cinematic.gd.uid1
-rw-r--r--room_test3.tscn68
5 files changed, 89 insertions, 2 deletions
diff --git a/game_camera.gd b/game_camera.gd
index 4a9ac1d..b38d492 100644
--- a/game_camera.gd
+++ b/game_camera.gd
@@ -16,7 +16,10 @@ func _process(_delta: float) -> void:
if targets.size() == 0: return
for target in targets:
- pos += target._camera_target()
+ if target.has_method("_camera_target"):
+ pos += target._camera_target()
+ else:
+ pos += target.global_position
n += 1
global_position = pos / n
diff --git a/project.godot b/project.godot
index b8a6f9a..e3f4c19 100644
--- a/project.godot
+++ b/project.godot
@@ -75,6 +75,7 @@ action={
2d_physics/layer_3="Door"
2d_physics/layer_4="Computer"
2d_physics/layer_5="TriggerButton"
+2d_physics/layer_6="NPCArea"
[rendering]
diff --git a/ps_cinematic.gd b/ps_cinematic.gd
new file mode 100644
index 0000000..beff319
--- /dev/null
+++ b/ps_cinematic.gd
@@ -0,0 +1,16 @@
+class_name PlayerStateCinematic
+extends PlayerState
+
+func _to_string() -> String:
+ return "PlayerStateCinematic"
+
+func _handle(_delta: float):
+ if p.velocity.x > 0:
+ p.anim_sp.flip_h = false
+ elif p.velocity.x < 0:
+ p.anim_sp.flip_h = true
+
+ p.anim_sp.set_animation("idle")
+
+func _handle_physics(_delta: float):
+ pass
diff --git a/ps_cinematic.gd.uid b/ps_cinematic.gd.uid
new file mode 100644
index 0000000..f97621c
--- /dev/null
+++ b/ps_cinematic.gd.uid
@@ -0,0 +1 @@
+uid://bn5h74kkubfw4
diff --git a/room_test3.tscn b/room_test3.tscn
index 336f02a..f0573fb 100644
--- a/room_test3.tscn
+++ b/room_test3.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=11 format=4 uid="uid://3o7g1rxy06sb"]
+[gd_scene load_steps=15 format=4 uid="uid://3o7g1rxy06sb"]
[ext_resource type="Texture2D" uid="uid://dkek11j5dh6as" path="res://assets.untracked/kenney_1-bit-platformer-pack/Tiles/Default/tile_0338.png" id="1_pwspw"]
[ext_resource type="Script" uid="uid://cbhily4o7e2r3" path="res://room.gd" id="1_w1h0g"]
@@ -8,6 +8,8 @@
[ext_resource type="Script" uid="uid://b77ngd0fnqxi5" path="res://computer.gd" id="3_bml3v"]
[ext_resource type="PackedScene" uid="uid://dfyvkc2qlcdac" path="res://game_camera.tscn" id="3_w1h0g"]
[ext_resource type="PackedScene" uid="uid://df0loiahar23o" path="res://door.tscn" id="6_i21us"]
+[ext_resource type="Texture2D" uid="uid://dwfeqystr0js4" path="res://assets.untracked/kenney_1-bit-platformer-pack/Tiles/Transparent/tile_0285.png" id="9_bplq6"]
+[ext_resource type="Texture2D" uid="uid://oiqxoxuexmgu" path="res://assets/kenney_1-bit-input-prompts-pixel-16/Tiles (Black)/tile_0000.png" id="10_rlnij"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_bml3v"]
size = Vector2(7, 7)
@@ -18,6 +20,31 @@ _data = {
}
point_count = 6
+[sub_resource type="GDScript" id="GDScript_bplq6"]
+script/source = "extends Sprite2D
+
+var player: Player
+var tb
+
+func _on_player_entered(p: Player) -> void:
+ player = p
+ player.request_state_init()
+ tb = get_parent().get_node(\"TextBubble\")
+ tb.visible = true
+ tb.add_to_group(\"camera_target\")
+
+func _process(_delta: float) -> void:
+ if player and tb and tb.visible and Input.is_action_just_pressed(\"action\"):
+ tb.visible = false
+ tb.remove_from_group(\"camera_target\")
+ player.request_state_normal()
+ player = null
+ tb = null
+"
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_rlnij"]
+size = Vector2(49, 15.5)
+
[node name="RoomTest3" type="Node2D" groups=["debug_info"]]
process_mode = 1
script = ExtResource("1_w1h0g")
@@ -93,5 +120,44 @@ target_door = "DoorLeft"
[node name="ComputerPath" type="Path2D" parent="."]
curve = SubResource("Curve2D_bml3v")
+[node name="DialogueTestNPC" type="Sprite2D" parent="."]
+modulate = Color(0.30980393, 1, 1, 1)
+position = Vector2(-104, -56)
+texture = ExtResource("9_bplq6")
+script = SubResource("GDScript_bplq6")
+
+[node name="Area2D" type="Area2D" parent="DialogueTestNPC"]
+collision_layer = 32
+collision_mask = 2
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="DialogueTestNPC/Area2D"]
+position = Vector2(1, 1.75)
+shape = SubResource("RectangleShape2D_rlnij")
+
+[node name="TextBubble" type="Node2D" parent="."]
+visible = false
+position = Vector2(-155, -116)
+
+[node name="ColorRect" type="ColorRect" parent="TextBubble"]
+offset_right = 40.0
+offset_bottom = 40.0
+scale = Vector2(1.3009955, 0.30328855)
+color = Color(1, 0.8980392, 0.7490196, 1)
+
+[node name="Label" type="Label" parent="TextBubble"]
+offset_left = 4.0
+offset_top = 3.0
+offset_right = 44.0
+offset_bottom = 26.0
+scale = Vector2(0.25, 0.25)
+theme_override_colors/font_color = Color(0, 0, 0, 1)
+text = "yo"
+
+[node name="Tile0000" type="Sprite2D" parent="TextBubble"]
+position = Vector2(45, 6)
+scale = Vector2(0.5, 0.5)
+texture = ExtResource("10_rlnij")
+
[connection signal="body_entered" from="Computer1/Area2D" to="Computer1" method="_on_area_2d_body_entered"]
[connection signal="body_entered" from="Computer2/Area2D" to="Computer2" method="_on_area_2d_body_entered"]
+[connection signal="body_entered" from="DialogueTestNPC/Area2D" to="DialogueTestNPC" method="_on_player_entered"]