diff options
Diffstat (limited to 'src/koopatlas/shop.h')
-rw-r--r-- | src/koopatlas/shop.h | 119 |
1 files changed, 76 insertions, 43 deletions
diff --git a/src/koopatlas/shop.h b/src/koopatlas/shop.h index cf78b36..719a087 100644 --- a/src/koopatlas/shop.h +++ b/src/koopatlas/shop.h @@ -3,13 +3,11 @@ #include "koopatlas/core.h" -extern "C" void *SoundRelatedClass; -extern "C" void *MapSoundPlayer(void *SoundClass, int soundID, int unk); - -class dShopItem; - -class dWMShop_c : public dActor_c { +class dWMShop_c : public dBase_c { public: + static dWMShop_c *build(); + static dWMShop_c *instance; + dWMShop_c(); int onCreate(); @@ -21,43 +19,78 @@ class dWMShop_c : public dActor_c { bool layoutLoaded; m2d::EmbedLayout_c layout; - mHeapAllocator_c allocator; - nw4r::g3d::ResFile res; - m3d::mdl_c shopkeep; - m3d::anmChr_c ska; - mMtx matrix; - - mEf::es2 effect; - - char currentItem; - bool isHidden; - bool wasOff; - int world; - - dShopItem *itemA; - dShopItem *itemB; - dShopItem *itemC; - dShopItem *itemD; - - dShopItem *itemEA; - dShopItem *itemEB; - dShopItem *itemEC; - - dShopItem *itemFA; - dShopItem *itemFB; - dShopItem *itemFC; - dShopItem *itemFD; - dShopItem *itemFE; - - - void LoadShopForWorld(int world); - void CloseUpShop(); - void BuyItem(int item); - - void changeItem(int last, int current); - - static dWMShop_c *build(); - static dWMShop_c *instance; + bool visible; + + int selected, lastTopRowChoice; + int shopKind; + + enum Animation { + SHOW_ALL = 0, + HIDE_ALL = 1, + ACTIVATE_BUTTON = 2, // 3, 4, 5, 6, 7 + DEACTIVATE_BUTTON = 8, // 9, 10, 11, 12, 13 + }; + + enum ItemTypes { + MUSHROOM = 0, + FIRE_FLOWER, + ICE_FLOWER, + PENGUIN, + PROPELLER, + MINI_SHROOM, + STARMAN, + HAMMER, + ONE_UP, + COINS, + ITEM_TYPE_COUNT + }; + + enum _Constants { + ITEM_COUNT = 12, + }; + + static const ItemTypes Inventory[10][12]; + + nw4r::lyt::TextBox + *Title, *TitleShadow, + *CoinCount, *CoinCountShadow, + *BackText, *BuyText; + + class ShopModel_c { + public: + mHeapAllocator_c allocator; + + nw4r::g3d::ResFile res; + m3d::mdl_c model; + m3d::anmChr_c animation; + + float x, y; + + void setupItem(float x, float y, ItemTypes type); + void setupLakitu(int id); + void execute(); + void draw(); + void playAnim(const char *name, float rate); + }; + + ShopModel_c *itemModels; + ShopModel_c *lakituModel; + + void show(int shopNumber); + + void loadModels(); + void deleteModels(); + + void buyItem(int item); + + dStateWrapper_c<dWMShop_c> state; + + USING_STATES(dWMShop_c); + DECLARE_STATE(Hidden); + DECLARE_STATE(ShowWait); + DECLARE_STATE(ButtonActivateWait); + DECLARE_STATE(Wait); + DECLARE_STATE(HideWait); }; #endif |