new features, play menu, deck builder, deck selection
This commit is contained in:
@@ -4,6 +4,8 @@ extends Node
|
||||
|
||||
enum State {
|
||||
MENU,
|
||||
DECK_BUILDER,
|
||||
GAME_SETUP,
|
||||
PLAYING,
|
||||
PAUSED
|
||||
}
|
||||
@@ -12,14 +14,25 @@ var current_state: State = State.MENU
|
||||
|
||||
# Menu window size (matches project.godot viewport)
|
||||
const MENU_SIZE := Vector2i(460, 689)
|
||||
# Deck builder window size
|
||||
const DECK_BUILDER_SIZE := Vector2i(1600, 900)
|
||||
# Game setup window size
|
||||
const GAME_SETUP_SIZE := Vector2i(800, 600)
|
||||
# Game window size
|
||||
const GAME_SIZE := Vector2i(2160, 980)
|
||||
|
||||
# Scene references
|
||||
var main_menu: MainMenu = null
|
||||
var deck_builder: DeckBuilder = null
|
||||
var game_setup_menu: GameSetupMenu = null
|
||||
var game_scene: Node3D = null
|
||||
var pause_menu: PauseMenu = null
|
||||
|
||||
# Selected decks for gameplay
|
||||
var selected_deck: Deck = null
|
||||
var player1_deck: Array = [] # Card IDs for player 1
|
||||
var player2_deck: Array = [] # Card IDs for player 2
|
||||
|
||||
# Preload the main game scene script
|
||||
const MainScript = preload("res://scripts/Main.gd")
|
||||
|
||||
@@ -31,6 +44,10 @@ func _input(event: InputEvent) -> void:
|
||||
if event is InputEventKey and event.pressed:
|
||||
if event.keycode == KEY_ESCAPE:
|
||||
match current_state:
|
||||
State.DECK_BUILDER:
|
||||
_on_deck_builder_back()
|
||||
State.GAME_SETUP:
|
||||
_on_game_setup_back()
|
||||
State.PLAYING:
|
||||
_show_pause_menu()
|
||||
State.PAUSED:
|
||||
@@ -56,12 +73,25 @@ func _show_main_menu() -> void:
|
||||
(screen.y - MENU_SIZE.y) / 2
|
||||
))
|
||||
|
||||
# Reset viewport to main menu size
|
||||
get_tree().root.content_scale_size = MENU_SIZE
|
||||
|
||||
# Clean up deck builder if exists
|
||||
if deck_builder:
|
||||
deck_builder.queue_free()
|
||||
deck_builder = null
|
||||
|
||||
# Clean up game setup menu if exists
|
||||
if game_setup_menu:
|
||||
game_setup_menu.queue_free()
|
||||
game_setup_menu = null
|
||||
|
||||
# Create main menu
|
||||
if not main_menu:
|
||||
main_menu = MainMenu.new()
|
||||
add_child(main_menu)
|
||||
main_menu.quick_play.connect(_on_start_game)
|
||||
main_menu.play_game.connect(_on_start_game)
|
||||
main_menu.deck_builder.connect(_on_deck_builder)
|
||||
|
||||
main_menu.visible = true
|
||||
current_state = State.MENU
|
||||
@@ -71,7 +101,82 @@ func _on_start_game() -> void:
|
||||
if main_menu:
|
||||
main_menu.visible = false
|
||||
|
||||
# Switch to windowed gameplay size
|
||||
# Show game setup menu
|
||||
_show_game_setup_menu()
|
||||
|
||||
|
||||
func _on_deck_builder() -> void:
|
||||
# Hide menu
|
||||
if main_menu:
|
||||
main_menu.visible = false
|
||||
|
||||
# Switch to deck builder window size
|
||||
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
|
||||
DisplayServer.window_set_size(DECK_BUILDER_SIZE)
|
||||
var screen := DisplayServer.screen_get_size()
|
||||
DisplayServer.window_set_position(Vector2i(
|
||||
(screen.x - DECK_BUILDER_SIZE.x) / 2,
|
||||
(screen.y - DECK_BUILDER_SIZE.y) / 2
|
||||
))
|
||||
|
||||
# Set viewport to deck builder size
|
||||
get_tree().root.content_scale_size = DECK_BUILDER_SIZE
|
||||
|
||||
# Create deck builder
|
||||
if not deck_builder:
|
||||
deck_builder = DeckBuilder.new()
|
||||
add_child(deck_builder)
|
||||
deck_builder.back_pressed.connect(_on_deck_builder_back)
|
||||
deck_builder.deck_selected.connect(_on_deck_selected)
|
||||
|
||||
deck_builder.visible = true
|
||||
current_state = State.DECK_BUILDER
|
||||
|
||||
|
||||
func _on_deck_builder_back() -> void:
|
||||
if deck_builder:
|
||||
deck_builder.visible = false
|
||||
_show_main_menu()
|
||||
|
||||
|
||||
func _show_game_setup_menu() -> void:
|
||||
# Switch to game setup window size (borderless like main menu)
|
||||
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true)
|
||||
DisplayServer.window_set_size(GAME_SETUP_SIZE)
|
||||
var screen := DisplayServer.screen_get_size()
|
||||
DisplayServer.window_set_position(Vector2i(
|
||||
(screen.x - GAME_SETUP_SIZE.x) / 2,
|
||||
(screen.y - GAME_SETUP_SIZE.y) / 2
|
||||
))
|
||||
|
||||
# Resize the root viewport to match the window size to avoid letterboxing
|
||||
get_tree().root.content_scale_size = GAME_SETUP_SIZE
|
||||
|
||||
# Create game setup menu
|
||||
if not game_setup_menu:
|
||||
game_setup_menu = GameSetupMenu.new()
|
||||
add_child(game_setup_menu)
|
||||
game_setup_menu.back_pressed.connect(_on_game_setup_back)
|
||||
game_setup_menu.start_game_requested.connect(_on_game_setup_start)
|
||||
|
||||
game_setup_menu.visible = true
|
||||
current_state = State.GAME_SETUP
|
||||
|
||||
|
||||
func _on_game_setup_back() -> void:
|
||||
if game_setup_menu:
|
||||
game_setup_menu.visible = false
|
||||
_show_main_menu()
|
||||
|
||||
|
||||
func _on_game_setup_start(p1_deck: Array, p2_deck: Array) -> void:
|
||||
player1_deck = p1_deck
|
||||
player2_deck = p2_deck
|
||||
|
||||
if game_setup_menu:
|
||||
game_setup_menu.visible = false
|
||||
|
||||
# Switch to game window size
|
||||
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
|
||||
DisplayServer.window_set_size(GAME_SIZE)
|
||||
var screen := DisplayServer.screen_get_size()
|
||||
@@ -80,7 +185,29 @@ func _on_start_game() -> void:
|
||||
(screen.y - GAME_SIZE.y) / 2
|
||||
))
|
||||
|
||||
# Create game scene
|
||||
# Set viewport to game size
|
||||
get_tree().root.content_scale_size = GAME_SIZE
|
||||
|
||||
_start_new_game()
|
||||
|
||||
|
||||
func _on_deck_selected(deck: Deck) -> void:
|
||||
selected_deck = deck
|
||||
if deck_builder:
|
||||
deck_builder.visible = false
|
||||
|
||||
# Switch to game window size and start game
|
||||
DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false)
|
||||
DisplayServer.window_set_size(GAME_SIZE)
|
||||
var screen := DisplayServer.screen_get_size()
|
||||
DisplayServer.window_set_position(Vector2i(
|
||||
(screen.x - GAME_SIZE.x) / 2,
|
||||
(screen.y - GAME_SIZE.y) / 2
|
||||
))
|
||||
|
||||
# Set viewport to game size
|
||||
get_tree().root.content_scale_size = GAME_SIZE
|
||||
|
||||
_start_new_game()
|
||||
|
||||
func _start_new_game() -> void:
|
||||
@@ -100,6 +227,13 @@ func _start_new_game() -> void:
|
||||
# Create new game scene
|
||||
game_scene = Node3D.new()
|
||||
game_scene.set_script(MainScript)
|
||||
|
||||
# Pass deck configurations if available
|
||||
if player1_deck.size() > 0:
|
||||
game_scene.player1_deck = player1_deck
|
||||
if player2_deck.size() > 0:
|
||||
game_scene.player2_deck = player2_deck
|
||||
|
||||
add_child(game_scene)
|
||||
|
||||
# Create pause menu
|
||||
|
||||
Reference in New Issue
Block a user