From f97ee1d7c41e07296b6c31b9b85aa299805ba2f1 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Thu, 4 Dec 2025 17:32:05 +0200 Subject: Add test NPC --- game_camera.gd | 5 +++- project.godot | 1 + ps_cinematic.gd | 16 +++++++++++++ ps_cinematic.gd.uid | 1 + room_test3.tscn | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 ps_cinematic.gd create mode 100644 ps_cinematic.gd.uid 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"] -- cgit v1.3