Added win condition for level 1 and added boss fight for level 5
This commit is contained in:
10
Levels/Interactables/Teleporter.gd
Normal file
10
Levels/Interactables/Teleporter.gd
Normal file
@@ -0,0 +1,10 @@
|
||||
extends Area2D
|
||||
|
||||
export var x_location: int
|
||||
export var y_location: int
|
||||
|
||||
|
||||
func _on_teleporter_body_entered(body: Node) -> void:
|
||||
if body.is_in_group('player'):
|
||||
body.set_deferred('position', Vector2(x_location, y_location))
|
||||
return
|
34
Levels/Interactables/Teleporter.tscn
Normal file
34
Levels/Interactables/Teleporter.tscn
Normal file
@@ -0,0 +1,34 @@
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://Sprites/Assets/Light.png" type="Texture" id=1]
|
||||
[ext_resource path="res://Sprites/Levels/Interactables/Teleport_Pad.png" type="Texture" id=2]
|
||||
[ext_resource path="res://Levels/Interactables/Teleporter.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="CircleShape2D" id=1]
|
||||
radius = 8.0
|
||||
|
||||
[node name="Teleporter" type="Area2D"]
|
||||
light_mask = 0
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
input_pickable = false
|
||||
monitorable = false
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
self_modulate = Color( 0.564706, 1, 0.560784, 1 )
|
||||
texture = ExtResource( 2 )
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
visible = false
|
||||
light_mask = 0
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Light" type="Light2D" parent="."]
|
||||
texture = ExtResource( 1 )
|
||||
texture_scale = 0.4
|
||||
color = Color( 0.341176, 1, 0.321569, 1 )
|
||||
energy = 1.2
|
||||
shadow_item_cull_mask = 0
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="_on_teleporter_body_entered"]
|
@@ -1,17 +1,17 @@
|
||||
extends Node2D
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
var death_count: int = 0
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
$YSort/Player.load_hud($HUD)
|
||||
return
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
# pass
|
||||
func _on_dark_matter_death() -> void:
|
||||
death_count += 1
|
||||
if death_count == 5:
|
||||
if get_tree().change_scene('res://GUI/Level Complete.tscn') != OK:
|
||||
print('ERROR: Level 1 failed to change scene to Level Complete.')
|
||||
queue_free()
|
||||
return
|
||||
|
@@ -72,3 +72,9 @@ mode = 1
|
||||
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Map_boundary"]
|
||||
build_mode = 1
|
||||
polygon = PoolVector2Array( 0.762451, -22.0982, 427.859, -18.7308, 425.053, 245.609, -22.248, 248.976, -21.1256, -22.6594, -0.589813, -21.9661, -0.589806, 225.272, 400.359, 224.843, 399.969, -0.312477, 0.455406, -0.154987 )
|
||||
|
||||
[connection signal="death" from="YSort/Enemies/Dark Matter" to="." method="_on_dark_matter_death"]
|
||||
[connection signal="death" from="YSort/Enemies/Dark Matter2" to="." method="_on_dark_matter_death"]
|
||||
[connection signal="death" from="YSort/Enemies/Dark Matter3" to="." method="_on_dark_matter_death"]
|
||||
[connection signal="death" from="YSort/Enemies/Dark Matter4" to="." method="_on_dark_matter_death"]
|
||||
[connection signal="death" from="YSort/Enemies/Dark Matter5" to="." method="_on_dark_matter_death"]
|
||||
|
@@ -7,51 +7,51 @@ var score = 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
$YSort/Player.load_hud($HUD)
|
||||
screensize = get_viewport_rect().size
|
||||
spawn_coins(8)
|
||||
return
|
||||
$YSort/Player.load_hud($HUD)
|
||||
screensize = get_viewport_rect().size
|
||||
spawn_coins(8)
|
||||
return
|
||||
|
||||
|
||||
func spawn_coins(num: int) -> void:
|
||||
for _i in range(num):
|
||||
var g: Node = coin.instance()
|
||||
$'coin_container'.add_child(g)
|
||||
g.connect('coin_grabbed', self, '_on_coin_grabbed')
|
||||
#g.set_pos(Vector2(rand_range(0, screensize.x - 40), rand_range(0, screensize.y - 40)))
|
||||
g.position = Vector2(rand_range(0, screensize.x - 40), rand_range(0, screensize.y - 40))
|
||||
return
|
||||
for _i in range(num):
|
||||
var g: Node = coin.instance()
|
||||
$'coin_container'.add_child(g)
|
||||
g.connect('coin_grabbed', self, '_on_coin_grabbed')
|
||||
#g.set_pos(Vector2(rand_range(0, screensize.x - 40), rand_range(0, screensize.y - 40)))
|
||||
g.position = Vector2(rand_range(0, screensize.x - 40), rand_range(0, screensize.y - 40))
|
||||
return
|
||||
|
||||
|
||||
func _on_coin_grabbed() -> void:
|
||||
score += 1
|
||||
print(score)
|
||||
$'Level 3 HUD/Label'.set_text(str(score) + '/5')
|
||||
return
|
||||
score += 1
|
||||
print(score)
|
||||
$'Level 3 HUD/Label'.set_text(str(score) + '/5')
|
||||
return
|
||||
|
||||
|
||||
func _timer_out() -> void:
|
||||
get_tree().change_scene('res://Levels/Hub World.tscn')
|
||||
queue_free()
|
||||
return
|
||||
get_tree().change_scene('res://Levels/Hub World.tscn')
|
||||
queue_free()
|
||||
return
|
||||
|
||||
|
||||
func _on_TreasureChest_ice_key_collected() -> void:
|
||||
$YSort/Door/doorClosed.visible = false
|
||||
$YSort/Door/doorOpened.visible = true
|
||||
$YSort/DoorCollision.layers = 5
|
||||
return
|
||||
$YSort/Door/doorClosed.visible = false
|
||||
$YSort/Door/doorOpened.visible = true
|
||||
$YSort/DoorCollision.layers = 5
|
||||
return
|
||||
|
||||
|
||||
func _on_DoorDetector_body_entered(body: Node) -> void:
|
||||
if body.is_in_group('player'):
|
||||
print('WIN WIN WIN')
|
||||
get_tree().change_scene('res://Levels/Hub World.tscn')
|
||||
return
|
||||
if body.is_in_group('player'):
|
||||
print('WIN WIN WIN')
|
||||
get_tree().change_scene('res://Levels/Hub World.tscn')
|
||||
return
|
||||
|
||||
|
||||
func _on_DoorDetector_area_entered(area: Area2D) -> void:
|
||||
if area.get_parent().name == 'Player':
|
||||
get_tree().change_scene('res://GUI/Level Complete.tscn')
|
||||
queue_free()
|
||||
return
|
||||
if area.get_parent().name == 'Player':
|
||||
get_tree().change_scene('res://GUI/Level Complete.tscn')
|
||||
queue_free()
|
||||
return
|
||||
|
@@ -2,28 +2,29 @@ extends Node2D
|
||||
|
||||
var gems: int = 4
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
#$YSort/Player.position = get_viewport_rect().size / 2
|
||||
$YSort/Player.load_hud($HUD)
|
||||
return
|
||||
$YSort/Player.load_hud($HUD)
|
||||
return
|
||||
|
||||
|
||||
func _on_TreasureChest_gem_collected() -> void:
|
||||
gems -= 1
|
||||
|
||||
if gems == 0:
|
||||
$YSort/Items/Door/doorClosed.visible = false
|
||||
$YSort/Items/Door/doorOpened.visible = true
|
||||
$DoorCollision.layers = 5
|
||||
gems -= 1
|
||||
|
||||
if gems == 0:
|
||||
$YSort/Items/Door/doorClosed.visible = false
|
||||
$YSort/Items/Door/doorOpened.visible = true
|
||||
$DoorCollision.layers = 5
|
||||
return
|
||||
|
||||
|
||||
func _on_NextArea_area_entered(area: Area2D) -> void:
|
||||
if area.get_parent().name == 'Player':
|
||||
$YSort/Player.position.x = 195
|
||||
$YSort/Player.position.y = -335
|
||||
if area.get_parent().name == 'Player':
|
||||
$YSort/Player.position.x = 195
|
||||
$YSort/Player.position.y = -335
|
||||
return
|
||||
|
||||
|
||||
func _on_Demon_Boss_demon_boss_death() -> void:
|
||||
get_tree().change_scene('res://GUI/Level Complete.tscn')
|
||||
queue_free()
|
||||
get_tree().change_scene('res://GUI/Level Complete.tscn')
|
||||
queue_free()
|
||||
|
@@ -2,5 +2,26 @@ extends Node2D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
$YSort/Player.load_hud($HUD)
|
||||
return
|
||||
$YSort/Player.load_hud($HUD)
|
||||
return
|
||||
|
||||
|
||||
func _on_activate_boss_teleporter_body_entered(body: Node) -> void:
|
||||
$'Interactables/Boss Teleporter'.set_deferred('visible', true)
|
||||
$'Interactables/Activate Boss Teleporter'.call_deferred('queue_free')
|
||||
return
|
||||
|
||||
|
||||
func _on_eyeball_boss_death() -> void:
|
||||
$YSort/Enemies.call_deferred('queue_free')
|
||||
$Lights.call_deferred('queue_free')
|
||||
$Darkness.set_visible(false)
|
||||
$Ending.start()
|
||||
return
|
||||
|
||||
|
||||
func _on_ending_timeout():
|
||||
if get_tree().change_scene('res://GUI/Level Complete.tscn') != OK:
|
||||
print('ERROR: Level 5 failed to change scene to Level Complete.')
|
||||
queue_free()
|
||||
return
|
||||
|
File diff suppressed because one or more lines are too long
@@ -37,9 +37,9 @@ func _on_shoot_timeout():
|
||||
shoot_array = rotated_shoot_directions
|
||||
|
||||
for itr in shoot_array:
|
||||
var projectile: Node = glowing_fireball.instance()
|
||||
projectile.init(center, itr)
|
||||
get_tree().get_current_scene().get_node('Projectiles').add_child(projectile)
|
||||
var projectile: Node = glowing_fireball.instance()
|
||||
projectile.init(center, itr)
|
||||
get_tree().get_current_scene().get_node('Projectiles').add_child(projectile)
|
||||
return
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user