96 lines
3.5 KiB
GDScript
96 lines
3.5 KiB
GDScript
class_name GameManager
|
|
extends Node
|
|
|
|
var tilemap_types: TileMapTileTypes = TileMapTileTypes.new()
|
|
|
|
@onready var world: World = $Tileset
|
|
@onready var player: PlayerManager = $PlayerManager
|
|
@onready var camera: CameraController = $Camera2D as CameraController
|
|
@onready var game_ticker: Timer = $GameTick
|
|
#
|
|
@onready var health_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/HealthBar
|
|
@onready var food_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/FoodBar
|
|
@onready var temperature_bar: ProgressBar = $Camera2D/CanvasLayer/VBoxContainer/TemperatureBar
|
|
@onready var temperature_layer: Node2D = $Tileset/TemperatureLayer
|
|
|
|
var tilemap_navigation: TilemapNavigation = TilemapNavigation.new()
|
|
|
|
|
|
func _ready() -> void:
|
|
tilemap_navigation.world = world
|
|
tilemap_navigation.player = player
|
|
player.game_manager = self
|
|
world.camp_manager.game_manager = self
|
|
world.step_visualizer.game_manager = self
|
|
world.step_visualizer.world = world
|
|
update_bars()
|
|
|
|
|
|
# game_ticker.start()
|
|
|
|
|
|
func _process(delta: float) -> void:
|
|
if Input.is_action_just_pressed("key_1"):
|
|
camera.go_to_zooming(Vector2(517.469787597656, 289.846008300781), 1.771561)
|
|
if Input.is_action_just_pressed("key_2"):
|
|
camera.go_to_zooming(Vector2(789.883972167969, 450.102813720703), 0.56015348434448)
|
|
if Input.is_action_just_pressed("key_9"):
|
|
world.camp_manager.campfire_light()
|
|
world.camp_manager.sleep_effect()
|
|
world.camp_manager.campfire_extinguish()
|
|
if Input.is_action_just_pressed("force_game_tick"):
|
|
_on_game_tick_timeout()
|
|
if Input.is_action_pressed("force_game_tick_fast"):
|
|
_on_game_tick_timeout()
|
|
if Input.is_action_just_pressed("key_6"):
|
|
toggle_temperature_layer()
|
|
|
|
|
|
func player_health_depleted():
|
|
# TODO
|
|
pass
|
|
|
|
|
|
func _on_game_tick_timeout() -> void:
|
|
var timer_on_game_tick_timeout: PerformanceTimer = PerformanceTimer.new()
|
|
timer_on_game_tick_timeout.display_name = "game tick duration"
|
|
|
|
tilemap_navigation.game_tick_start()
|
|
world.game_tick_start()
|
|
|
|
player.game_tick()
|
|
|
|
tilemap_navigation.game_tick_end()
|
|
world.game_tick_end()
|
|
EventsTracker.populate_visual_log(%RecentEventsLog, self)
|
|
|
|
update_bars()
|
|
|
|
timer_on_game_tick_timeout.stop()
|
|
|
|
|
|
func update_bars() -> void:
|
|
if health_bar != null:
|
|
health_bar.max_value = player.max_health
|
|
health_bar.value = clamp(player.health, 0, player.max_health)
|
|
$Camera2D/CanvasLayer/VBoxContainer/HealthBar/HealthLabel.text = str(health_bar.value) + "/" + str(player.max_health)
|
|
$Camera2D/CanvasLayer/VBoxContainer/HealthBar/HealthLabel.add_theme_color_override("font_color", Color(1, 1, 1))
|
|
|
|
if food_bar != null:
|
|
food_bar.max_value = player.max_food
|
|
food_bar.value = clamp(player.food, 0, player.max_food)
|
|
$Camera2D/CanvasLayer/VBoxContainer/FoodBar/FoodLabel.text = str(food_bar.value) + "/" + str(player.max_food)
|
|
|
|
if temperature_bar != null:
|
|
temperature_bar.max_value = player.temperature_set_buff_value
|
|
temperature_bar.value = clamp(player.temperature_buff_timer, 0, player.temperature_set_buff_value)
|
|
$Camera2D/CanvasLayer/VBoxContainer/TemperatureBar/TemperatureLabel.text = str(temperature_bar.value) + "/" + str(player.temperature_set_buff_value)
|
|
|
|
|
|
func toggle_temperature_layer() -> void:
|
|
if temperature_layer != null:
|
|
temperature_layer.visible = not temperature_layer.visible
|
|
print("TemperatureLayer visibility:", temperature_layer.visible)
|
|
else:
|
|
print("TemperatureLayer is null!")
|