sokoban
Diffstat (limited to 'World.gd')
-rw-r--r--World.gd136
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