GameManager.gd 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. extends Node
  2. @onready var root = get_tree().current_scene
  3. @onready var player = null
  4. @onready var objectives = null
  5. var low_detail = false
  6. func _ready():
  7. var master_bus = AudioServer.get_bus_index("Master")
  8. var reverb_bus = AudioServer.get_bus_index("Reverb")
  9. var fullscreen = GameManager.get_user_value("settings", "fullscreen")
  10. if fullscreen:
  11. if fullscreen == true: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
  12. if fullscreen == false: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
  13. else:
  14. DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
  15. GameManager.set_user_value("settings", "fullscreen", true)
  16. if GameManager.get_user_value("settings", "volume"):
  17. AudioServer.set_bus_volume_linear(master_bus, GameManager.get_user_value("settings", "volume"))
  18. AudioServer.set_bus_volume_linear(reverb_bus, GameManager.get_user_value("settings", "volume"))
  19. else:
  20. GameManager.set_user_value("settings", "volume", db_to_linear(0.0))
  21. refresh_vars()
  22. func die(message = "you die"):
  23. if player:
  24. player.die(message)
  25. func movement(value):
  26. refresh_vars()
  27. if player:
  28. player.movement = value
  29. if is_running_on_mobile():
  30. player.get_node("Neck/Camera3D/mobile controls").visible = value
  31. func save_scene(scene):
  32. var save_game = FileAccess.open("user://savegame.save", FileAccess.WRITE)
  33. save_game.store_line(scene)
  34. func get_last_scene():
  35. if FileAccess.file_exists("user://savegame.save"):
  36. var save_game = FileAccess.open("user://savegame.save", FileAccess.READ)
  37. return save_game.get_line()
  38. else:
  39. return null
  40. func refresh_vars():
  41. root = get_tree().current_scene
  42. if root and root.has_node("Player"):
  43. player = root.get_node("Player")
  44. objectives = player.get_node("Neck/Camera3D/objectives")
  45. func add_objective(text):
  46. if get_tree().current_scene.name == "Main Menu": return
  47. refresh_vars()
  48. var label = Label.new()
  49. label.text = text
  50. label.autowrap_mode = TextServer.AUTOWRAP_WORD
  51. var container = objectives.get_node("container")
  52. container.add_child(label)
  53. func remove_objectives():
  54. if get_tree().current_scene.name == "Main Menu": return
  55. refresh_vars()
  56. var container = objectives.get_node("container")
  57. for label in container.get_children():
  58. label.queue_free()
  59. func objectives_visible(state):
  60. if get_tree().current_scene.name == "Main Menu": return
  61. refresh_vars()
  62. objectives.visible = state
  63. func goto_scene(path, save=true):
  64. TransitionScreen.fade_to_black()
  65. await TransitionScreen.transitioned
  66. refresh_vars()
  67. if save: save_scene(path)
  68. call_deferred("_deferred_goto_scene", path)
  69. TransitionScreen.fade_from_black()
  70. if not is_running_on_mobile():
  71. Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
  72. func _deferred_goto_scene(path):
  73. get_tree().change_scene_to_file(path)
  74. func is_running_in_web_browser():
  75. if OS.get_name() == "Web":
  76. return true
  77. else:
  78. return false
  79. func is_running_on_mobile():
  80. if OS.get_name() == "Android" or OS.get_name() == "iOS":
  81. return true
  82. else:
  83. #return true
  84. return false
  85. func set_low_detail(value):
  86. low_detail = value
  87. func set_user_value(section, value_name, value):
  88. var conf = ConfigFile.new()
  89. conf.load("user://settings.cfg")
  90. conf.set_value(section, value_name, value)
  91. conf.save("user://settings.cfg")
  92. func get_user_value(section, value_name):
  93. var conf = ConfigFile.new()
  94. conf.load("user://settings.cfg")
  95. if not conf.has_section_key(section, value_name): return null
  96. return conf.get_value(section, value_name)