Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions entities/game/memory_game/scenes/MemoryGame.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,10 @@ debug_functions = Array[ExtResource("34_4hsit")]([SubResource("Resource_8rpam")]
[connection signal="load_game" from="." to="World/CardBoard/CardInteractionField" method="set_board_information"]
[connection signal="request_popup" from="." to="Systems/PopupSystem" method="add_and_show_popup"]
[connection signal="force_close_popup" from="Systems/GameStateSystem" to="Systems/PopupSystem" method="force_close_popup_with_id"]
[connection signal="game_has_ended" from="Systems/GameStateSystem" to="World/CardBoard/CardVisuals" method="hide"]
[connection signal="game_has_ended" from="Systems/GameStateSystem" to="UI/PauseMenuButton" method="hide"]
[connection signal="game_has_ended" from="Systems/GameStateSystem" to="UI/PlayersOverlay" method="hide"]
[connection signal="game_has_ended" from="Systems/GameStateSystem" to="UI/ZoomButtons" method="hide"]
[connection signal="request_popup" from="Systems/GameStateSystem" to="Systems/PopupSystem" method="add_and_show_popup"]
[connection signal="state_changed" from="Systems/GameStateSystem" to="." method="game_state_has_changed"]
[connection signal="state_changed" from="Systems/GameStateSystem" to="Systems/TutorialStateSystem" method="state_changed"]
Expand Down Expand Up @@ -281,21 +285,20 @@ debug_functions = Array[ExtResource("34_4hsit")]([SubResource("Resource_8rpam")]
[connection signal="all_matching_cards_removed" from="World/CardBoard" to="Systems/GameStateSystem" method="matches_found"]
[connection signal="all_matching_cards_removed" from="World/CardBoard" to="Systems/TutorialStateSystem" method="matching_card_found"]
[connection signal="all_matching_cards_removed" from="World/CardBoard" to="Systems/PlayerSystem" method="player_scored"]
[connection signal="board_empty" from="World/CardBoard" to="." method="show_game_end_screen"]
[connection signal="board_empty" from="World/CardBoard" to="Systems/GameStateSystem" method="board_empty"]
[connection signal="board_ready" from="World/CardBoard" to="Systems/GameStateSystem" method="board_ready"]
[connection signal="card_activated" from="World/CardBoard" to="Systems/GameStateSystem" method="card_was_clicked"]
[connection signal="card_activated" from="World/CardBoard" to="Systems/TutorialStateSystem" method="card_triggered"]
[connection signal="card_removed" from="World/CardBoard" to="World/CardBoard/CardInteractionField" method="remove_card"]
[connection signal="card_triggered" from="World/CardBoard" to="Systems/AiAgentSystem" method="card_was_triggered"]
[connection signal="identical_cards" from="World/CardBoard" to="Systems/AiAgentSystem" method="card_was_identically"]
[connection signal="no_matches_found" from="World/CardBoard" to="Systems/GameStateSystem" method="no_matches"]
[connection signal="board_area" from="World/CardBoard/CardInteractionField" to="World/Camera2D" method="adjust_zoom_and_position_to_play_area"]
[connection signal="board_build" from="World/CardBoard/CardInteractionField" to="." method="all_cards_placed"]
[connection signal="board_build" from="World/CardBoard/CardInteractionField" to="Systems/GameStateSystem" method="game_field_ready"]
[connection signal="board_build" from="World/CardBoard/CardInteractionField" to="UI/PauseMenuButton" method="show_button_if_valid"]
[connection signal="board_build" from="World/CardBoard/CardInteractionField" to="UI/PlayersOverlay" method="show"]
[connection signal="board_build" from="World/CardBoard/CardInteractionField" to="UI/ZoomButtons/ZoomIn" method="show_button_if_valid"]
[connection signal="board_build" from="World/CardBoard/CardInteractionField" to="UI/ZoomButtons/ZoomOut" method="show_button_if_valid"]
[connection signal="board_empty" from="World/CardBoard/CardInteractionField" to="Systems/GameStateSystem" method="board_empty"]
[connection signal="clicked" from="World/CardBoard/CardInteractionField" to="World/CardBoard" method="trigger_card_at_position"]
[connection signal="mouse_enter" from="World/CardBoard/CardInteractionField" to="World/CardBoard" method="select_card_at_position"]
[connection signal="place_card" from="World/CardBoard/CardInteractionField" to="World/CardBoard" method="place_card"]
Expand Down
11 changes: 9 additions & 2 deletions entities/game/memory_game/scripts/CardInteractionField.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ signal place_card(card: MemoryCardResource, grid_position: Vector2i, world_posit
signal board_area(area: Rect2)
signal board_build()

## The whole board is empty now
signal board_empty()

enum Axis {X, Y}

@export var default_texture_size: Vector2 = Vector2(499, 550)
Expand Down Expand Up @@ -126,6 +129,12 @@ func remove_card(grid_position: Vector2i) -> void:
var child: CardCollider = _placed_cards.get(grid_position)
child.queue_free()
_placed_cards.erase(grid_position)
_check_if_board_empty()

func _check_if_board_empty() -> void:
if _placed_cards.size() == 0:
board_empty.emit()


func player_changed(current_player: PlayerResource) -> void:
_is_ai_player = current_player.is_ai()
Expand All @@ -149,8 +158,6 @@ func _change_interaction_state(new_state: bool) -> void:
else:
child.disable_collider()



func parse_movement(information: Vector2) -> void:
if get_tree().paused or _is_ai_player:
_controller_input_was_made = false
Expand Down
6 changes: 3 additions & 3 deletions entities/game/memory_game/scripts/GameCardGrid.gd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class_name GameCardGrid extends Node2D

signal card_removed()
signal card_removed(grid_position: Vector2i)
signal all_matching_cards_removed()
signal card_triggered(CardTemplate: CardTemplate)
signal identical_cards(first_card_Vector2i: Vector2i, set_icon_modulated_card_Vector2i: Vector2i)
Expand Down Expand Up @@ -42,15 +42,15 @@ func remove_cards_from_board(grid_positions: Array[Vector2i]) -> void:
remove_card_from_board(grid_position)
for card: CardTemplate in _get_game_card_templates():
if card.is_playing_animation():
await card.about_to_get_delete
await card.about_to_get_delete
all_matching_cards_removed.emit()
GlobalSoundManager.play_sound_effect(matching_card_sound_effect)

func remove_card_from_board(grid_position: Vector2i) -> void:
for child: CardTemplate in _get_game_card_templates_children():
if child.grid_position == grid_position:
child.remove_from_board(currently_ai_player)
child.about_to_get_delete.connect(func() -> void: card_removed.emit())
card_removed.emit(child.grid_position)

func select_card_at_position(grid_position: Vector2i) -> bool:
var found_card: bool = false
Expand Down
15 changes: 11 additions & 4 deletions entities/game/memory_game/scripts/MemoryGame.gd
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ signal game_paused(is_paused: bool)

signal request_popup(window: PopupWindow)

signal game_loaded()

const CARDS_PER_PLAYER: int = 2

@export_group("Game Setup")
Expand All @@ -17,6 +19,7 @@ const CARDS_PER_PLAYER: int = 2


var _card_deck: Resource
var _initial_start: bool = true

#var current_game_state: int
var player_node: PlayerSystem
Expand Down Expand Up @@ -101,7 +104,10 @@ func execute_logic() -> bool:

func game_state_has_changed(new_state: GameEnum.State) -> void:
if new_state == GameEnum.State.TURN_START:
_handle_initial_start()
turn_start_trigger()
if new_state == GameEnum.State.ANIMATION_CLEARED:
show_game_end_screen()

## This will be triggered if a new turn does start
func turn_start_trigger() -> void:
Expand All @@ -112,11 +118,12 @@ func turn_start_trigger() -> void:
print("Start Round")
triggered_cards = 0

func all_cards_placed() -> void:
for child: Node in get_tree().get_nodes_in_group("game_initialize_scene"):
child.queue_free()
GlobalSoundManager.stop_all_sounds()
func _handle_initial_start() -> void:
if not _initial_start:
return
_initial_start = false
process_mode = Node.PROCESS_MODE_INHERIT
game_loaded.emit()

func get_systems() -> Systems:
return _systems
16 changes: 15 additions & 1 deletion entities/game/memory_game/scripts/systems/GameStateSystem.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class_name GameStateSystem extends Node
signal state_changed(new_state: GameEnum.State)
signal request_popup(window: PopupWindow)
signal force_close_popup(id: int)
signal game_has_ended()

@export var round_end_message: TextTranslation
@export var round_end_message_no_auto_complete: TextTranslation
Expand Down Expand Up @@ -41,6 +42,8 @@ func card_was_clicked() -> void:

func matches_found() -> void:
print("match found")
if _current_state == GameEnum.State.GAME_END:
animation_cleared()
_change_state(GameEnum.State.TURN_START)

func no_matches() -> void:
Expand All @@ -52,12 +55,23 @@ func board_ready() -> void:
print("board ready")
_change_state(GameEnum.State.TURN_START)


func board_empty() -> void:
print("board empty")
_change_state(GameEnum.State.PREPARE_TURN_END)
_change_state(GameEnum.State.GAME_END)

var emergency_timer: Timer = Timer.new()
emergency_timer.one_shot = true
emergency_timer.timeout.connect(animation_cleared)
add_child(emergency_timer)
emergency_timer.start(2)

func animation_cleared() -> void:
if _current_state != GameEnum.State.GAME_END:
return
_change_state(GameEnum.State.ANIMATION_CLEARED)
game_has_ended.emit()

func _show_round_ended_banner() -> void:
var settings: SettingsResource = SettingsRepository.load_settings() as SettingsResource
var auto_close: bool = settings.auto_close_round
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,4 @@ func abort_tutorial() -> void:
_save_settings()

func _save_settings() -> void:
SettingsRepository.save_settings(_settings)
SettingsRepository.save_settings(_settings)
2 changes: 1 addition & 1 deletion entities/game/players_overlay/scripts/PlayerGameOverlay.gd
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func game_ended() -> void:
func game_state_changed(game_state: GameEnum.State) -> void:
if game_state == GameEnum.State.TURN_END:
round_end()
if game_state == GameEnum.State.GAME_END:
if game_state == GameEnum.State.ANIMATION_CLEARED:
visible = false

func get_global_position_of_current_player() -> Vector2:
Expand Down
2 changes: 1 addition & 1 deletion project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true
[application]

config/name="Samory"
config/version="0.20.1"
config/version="0.20.2"
config/tags=PackedStringArray("public")
run/main_scene="res://shared/global_entities/game_manager/scenes/GameManager.tscn"
config/features=PackedStringArray("4.7", "GL Compatibility")
Expand Down
3 changes: 2 additions & 1 deletion shared/entities/game_state/scripts/GameStateEnum.gd
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ enum State {
TURN_COMPLETED = 30, # Can only go to prepare turn end or turn start
PREPARE_TURN_END = 40, # Can go to turn end or end game
TURN_END = 50, # Can go to turn start
GAME_END = 1000
GAME_END = 1000,
ANIMATION_CLEARED = 10000
}
9 changes: 7 additions & 2 deletions shared/global_entities/game_manager/scripts/GameManager.gd
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,22 @@ func load_game(card_deck: MemoryDeckResource, players: Array[PlayerResource], cl
loading_screen.add_to_group("game_initialize_scene")
loading_screen.set_follow_up_node(game_scene_node)

game_scene_node.game_loaded.connect(_destroy_game_loading_screen.bind(loading_screen, active_nodes))

await ScreenTransitionManager.transit_screen_by_node_with_position(loading_screen, click_position, false)
if old_camera != null and not old_camera.is_queued_for_deletion():
old_camera.zoom = Vector2.ONE
old_camera.queue_free()
add_child(game_scene_node)
for node: Node in active_nodes:

func _destroy_game_loading_screen(screen: LoadingScreen, old_nodes: Array[Node]) -> void:
screen.queue_free()
GlobalSoundManager.stop_all_sounds()
for node: Node in old_nodes:
if node == null or node.is_queued_for_deletion():
continue
node.queue_free()


func get_available_decks() -> Array[MemoryDeckResource]:
var return_array: Array[MemoryDeckResource] = []
return_array.append_array(translated_build_in_decks)
Expand Down
Loading