diff --git a/scenes/crate.tscn b/scenes/crate.tscn new file mode 100644 index 0000000..1c8c8c3 --- /dev/null +++ b/scenes/crate.tscn @@ -0,0 +1,13 @@ +[gd_scene format=3 uid="uid://5xgx7qarkj3o"] + +[ext_resource type="Script" uid="uid://rp1f47ytyerd" path="res://scripts/crate.gd" id="1_b66cd"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_3udav"] + +[node name="Crate" type="RigidBody2D" unique_id=643245962] +script = ExtResource("1_b66cd") +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=712768436] +shape = SubResource("RectangleShape2D_3udav") +debug_color = Color(0.8750005, 0.33663103, 0.2080481, 0.41960785) diff --git a/scenes/game.tscn b/scenes/game.tscn index 690b2c8..c0cb45b 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -2,16 +2,13 @@ [ext_resource type="Script" uid="uid://ct51411gsine2" path="res://scripts/gamecontroller.gd" id="1_lnu2h"] [ext_resource type="Script" uid="uid://ct34rf6jscqmo" path="res://scripts/player.gd" id="1_uwrxv"] -[ext_resource type="Script" uid="uid://ck2uw1e2b0646" path="res://scripts/trigger.gd" id="1_yqjtg"] +[ext_resource type="Script" uid="uid://dv2q4p6jb8h4s" path="res://scripts/scene_manager.gd" id="2_lbhrr"] +[ext_resource type="PackedScene" uid="uid://b22qsgmtr231s" path="res://scenes/trigger.tscn" id="2_lnu2h"] +[ext_resource type="PackedScene" uid="uid://5xgx7qarkj3o" path="res://scenes/crate.tscn" id="3_iywne"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_rk402"] size = Vector2(336, 20) -[sub_resource type="RectangleShape2D" id="RectangleShape2D_3udav"] - -[sub_resource type="CircleShape2D" id="CircleShape2D_rk402"] -radius = 21.0 - [sub_resource type="CircleShape2D" id="CircleShape2D_3udav"] [sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_rk402"] @@ -19,6 +16,9 @@ radius = 21.0 [node name="Game" type="Node2D" unique_id=55511178] script = ExtResource("1_lnu2h") +[node name="SceneManager" type="Node2D" parent="." unique_id=1159498670] +script = ExtResource("2_lbhrr") + [node name="StaticBody2D" type="StaticBody2D" parent="." unique_id=704028978] position = Vector2(512, 413) metadata/_edit_group_ = true @@ -27,50 +27,8 @@ metadata/_edit_group_ = true position = Vector2(134, 0) shape = SubResource("RectangleShape2D_rk402") -[node name="RigidBody2D" type="RigidBody2D" parent="." unique_id=1467136223] -position = Vector2(520, -51) -rotation = -0.5400262 -metadata/_edit_group_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D" unique_id=2111742955] -shape = SubResource("RectangleShape2D_3udav") -debug_color = Color(0.8750005, 0.33663103, 0.2080481, 0.41960785) - -[node name="RigidBody2D2" type="RigidBody2D" parent="." unique_id=375764923] -position = Vector2(512, 309) -rotation = -0.5400262 -metadata/_edit_group_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D2" unique_id=1689937601] -shape = SubResource("RectangleShape2D_3udav") -debug_color = Color(0.8750005, 0.33663103, 0.2080481, 0.41960785) - -[node name="RigidBody2D3" type="RigidBody2D" parent="." unique_id=1851225816] -position = Vector2(513, 269) -rotation = -0.5400262 -metadata/_edit_group_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D3" unique_id=1720572197] -shape = SubResource("RectangleShape2D_3udav") -debug_color = Color(0.8750005, 0.33663103, 0.2080481, 0.41960785) - -[node name="RigidBody2D4" type="RigidBody2D" parent="." unique_id=190350635] -position = Vector2(507, 236.99997) -rotation = -0.5400262 -metadata/_edit_group_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D4" unique_id=938737972] -shape = SubResource("RectangleShape2D_3udav") -debug_color = Color(0.8750005, 0.33663103, 0.2080481, 0.41960785) - -[node name="Trigger" type="Area2D" parent="." unique_id=644670290] -position = Vector2(442, 424) -script = ExtResource("1_yqjtg") -metadata/_edit_group_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Trigger" unique_id=258207955] -shape = SubResource("CircleShape2D_rk402") -debug_color = Color(0.7183221, 0.30049416, 0.93278134, 0.41960785) +[node name="Crate2" parent="." unique_id=643245962 instance=ExtResource("3_iywne")] +position = Vector2(318, 313) [node name="CharacterBody2D" type="CharacterBody2D" parent="." unique_id=1639753258] position = Vector2(743, 389) @@ -96,5 +54,16 @@ metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D3" unique_id=1824150982] shape = SubResource("WorldBoundaryShape2D_rk402") -[connection signal="areaTriggered" from="Trigger" to="." method="_on_trigger"] -[connection signal="body_entered" from="Trigger" to="Trigger" method="_on_body_entered"] +[node name="Triggers" type="Node2D" parent="." unique_id=262196455] + +[node name="Trigger" parent="Triggers" unique_id=976913827 instance=ExtResource("2_lnu2h")] +position = Vector2(321, 403) +effect = "teleport" + +[node name="Trigger2" parent="Triggers" unique_id=1872559968 instance=ExtResource("2_lnu2h")] +position = Vector2(407, 406) + +[node name="Crate" parent="." unique_id=329828405 instance=ExtResource("3_iywne")] +position = Vector2(410, 313) + +[connection signal="areaTriggered" from="Triggers/Trigger" to="." method="_on_trigger"] diff --git a/scenes/trigger.tscn b/scenes/trigger.tscn new file mode 100644 index 0000000..71fb8e8 --- /dev/null +++ b/scenes/trigger.tscn @@ -0,0 +1,16 @@ +[gd_scene format=3 uid="uid://b22qsgmtr231s"] + +[ext_resource type="Script" uid="uid://ck2uw1e2b0646" path="res://scripts/trigger.gd" id="1_du5ex"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_rk402"] +radius = 21.0 + +[node name="Trigger" type="Area2D" unique_id=976913827] +script = ExtResource("1_du5ex") +metadata/_edit_group_ = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1617755137] +shape = SubResource("CircleShape2D_rk402") +debug_color = Color(0.7183221, 0.30049416, 0.93278134, 0.41960785) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/scripts/crate.gd b/scripts/crate.gd new file mode 100644 index 0000000..155ae6f --- /dev/null +++ b/scripts/crate.gd @@ -0,0 +1,21 @@ +class_name Crate extends RigidBody2D + +var teleport_target: Vector2 = Vector2.ZERO +var should_teleport: bool = false + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +func teleport_to(position: Vector2): + teleport_target = position + should_teleport = true + +func _integrate_forces(state: PhysicsDirectBodyState2D) -> void: + if should_teleport: + state.transform = Transform2D.IDENTITY.translated(teleport_target) + should_teleport = false diff --git a/scripts/crate.gd.uid b/scripts/crate.gd.uid new file mode 100644 index 0000000..e177f6c --- /dev/null +++ b/scripts/crate.gd.uid @@ -0,0 +1 @@ +uid://rp1f47ytyerd diff --git a/scripts/gamecontroller.gd b/scripts/gamecontroller.gd index a76fb89..63e4430 100644 --- a/scripts/gamecontroller.gd +++ b/scripts/gamecontroller.gd @@ -1,6 +1,7 @@ -extends Node2D - +class_name GameController extends Node2D +signal teleportSignal(body) + # Called when the node enters the scene tree for the first time. func _ready() -> void: pass # Replace with function body. @@ -12,7 +13,12 @@ func _process(delta: float) -> void: func _on_trigger(effect: Variant, Object: Variant) -> void: - print("GC knows about trigger") - if effect == "destroy": - if not Object is Player: - Object.queue_free() + print("GC knows about trigger: " + effect) + match effect: + "destroy": + if not Object is Player: + Object.queue_free() + "teleport": + print("Trigger wants to teleport") + if Object is Crate: + teleportSignal.emit(Object) diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd new file mode 100644 index 0000000..b8758aa --- /dev/null +++ b/scripts/scene_manager.gd @@ -0,0 +1,28 @@ +class_name SceneManager extends Node2D + +@onready var triggers: Node2D = $"../Triggers" +@onready var game: GameController = $".." + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + buildLevel() + game.teleportSignal.connect(teleport) + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + pass + +func buildLevel() -> void: + if triggers: + for obj in triggers.get_children(): + if obj is Trigger: + if not obj.areaTriggered.is_connected(game._on_trigger): + obj.areaTriggered.connect(game._on_trigger) + +func teleport(body, _bodyposition = null) -> void: + if body is Crate: + var viewport_size = get_viewport().get_visible_rect().size + var random_x = randf_range(0, viewport_size.x) + var random_y = randf_range(0, viewport_size.y) + var newPosition = Vector2(random_x, random_y) + body.teleport_to(newPosition) diff --git a/scripts/scene_manager.gd.uid b/scripts/scene_manager.gd.uid new file mode 100644 index 0000000..4819df8 --- /dev/null +++ b/scripts/scene_manager.gd.uid @@ -0,0 +1 @@ +uid://dv2q4p6jb8h4s diff --git a/scripts/trigger.gd b/scripts/trigger.gd index 7f3f311..3afd2e2 100644 --- a/scripts/trigger.gd +++ b/scripts/trigger.gd @@ -1,6 +1,6 @@ -extends Area2D +class_name Trigger extends Area2D -var effect="destroy" +@export var effect:String = "destroy" signal areaTriggered(effect, Object) # Called when the node enters the scene tree for the first time. func _ready() -> void: