Files
balatro-gba/include/button.h
MeirGavish d24b0b5619
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
Refactor shop code to use generic Item (#536)
* Turned SpriteObject into a member of JokerObject and CardObject and expiremented with casting

* Extracted shop code to use generic `SpriteObject`

* Extracted shop joker generation to a function

* Renamed object -> item

* Added setters and getters for `SpriteObject` members and updated all accesses to use them with casting (AI used for tedious work and reviewed - model Raptor mini)

* Added sprite_object_set_vx() because sprite_object_set_vy() exists and reordered the function order to have x,y parameters first, then targets

* Added Item object to act as a purchasable interface for the shop - AI used (model Raptor mini)

* Added -fms-extensions and switched to anonymous inheritance

* Fixed anonymous inheritance for joker and added direct access for that too

* fix build error from previous commit + clang-format

* Fixed build errors + clang-format for real this time (I hope...)

* clang-format one last time, I don't understand it anymore

* clang-format is annoying

* Added uses of CHECK_NULL_ARG macros

* Merged item_defs.h into item.h and fixed build error from previous commit

* clang-format...?

* Changed sprite_object_new() into sprite_object_init() and made it accept a parameter instead of returning one to make it less awkward

* Updated sprite_object_init() documentation

* Updated sprite_object_destroy documentation

* More clang-format

* Renamed add_to_inventory to acquire and updated documentation

* Added function documentations

* Update documentation + swap order of consumable and playing card types

* Added documentation for new files (+ small addition to button.h)

* clang-format

* Used typedef

* A bit more documentation

* Changed sho pcode to use generic Item instead of SpriteObject

* clang-format + fixed NULL-check error

* Revert weird clang-format...?

* clang-format for real

* Fixed errors from rebase on log_function_name

* Fixed build errors from rebase on main

* Added some more documentation about first member struct inheritance

* typo fix

* typo fix for real

* Removed SpriteObject field getters/setters (AI used - model Raptor mini)

* Renamed item_acquire -> item_on_acquired

* Added item_can_acquire()

* clang-format

* Fixed some sprite issues but not all...

* Fixed some more issues

* Cleanup JokerObject some more JokerObjects in the shop

* Added `item_destroy()`

* Added item_set_available_to_shop, CHECK_ITEM_TYPE macros + small documentation updates

* Another small JokerObject->Item replacement

* Removed item_set_available_to_shop and replaced with item_roll_new() and item_dispose(), also changed "available_to_shop" semantics to "rollable"

* Re-applied changes from game.c to round.c after rebase on main

* Added partial implementations of item functions for playing cards

* Line endings fix...

* Macro renames, function documentations

* Updated documentations

* Apply fixes from Copilot review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix card_object_get_buy_price type checking

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Avoid double pointer cast on dispose

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Apply suggestions from @ricfehr3's code review

Co-authored-by: Rickey <ric@rf3.xyz>

* Remove redundant comments

* Moved error checking before joker_get_random_rarity

Co-authored-by: Rickey <ric@rf3.xyz>

* Fixed build error from rebase

* clang-format

* Added doxygen documentation for Item explaining inheritance

* Removed unnecessary comment

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Rickey <ric@rf3.xyz>
2026-07-09 09:13:51 +03:00

77 lines
2.1 KiB
C

/**
* @file button.h
*
* @brief A button structure containing the common button functionalities
* Including highlight and pressing functionalities.
*/
#ifndef BUTTON_H
#define BUTTON_H
#include <tonc_types.h>
#define BTN_HIGHLIGHT_COLOR 0xFFFF
#define BUTTON_SFX_VOLUME 154 // 60% of MM_SFX_FULL_VOLUME
/**
* @brief The function to be called when the button is pressed
*/
typedef void (*ButtonOnPressedFunc)(void);
/**
* @brief Returns true if the button should be activated when pressed.
*/
typedef bool (*ButtonCanBePressedFunc)(void);
/**
* @brief A button representation
*/
typedef struct
{
// Using u8 for the palette indices to make sure they don't overflow pal_bg_mem
/**
* @brief Palette index of the button border whose color is updated depending on highlight.
*/
u8 border_pal_idx;
/**
* @brief Palette index of the color of the button itself, used for the border when not
* highlighted.
*/
u8 button_pal_idx;
/**
* @brief Called when the button is pressed if @ref can_be_pressed, don't call this directly,
* call @ref button_press() instead.
* Should not be set to NULL.
*/
ButtonOnPressedFunc on_pressed;
/**
* @brief Returns true if the button should be activated when pressed.
* Can be NULL if button can always be pressed.
*/
ButtonCanBePressedFunc can_be_pressed;
} Button;
/**
* @brief Set the button highlight on or off.
* @param button The button to modify. No-op on NULL.
* @param highlight true to highlight, false to unhighlight.
*/
void button_set_highlight(Button* button, bool highlight);
/**
* @brief Execute a button press, by calling the button's @ref on_pressed function.
* This checks the button's @ref can_be_pressed function and will do nothing if
* returns false.
*
* Button presses should go through this function rather than directly call @ref on_pressed.
*
* @param button The button being pressed. No-op on NULL.
*/
void button_press(Button* button);
#endif // BUTTON_H