From abd2feaab8f2f9de669d3b791b2540161a83045e Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 11:26:09 +0700 Subject: [PATCH 1/2] feat: win-lose-tie at game end --- demo_game.gd | 5 +++++ demo_game.tscn | 20 ++++++++++++++++++++ tcg/match/event/event_game_ended.gd | 7 +++++++ tcg/match/match_manager.gd | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 tcg/match/event/event_game_ended.gd diff --git a/demo_game.gd b/demo_game.gd index 10c92e5..b3d2308 100644 --- a/demo_game.gd +++ b/demo_game.gd @@ -13,6 +13,7 @@ signal opponent_played_rts(move: String) @onready var own_side = $Own @onready var opponent_side = $Opponent @onready var start_game_btn = $StartGameButton +@onready var win_lose_tie_label: Label = $"Win-Lose-Tie" var id_to_card: Dictionary = {} @@ -65,6 +66,10 @@ func _on_match_manager_state_transitioned(transition: PhaseTransition): start_game_btn.visible = match_manager.phase == Match.Phase.PREGAME transition_history.append(transition) _update_phase_info(transition.to) + if transition.to == Match.Phase.END: + var game_ended_event: EventGameEnded = transition.events.filter(func (it): return it is EventGameEnded)[0] + win_lose_tie_label.text = "TIE" if game_ended_event.winner_player_id == -1 else "YOU WON!" if game_ended_event.winner_player_id == id else "YOU LOST!" + win_lose_tie_label.visible = true print("Phase: ", Match.phase_to_str(transition.from), " -> ", Match.phase_to_str(transition.to)) func _on_start_game_button_button_up() -> void: diff --git a/demo_game.tscn b/demo_game.tscn index a76e523..65b3c81 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -338,6 +338,26 @@ theme = ExtResource("19_3iovu") theme_override_font_sizes/font_size = 24 text = "Support (2)" +[node name="Win-Lose-Tie" type="Label" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -365.0 +offset_top = -215.0 +offset_right = 365.0 +offset_bottom = 215.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("19_3iovu") +theme_override_font_sizes/font_size = 52 +text = "YOU WON!" +horizontal_alignment = 1 +vertical_alignment = 1 + [connection signal="play_card" from="Own" to="." method="_on_own_play_card"] [connection signal="rps_move" from="Own" to="." method="_on_own_rps_move"] [connection signal="button_down" from="Own/HBoxContainer/KertasButton" to="Own" method="_on_kertas_button_button_down"] diff --git a/tcg/match/event/event_game_ended.gd b/tcg/match/event/event_game_ended.gd new file mode 100644 index 0000000..f9db6cc --- /dev/null +++ b/tcg/match/event/event_game_ended.gd @@ -0,0 +1,7 @@ +extends Event +class_name EventGameEnded + +var winner_player_id: int + +func _init(winner_player_id: int) -> void: + self.winner_player_id = winner_player_id diff --git a/tcg/match/match_manager.gd b/tcg/match/match_manager.gd index f77d424..9a25959 100644 --- a/tcg/match/match_manager.gd +++ b/tcg/match/match_manager.gd @@ -172,6 +172,7 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: player.active_support_cards = player.active_support_cards.filter(func (card): return not card_expires_this_turn.call(card)) var players_without_monster = players.values().filter(func(player): return player.monster == null) + var players_without_monster_ids = players_without_monster.map(func (it): return it.id) if players_without_monster.size() == 0: phase = Match.Phase.SUPPORT_1 elif players_without_monster.all( @@ -179,7 +180,11 @@ func resolve(action_by_player_id: Dictionary) -> PhaseTransition: ): phase = Match.Phase.SUMMON else: + var player_1_lost = players_without_monster_ids.has(player_1.id) + var player_2_lost = players_without_monster_ids.has(player_2.id) + var winner_id = -1 if player_1_lost and player_2_lost else player_1.id if player_2_lost else player_2.id phase = Match.Phase.END + events.append(EventGameEnded.new(winner_id)) _: pass var transition = PhaseTransition.new(events, initial_phase, phase) From 728d848e5bda90f1b7d1ff38fb12362de35cb804 Mon Sep 17 00:00:00 2001 From: istamarahsan Date: Sun, 26 Jan 2025 11:32:17 +0700 Subject: [PATCH 2/2] feat: damage incoming -> HP +- --- demo_game.tscn | 22 ++++++++++------------ player_side.gd | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/demo_game.tscn b/demo_game.tscn index 65b3c81..3269b11 100644 --- a/demo_game.tscn +++ b/demo_game.tscn @@ -146,13 +146,12 @@ layout_mode = 1 anchors_preset = 5 anchor_left = 0.5 anchor_right = 0.5 -offset_left = -83.5 -offset_top = 300.0 -offset_right = 83.5 -offset_bottom = 323.0 +offset_left = 84.0 +offset_top = 24.0 +offset_right = 251.0 +offset_bottom = 47.0 grow_horizontal = 2 -text = "Incoming Damage: 0" -horizontal_alignment = 1 +text = "HP: +0" [node name="HBoxContainer" type="HBoxContainer" parent="Own"] visible = false @@ -268,14 +267,13 @@ anchor_left = 0.5 anchor_top = 1.0 anchor_right = 0.5 anchor_bottom = 1.0 -offset_left = -83.5 -offset_top = -325.0 -offset_right = 83.5 -offset_bottom = -302.0 +offset_left = 84.0 +offset_top = -52.0 +offset_right = 251.0 +offset_bottom = -29.0 grow_horizontal = 2 grow_vertical = 0 -text = "Incoming Damage: 0" -horizontal_alignment = 1 +text = "HP: +0" [node name="StartGameButton" type="Button" parent="."] layout_mode = 1 diff --git a/player_side.gd b/player_side.gd index 1075011..169c355 100644 --- a/player_side.gd +++ b/player_side.gd @@ -80,7 +80,7 @@ func _on_update(transition): if monster: monster_card_ui.visible = true monster_card_ui.show_monster(monster) - incoming_damage_label.text = "Incoming Damage: " + str(monster.health_delta) + incoming_damage_label.text = "HP " + ("+0" if monster.health_delta == 0 else str(monster.health_delta)) else: monster_card_ui.visible = false