Initial MVP
This commit is contained in:
85
scripts/main.gd
Normal file
85
scripts/main.gd
Normal file
@@ -0,0 +1,85 @@
|
||||
extends Node2D
|
||||
|
||||
@onready var game_manager = $GameManager
|
||||
@onready var room_label = $UI/MainLayout/Sidebar/RoomLabel
|
||||
@onready var log_label = $UI/MainLayout/GameView/Log
|
||||
@onready var input_field = $UI/MainLayout/GameView/Input
|
||||
@onready var minimap = $UI/MainLayout/Sidebar/Minimap
|
||||
@onready var stats_label = $UI/MainLayout/Sidebar/StatsLabel
|
||||
|
||||
@onready var btn_north = $UI/MainLayout/Sidebar/Controls/BtnNorth
|
||||
@onready var btn_south = $UI/MainLayout/Sidebar/Controls/BtnSouth
|
||||
@onready var btn_east = $UI/MainLayout/Sidebar/Controls/HBox/BtnEast
|
||||
@onready var btn_west = $UI/MainLayout/Sidebar/Controls/HBox/BtnWest
|
||||
@onready var btn_save = $UI/MainLayout/Sidebar/Controls/BtnSave
|
||||
@onready var btn_load = $UI/MainLayout/Sidebar/Controls/BtnLoad
|
||||
|
||||
@onready var combat_ui = $UI/CombatUI
|
||||
@onready var main_layout = $UI/MainLayout
|
||||
@onready var combat_enemy_label = $UI/CombatUI/Panel/VBox/EnemyLabel
|
||||
@onready var btn_attack = $UI/CombatUI/Panel/VBox/Actions/BtnAttack
|
||||
@onready var btn_flee = $UI/CombatUI/Panel/VBox/Actions/BtnFlee
|
||||
|
||||
func _ready():
|
||||
# Connect signals
|
||||
game_manager.room_changed.connect(_on_room_changed)
|
||||
game_manager.log_message.connect(_on_log_message)
|
||||
game_manager.stats_changed.connect(_on_stats_changed)
|
||||
game_manager.combat_started.connect(_on_combat_started)
|
||||
game_manager.combat_ended.connect(_on_combat_ended)
|
||||
game_manager.combat_log.connect(_on_combat_log)
|
||||
game_manager.damage_taken.connect(func(amount): shake_screen())
|
||||
|
||||
btn_north.pressed.connect(func(): game_manager.move("north"))
|
||||
btn_south.pressed.connect(func(): game_manager.move("south"))
|
||||
btn_east.pressed.connect(func(): game_manager.move("east"))
|
||||
btn_west.pressed.connect(func(): game_manager.move("west"))
|
||||
|
||||
btn_save.pressed.connect(game_manager.save_game)
|
||||
btn_load.pressed.connect(game_manager.load_game)
|
||||
|
||||
btn_attack.pressed.connect(game_manager.player_attack)
|
||||
btn_flee.pressed.connect(game_manager.flee)
|
||||
|
||||
input_field.text_submitted.connect(_on_input_submitted)
|
||||
|
||||
# Clear log
|
||||
log_label.text = ""
|
||||
|
||||
func _on_input_submitted(text: String):
|
||||
if text.strip_edges() == "":
|
||||
return
|
||||
game_manager.process_user_input(text)
|
||||
input_field.text = ""
|
||||
|
||||
func _on_room_changed(room_data: RoomData):
|
||||
room_label.text = room_data.room_name
|
||||
minimap.update_map(room_data.id, game_manager.game_state.explored_rooms)
|
||||
|
||||
func _on_log_message(message: String):
|
||||
log_label.text += message + "\n"
|
||||
|
||||
func _on_stats_changed(hp, max_hp, inventory):
|
||||
stats_label.text = "HP: %d/%d\nItems: %d" % [hp, max_hp, inventory.size()]
|
||||
|
||||
func _on_combat_started(enemy):
|
||||
main_layout.visible = false
|
||||
combat_ui.visible = true
|
||||
combat_enemy_label.text = "%s (HP: %d/%d)" % [enemy.name, enemy.hp, enemy.max_hp]
|
||||
|
||||
func _on_combat_ended(won):
|
||||
combat_ui.visible = false
|
||||
main_layout.visible = true
|
||||
|
||||
func _on_combat_log(message):
|
||||
if game_manager.current_enemy:
|
||||
var enemy = game_manager.current_enemy
|
||||
combat_enemy_label.text = "%s (HP: %d/%d)\n%s" % [enemy.name, enemy.hp, enemy.max_hp, message]
|
||||
|
||||
func shake_screen(intensity: float = 10.0, duration: float = 0.5):
|
||||
var tween = create_tween()
|
||||
var ui_node = $UI
|
||||
for i in range(10):
|
||||
var offset = Vector2(randf_range(-intensity, intensity), randf_range(-intensity, intensity))
|
||||
tween.tween_property(ui_node, "offset", offset, duration / 10)
|
||||
tween.tween_property(ui_node, "offset", Vector2.ZERO, duration / 10)
|
||||
Reference in New Issue
Block a user