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
5 changes: 1 addition & 4 deletions entities/game/memory_game/scenes/MemoryGame.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -264,10 +264,7 @@ player_node = NodePath("../Manager/Players")
[connection signal="card_placed" from="Cards/CardSpawner" to="." method="card_was_placed"]
[connection signal="card_placed" from="Cards/CardSpawner" to="Cards" method="card_was_placed"]
[connection signal="card_placing_done" from="Cards/CardSpawner" to="Manager/GameStateMachine" method="game_field_ready"]
[connection signal="request_state_change" from="Cards/CardSpawner" to="Manager/GameStateMachine" method="change_state"]
[connection signal="deck_changed" from="CardTemplateGhost" to="CardTemplateGhost/CanvasGroup/DropShadow" method="deck_changed"]
[connection signal="deck_changed" from="CardTemplateGhost" to="CardTemplateGhost/CardBack" method="deck_changed"]
[connection signal="input_active" from="CardTemplateGhost" to="CardTemplateGhost/CardBack" method="input_active"]
[connection signal="field_constructed" from="Cards/CardSpawner" to="Cards" method="receive_field_size"]
[connection signal="card_was_clicked" from="NetworkHandler" to="Cards" method="trigger_card_at_position"]
[connection signal="game_has_been_finished" from="NetworkHandler" to="CanvasLayer/PlayersOverlay" method="game_ended"]
[connection signal="game_state_has_changed" from="NetworkHandler" to="Manager/PlayerInput" method="game_state_changed"]
Expand Down
35 changes: 18 additions & 17 deletions entities/game/memory_game/scripts/GameCardGrid.gd
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,21 @@ var currently_ai_player: bool = false

var number_of_triggered_cards: int = 0

var _field_size: Vector2i = Vector2i.ZERO

enum Axis {X, Y}

func get_current_grid_position() -> Point:
if current_card == null:
return Point.new(0,0)
return Point.new(current_card.grid_position.get_x_pos(), current_card.grid_position.get_y_pos())

func receive_field_size(x: int, y: int) -> void:
_field_size = Vector2i(x - 1, y - 1) # Field size starts at 1 but index starts at 0

func get_field_size() -> Vector2i:
return _field_size

func _move_axis(direction: int, axis: Axis) -> void:
var clamped_direction: int = clampi(direction, -1, 1)
if clamped_direction == 0:
Expand Down Expand Up @@ -129,7 +137,7 @@ func trigger_card_at_position(grid_position: Point) -> void:
func remove_cards_from_board(grid_positions: Array[Point]) -> void:
for grid_position: Point in grid_positions:
remove_card_from_board(grid_position)
for card: CardTemplate in _get_all_cards():
for card: CardTemplate in _get_game_card_templates():
if card.is_playing_animation():
await card.about_to_get_delete
all_matching_cards_removed.emit()
Expand Down Expand Up @@ -203,16 +211,16 @@ func card_loading_done() -> void:
card.mouse_was_used.connect(func() -> void:
current_card = null
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
)
)

func game_state_changed(game_state: GameEnum.State) -> void:
match game_state:
GameEnum.State.TURN_START:
round_unfrozen()
for card: CardTemplate in _get_game_card_templates():
card.player_changed(currently_ai_player)
print(_get_all_cards().size())
if _get_all_cards().size() == 0:
print(_get_game_card_templates().size())
if _get_game_card_templates().size() == 0:
board_empty.emit()

GameEnum.State.TURN_FREEZE:
Expand All @@ -223,20 +231,20 @@ func game_state_changed(game_state: GameEnum.State) -> void:
_prepare_turn_complete()

func _validate_grid() -> void:
for card: CardTemplate in _get_all_cards():
for card: CardTemplate in _get_game_card_templates():
if card == null or card.is_queued_for_deletion():
continue
if card.is_turned() and not card.card_is_fully_shown():
print("Waiting")
await card.fully_shown
if _any_matching():
var card_positions: Array[Point] = []
for card: CardTemplate in _get_all_cards():
for card: CardTemplate in _get_game_card_templates():
if card.is_turned():
card_positions.append(card.grid_position)
identical_cards.emit(card_positions[0], card_positions[1])
remove_cards_from_board(card_positions)
var count: int = _get_all_cards().filter(func (card: CardTemplate) -> bool: return not card.getting_removed).size()
var count: int = _get_game_card_templates().filter(func (card: CardTemplate) -> bool: return not card.getting_removed).size()
if count == 0:
board_empty.emit()

Expand All @@ -246,15 +254,15 @@ func _validate_grid() -> void:
no_matches_found.emit()

func _prepare_turn_complete() -> void:
for card: CardTemplate in _get_all_cards():
for card: CardTemplate in _get_game_card_templates():
if card == null or card.is_queued_for_deletion():
continue
if not card.card_is_hidden():
print ("wait hidden card")
await card.fully_hidden

print ("continue prepare turn complete")
var all_cards: Array[CardTemplate] = _get_all_cards()
var all_cards: Array[CardTemplate] = _get_game_card_templates()
if all_cards.size() == 0:
board_empty.emit()
return
Expand All @@ -263,7 +271,7 @@ func _prepare_turn_complete() -> void:

func _any_matching() -> bool:
var first_found: CardTemplate = null
for card: CardTemplate in _get_all_cards():
for card: CardTemplate in _get_game_card_templates():
if not card.is_turned():
continue
if first_found == null:
Expand All @@ -273,13 +281,6 @@ func _any_matching() -> bool:
return true
return false

func _get_all_cards() -> Array[CardTemplate]:
var _templates: Array[CardTemplate] = []
for card_node: Node in get_children():
if card_node is CardTemplate:
_templates.append(card_node)
return _templates

func get_all_card_positions(get_turned: bool = false) -> Array[Point]:
var return_data: Array[Point] = []
for card: CardTemplate in _get_game_card_templates_children():
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
class_name RevealUnknownCornerCard extends AiBehaviorNode

func can_execute(blackboard: Blackboard, grid: GameCardGrid) -> bool:
for position: Point in grid.get_all_card_positions(false):
var real_position: Vector2i = Vector2i(position.get_x_pos(), position.get_y_pos())
if _get_corner_positions(grid).find(real_position) != -1 and not _blackboard_card_known(blackboard, position):
return true
return false

func _blackboard_card_known(blackboard: Blackboard, position: Point) -> bool:
for card: CardInformationResource in blackboard.get_all_saved_cards():
if card.position.is_identical(position):
return true
return false

func _get_corner_positions(grid: GameCardGrid) -> Array[Vector2i]:
var field_size: Vector2i = grid.get_field_size()
var allowed_positions: Array[Vector2i] = [
Vector2i.ZERO, # top left
Vector2i(field_size.x, 0), # top right
Vector2i(0, field_size.y), # bottom left
Vector2i(field_size.x, field_size.y) # bottom right
]
return allowed_positions

func execute_action(blackboard: Blackboard, grid: GameCardGrid) -> void:
var allowed_positions: Array[Vector2i] = _get_corner_positions(grid)
var valid_positions: Array[Vector2i] = []
for position: Vector2i in allowed_positions:
if not _blackboard_card_known(blackboard, Point.new(position.x, position.y)):
valid_positions.append(position)

var position: Vector2i = valid_positions.pick_random()
var point: Point = Point.new(position.x, position.y)
_trigger_card(point, blackboard, grid)
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://cpatt50glnh1y
Loading