diff --git a/jrpg/scenes/TestLVL.tscn b/jrpg/scenes/TestLVL.tscn index fc911f1..4ce5852 100644 --- a/jrpg/scenes/TestLVL.tscn +++ b/jrpg/scenes/TestLVL.tscn @@ -1,12 +1,16 @@ -[gd_scene load_steps=24 format=2] +[gd_scene load_steps=29 format=2] [ext_resource path="res://jrpg/scripts/levels/spawner.gd" type="Script" id=1] +[ext_resource path="res://addons/yarn_spinner/yarn_runner_node.gd" type="Script" id=2] [ext_resource path="res://jrpg/scenes/entities/Pickup.tscn" type="PackedScene" id=3] +[ext_resource path="res://jrpg/yarn_scripts/event1.yarn" type="Resource" id=4] +[ext_resource path="res://jrpg/scripts/levels/test_coins.gd" type="Script" id=5] [ext_resource path="res://jrpg/characters/player.tres" type="Resource" id=6] [ext_resource path="res://jrpg/misc/jrpg_env.tres" type="Environment" id=7] [ext_resource path="res://jrpg/models/nature/dirt.material" type="Material" id=8] [ext_resource path="res://jrpg/models/nature/grass.material" type="Material" id=9] [ext_resource path="res://jrpg/models/nature/_defaultMat.material" type="Material" id=10] +[ext_resource path="res://jrpg/scripts/levels/script_trigger.gd" type="Script" id=11] [ext_resource path="res://jrpg/characters/basic_enemy.tres" type="Resource" id=12] [ext_resource path="res://jrpg/scripts/misc/test_level.gd" type="Script" id=15] @@ -232,6 +236,9 @@ surfaces/1 = { [sub_resource type="ConcavePolygonShape" id=14] data = PoolVector3Array( -0.2022, 0.1046, -0.5078, -0.1617, 0, -0.4063, 0.286, 0, -0.2931, 0.286, 0, -0.2931, 0.3575, 0.1046, -0.3664, -0.2022, 0.1046, -0.5078, -0.2022, 0.1046, -0.5078, -0.3432, 0.1046, -0.3484, -0.2746, 0, -0.2787, -0.2746, 0, -0.2787, -0.1617, 0, -0.4063, -0.2022, 0.1046, -0.5078, 0.3575, 0.1046, -0.3664, 0.286, 0, -0.2931, 0.4258, 0, -0.0505, 0.4258, 0, -0.0505, 0.5322, 0.1046, -0.0631, 0.3575, 0.1046, -0.3664, 0.3607, 0, 0.2721, 0.4508, 0.1046, 0.3401, 0.5322, 0.1046, -0.0631, 0.5322, 0.1046, -0.0631, 0.4258, 0, -0.0505, 0.3607, 0, 0.2721, -0.2461, 0.1046, -0.0843, -0.1969, 0, -0.0674, -0.2746, 0, -0.2787, -0.2746, 0, -0.2787, -0.3432, 0.1046, -0.3484, -0.2461, 0.1046, -0.0843, -0.4258, 0, 0.2304, -0.5322, 0.1046, 0.288, -0.2461, 0.1046, 0.5078, -0.2461, 0.1046, 0.5078, -0.1969, 0, 0.4063, -0.4258, 0, 0.2304, -0.2461, 0.1732, -0.0843, -0.5322, 0.1732, 0.288, -0.5322, 0.1046, 0.288, -0.5322, 0.1046, 0.288, -0.2461, 0.1046, -0.0843, -0.2461, 0.1732, -0.0843, -0.2162, 0.3211, -0.2195, -0.3432, 0.1732, -0.3484, -0.2022, 0.1732, -0.5078, -0.2022, 0.1732, -0.5078, -0.1274, 0.3211, -0.3199, -0.2162, 0.3211, -0.2195, -0.2022, 0.1732, -0.5078, -0.2022, 0.1046, -0.5078, 0.3575, 0.1046, -0.3664, 0.3575, 0.1046, -0.3664, 0.3575, 0.1732, -0.3664, -0.2022, 0.1732, -0.5078, -0.3432, 0.1732, -0.3484, -0.2461, 0.1732, -0.0843, -0.2461, 0.1046, -0.0843, -0.2461, 0.1046, -0.0843, -0.3432, 0.1046, -0.3484, -0.3432, 0.1732, -0.3484, -0.2162, 0.3211, -0.2195, -0.1551, 0.3211, -0.0531, -0.2461, 0.1732, -0.0843, -0.2461, 0.1732, -0.0843, -0.3432, 0.1732, -0.3484, -0.2162, 0.3211, -0.2195, 0.3575, 0.1046, -0.3664, 0.5322, 0.1046, -0.0631, 0.5322, 0.1732, -0.0631, 0.5322, 0.1732, -0.0631, 0.3575, 0.1732, -0.3664, 0.3575, 0.1046, -0.3664, -0.2022, 0.1732, -0.5078, -0.3432, 0.1732, -0.3484, -0.3432, 0.1046, -0.3484, -0.3432, 0.1046, -0.3484, -0.2022, 0.1046, -0.5078, -0.2022, 0.1732, -0.5078, 0.4508, 0.1732, 0.3401, 0.4508, 0.1046, 0.3401, -0.0034, 0.1046, 0.5055, -0.0034, 0.1046, 0.5055, -0.0034, 0.1732, 0.5055, 0.4508, 0.1732, 0.3401, -0.2461, 0.1046, -0.0843, -0.5322, 0.1046, 0.288, -0.4258, 0, 0.2304, -0.4258, 0, 0.2304, -0.1969, 0, -0.0674, -0.2461, 0.1046, -0.0843, -0.2461, 0.1732, 0.5078, -0.2461, 0.1046, 0.5078, -0.5322, 0.1046, 0.288, -0.5322, 0.1046, 0.288, -0.5322, 0.1732, 0.288, -0.2461, 0.1732, 0.5078, -0.1617, 0, -0.4063, -0.2746, 0, -0.2787, -0.1969, 0, -0.0674, -0.1969, 0, -0.0674, -0.1969, 0, 0.4063, -0.1617, 0, -0.4063, -0.1969, 0, 0.4063, -0.0028, 0, 0.4044, -0.1617, 0, -0.4063, -0.0028, 0, 0.4044, 0.286, 0, -0.2931, -0.1617, 0, -0.4063, -0.0028, 0, 0.4044, 0.3607, 0, 0.2721, 0.286, 0, -0.2931, 0.3607, 0, 0.2721, 0.4258, 0, -0.0505, 0.286, 0, -0.2931, -0.1969, 0, 0.4063, -0.1969, 0, -0.0674, -0.4258, 0, 0.2304, -0.2461, 0.1732, 0.5078, -0.5322, 0.1732, 0.288, -0.4337, 0.2471, 0.2347, -0.4337, 0.2471, 0.2347, -0.2452, 0.3211, 0.2507, -0.2461, 0.1732, 0.5078, -0.2452, 0.3211, 0.2507, -0.1551, 0.3211, 0.3199, -0.2461, 0.1732, 0.5078, 0.5322, 0.1046, -0.0631, 0.4508, 0.1046, 0.3401, 0.4508, 0.1732, 0.3401, 0.4508, 0.1732, 0.3401, 0.5322, 0.1732, -0.0631, 0.5322, 0.1046, -0.0631, 0.4508, 0.1046, 0.3401, 0.3607, 0, 0.2721, -0.0028, 0, 0.4044, -0.0028, 0, 0.4044, -0.0034, 0.1046, 0.5055, 0.4508, 0.1046, 0.3401, -0.0034, 0.1732, 0.5055, -0.2461, 0.1732, 0.5078, -0.1551, 0.3211, 0.3199, -0.1551, 0.3211, 0.3199, -0.0022, 0.3211, 0.3185, -0.0034, 0.1732, 0.5055, 0.4508, 0.1732, 0.3401, 0.284, 0.3211, 0.2142, 0.3353, 0.3211, -0.0398, 0.3353, 0.3211, -0.0398, 0.5322, 0.1732, -0.0631, 0.4508, 0.1732, 0.3401, -0.1274, 0.3211, -0.3199, -0.2022, 0.1732, -0.5078, 0.3575, 0.1732, -0.3664, 0.3575, 0.1732, -0.3664, 0.2252, 0.3211, -0.2308, -0.1274, 0.3211, -0.3199, -0.0034, 0.1046, 0.5055, -0.0028, 0, 0.4044, -0.1969, 0, 0.4063, -0.1969, 0, 0.4063, -0.2461, 0.1046, 0.5078, -0.0034, 0.1046, 0.5055, -0.4337, 0.2471, 0.2347, -0.5322, 0.1732, 0.288, -0.2461, 0.1732, -0.0843, -0.2461, 0.1732, -0.0843, -0.2452, 0.3211, 0.0642, -0.4337, 0.2471, 0.2347, -0.2461, 0.1732, -0.0843, -0.1551, 0.3211, -0.0531, -0.2452, 0.3211, 0.0642, 0.4508, 0.1732, 0.3401, -0.0034, 0.1732, 0.5055, -0.0022, 0.3211, 0.3185, -0.0022, 0.3211, 0.3185, 0.284, 0.3211, 0.2142, 0.4508, 0.1732, 0.3401, -0.2452, 0.3211, 0.0642, -0.2452, 0.3211, 0.2507, -0.4337, 0.2471, 0.2347, 0.3353, 0.3211, -0.0398, 0.2252, 0.3211, -0.2308, 0.3575, 0.1732, -0.3664, 0.3575, 0.1732, -0.3664, 0.5322, 0.1732, -0.0631, 0.3353, 0.3211, -0.0398, -0.0034, 0.1732, 0.5055, -0.0034, 0.1046, 0.5055, -0.2461, 0.1046, 0.5078, -0.2461, 0.1046, 0.5078, -0.2461, 0.1732, 0.5078, -0.0034, 0.1732, 0.5055, -0.1551, 0.3211, 0.3199, -0.2452, 0.3211, 0.2507, -0.2452, 0.3211, 0.0642, -0.2452, 0.3211, 0.0642, -0.1551, 0.3211, -0.0531, -0.1551, 0.3211, 0.3199, -0.1551, 0.3211, -0.0531, -0.0022, 0.3211, 0.3185, -0.1551, 0.3211, 0.3199, -0.1551, 0.3211, -0.0531, -0.1274, 0.3211, -0.3199, -0.0022, 0.3211, 0.3185, -0.1274, 0.3211, -0.3199, 0.2252, 0.3211, -0.2308, -0.0022, 0.3211, 0.3185, 0.2252, 0.3211, -0.2308, 0.284, 0.3211, 0.2142, -0.0022, 0.3211, 0.3185, 0.2252, 0.3211, -0.2308, 0.3353, 0.3211, -0.0398, 0.284, 0.3211, 0.2142, -0.1274, 0.3211, -0.3199, -0.1551, 0.3211, -0.0531, -0.2162, 0.3211, -0.2195 ) +[sub_resource type="SphereShape" id=15] +radius = 5.11979 + [node name="TestLVL" type="Spatial"] script = ExtResource( 15 ) @@ -366,25 +373,26 @@ material/1 = null shape = SubResource( 14 ) [node name="Coins" type="Spatial" parent="."] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.96386, 0 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.43111, 0 ) +script = ExtResource( 5 ) +coin_scene = ExtResource( 3 ) -[node name="Pickup" parent="Coins" instance=ExtResource( 3 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.8056, 3.95915 ) +[node name="CoinSpawn1" type="Spatial" parent="Coins"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 14.3334, 0, 0 ) -[node name="Pickup2" parent="Coins" instance=ExtResource( 3 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 8.41032, 3.8056, 5.61384 ) +[node name="CoinSpawn2" type="Spatial" parent="Coins"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -14.165, 0, 0 ) -[node name="Pickup3" parent="Coins" instance=ExtResource( 3 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -12.6885, 3.8056, -0.678764 ) +[node name="CoinSpawn3" type="Spatial" parent="Coins"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.81607, 0, 9.68945 ) -[node name="Pickup4" parent="Coins" instance=ExtResource( 3 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5837, 3.8056, -3.81644 ) +[node name="CoinSpawn4" type="Spatial" parent="Coins"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 19.3149, 0, 6.87337 ) -[node name="Pickup5" parent="Coins" instance=ExtResource( 3 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4.84158, 3.80559, 11.3488 ) +[node name="CoinSpawn5" type="Spatial" parent="Coins"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.330003, 4.60946, -9.86923 ) -[node name="Pickup6" parent="Coins" instance=ExtResource( 3 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 15.6138, 3.8056, 3.13732 ) +[node name="CoinSpawn6" type="Spatial" parent="Coins"] [node name="Enemy Spawner" type="Spatial" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 3.42834, 0, 8.41565 ) @@ -395,3 +403,17 @@ character_data = ExtResource( 12 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.218717, 0, -1.84536 ) script = ExtResource( 1 ) character_data = ExtResource( 6 ) +spawn_on_ready = true + +[node name="TriggerArea" type="Area" parent="."] +transform = Transform( 0.575895, 0, 0, 0, 0.575895, 0, 0, 0, 0.575895, 10.1852, 5.06822, 17.449 ) +script = ExtResource( 11 ) + +[node name="CollisionShape" type="CollisionShape" parent="TriggerArea"] +shape = SubResource( 15 ) + +[node name="YarnRunnerNode" type="Node" parent="TriggerArea"] +script = ExtResource( 2 ) +yarnScript = ExtResource( 4 ) +[connection signal="all_coins_picked_up" from="Coins" to="." method="_on_Coins_all_coins_picked_up"] +[connection signal="body_entered" from="TriggerArea" to="TriggerArea" method="_on_TriggerArea_body_entered"] diff --git a/jrpg/scenes/TestMain.tscn b/jrpg/scenes/TestMain.tscn index eee69a3..c9a7ae2 100644 --- a/jrpg/scenes/TestMain.tscn +++ b/jrpg/scenes/TestMain.tscn @@ -23,6 +23,13 @@ yarnScript = ExtResource( 3 ) [node name="CanvasLayer" type="CanvasLayer" parent="."] -[node name="HUD" parent="CanvasLayer" instance=ExtResource( 7 )] +[node name="UI" type="Control" parent="CanvasLayer"] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HUD" parent="CanvasLayer/UI" instance=ExtResource( 7 )] -[node name="SpeechPanel" parent="CanvasLayer" instance=ExtResource( 6 )] +[node name="SpeechPanel" parent="CanvasLayer/UI" instance=ExtResource( 6 )] diff --git a/jrpg/scripts/entities/components/interactions/talk_interaction.gd b/jrpg/scripts/entities/components/interactions/talk_interaction.gd index 2b3c816..9873e3d 100644 --- a/jrpg/scripts/entities/components/interactions/talk_interaction.gd +++ b/jrpg/scripts/entities/components/interactions/talk_interaction.gd @@ -8,6 +8,9 @@ export var yarnScript : Resource var yarnRunner := YarnRunner.new() +func _ready(): + yarnRunner.add_command("SpawnCoins", funcref($"../../../Coins", "spawn_coins")) + func on_interact(): if not is_talking: yarnRunner.say_func = funcref(Controller.speech_panel.text, "on_new_line") diff --git a/jrpg/scripts/entities/pickup.gd b/jrpg/scripts/entities/pickup.gd index d40d336..d16c009 100644 --- a/jrpg/scripts/entities/pickup.gd +++ b/jrpg/scripts/entities/pickup.gd @@ -1,5 +1,7 @@ extends Area +signal picked_up + export var goldToGive : int = 1 var rotateSpeed : float = 5.0 @@ -13,4 +15,5 @@ func _on_Pickup_body_entered(body): # is this the player? If so give them gold if body.name == "Player": body.give_gold(goldToGive) + emit_signal("picked_up") queue_free() diff --git a/jrpg/scripts/levels/base_level.gd b/jrpg/scripts/levels/base_level.gd index 36d4f22..940f4ed 100644 --- a/jrpg/scripts/levels/base_level.gd +++ b/jrpg/scripts/levels/base_level.gd @@ -2,6 +2,8 @@ extends Node class_name BaseLevel +signal end + func _enter_tree(): Controller.player_input_enabled = true diff --git a/jrpg/scripts/levels/script_trigger.gd b/jrpg/scripts/levels/script_trigger.gd new file mode 100644 index 0000000..fc1c184 --- /dev/null +++ b/jrpg/scripts/levels/script_trigger.gd @@ -0,0 +1,15 @@ +extends Node + +var prout := false + +func _ready(): + $YarnRunnerNode.yarnRunner.add_command("Spawn", funcref(self, "spawn")) + +func _on_TriggerArea_body_entered(body): + if not prout: + $YarnRunnerNode.start_script() + prout = true + +func spawn(entity): + yield(get_tree(), "idle_frame") + $"../Enemy Spawner".spawn($"../Enemy Spawner".character_data) diff --git a/jrpg/scripts/levels/spawner.gd b/jrpg/scripts/levels/spawner.gd index c662d3f..018f6c4 100644 --- a/jrpg/scripts/levels/spawner.gd +++ b/jrpg/scripts/levels/spawner.gd @@ -1,8 +1,13 @@ extends Node export var character_data : Resource +export var spawn_on_ready := false func _ready(): + if spawn_on_ready: + spawn(character_data) + +func spawn(entity): var inst = character_data.scene.instance() inst.name = character_data.name if character_data.yarn != null: diff --git a/jrpg/scripts/levels/test_coins.gd b/jrpg/scripts/levels/test_coins.gd new file mode 100644 index 0000000..89231cf --- /dev/null +++ b/jrpg/scripts/levels/test_coins.gd @@ -0,0 +1,31 @@ +extends Node + +signal all_coins_picked_up + +export var coin_scene : PackedScene + +var prout := false + +export var spawn_on_ready := false + +var coins := -1 + +func _ready(): + if spawn_on_ready: + spawn_coins(null) + +func spawn_coins(args): + yield(get_tree(), "idle_frame") + if not prout: + coins = 0 + for spawn in get_children(): + var coin = coin_scene.instance() + coin.connect("picked_up", self, "on_coin_picked_up") + coins += 1 + spawn.add_child(coin) + prout = true + +func on_coin_picked_up(): + coins -= 1 + if coins == 0: + emit_signal("all_coins_picked_up") diff --git a/jrpg/scripts/misc/test_level.gd b/jrpg/scripts/misc/test_level.gd index df361e5..972614b 100644 --- a/jrpg/scripts/misc/test_level.gd +++ b/jrpg/scripts/misc/test_level.gd @@ -1,3 +1,6 @@ extends BaseLevel class_name TestLevel + +func _on_Coins_all_coins_picked_up(): + emit_signal("end") diff --git a/jrpg/scripts/misc/test_main.gd b/jrpg/scripts/misc/test_main.gd index cb072ef..cff2268 100644 --- a/jrpg/scripts/misc/test_main.gd +++ b/jrpg/scripts/misc/test_main.gd @@ -17,11 +17,19 @@ func load_scene(args): for child in $SceneContainer.get_children(): child.queue_free() var scene = scenes[scene_key].instance() + scene.connect("end", self, "on_scene_end") $SceneContainer.add_child(scene) + if scene_key == "TestGameOver": + $CanvasLayer/UI.hide() + else: + $CanvasLayer/UI.show() func wait_signal(args): yield(self, "end") +func on_scene_end(): + emit_signal("end") + func _input(event): if event.is_action_pressed("ui_cancel"): emit_signal("end") diff --git a/jrpg/yarn_scripts/event1.yarn b/jrpg/yarn_scripts/event1.yarn new file mode 100644 index 0000000..3ad7fc8 --- /dev/null +++ b/jrpg/yarn_scripts/event1.yarn @@ -0,0 +1,9 @@ +title: Start +tags: +colorID: 0 +position: 693,546 +--- +Un personnage apparaît ! +<> +Un personnage est apparu ! +=== diff --git a/jrpg/yarn_scripts/npc_debug.yarn b/jrpg/yarn_scripts/npc_debug.yarn index 511e39f..97da7a4 100644 --- a/jrpg/yarn_scripts/npc_debug.yarn +++ b/jrpg/yarn_scripts/npc_debug.yarn @@ -1,5 +1,6 @@ title: Start tags: +colorID: 0 position: 701,320 --- Bonjour je suis un npc de debug ! @@ -8,19 +9,19 @@ Bonjour je suis un npc de debug ! === title: bonjour tags: -position: 1032.2125854492188,730.3896484375 +colorID: 0 +position: 1032,730 --- Est-ce que tu aimes la France ? Est-ce que tu es prêt à donner ta vie pour la France ?? A MOURIIIR POUR TA PATRIE ?? +<> +Alors ramasse les piépièces ! === - title: ntm tags: -position: 693.5343566489377,684.1047771502635 +colorID: 0 +position: 693,684 --- Vous n'avez pas honte ?? === - - -