Added joker selling animation

This commit is contained in:
MeirGavish
2025-08-16 21:33:23 +03:00
parent 64274ae465
commit 947fac7358
+40 -3
View File
@@ -77,6 +77,7 @@ static int selection_y = 0;
static bool sort_by_suit = false; static bool sort_by_suit = false;
static List *jokers = NULL; static List *jokers = NULL;
static List *discarded_jokers = NULL;
// Stacks // Stacks
static CardObject *played[MAX_SELECTION_SIZE] = {NULL}; static CardObject *played[MAX_SELECTION_SIZE] = {NULL};
@@ -224,6 +225,7 @@ static const Rect CASHOUT_RECT = {88, 72, UNDEFINED, UNDEF
static const Rect SHOP_REROLL_RECT = {88, 96, UNDEFINED, UNDEFINED }; static const Rect SHOP_REROLL_RECT = {88, 96, UNDEFINED, UNDEFINED };
static const BG_POINT HELD_JOKERS_POS = {108, 10}; static const BG_POINT HELD_JOKERS_POS = {108, 10};
static const BG_POINT JOKER_DISCARD_TARGET = {240, 30};
#define ITEM_SHOP_Y 71 // TODO: Needs to be a rect? #define ITEM_SHOP_Y 71 // TODO: Needs to be a rect?
@@ -1010,6 +1012,9 @@ void game_init()
if (jokers) list_destroy(&jokers); if (jokers) list_destroy(&jokers);
jokers = list_new(MAX_JOKERS_HELD_SIZE); jokers = list_new(MAX_JOKERS_HELD_SIZE);
if (discarded_jokers != NULL) list_destroy(&discarded_jokers);
discarded_jokers = list_new(MAX_JOKERS_HELD_SIZE);
hands = max_hands; hands = max_hands;
discards = max_discards; discards = max_discards;
@@ -1767,6 +1772,26 @@ static void played_cards_update_loop(bool* discarded_card, int* played_selection
} }
} }
static void discarded_jokers_update_loop()
{
if (discarded_jokers == NULL)
return;
// Iterating backwards because of removal within loop
for (int i = list_get_size(discarded_jokers) - 1; i >= 0; i--)
{
JokerObject* joker_object = list_get(discarded_jokers, i);
joker_object_update(joker_object);
if (joker_object->sprite_object->x == joker_object->sprite_object->tx
&& joker_object->sprite_object->y == joker_object->sprite_object->ty)
{
list_remove_by_idx(discarded_jokers, i);
joker_object_destroy(&joker_object);
}
}
}
static void held_jokers_update_loop() static void held_jokers_update_loop()
{ {
const int spacing_lut[MAX_JOKERS_HELD_SIZE][MAX_JOKERS_HELD_SIZE] = const int spacing_lut[MAX_JOKERS_HELD_SIZE][MAX_JOKERS_HELD_SIZE] =
@@ -1790,6 +1815,12 @@ static void held_jokers_update_loop()
} }
} }
static void jokers_update_loop()
{
held_jokers_update_loop();
discarded_jokers_update_loop();
}
static void game_playing_ui_text_update() static void game_playing_ui_text_update()
{ {
static int last_hand_size = 0; static int last_hand_size = 0;
@@ -2283,6 +2314,13 @@ static void jokers_sel_row_on_selection_changed(SelectionGrid *selection_grid,
} }
} }
void joker_start_discard_animation(JokerObject *joker_object)
{
joker_object->sprite_object->tx = int2fx(JOKER_DISCARD_TARGET.x);
joker_object->sprite_object->ty = int2fx(JOKER_DISCARD_TARGET.y);
list_append(discarded_jokers, joker_object);
}
void game_sell_joker(int joker_idx) void game_sell_joker(int joker_idx)
{ {
if (joker_idx < 0 || joker_idx > list_get_size(jokers)) if (joker_idx < 0 || joker_idx > list_get_size(jokers))
@@ -2296,8 +2334,7 @@ void game_sell_joker(int joker_idx)
list_remove_by_idx(jokers, joker_idx); list_remove_by_idx(jokers, joker_idx);
int_list_append(jokers_available_to_shop, (intptr_t)joker_object->joker->id); int_list_append(jokers_available_to_shop, (intptr_t)joker_object->joker->id);
// TODO: Discard animation joker_start_discard_animation(joker_object);
joker_object_destroy(&joker_object);
} }
static void jokers_sel_row_on_key_hit(SelectionGrid* selection_grid, Selection* selection) static void jokers_sel_row_on_key_hit(SelectionGrid* selection_grid, Selection* selection)
@@ -2771,7 +2808,7 @@ void game_update()
} }
} }
held_jokers_update_loop(); jokers_update_loop();
switch (game_state) switch (game_state)
{ {