sokoban
Diffstat (limited to 'World.gd')
| -rw-r--r-- | World.gd | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/World.gd b/World.gd new file mode 100644 index 0000000..f09c12b --- /dev/null +++ b/World.gd @@ -0,0 +1,136 @@ +extends Node2D + +var currentintlevel := 1 +var screenshots = 0 +var game_over = false setget set_over +var game_won = false setget set_won +var over = false +var just_started = true + +onready var level := $Level +onready var console = MainInstances.console + +const path = "user://" + + +func _ready(): + if Utils.starting: + start() + Utils.starting = false + if Utils.loading: + Utils.loading = false + currentintlevel = Utils.loading_int + Utils.loading_int = 0 + start() + $WinScreen.player = $Level/LevelContainer/Player + $WinScreen.hide(false) + level.connect("level_completed", self, "_on_Level_level_completed") + level.connect("level_reset", self, "_on_Level_level_reset") + level.connect("game_over", self, "_on_Level_game_over") + + +func _on_Level_level_completed(complete = false): + $Level/CanvasLayer/HUD/StopWatch.set_process(false) + if complete: + $WinScreen._show(str(level.current_level)) + save(currentintlevel + 1) + game_over = false + game_won = true + else: + $Level/LevelContainer/LevelComplete.play("Animate") + get_tree().call_group("target", "play_pulse") + + +func _on_Level_level_reset(): + $WinScreen.hide(true) + $GameoverScreen.hide(true) + game_over = false + game_won = false + + +func save(new_level): # what level are we on/going to + if (new_level) > int(SaveLoad.files.level.data.highest_level): + SaveLoad.files.level.data.highest_level = str(new_level - 1) + console.Log("New Highscore!") + SaveLoad.save("level") + + +func _on_Level_game_over(): + game_over = true + game_won = false + $GameoverScreen._show(str(level.current_level)) + + +onready var cam = $Level/LevelContainer/Player.cam + +var max_zoom = 3 +var min_zoom = .25 + + +func _input(event: InputEvent): + if event.is_action("scrollup"): + var new_zoom = cam.zoom.x + new_zoom += .01 + new_zoom = clamp(new_zoom, min_zoom, max_zoom) + cam.zoom = Vector2(new_zoom, new_zoom) + + elif event.is_action("scrolldown"): + var new_zoom = cam.zoom.x + new_zoom -= .03 + new_zoom = clamp(new_zoom, min_zoom, max_zoom) + cam.zoom = Vector2(new_zoom, new_zoom) + + elif event.is_action_released("next"): + currentintlevel += 1 + currentintlevel = clamp(currentintlevel, 1, 60) + + start() + + if event.is_action_released("ui_accept"): + if $WinScreen.shown: + currentintlevel += 1 + $WinScreen.hide(true) + game_won = false + level.load_level(str(currentintlevel)) + + elif $GameoverScreen.shown: + $GameoverScreen.hide(true) + game_won = false + game_over = false + level.load_level(str(currentintlevel), false) + + elif event.is_action_released("prtscrn"): + screenshots += 1 + screenshots = clamp(screenshots, 0, 20) + var save_path = path + "sokobanscreenshot_%s.png" % str(screenshots) + var image = get_viewport().get_texture().get_data() + image.flip_y() + if console.Log( + ( + "saved to: " + + OS.get_user_data_dir() + + "/" + + "sokobanscreenshot_%s.png" % str(screenshots) + ), + 1, + 2.5 + ): + image.save_png(save_path) + + +func start(): + Utils.load_loading_screen() + yield(Utils, "loaded_loading_screen") + $Level/CanvasLayer/HUD.show() + level.show() + level.load_level(str(currentintlevel)) + + +func set_won(value): + game_won = value + over = game_over or game_won + + +func set_over(value): + game_over = value + over = game_over or game_won |