game1: add terrain collision detection
This commit is contained in:
parent
862907f15b
commit
b0762ec3db
@ -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]
|
[ext_resource path="res://images/game1/game1_player.tres" type="SpriteFrames" id=1]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
|
|
||||||
[node name="Player" type="AnimatedSprite"]
|
[node name="Player" type="AnimatedSprite"]
|
||||||
frames = ExtResource( 1 )
|
frames = ExtResource( 1 )
|
||||||
offset = Vector2( 8, 0 )
|
offset = Vector2( 8, 0 )
|
||||||
|
|
||||||
[node name="Camera2D" type="Camera2D" parent="."]
|
[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 )
|
||||||
|
@ -82,8 +82,6 @@ func _input(event):
|
|||||||
go_left = true
|
go_left = true
|
||||||
if event.is_action_pressed('interact'):
|
if event.is_action_pressed('interact'):
|
||||||
do_interact = true
|
do_interact = true
|
||||||
move()
|
|
||||||
interact()
|
|
||||||
|
|
||||||
if event.is_action_released('right'):
|
if event.is_action_released('right'):
|
||||||
go_right = false
|
go_right = false
|
||||||
@ -92,12 +90,26 @@ func _input(event):
|
|||||||
if event.is_action_released('interact'):
|
if event.is_action_released('interact'):
|
||||||
do_interact = false
|
do_interact = false
|
||||||
|
|
||||||
|
var trying_to_move = false
|
||||||
func move():
|
func move():
|
||||||
if playing && !is_camera_moving && !is_interacting:
|
if !playing || trying_to_move || is_interacting || is_camera_moving: return
|
||||||
if go_right && !go_left:
|
|
||||||
|
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()
|
move_right()
|
||||||
elif go_left && !go_right:
|
elif go_left && !go_right && can_move_towards('Left'):
|
||||||
move_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():
|
func move_right():
|
||||||
is_camera_moving = true
|
is_camera_moving = true
|
||||||
@ -110,7 +122,6 @@ func move_right():
|
|||||||
player.frame = 0
|
player.frame = 0
|
||||||
offset_player(16)
|
offset_player(16)
|
||||||
is_camera_moving = false
|
is_camera_moving = false
|
||||||
|
|
||||||
move()
|
move()
|
||||||
|
|
||||||
func move_left():
|
func move_left():
|
||||||
@ -124,7 +135,6 @@ func move_left():
|
|||||||
player.play('default')
|
player.play('default')
|
||||||
player.frame = 0
|
player.frame = 0
|
||||||
is_camera_moving = false
|
is_camera_moving = false
|
||||||
|
|
||||||
move()
|
move()
|
||||||
|
|
||||||
func offset_player(offset):
|
func offset_player(offset):
|
||||||
@ -134,7 +144,7 @@ func offset_player(offset):
|
|||||||
elif r == 2: player.position.x -= offset
|
elif r == 2: player.position.x -= offset
|
||||||
elif r == 3: player.position.y -= 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]
|
const animation_steps = [3, 6, 10, 13]
|
||||||
var is_camera_moving = false
|
var is_camera_moving = false
|
||||||
@ -146,7 +156,7 @@ func update_camera():
|
|||||||
|
|
||||||
var is_interacting = false
|
var is_interacting = false
|
||||||
func interact():
|
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
|
is_interacting = true
|
||||||
|
|
||||||
var level = levels[current_level]
|
var level = levels[current_level]
|
||||||
|
Loading…
Reference in New Issue
Block a user