feat: Level completion time, vacuum behavior, button behavior, Vending Machine sprite
This commit is contained in:
parent
12a7a3d76a
commit
37b702f94a
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 516 B |
@ -320,6 +320,7 @@ common/enable_object_picking=false
|
|||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
||||||
|
2d/options/use_nvidia_rect_flicker_workaround=true
|
||||||
quality/intended_usage/framebuffer_allocation=0
|
quality/intended_usage/framebuffer_allocation=0
|
||||||
quality/intended_usage/framebuffer_allocation.mobile=0
|
quality/intended_usage/framebuffer_allocation.mobile=0
|
||||||
threads/thread_model=2
|
threads/thread_model=2
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=6 format=2]
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/enemy/VacuumRobot.png" type="Texture" id=1]
|
[ext_resource path="res://assets/enemy/VacuumRobot.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.gd" type="Script" id=2]
|
[ext_resource path="res://src/Actors/Enemies/Vacuum.gd" type="Script" id=2]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=1]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
extents = Vector2( 14, 7 )
|
extents = Vector2( 14, 7 )
|
||||||
@ -16,6 +16,8 @@ extents = Vector2( 15, 6.5 )
|
|||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
collision_mask = 9
|
collision_mask = 9
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
speed = 180
|
||||||
|
acceleration = 100
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
position = Vector2( 0, -3 )
|
position = Vector2( 0, -3 )
|
||||||
@ -7,9 +7,11 @@ extends Node
|
|||||||
export(Resource) var gsr
|
export(Resource) var gsr
|
||||||
var sound_library = {}
|
var sound_library = {}
|
||||||
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
load_sounds()
|
load_sounds()
|
||||||
|
|
||||||
|
|
||||||
func load_sounds() -> void:
|
func load_sounds() -> void:
|
||||||
var paths = ["res://assets/sounds", "res://assets/music"]
|
var paths = ["res://assets/sounds", "res://assets/music"]
|
||||||
for path in paths:
|
for path in paths:
|
||||||
@ -26,48 +28,97 @@ func load_sounds() -> void:
|
|||||||
sound_library[sound_file.resource_path] = sound_file
|
sound_library[sound_file.resource_path] = sound_file
|
||||||
dir.list_dir_end()
|
dir.list_dir_end()
|
||||||
|
|
||||||
|
|
||||||
func set_progress(value) -> void:
|
func set_progress(value) -> void:
|
||||||
gsr.progress_dict = value
|
gsr.progress_dict = value
|
||||||
SaveManager.save_default()
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
|
||||||
func get_progress() -> Dictionary:
|
func get_progress() -> Dictionary:
|
||||||
return gsr.progress_dict
|
return gsr.progress_dict
|
||||||
|
|
||||||
|
|
||||||
func save() -> void:
|
func save() -> void:
|
||||||
SaveManager.save_default()
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
|
||||||
|
func get_level_completed(levelName: String) -> bool:
|
||||||
|
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has("levelcompleted"):
|
||||||
|
return gsr.progress_dict[levelName]["levelcompleted"]
|
||||||
|
else:
|
||||||
|
return false
|
||||||
|
|
||||||
|
|
||||||
|
func set_level_completed(levelName: String, state: bool) -> void:
|
||||||
|
if !gsr.progress_dict.has(levelName):
|
||||||
|
gsr.progress_dict[levelName] = {}
|
||||||
|
gsr.progress_dict[levelName]["levelcompleted"] = state
|
||||||
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
|
||||||
|
func set_leveltime(levelName: String, time: float) -> void:
|
||||||
|
if !gsr.progress_dict.has(levelName):
|
||||||
|
gsr.progress_dict[levelName] = {}
|
||||||
|
gsr.progress_dict[levelName]["leveltime"] = time
|
||||||
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
func get_level_time(levelName: String) -> float:
|
||||||
|
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has("leveltime"):
|
||||||
|
return gsr.progress_dict[levelName]["leveltime"]
|
||||||
|
else:
|
||||||
|
return INF
|
||||||
|
|
||||||
|
func set_uncompleted_level_time(levelName: String, time: float) -> void:
|
||||||
|
if !gsr.progress_dict.has(levelName):
|
||||||
|
gsr.progress_dict[levelName] = {}
|
||||||
|
gsr.progress_dict[levelName]["uncompletedleveltime"] = time
|
||||||
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
func get_uncompleted_level_time(levelName: String) -> float:
|
||||||
|
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has("uncompletedleveltime"):
|
||||||
|
return gsr.progress_dict[levelName]["uncompletedleveltime"]
|
||||||
|
else:
|
||||||
|
return INF
|
||||||
|
|
||||||
|
|
||||||
func set_savepoint(levelName: String, position: Vector2) -> void:
|
func set_savepoint(levelName: String, position: Vector2) -> void:
|
||||||
#TODO You can free a frog, go to the checkpoint and it will be
|
#TODO You can free a frog, go to the checkpoint and it will be
|
||||||
# saved as freed forever
|
# saved as freed forever
|
||||||
if(!gsr.progress_dict.has(levelName)):
|
if !gsr.progress_dict.has(levelName):
|
||||||
gsr.progress_dict[levelName] = {}
|
gsr.progress_dict[levelName] = {}
|
||||||
gsr.progress_dict[levelName]["savepoint"] = position
|
gsr.progress_dict[levelName]["savepoint"] = position
|
||||||
SaveManager.save_default()
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
|
||||||
func remove_savepoint(levelName: String) -> void:
|
func remove_savepoint(levelName: String) -> void:
|
||||||
if(!gsr.progress_dict.has(levelName)):
|
if !gsr.progress_dict.has(levelName):
|
||||||
return
|
return
|
||||||
gsr.progress_dict[levelName].erase(levelName)
|
gsr.progress_dict[levelName].erase(levelName)
|
||||||
SaveManager.save_default()
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func get_property_value(levelName: String, propertyName: String) -> int:
|
func get_property_value(levelName: String, propertyName: String) -> int:
|
||||||
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has(propertyName):
|
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has(propertyName):
|
||||||
return gsr.progress_dict[levelName][propertyName]
|
return gsr.progress_dict[levelName][propertyName]
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
func get_savepoint(levelName: String) -> Vector2:
|
func get_savepoint(levelName: String) -> Vector2:
|
||||||
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has("savepoint"):
|
if gsr.progress_dict.has(levelName) && gsr.progress_dict[levelName].has("savepoint"):
|
||||||
return gsr.progress_dict[levelName]["savepoint"]
|
return gsr.progress_dict[levelName]["savepoint"]
|
||||||
else:
|
else:
|
||||||
return Vector2()
|
return Vector2()
|
||||||
|
|
||||||
|
|
||||||
# TODO This is permanent immediatly
|
# TODO This is permanent immediatly
|
||||||
func set_wallet(value) -> void:
|
func set_wallet(value) -> void:
|
||||||
gsr.wallet = value
|
gsr.wallet = value
|
||||||
SaveManager.save_default()
|
SaveManager.save_default()
|
||||||
|
|
||||||
|
|
||||||
func reinstate() -> void:
|
func reinstate() -> void:
|
||||||
if gsr.input_map.size() <= 1:
|
if gsr.input_map.size() <= 1:
|
||||||
InputMap.load_from_globals()
|
InputMap.load_from_globals()
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export var currencyValue: = 1
|
|||||||
func _on_body_entered(_body: Node) -> void:
|
func _on_body_entered(_body: Node) -> void:
|
||||||
if $AudioStreamPlayer.playing:
|
if $AudioStreamPlayer.playing:
|
||||||
return
|
return
|
||||||
level_state.currency += currencyValue
|
level_state.set_currency(level_state.get_currency() + currencyValue)
|
||||||
$CollisionShape2D.disabled = true
|
$CollisionShape2D.disabled = true
|
||||||
set_deferred("monitoring", false)
|
set_deferred("monitoring", false)
|
||||||
$AudioStreamPlayer.play()
|
$AudioStreamPlayer.play()
|
||||||
|
|||||||
@ -15,4 +15,4 @@ func _on_SaveArea_area_entered(area: Area2D) -> void:
|
|||||||
if(!GlobalState.get_savepoint(level_state.levelName) == global_position + Vector2(0,18)):
|
if(!GlobalState.get_savepoint(level_state.levelName) == global_position + Vector2(0,18)):
|
||||||
$AnimationPlayer.play("rolloutflag")
|
$AnimationPlayer.play("rolloutflag")
|
||||||
$AudioStreamPlayer.play()
|
$AudioStreamPlayer.play()
|
||||||
GlobalState.set_savepoint(level_state.levelName, global_position + Vector2(0,18))
|
level_state.set_savepoint(global_position + Vector2(0,18))
|
||||||
|
|||||||
@ -20,7 +20,6 @@ func _get_configuration_warning() -> String:
|
|||||||
return "The next scene property can't be empty" if not next_scene else ""
|
return "The next scene property can't be empty" if not next_scene else ""
|
||||||
|
|
||||||
func level_completion() -> void:
|
func level_completion() -> void:
|
||||||
GlobalState.remove_savepoint(levelName)
|
|
||||||
signal_manager.emit_signal("level_completed")
|
signal_manager.emit_signal("level_completed")
|
||||||
|
|
||||||
func activate_portal(_time: float) -> void:
|
func activate_portal(_time: float) -> void:
|
||||||
|
|||||||
@ -2,8 +2,6 @@ extends Node2D
|
|||||||
|
|
||||||
onready var buttonPlayer = $"%ButtonPlayer"
|
onready var buttonPlayer = $"%ButtonPlayer"
|
||||||
onready var activatorArea = $"%ActivatorArea"
|
onready var activatorArea = $"%ActivatorArea"
|
||||||
onready var indicatorPlayer = $"%IndicatorPlayer"
|
|
||||||
onready var elevator = get_node("./Portal")
|
|
||||||
onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalManager")
|
onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalManager")
|
||||||
onready var unactivatable_timer := $Timer
|
onready var unactivatable_timer := $Timer
|
||||||
onready var get_back_timer := $GetBackTimer
|
onready var get_back_timer := $GetBackTimer
|
||||||
|
|||||||
@ -8,35 +8,21 @@ onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalMana
|
|||||||
onready var unactivatable_timer := $Timer
|
onready var unactivatable_timer := $Timer
|
||||||
export(int) var frog_number := 0
|
export(int) var frog_number := 0
|
||||||
|
|
||||||
var activatable = false
|
var activatable = true
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
$Digit.frame = frog_number
|
$Digit.frame = frog_number
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
|
||||||
if activatable && Input.is_action_just_released("interact"):
|
|
||||||
selfActivate()
|
|
||||||
self.emit_signal("button_pushed")
|
|
||||||
|
|
||||||
|
|
||||||
func selfActivate():
|
func selfActivate():
|
||||||
indicatorPlayer.play("onning")
|
indicatorPlayer.play("onning")
|
||||||
#TODO dis importante
|
#TODO dis importante
|
||||||
|
self.emit_signal("button_pushed")
|
||||||
activatorArea.set_deferred("monitoring", false)
|
activatorArea.set_deferred("monitoring", false)
|
||||||
|
|
||||||
|
|
||||||
func _on_ActivatorArea_area_entered(area:Area2D) -> void:
|
func _on_ActivatorArea_area_entered(area:Area2D) -> void:
|
||||||
$Label.visible = true
|
|
||||||
$Highlight.visible = true
|
$Highlight.visible = true
|
||||||
activatable = true
|
if activatable:
|
||||||
|
selfActivate()
|
||||||
func _on_ActivatorArea_area_exited(area:Area2D) -> void:
|
|
||||||
unactivatable_timer.start()
|
|
||||||
|
|
||||||
func _on_Timer_timeout():
|
|
||||||
for body in activatorArea.get_overlapping_bodies():
|
|
||||||
if body.is_in_group("player"):
|
|
||||||
return
|
|
||||||
$Label.visible = false
|
|
||||||
$Highlight.visible = false
|
|
||||||
activatable = false
|
activatable = false
|
||||||
|
|||||||
@ -5,7 +5,7 @@ onready var indicatorPlayer = $"%IndicatorPlayer"
|
|||||||
onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalManager")
|
onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalManager")
|
||||||
onready var unactivatable_timer := $Timer
|
onready var unactivatable_timer := $Timer
|
||||||
|
|
||||||
var activatable = false
|
var activatable = true
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if activatable && Input.is_action_just_released("interact"):
|
if activatable && Input.is_action_just_released("interact"):
|
||||||
@ -18,23 +18,10 @@ func selfActivate():
|
|||||||
activatorArea.set_deferred("monitoring", false)
|
activatorArea.set_deferred("monitoring", false)
|
||||||
#TODO Close gate again?
|
#TODO Close gate again?
|
||||||
signal_manager.emit_signal("unlocked", "gateblock")
|
signal_manager.emit_signal("unlocked", "gateblock")
|
||||||
activatable = false
|
|
||||||
|
|
||||||
|
|
||||||
func _on_ActivatorArea_area_entered(area:Area2D) -> void:
|
func _on_ActivatorArea_area_entered(area:Area2D) -> void:
|
||||||
$Label.visible = true
|
|
||||||
$Highlight.visible = true
|
$Highlight.visible = true
|
||||||
activatable = true
|
if activatable:
|
||||||
if(area.get_parent().name == "WhatAreFrog"):
|
|
||||||
selfActivate()
|
selfActivate()
|
||||||
|
|
||||||
func _on_ActivatorArea_area_exited(area:Area2D) -> void:
|
|
||||||
unactivatable_timer.start()
|
|
||||||
|
|
||||||
func _on_Timer_timeout():
|
|
||||||
for body in activatorArea.get_overlapping_bodies():
|
|
||||||
if body.is_in_group("player"):
|
|
||||||
return
|
|
||||||
$Label.visible = false
|
|
||||||
$Highlight.visible = false
|
|
||||||
activatable = false
|
activatable = false
|
||||||
|
|||||||
@ -11,8 +11,8 @@ colors = PoolColorArray( 1, 1, 1, 0.752941, 0, 0, 0, 0 )
|
|||||||
|
|
||||||
[sub_resource type="GradientTexture2D" id=22]
|
[sub_resource type="GradientTexture2D" id=22]
|
||||||
gradient = SubResource( 21 )
|
gradient = SubResource( 21 )
|
||||||
width = 60
|
width = 75
|
||||||
height = 60
|
height = 75
|
||||||
fill = 1
|
fill = 1
|
||||||
fill_from = Vector2( 0.5, 0.5 )
|
fill_from = Vector2( 0.5, 0.5 )
|
||||||
fill_to = Vector2( 0.155994, 0.791965 )
|
fill_to = Vector2( 0.155994, 0.791965 )
|
||||||
@ -21,32 +21,32 @@ fill_to = Vector2( 0.155994, 0.791965 )
|
|||||||
radius = 18.0
|
radius = 18.0
|
||||||
|
|
||||||
[node name="VendingMachine" type="Node2D"]
|
[node name="VendingMachine" type="Node2D"]
|
||||||
|
position = Vector2( 0, -1 )
|
||||||
z_index = -1
|
z_index = -1
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="Highlight" type="TextureRect" parent="."]
|
[node name="Highlight" type="TextureRect" parent="."]
|
||||||
visible = false
|
|
||||||
anchor_left = 0.5
|
anchor_left = 0.5
|
||||||
anchor_top = 0.5
|
anchor_top = 0.5
|
||||||
anchor_right = 0.5
|
anchor_right = 0.5
|
||||||
anchor_bottom = 0.5
|
anchor_bottom = 0.5
|
||||||
margin_left = -30.0
|
margin_left = -37.0
|
||||||
margin_top = -31.0
|
margin_top = -41.0
|
||||||
margin_right = 30.0
|
margin_right = 38.0
|
||||||
margin_bottom = 29.0
|
margin_bottom = 34.0
|
||||||
texture = SubResource( 22 )
|
texture = SubResource( 22 )
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="."]
|
[node name="Label" type="Label" parent="."]
|
||||||
visible = false
|
|
||||||
margin_left = -18.0
|
margin_left = -18.0
|
||||||
margin_top = -24.0
|
margin_top = -30.0
|
||||||
margin_right = 48.0
|
margin_right = 48.0
|
||||||
margin_bottom = -10.0
|
margin_bottom = -16.0
|
||||||
rect_scale = Vector2( 0.590909, 0.627907 )
|
rect_scale = Vector2( 0.590909, 0.627907 )
|
||||||
custom_fonts/font = ExtResource( 3 )
|
custom_fonts/font = ExtResource( 3 )
|
||||||
text = "[purchase]"
|
text = "[purchase]"
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
|
position = Vector2( 0, -4 )
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="ActivatorArea" type="Area2D" parent="."]
|
[node name="ActivatorArea" type="Area2D" parent="."]
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[gd_scene load_steps=28 format=2]
|
[gd_scene load_steps=28 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=1]
|
[ext_resource path="res://src/Actors/Enemies/Vacuum.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=2]
|
||||||
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=3]
|
||||||
[ext_resource path="res://src/Actors/Enemies/Flyer.tscn" type="PackedScene" id=4]
|
[ext_resource path="res://src/Actors/Enemies/Flyer.tscn" type="PackedScene" id=4]
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
[ext_resource path="res://src/Actors/Enemies/SimpleEnemy.tscn" type="PackedScene" id=6]
|
[ext_resource path="res://src/Actors/Enemies/SimpleEnemy.tscn" type="PackedScene" id=6]
|
||||||
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=7]
|
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=7]
|
||||||
[ext_resource path="res://src/Actors/Enemies/Caterpillar.tscn" type="PackedScene" id=8]
|
[ext_resource path="res://src/Actors/Enemies/Caterpillar.tscn" type="PackedScene" id=8]
|
||||||
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=9]
|
[ext_resource path="res://src/Actors/Enemies/Vacuum.tscn" type="PackedScene" id=9]
|
||||||
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=10]
|
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=10]
|
||||||
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=11]
|
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=11]
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=87 format=2]
|
[gd_scene load_steps=86 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=1]
|
[ext_resource path="res://src/Levels/Templates/LevelTemplate.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=2]
|
[ext_resource path="res://src/Environment/GreenHouseTiles.tres" type="TileSet" id=2]
|
||||||
@ -1323,9 +1323,6 @@ unique_name_in_owner = true
|
|||||||
position = Vector2( -70, 1 )
|
position = Vector2( -70, 1 )
|
||||||
scale = Vector2( 0.878906, 0.936025 )
|
scale = Vector2( 0.878906, 0.936025 )
|
||||||
|
|
||||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
|
||||||
frame = 7
|
|
||||||
|
|
||||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 33 )
|
parameters/playback = SubResource( 33 )
|
||||||
parameters/jumpStretching/blend_position = 1
|
parameters/jumpStretching/blend_position = 1
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=63 format=2]
|
[gd_scene load_steps=67 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=1]
|
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Utilities/SceneAudio.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://src/Utilities/SceneAudio.tscn" type="PackedScene" id=2]
|
||||||
@ -199,6 +199,25 @@ shader_param/strength = 0.1
|
|||||||
shader_param/noise_tex_normal = ExtResource( 20 )
|
shader_param/noise_tex_normal = ExtResource( 20 )
|
||||||
shader_param/noise_tex = ExtResource( 20 )
|
shader_param/noise_tex = ExtResource( 20 )
|
||||||
|
|
||||||
|
[sub_resource type="Gradient" id=9]
|
||||||
|
interpolation_mode = 2
|
||||||
|
colors = PoolColorArray( 0, 0, 0, 0.784314, 0, 0, 0, 0 )
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture2D" id=8]
|
||||||
|
gradient = SubResource( 9 )
|
||||||
|
width = 300
|
||||||
|
height = 75
|
||||||
|
fill = 1
|
||||||
|
fill_from = Vector2( 0.5, 0.5 )
|
||||||
|
fill_to = Vector2( 0.155994, 0.791965 )
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFontData" id=12]
|
||||||
|
font_path = "res://assets/ui/fonts/Kenney Thick.ttf"
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFont" id=53]
|
||||||
|
size = 6
|
||||||
|
font_data = SubResource( 12 )
|
||||||
|
|
||||||
[sub_resource type="Animation" id=50]
|
[sub_resource type="Animation" id=50]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
@ -1152,7 +1171,7 @@ death_sound_1 = null
|
|||||||
death_sound_2 = null
|
death_sound_2 = null
|
||||||
|
|
||||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||||
frame = 5
|
frame = 7
|
||||||
|
|
||||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 6 )
|
parameters/playback = SubResource( 6 )
|
||||||
@ -1252,9 +1271,10 @@ material = SubResource( 48 )
|
|||||||
position = Vector2( -44, -83 )
|
position = Vector2( -44, -83 )
|
||||||
|
|
||||||
[node name="TutorialThingy" parent="." instance=ExtResource( 9 )]
|
[node name="TutorialThingy" parent="." instance=ExtResource( 9 )]
|
||||||
|
visible = true
|
||||||
position = Vector2( 1441, -4 )
|
position = Vector2( 1441, -4 )
|
||||||
action = "interact"
|
action = "interact"
|
||||||
tutorial_text = "Press to interact:"
|
tutorial_text = "Press to interact"
|
||||||
|
|
||||||
[node name="Button" parent="TutorialThingy" index="0"]
|
[node name="Button" parent="TutorialThingy" index="0"]
|
||||||
material = SubResource( 14 )
|
material = SubResource( 14 )
|
||||||
@ -1265,6 +1285,25 @@ position = Vector2( -2, -87 )
|
|||||||
[node name="CollisionShape2D" parent="TutorialThingy/StartTutorialArea" index="0"]
|
[node name="CollisionShape2D" parent="TutorialThingy/StartTutorialArea" index="0"]
|
||||||
position = Vector2( 0, 9 )
|
position = Vector2( 0, 9 )
|
||||||
|
|
||||||
|
[node name="TextureRect3" type="TextureRect" parent="TutorialThingy"]
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_left = -149.0
|
||||||
|
margin_top = 4.0
|
||||||
|
margin_right = 251.0
|
||||||
|
margin_bottom = 204.0
|
||||||
|
texture = SubResource( 8 )
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="TutorialThingy"]
|
||||||
|
margin_left = -51.0
|
||||||
|
margin_top = 28.0
|
||||||
|
margin_right = 51.0
|
||||||
|
margin_bottom = 75.0
|
||||||
|
custom_fonts/font = SubResource( 53 )
|
||||||
|
text = "and start decontamination procedure"
|
||||||
|
align = 1
|
||||||
|
autowrap = true
|
||||||
|
|
||||||
[node name="SavePoint" parent="." instance=ExtResource( 15 )]
|
[node name="SavePoint" parent="." instance=ExtResource( 15 )]
|
||||||
position = Vector2( 1168, -88 )
|
position = Vector2( 1168, -88 )
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=3]
|
||||||
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=4]
|
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=4]
|
||||||
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=5]
|
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=5]
|
||||||
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=6]
|
[ext_resource path="res://src/Actors/Enemies/Vacuum.tscn" type="PackedScene" id=6]
|
||||||
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=7]
|
[ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=7]
|
||||||
[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=8]
|
[ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=8]
|
||||||
[ext_resource path="res://src/Platforms/FlyingPlatform.tscn" type="PackedScene" id=9]
|
[ext_resource path="res://src/Platforms/FlyingPlatform.tscn" type="PackedScene" id=9]
|
||||||
|
|||||||
@ -132,6 +132,9 @@ jump_buffer_filled = null
|
|||||||
death_sound_1 = null
|
death_sound_1 = null
|
||||||
death_sound_2 = null
|
death_sound_2 = null
|
||||||
|
|
||||||
|
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||||
|
frame = 7
|
||||||
|
|
||||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 53 )
|
parameters/playback = SubResource( 53 )
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@
|
|||||||
[ext_resource path="res://src/Actors/Friendlies/BoundFrog.tscn" type="PackedScene" id=17]
|
[ext_resource path="res://src/Actors/Friendlies/BoundFrog.tscn" type="PackedScene" id=17]
|
||||||
[ext_resource path="res://src/Contraptions/Triggers/FrogFreeButton.tscn" type="PackedScene" id=18]
|
[ext_resource path="res://src/Contraptions/Triggers/FrogFreeButton.tscn" type="PackedScene" id=18]
|
||||||
[ext_resource path="res://src/Contraptions/Triggers/GateButton.tscn" type="PackedScene" id=19]
|
[ext_resource path="res://src/Contraptions/Triggers/GateButton.tscn" type="PackedScene" id=19]
|
||||||
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=20]
|
[ext_resource path="res://src/Actors/Enemies/Vacuum.tscn" type="PackedScene" id=20]
|
||||||
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=21]
|
[ext_resource path="res://src/BenefitialObjects/Coin.tscn" type="PackedScene" id=21]
|
||||||
|
|
||||||
[sub_resource type="Shader" id=7]
|
[sub_resource type="Shader" id=7]
|
||||||
|
|||||||
@ -1009,9 +1009,6 @@ unique_name_in_owner = true
|
|||||||
position = Vector2( -88, 96 )
|
position = Vector2( -88, 96 )
|
||||||
scale = Vector2( 0.878906, 0.936025 )
|
scale = Vector2( 0.878906, 0.936025 )
|
||||||
|
|
||||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
|
||||||
frame = 7
|
|
||||||
|
|
||||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 6 )
|
parameters/playback = SubResource( 6 )
|
||||||
|
|
||||||
@ -1229,6 +1226,7 @@ elevator_time = 15
|
|||||||
|
|
||||||
[node name="Portal" parent="." instance=ExtResource( 7 )]
|
[node name="Portal" parent="." instance=ExtResource( 7 )]
|
||||||
position = Vector2( 319, -224 )
|
position = Vector2( 319, -224 )
|
||||||
|
next_scene = "res://src/Levels/Level 4.tscn"
|
||||||
|
|
||||||
[node name="BoundFrog" parent="." instance=ExtResource( 56 )]
|
[node name="BoundFrog" parent="." instance=ExtResource( 56 )]
|
||||||
position = Vector2( 203, -45 )
|
position = Vector2( 203, -45 )
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=11]
|
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=11]
|
||||||
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=12]
|
[ext_resource path="res://assets/environment/decor/platform-plants.png" type="Texture" id=12]
|
||||||
[ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=13]
|
[ext_resource path="res://src/Platforms/FlyingLaserCutter.tscn" type="PackedScene" id=13]
|
||||||
[ext_resource path="res://src/Actors/Enemies/DartingEnemy.tscn" type="PackedScene" id=14]
|
[ext_resource path="res://src/Actors/Enemies/Vacuum.tscn" type="PackedScene" id=14]
|
||||||
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=15]
|
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=15]
|
||||||
[ext_resource path="res://src/Platforms/Spring/Spring.tscn" type="PackedScene" id=56]
|
[ext_resource path="res://src/Platforms/Spring/Spring.tscn" type="PackedScene" id=56]
|
||||||
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=57]
|
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=57]
|
||||||
@ -162,7 +162,7 @@ format = 1
|
|||||||
|
|
||||||
[node name="Portal" parent="." instance=ExtResource( 57 )]
|
[node name="Portal" parent="." instance=ExtResource( 57 )]
|
||||||
position = Vector2( 421, -1103 )
|
position = Vector2( 421, -1103 )
|
||||||
next_scene = "res://src/Levels/Actual Level 1.tscn"
|
next_scene = "res://src/Levels/Level 5.tscn"
|
||||||
is_active = true
|
is_active = true
|
||||||
|
|
||||||
[node name="SavePoint" parent="." instance=ExtResource( 7 )]
|
[node name="SavePoint" parent="." instance=ExtResource( 7 )]
|
||||||
|
|||||||
@ -179,26 +179,19 @@ size_flags_vertical = 3
|
|||||||
[node name="UserInterface" parent="." instance=ExtResource( 6 )]
|
[node name="UserInterface" parent="." instance=ExtResource( 6 )]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="BlobbyCam" parent="." instance=ExtResource( 9 )]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
drag_margin_top = 0.12
|
|
||||||
drag_margin_bottom = 0.12
|
|
||||||
|
|
||||||
[node name="TextureRect" parent="BlobbyCam/ParallaxBackground/ParallaxLayer4" index="5"]
|
|
||||||
margin_left = -585.0
|
|
||||||
margin_right = 565.0
|
|
||||||
|
|
||||||
[node name="Blobby" parent="." instance=ExtResource( 2 )]
|
[node name="Blobby" parent="." instance=ExtResource( 2 )]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
position = Vector2( -45, -5.96046e-08 )
|
position = Vector2( -45, -5.96046e-08 )
|
||||||
scale = Vector2( 0.878906, 0.936025 )
|
scale = Vector2( 0.878906, 0.936025 )
|
||||||
|
|
||||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||||
frame = 5
|
frame = 8
|
||||||
|
|
||||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||||
parameters/playback = SubResource( 6 )
|
parameters/playback = SubResource( 6 )
|
||||||
|
|
||||||
|
[node name="BlobbyCam" parent="." instance=ExtResource( 9 )]
|
||||||
|
|
||||||
[node name="SavePoint" parent="." instance=ExtResource( 18 )]
|
[node name="SavePoint" parent="." instance=ExtResource( 18 )]
|
||||||
position = Vector2( 520, -8 )
|
position = Vector2( 520, -8 )
|
||||||
|
|
||||||
@ -394,7 +387,6 @@ position = Vector2( 286, -16 )
|
|||||||
[editable path="LevelState"]
|
[editable path="LevelState"]
|
||||||
[editable path="UserInterface"]
|
[editable path="UserInterface"]
|
||||||
[editable path="UserInterface/HUD"]
|
[editable path="UserInterface/HUD"]
|
||||||
[editable path="BlobbyCam"]
|
|
||||||
[editable path="Blobby"]
|
[editable path="Blobby"]
|
||||||
[editable path="FlyingPlatformSmol"]
|
[editable path="FlyingPlatformSmol"]
|
||||||
[editable path="FlyingPlatformSmol2"]
|
[editable path="FlyingPlatformSmol2"]
|
||||||
|
|||||||
@ -9,14 +9,15 @@ export(float) var level_ambiance_attenuation = -23
|
|||||||
onready var signal_manager := $"%SignalManager"
|
onready var signal_manager := $"%SignalManager"
|
||||||
onready var level_state := $"%LevelState"
|
onready var level_state := $"%LevelState"
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
$TransitionLayer.visible = true
|
$TransitionLayer.visible = true
|
||||||
var transition_tween = Tween.new()
|
var transition_tween = Tween.new()
|
||||||
add_child(transition_tween)
|
add_child(transition_tween)
|
||||||
var property = "shader_param/position"
|
var property = "shader_param/position"
|
||||||
var node = $TransitionLayer/SceneTransition
|
var node = $TransitionLayer/SceneTransition
|
||||||
transition_tween.interpolate_property(node.material, property,-1.5, 1.0, 0.94, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
|
transition_tween.interpolate_property(
|
||||||
|
node.material, property, -1.5, 1.0, 0.94, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT
|
||||||
|
)
|
||||||
transition_tween.start()
|
transition_tween.start()
|
||||||
# should spawn the tutorial thingies which are still remembered in the progress dictionary
|
# should spawn the tutorial thingies which are still remembered in the progress dictionary
|
||||||
signal_manager.connect("terminal_activated", self, "stop_level_music")
|
signal_manager.connect("terminal_activated", self, "stop_level_music")
|
||||||
@ -25,5 +26,6 @@ func _ready() -> void:
|
|||||||
$SceneAudio.play_parallel_sound(level_music, level_music_attenuation, false, 1.0, 0, "Music")
|
$SceneAudio.play_parallel_sound(level_music, level_music_attenuation, false, 1.0, 0, "Music")
|
||||||
$SceneAudio.play_parallel_sound(level_ambiance, level_ambiance_attenuation)
|
$SceneAudio.play_parallel_sound(level_ambiance, level_ambiance_attenuation)
|
||||||
|
|
||||||
|
|
||||||
func stop_level_music(_unused: float) -> void:
|
func stop_level_music(_unused: float) -> void:
|
||||||
$SceneAudio.stop_parallel_sound(level_music)
|
$SceneAudio.stop_parallel_sound(level_music)
|
||||||
|
|||||||
@ -46,7 +46,7 @@ func _ready():
|
|||||||
set_state(states.idle)
|
set_state(states.idle)
|
||||||
|
|
||||||
# Zero Vector is false
|
# Zero Vector is false
|
||||||
if GlobalState.get_savepoint(level_state.levelName):
|
if level_state.load_savepoint():
|
||||||
parent.global_position = GlobalState.get_savepoint(level_state.levelName)
|
parent.global_position = GlobalState.get_savepoint(level_state.levelName)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -116,6 +116,7 @@ anims/Redlight = SubResource( 2 )
|
|||||||
|
|
||||||
[node name="Currency" type="Label" parent="."]
|
[node name="Currency" type="Label" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
margin_left = 9.0
|
margin_left = 9.0
|
||||||
|
|||||||
@ -9,6 +9,11 @@ func initialize_with_progress(levelFullName: String) -> void:
|
|||||||
for key in froggies.keys():
|
for key in froggies.keys():
|
||||||
register_froggy(int(key), froggies[key])
|
register_froggy(int(key), froggies[key])
|
||||||
|
|
||||||
|
var level_time : float = GlobalState.get_level_time(levelFullName)
|
||||||
|
if(GlobalState.get_level_completed(levelFullName)):
|
||||||
|
$LevelTime.visible = true
|
||||||
|
$LevelTime.text = "Time " + str(round(level_time*1000)/1000) + " sec"
|
||||||
|
|
||||||
|
|
||||||
func register_froggy(var count : int = 0, var freed: bool = false) -> void:
|
func register_froggy(var count : int = 0, var freed: bool = false) -> void:
|
||||||
var frogo: String = "%FreedFroggy" + str(count + 1)
|
var frogo: String = "%FreedFroggy" + str(count + 1)
|
||||||
|
|||||||
@ -1,9 +1,24 @@
|
|||||||
[gd_scene load_steps=5 format=2]
|
[gd_scene load_steps=9 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/ui/froggy-freed-ui.png" type="Texture" id=1]
|
[ext_resource path="res://assets/ui/froggy-freed-ui.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://assets/ui/froggy-imprisoned-ui.png" type="Texture" id=2]
|
[ext_resource path="res://assets/ui/froggy-imprisoned-ui.png" type="Texture" id=2]
|
||||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/LevelCheckBox.gd" type="Script" id=3]
|
[ext_resource path="res://src/UserInterface/Screens/MainMenu/LevelCheckBox.gd" type="Script" id=3]
|
||||||
[ext_resource path="res://src/UserInterface/Buttons/AudibleCheckbox.gd" type="Script" id=4]
|
[ext_resource path="res://src/UserInterface/Buttons/AudibleCheckbox.gd" type="Script" id=4]
|
||||||
|
[ext_resource path="res://assets/ui/sci-fi-godot-theme/sci-fi-theme.tres" type="Theme" id=5]
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFontData" id=12]
|
||||||
|
font_path = "res://assets/ui/fonts/Kenney Thick.ttf"
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFont" id=14]
|
||||||
|
size = 8
|
||||||
|
extra_spacing_top = 4
|
||||||
|
extra_spacing_bottom = 4
|
||||||
|
font_data = SubResource( 12 )
|
||||||
|
|
||||||
|
[sub_resource type="DynamicFont" id=13]
|
||||||
|
size = 6
|
||||||
|
extra_spacing_top = 4
|
||||||
|
font_data = SubResource( 12 )
|
||||||
|
|
||||||
[node name="LevelCheckBox" type="VBoxContainer"]
|
[node name="LevelCheckBox" type="VBoxContainer"]
|
||||||
margin_right = 116.0
|
margin_right = 116.0
|
||||||
@ -11,13 +26,16 @@ margin_bottom = 56.0
|
|||||||
focus_mode = 2
|
focus_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
|
theme = ExtResource( 5 )
|
||||||
|
custom_constants/separation = 4
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
[node name="CheckBox" type="CheckBox" parent="."]
|
[node name="CheckBox" type="CheckBox" parent="."]
|
||||||
margin_right = 119.0
|
margin_right = 126.0
|
||||||
margin_bottom = 24.0
|
margin_bottom = 17.0
|
||||||
grow_horizontal = 0
|
grow_horizontal = 0
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
|
custom_fonts/font = SubResource( 14 )
|
||||||
text = "This is a level "
|
text = "This is a level "
|
||||||
align = 1
|
align = 1
|
||||||
icon_align = 1
|
icon_align = 1
|
||||||
@ -144,10 +162,21 @@ size_flags_horizontal = 3
|
|||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
texture = ExtResource( 2 )
|
texture = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="HSeparator" type="HSeparator" parent="."]
|
[node name="LevelTime" type="Label" parent="."]
|
||||||
margin_top = 28.0
|
visible = false
|
||||||
margin_right = 119.0
|
margin_top = 21.0
|
||||||
|
margin_right = 126.0
|
||||||
margin_bottom = 32.0
|
margin_bottom = 32.0
|
||||||
|
custom_colors/font_color = Color( 0.717647, 0.717647, 0.717647, 1 )
|
||||||
|
custom_fonts/font = SubResource( 13 )
|
||||||
|
text = "Time: 10 sec"
|
||||||
|
align = 1
|
||||||
|
autowrap = true
|
||||||
|
|
||||||
|
[node name="HSeparator" type="HSeparator" parent="."]
|
||||||
|
margin_top = 21.0
|
||||||
|
margin_right = 126.0
|
||||||
|
margin_bottom = 25.0
|
||||||
|
|
||||||
[connection signal="focus_entered" from="." to="." method="_on_LevelCheckBox_focus_entered"]
|
[connection signal="focus_entered" from="." to="." method="_on_LevelCheckBox_focus_entered"]
|
||||||
[connection signal="pressed" from="CheckBox" to="." method="_on_CheckBox_pressed"]
|
[connection signal="pressed" from="CheckBox" to="." method="_on_CheckBox_pressed"]
|
||||||
|
|||||||
@ -225,7 +225,8 @@ scroll_horizontal_enabled = false
|
|||||||
script = ExtResource( 11 )
|
script = ExtResource( 11 )
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="MenuContainer/Panel/LevelList"]
|
[node name="VBoxContainer" type="VBoxContainer" parent="MenuContainer/Panel/LevelList"]
|
||||||
margin_right = 119.0
|
margin_right = 123.0
|
||||||
|
margin_bottom = 102.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@ -234,7 +235,7 @@ alignment = 1
|
|||||||
|
|
||||||
[node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/Panel/LevelList/VBoxContainer"]
|
[node name="InvisibleCunt" type="CheckBox" parent="MenuContainer/Panel/LevelList/VBoxContainer"]
|
||||||
visible = false
|
visible = false
|
||||||
margin_right = 216.0
|
margin_right = 123.0
|
||||||
margin_bottom = 102.0
|
margin_bottom = 102.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
|
|||||||
@ -186,6 +186,7 @@ custom_fonts/font = ExtResource( 5 )
|
|||||||
text = "This is a test
|
text = "This is a test
|
||||||
"
|
"
|
||||||
align = 1
|
align = 1
|
||||||
|
autowrap = true
|
||||||
uppercase = true
|
uppercase = true
|
||||||
|
|
||||||
[node name="TextureRect2" type="TextureRect" parent="."]
|
[node name="TextureRect2" type="TextureRect" parent="."]
|
||||||
|
|||||||
@ -4,18 +4,27 @@ onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalMana
|
|||||||
onready var levelName := get_tree().current_scene.filename
|
onready var levelName := get_tree().current_scene.filename
|
||||||
|
|
||||||
#TODO Easteregg pls
|
#TODO Easteregg pls
|
||||||
var currency: = 0 setget set_currency
|
var currency := 0 setget set_currency, get_currency
|
||||||
var deaths := 0 setget set_deaths
|
var deaths := 0 setget set_deaths
|
||||||
var freed_frogs := []
|
var freed_frogs := []
|
||||||
# TODO Rename probs
|
# TODO Rename probs
|
||||||
var is_dead := false setget set_dead
|
var is_dead := false setget set_dead
|
||||||
|
|
||||||
|
var level_time := 0.0
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
GlobalState.gsr.last_played_level = levelName
|
GlobalState.gsr.last_played_level = levelName
|
||||||
SaveManager.save_default()
|
SaveManager.save_default()
|
||||||
|
if GlobalState.get_level_completed(levelName):
|
||||||
|
GlobalState.set_level_completed(levelName, false)
|
||||||
signal_manager.connect("level_completed", self, "_on_level_completed")
|
signal_manager.connect("level_completed", self, "_on_level_completed")
|
||||||
signal_manager.connect("player_died", self, "player_dying")
|
signal_manager.connect("player_died", self, "player_dying")
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(delta: float) -> void:
|
||||||
|
level_time += delta
|
||||||
|
|
||||||
|
|
||||||
func reset() -> void:
|
func reset() -> void:
|
||||||
deaths = 0
|
deaths = 0
|
||||||
currency = 0
|
currency = 0
|
||||||
@ -24,64 +33,94 @@ func reset() -> void:
|
|||||||
if GlobalState.gsr.progress_dict.has(levelName):
|
if GlobalState.gsr.progress_dict.has(levelName):
|
||||||
GlobalState.gsr.progress_dict[levelName].erase("savepoint")
|
GlobalState.gsr.progress_dict[levelName].erase("savepoint")
|
||||||
|
|
||||||
|
|
||||||
func set_currency(value: int) -> void:
|
func set_currency(value: int) -> void:
|
||||||
currency = value
|
currency = value
|
||||||
signal_manager.emit_signal("currency_updated")
|
signal_manager.emit_signal("currency_updated")
|
||||||
|
|
||||||
|
func get_currency() -> int:
|
||||||
|
return GlobalState.gsr.wallet + currency
|
||||||
|
|
||||||
func set_deaths(value: int) -> void:
|
func set_deaths(value: int) -> void:
|
||||||
deaths = value
|
deaths = value
|
||||||
|
|
||||||
|
|
||||||
func set_dead(value: bool) -> void:
|
func set_dead(value: bool) -> void:
|
||||||
is_dead = value
|
is_dead = value
|
||||||
|
|
||||||
|
func set_savepoint(pos: Vector2) -> void:
|
||||||
|
GlobalState.set_savepoint(levelName, pos)
|
||||||
|
GlobalState.set_uncompleted_level_time(levelName, level_time)
|
||||||
|
|
||||||
|
func load_savepoint() -> bool:
|
||||||
|
if !GlobalState.get_savepoint(levelName):
|
||||||
|
return false
|
||||||
|
level_time = GlobalState.get_uncompleted_level_time(levelName)
|
||||||
|
return true
|
||||||
|
|
||||||
|
# Registers a new frog which exists in the loaded level, with the progress resource
|
||||||
func register_frog(number: int, freed: bool = false) -> void:
|
func register_frog(number: int, freed: bool = false) -> void:
|
||||||
update_global_state()
|
update_global_state()
|
||||||
if(!GlobalState.gsr.progress_dict[levelName]["froggies"].has(number)):
|
if !GlobalState.gsr.progress_dict[levelName]["froggies"].has(number):
|
||||||
GlobalState.gsr.progress_dict[levelName]["froggies"][number] = freed
|
GlobalState.gsr.progress_dict[levelName]["froggies"][number] = freed
|
||||||
GlobalState.save()
|
GlobalState.save()
|
||||||
|
|
||||||
|
|
||||||
func free_a_frog(number: int) -> void:
|
func free_a_frog(number: int) -> void:
|
||||||
freed_frogs.append(number)
|
freed_frogs.append(number)
|
||||||
|
|
||||||
|
|
||||||
func needs_tutorial(lesson: String) -> bool:
|
func needs_tutorial(lesson: String) -> bool:
|
||||||
if(!GlobalState.gsr.tutorial_prompts.has(lesson)):
|
if !GlobalState.gsr.tutorial_prompts.has(lesson):
|
||||||
return false
|
return false
|
||||||
return GlobalState.gsr.tutorial_prompts[lesson]
|
return GlobalState.gsr.tutorial_prompts[lesson]
|
||||||
|
|
||||||
|
|
||||||
func register_tutorial(lesson: String) -> void:
|
func register_tutorial(lesson: String) -> void:
|
||||||
if(GlobalState.gsr.tutorial_prompts.has(lesson)):
|
if GlobalState.gsr.tutorial_prompts.has(lesson):
|
||||||
return
|
return
|
||||||
GlobalState.gsr.tutorial_prompts[lesson] = true
|
GlobalState.gsr.tutorial_prompts[lesson] = true
|
||||||
GlobalState.save()
|
GlobalState.save()
|
||||||
|
|
||||||
|
|
||||||
func absolved_tutorial(lesson: String) -> void:
|
func absolved_tutorial(lesson: String) -> void:
|
||||||
if(!GlobalState.gsr.tutorial_prompts.has(lesson)):
|
if !GlobalState.gsr.tutorial_prompts.has(lesson):
|
||||||
return
|
return
|
||||||
GlobalState.gsr.tutorial_prompts[lesson] = false
|
GlobalState.gsr.tutorial_prompts[lesson] = false
|
||||||
GlobalState.save()
|
GlobalState.save()
|
||||||
|
|
||||||
|
|
||||||
# Spends the currency when enough is available
|
# Spends the currency when enough is available
|
||||||
# and returns true if so. Else it does not spend and return false.
|
# and returns true if so. Else it does not spend and return false.
|
||||||
func spend_currency(cost: int) -> bool:
|
func spend_currency(cost: int) -> bool:
|
||||||
# TODO member that
|
# TODO member that
|
||||||
if(OS.is_debug_build()):
|
if OS.is_debug_build():
|
||||||
return true
|
return true
|
||||||
if GlobalState.gsr.wallet + currency < cost:
|
if get_currency() < cost:
|
||||||
return false
|
return false
|
||||||
var remainder = currency - cost
|
var remainder = currency - cost
|
||||||
if remainder >= 0:
|
if remainder >= 0:
|
||||||
currency = remainder
|
set_currency(remainder)
|
||||||
|
# When level collected currency is not enough, deplete saved up currency in global state
|
||||||
else:
|
else:
|
||||||
currency = 0
|
currency = 0
|
||||||
GlobalState.set_wallet(GlobalState.gsr.wallet + remainder)
|
GlobalState.set_wallet(GlobalState.gsr.wallet + remainder)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
func _on_level_completed():
|
func _on_level_completed():
|
||||||
#if(OS.is_debug_build()):
|
#if(OS.is_debug_build()):
|
||||||
# return
|
# return
|
||||||
|
# TODO Extra screen for new best time
|
||||||
|
GlobalState.set_level_completed(levelName, true)
|
||||||
|
if(GlobalState.get_level_time(levelName) > level_time ):
|
||||||
|
GlobalState.set_leveltime(levelName, level_time)
|
||||||
|
GlobalState.set_uncompleted_level_time(levelName, INF)
|
||||||
|
GlobalState.remove_savepoint(levelName)
|
||||||
update_global_state()
|
update_global_state()
|
||||||
reset()
|
reset()
|
||||||
|
|
||||||
|
|
||||||
func update_global_state() -> void:
|
func update_global_state() -> void:
|
||||||
var progress_dict: Dictionary = GlobalState.get_progress()
|
var progress_dict: Dictionary = GlobalState.get_progress()
|
||||||
var levelProgress: Dictionary = {}
|
var levelProgress: Dictionary = {}
|
||||||
@ -93,8 +132,14 @@ func update_global_state() -> void:
|
|||||||
if !progress_dict.has(levelName):
|
if !progress_dict.has(levelName):
|
||||||
progress_dict[levelName] = levelProgress
|
progress_dict[levelName] = levelProgress
|
||||||
else:
|
else:
|
||||||
progress_dict[levelName]["currency"] = GlobalState.get_property_value(levelName,"currency") + currency
|
progress_dict[levelName]["currency"] = (
|
||||||
progress_dict[levelName]["deaths"] = GlobalState.get_property_value(levelName,"deaths") + deaths
|
GlobalState.get_property_value(levelName, "currency")
|
||||||
|
+ currency
|
||||||
|
)
|
||||||
|
progress_dict[levelName]["deaths"] = (
|
||||||
|
GlobalState.get_property_value(levelName, "deaths")
|
||||||
|
+ deaths
|
||||||
|
)
|
||||||
if !progress_dict[levelName].has("froggies"):
|
if !progress_dict[levelName].has("froggies"):
|
||||||
progress_dict[levelName]["froggies"] = {}
|
progress_dict[levelName]["froggies"] = {}
|
||||||
else:
|
else:
|
||||||
@ -106,6 +151,7 @@ func update_global_state() -> void:
|
|||||||
GlobalState.set_wallet(GlobalState.gsr.wallet + currency)
|
GlobalState.set_wallet(GlobalState.gsr.wallet + currency)
|
||||||
GlobalState.set_progress(progress_dict)
|
GlobalState.set_progress(progress_dict)
|
||||||
|
|
||||||
|
|
||||||
func player_dying(animation_number: int = 0) -> void:
|
func player_dying(animation_number: int = 0) -> void:
|
||||||
currency = 0
|
currency = 0
|
||||||
is_dead = true
|
is_dead = true
|
||||||
|
|||||||
@ -55,7 +55,9 @@ func play_parallel_sound(
|
|||||||
disposable_player.bus = bus
|
disposable_player.bus = bus
|
||||||
disposable_player.pitch_scale = pitch
|
disposable_player.pitch_scale = pitch
|
||||||
disposable_player.play(start_time)
|
disposable_player.play(start_time)
|
||||||
disposable_player.connect("finished", self, "dispose_parallel_player", [weakref(disposable_player)])
|
disposable_player.connect(
|
||||||
|
"finished", self, "dispose_parallel_player", [weakref(disposable_player)]
|
||||||
|
)
|
||||||
players[sound_name] = weakref(disposable_player)
|
players[sound_name] = weakref(disposable_player)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user