From b0762ec3db9d9d8355ba2d113d7ac57ecf9a1167 Mon Sep 17 00:00:00 2001 From: Alice Gaudon Date: Tue, 18 Aug 2020 18:49:16 +0200 Subject: [PATCH] game1: add terrain collision detection --- scenes/game1/Player.tscn | 20 +++++++++++++++++++- scripts/game1/Game1Script.gd | 32 +++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/scenes/game1/Player.tscn b/scenes/game1/Player.tscn index 82ec2ca..f5a97b2 100644 --- a/scenes/game1/Player.tscn +++ b/scenes/game1/Player.tscn @@ -1,9 +1,27 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://images/game1/game1_player.tres" type="SpriteFrames" id=1] +[sub_resource type="RectangleShape2D" id=1] + [node name="Player" type="AnimatedSprite"] frames = ExtResource( 1 ) offset = Vector2( 8, 0 ) [node name="Camera2D" type="Camera2D" parent="."] + +[node name="Sensors" type="Node2D" parent="."] + +[node name="Right" type="Area2D" parent="Sensors"] +position = Vector2( 16, 0 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Sensors/Right"] +scale = Vector2( 0.5, 0.5 ) +shape = SubResource( 1 ) + +[node name="Left" type="Area2D" parent="Sensors"] +position = Vector2( -16, 0 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Sensors/Left"] +scale = Vector2( 0.5, 0.5 ) +shape = SubResource( 1 ) diff --git a/scripts/game1/Game1Script.gd b/scripts/game1/Game1Script.gd index c9aef63..7491a77 100644 --- a/scripts/game1/Game1Script.gd +++ b/scripts/game1/Game1Script.gd @@ -82,8 +82,6 @@ func _input(event): go_left = true if event.is_action_pressed('interact'): do_interact = true - move() - interact() if event.is_action_released('right'): go_right = false @@ -92,12 +90,26 @@ func _input(event): if event.is_action_released('interact'): do_interact = false +var trying_to_move = false func move(): - if playing && !is_camera_moving && !is_interacting: - if go_right && !go_left: - move_right() - elif go_left && !go_right: - move_left() + if !playing || trying_to_move || is_interacting || is_camera_moving: return + + trying_to_move = true + yield(get_tree(), "physics_frame") + yield(get_tree(), "physics_frame") + if go_right && !go_left && can_move_towards('Right'): + move_right() + elif go_left && !go_right && can_move_towards('Left'): + move_left() + trying_to_move = false + +func _process(delta): + interact() + move() + +func can_move_towards(sensorName : String) -> bool: + var sensor = player.get_node("Sensors/" + sensorName) as Area2D + return sensor.get_overlapping_bodies().size() == 0 && sensor.get_overlapping_areas().size() == 0 func move_right(): is_camera_moving = true @@ -110,7 +122,6 @@ func move_right(): player.frame = 0 offset_player(16) is_camera_moving = false - move() func move_left(): @@ -124,7 +135,6 @@ func move_left(): player.play('default') player.frame = 0 is_camera_moving = false - move() func offset_player(offset): @@ -134,7 +144,7 @@ func offset_player(offset): elif r == 2: player.position.x -= offset elif r == 3: player.position.y -= offset - print(player.position / 16) + print((player.position - Vector2(8, 8)) / 16) const animation_steps = [3, 6, 10, 13] var is_camera_moving = false @@ -146,7 +156,7 @@ func update_camera(): var is_interacting = false func interact(): - if !playing || is_camera_moving || is_interacting || !do_interact: return + if !playing || !do_interact || is_interacting || trying_to_move || is_camera_moving: return is_interacting = true var level = levels[current_level]