diff --git a/GodotProject/project.godot b/GodotProject/project.godot index 75c98fa..5ad0939 100644 --- a/GodotProject/project.godot +++ b/GodotProject/project.godot @@ -37,3 +37,8 @@ shove={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"location":0,"echo":false,"script":null) ] } +shoot={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) +] +} diff --git a/GodotProject/scenes/bullet.tscn b/GodotProject/scenes/bullet.tscn new file mode 100644 index 0000000..8a432ee --- /dev/null +++ b/GodotProject/scenes/bullet.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=3 uid="uid://c7v063yofnirp"] + +[ext_resource type="Script" path="res://scripts/bullet.gd" id="1_au5n7"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_hrjpd"] +size = Vector2(14, 6) + +[node name="Area2D" type="Area2D"] +script = ExtResource("1_au5n7") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_hrjpd") +debug_color = Color(0.92607, 0.250785, 0.273463, 0.42) + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/GodotProject/scenes/crate.tscn b/GodotProject/scenes/crate.tscn index b2c7246..e44ce1d 100644 --- a/GodotProject/scenes/crate.tscn +++ b/GodotProject/scenes/crate.tscn @@ -2,7 +2,7 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_jflwv"] -[node name="RigidBody2D" type="RigidBody2D" groups=["box"]] +[node name="RigidBody2D" type="RigidBody2D" groups=["box", "destructable"]] rotation = -2.29882 metadata/_edit_group_ = true diff --git a/GodotProject/scenes/game.tscn b/GodotProject/scenes/game.tscn index 5bf37de..a782515 100644 --- a/GodotProject/scenes/game.tscn +++ b/GodotProject/scenes/game.tscn @@ -1,9 +1,11 @@ -[gd_scene load_steps=8 format=3 uid="uid://cxnmaxykhbgaq"] +[gd_scene load_steps=10 format=3 uid="uid://cxnmaxykhbgaq"] [ext_resource type="PackedScene" uid="uid://63qb2drh1l33" path="res://scenes/crate.tscn" id="1_0wmww"] [ext_resource type="Script" path="res://scripts/gamecontroller.gd" id="1_5dy8j"] [ext_resource type="Script" path="res://scripts/Trigger.gd" id="3_4laji"] [ext_resource type="PackedScene" uid="uid://c1cuiluq1fcpk" path="res://scenes/player.tscn" id="3_w28al"] +[ext_resource type="PackedScene" uid="uid://c7v063yofnirp" path="res://scenes/bullet.tscn" id="5_drh85"] +[ext_resource type="Script" path="res://scripts/scene_manager.gd" id="6_duuox"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_f1luk"] size = Vector2(172, 20) @@ -52,5 +54,12 @@ debug_color = Color(0.466667, 0.592157, 0, 0.419608) [node name="RigidBody2D3" parent="." instance=ExtResource("1_0wmww")] position = Vector2(256, 39) +[node name="Area2D" parent="." instance=ExtResource("5_drh85")] +position = Vector2(49, 305) + +[node name="SceneManager" type="Node" parent="."] +unique_name_in_owner = true +script = ExtResource("6_duuox") + [connection signal="alert" from="Trigger" to="." method="_on_trigger_alert"] [connection signal="body_entered" from="Trigger" to="Trigger" method="_on_body_entered"] diff --git a/GodotProject/scenes/player.tscn b/GodotProject/scenes/player.tscn index 3077672..49aaf18 100644 --- a/GodotProject/scenes/player.tscn +++ b/GodotProject/scenes/player.tscn @@ -4,7 +4,7 @@ [sub_resource type="CircleShape2D" id="CircleShape2D_y4y41"] -[node name="CharacterBody2D" type="CharacterBody2D"] +[node name="CharacterBody2D" type="CharacterBody2D" groups=["player"]] script = ExtResource("1_s1kdl") metadata/_edit_group_ = true @@ -18,3 +18,9 @@ collide_with_areas = true [node name="LeftRay" type="RayCast2D" parent="."] target_position = Vector2(-15, 0) + +[node name="RightTarget" type="Node2D" parent="."] +position = Vector2(10, -5) + +[node name="LeftTarget" type="Node2D" parent="."] +position = Vector2(-10, -5) diff --git a/GodotProject/scripts/bullet.gd b/GodotProject/scripts/bullet.gd new file mode 100644 index 0000000..3c3a948 --- /dev/null +++ b/GodotProject/scripts/bullet.gd @@ -0,0 +1,23 @@ +class_name Bullet extends Area2D +var speed = 700 +signal hit +# 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 _physics_process(delta: float) -> void: + position += transform.x * speed * delta + +func setSpeed(value): + speed = value + + +func _on_body_entered(body: Node2D) -> void: + print("hit") + if not body.is_in_group("player"): + hit.emit(body) diff --git a/GodotProject/scripts/gamecontroller.gd b/GodotProject/scripts/gamecontroller.gd index a26d80a..1261fd6 100644 --- a/GodotProject/scripts/gamecontroller.gd +++ b/GodotProject/scripts/gamecontroller.gd @@ -27,3 +27,8 @@ func _on_trigger_alert(body): if totalBoxes <=0: print("you won") get_tree().reload_current_scene() + +func bulletHit(body): + print("game controller knows bullet hit something") + if body.is_in_group("destructable"): + body.queue_free() diff --git a/GodotProject/scripts/player.gd b/GodotProject/scripts/player.gd index 7d5ba63..567d852 100644 --- a/GodotProject/scripts/player.gd +++ b/GodotProject/scripts/player.gd @@ -14,6 +14,12 @@ var pushRightEnabled = false var pushLeftEnabled = false @export var PUSH_FORCE = 700 +# Bullet attack variables + +@onready var right_target: Node2D = $RightTarget +@onready var left_target: Node2D = $LeftTarget +var bullet = preload("res://scenes/bullet.tscn") + var gravity = ProjectSettings.get_setting("physics/2d/default_gravity") @@ -41,6 +47,18 @@ func _physics_process(delta): else: velocity.x = move_toward(velocity.x, 0, SPEED) + +# shoot + + if Input.is_action_just_pressed("shoot"): + # make bullet + var myBullet = %SceneManager.bulletFactory() + owner.add_child(myBullet) + myBullet.transform = right_target.global_transform + if faceleft: + myBullet.transform = left_target.global_transform + myBullet.setSpeed(-700) + move_and_slide() if right_ray.is_colliding(): if not faceleft: diff --git a/GodotProject/scripts/scene_manager.gd b/GodotProject/scripts/scene_manager.gd new file mode 100644 index 0000000..315301e --- /dev/null +++ b/GodotProject/scripts/scene_manager.gd @@ -0,0 +1,23 @@ +extends Node +@onready var game: Node2D = $".." + +var bullet = preload("res://scenes/bullet.tscn") + +# 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 bulletFactory(): + print("factory will make a bullet") + var myBullet = bullet.instantiate() + myBullet.connect("hit", onBulletHit) + return myBullet + +func onBulletHit(body): + print("Scene manager knows bullet hit") + game.bulletHit(body)