#pragma once #include "uiBase.h" #include "uiConvenienceStore_Dialog.h" #include "CashShopHeader.h" #include "TabCheckButtonControl.h" #include "InterfaceManager.h" #include "SCSlotStruct.h" class uiConvenienceStoreMan; class uiConvenienceStore_Dialog; //------------------------------------------------------------------------------ class uiConvenienceStore_Basket : public uiConvenienceStore_Dialog { public: static const DWORD kDialog_ID; private: TabCheckButtonControl preview_tab_; TabCheckButtonControl skin_class_tab_; std::vector basket_list_; public: std::vector& basket_list() { return basket_list_; } TabCheckButtonControl& preview_tab() { return preview_tab_; } TabCheckButtonControl& skin_class_tab() { return skin_class_tab_; } public: //------------------------------------------------------------------------------ static void Callback_Preview(CControlWZ* control_ptr, void* parameter); static bool IsPossiblePreview(const SLOTCODE item_code); static bool IsPossiblePreview(const BASE_ITEMINFO* item_info); static bool HasPreviewItem(ConvenienceStore::ProductItem* product); static bool IsPossibleEquipPreview(const Player* player, const BASE_ITEMINFO* item_info); static bool IsPossibleEquipPreview(const Player* player, ConvenienceStore::ProductItem* const basket); static bool IsPossibleEquipPreview(const BASE_ITEMINFO* rider_item_info, const BASE_ITEMINFO* parts_item_info); static bool IsPossibleEquipPreview(const BASE_ITEMINFO* rider_item_info, ConvenienceStore::ProductItem* const basket); //------------------------------------------------------------------------------ public: uiConvenienceStore_Basket(InterfaceManager* ui_man); virtual ~uiConvenienceStore_Basket(void); CASH GetMyMoney(); int GetNumInBasket(); bool InsertBasket(ConvenienceStore::ProductItem* product); bool RemoveBasket(int basket_index); bool RemoveBasket(CShopCategory* shop_category, CShopPackage* shop_package); void RemoveBasket(); void UpdateCashInfo(); void Cleanup(); void ClearRider(); void ClearProduct(); bool CreatePlayer(); bool CreateRider(); bool CreateProduct(SLOTCODE item_code, eCHAR_TYPE skin_class_type); bool CreateProduct(ConvenienceStore::ProductItem* product); void UpdateEquipControl(); void SetActiveProductTab(); int FindBasketIndex(const ConvenienceStore::ProductItem* basket); int FindBasketIndex(const CShopCategory* shop_category, const CShopPackage* shop_package); #ifdef _NA_000000_20130114_RENEWER_UI void SetChangeBackgroundIsClass(eCHAR_TYPE charater_type); #endif//#ifdef _NA_000000_20130114_RENEWER_UI private: virtual DWORD player_key() { return CONVENIENCESTORE_CASH_CHARACTER_KEY; } virtual void Init(CDrawBase* drawbase); virtual void Release(void); virtual void OnShowWindow(BOOL val); virtual void Process(DWORD tick); virtual void OnUpdateSolarDialog(); virtual void OnRenderSolarDialog(); virtual void NetworkProc(MSG_BASE* msgbase){} virtual void MessageProc(SI_MESSAGE* message); private: enum PreviewType { kPreview_Default = 0, kPreview_Player = 0, kPreview_Rider, #ifdef _NA_004035_20120227_COSTUME_ITEM kPreview_Costum, #endif//_NA_004035_20120227_COSTUME_ITEM kPreview_Product, kPreview_Size, }; PreviewType uiConvenienceStore_Basket::GetCurrentPreviewType(); virtual Player* player(); virtual bool IsPossibleShopPopup(); virtual bool UpdatePopupMenu(bool is_possible, bool is_now_show_tooltip); virtual void UpdateTooltip(bool is_possible); private: //------------------------------------------------------------------------------ virtual bool OnLButtonClick(SI_MESSAGE* message); virtual bool OnLDButtonClick(SI_MESSAGE* message); virtual bool OnLButtonDown(SI_MESSAGE* message); virtual bool OnRButtonClick(SI_MESSAGE* message); virtual bool OnMouseOver(SI_MESSAGE* message){ return false; } virtual bool OnLButtonClick_Basket(SI_MESSAGE* message); virtual bool OnLButtonClick_Equip(SI_MESSAGE* message); virtual bool CreateProductPart(const BASE_ITEMINFO* item_info, eCHAR_TYPE skin_class_type); virtual bool CreateProductPet(const BASE_ITEMINFO* item_info); #ifdef _NA_004035_20120227_COSTUME_ITEM virtual bool CreateProductCostume(const BASE_ITEMINFO* item_info, eCHAR_TYPE skin_class_type); #endif//_NA_004035_20120227_COSTUME_ITEM #ifdef _NA_008633_20160104_ADD_DECORATECOSTUME virtual bool CreateProductDecorateCostume(const BASE_ITEMINFO* item_info, eCHAR_TYPE skin_class_type); #endif // _NA_008633_20160104_ADD_DECORATECOSTUME virtual bool CreateProductRider(const BASE_ITEMINFO* item_info); virtual bool CreateProductPlayer(ConvenienceStore::ProductItem* basket, eCHAR_TYPE char_type, GenderType::Value genter_type); //!<预览包物品 bool OnClickPopupMenu(const uiConvenienceStore_Dialog::PopupCommandType command_type, const DWORD user_data); //PreviewProduct::product 按标准预览商品更改性别. void ChangeProductBySkinClass(); void ProcessPlayer(DWORD tick); void ProcessRider(DWORD tick); void ProcessProduct(DWORD tick); void RenderPlayer(CControlWZ* picture); void RenderRider(CControlWZ* picture); void RenderProduct(CControlWZ* picture); bool IsEquipedPlayerParts(const ConvenienceStore::ProductItem* basket); CControlWZ* GetPlayerEquipUIControl(const BASE_ITEMINFO* item_info); //------------------------------------------------------------------------------ //! Returns: bool //! Qualifier: //! Parameter: Player * player //! Parameter: const BASE_ITEMINFO * item_info :关于穿戴物品 //! Parameter: PreviewType preiview_type : 是否将信息保存在UI control中: //! PreviewType == 只有在kpreview_rider时,才执行CControlWZ::SetUserData. //------------------------------------------------------------------------------ bool EquipPlayerParts(Player* player, const BASE_ITEMINFO* item_info, PreviewType preiview_type); bool EquipPlayerParts(Player* player, ConvenienceStore::ProductItem* basket, PreviewType preiview_type); bool UnequipPlayerParts(const BASE_ITEMINFO* item_info); void UnequipPlayerParts(ConvenienceStore::ProductItem* basket); void UnequipPlayerParts(); bool IsEquipedRiderParts(const ConvenienceStore::ProductItem* basket); CControlWZ* GetRiderEquipUIControl(const BASE_ITEMINFO* item_info); //------------------------------------------------------------------------------ //! Returns: bool //! Qualifier: //! Parameter: Rider * rider //! Parameter: const BASE_ITEMINFO * rider_item_info :坐骑物品信息 //! Parameter: const BASE_ITEMINFO * parts_item_info : 请求乘坐的部件信息 //! Parameter: PreviewType preiview_type : 是否将信息保存在UI control中: //! PreviewType == 只有在kpreview_rider时,才执行CControlWZ::SetUserData. //------------------------------------------------------------------------------ bool EquipRiderParts(Rider* rider, const BASE_ITEMINFO* rider_item_info, const BASE_ITEMINFO* parts_item_info, PreviewType preiview_type); bool EquipRiderParts(Rider* rider, const BASE_ITEMINFO* rider_item_info, ConvenienceStore::ProductItem* parts_basket, PreviewType preiview_type); bool UnequipRiderParts(const BASE_ITEMINFO* item_info); void UnequipRiderParts(ConvenienceStore::ProductItem* basket); void UnequipRiderParts(); void UpdateUI(); void TurnLeft(float radin = 0.2f); void TurnRight(float radin = 0.2f); CASH GetBasketPrice(); private: //------------------------------------------------------------------------------ struct PreviewScreenInfo { float rot; //!旋转radin_value动画值。 float zoom; FPOINT org; POINT mouse_pos; void reset() { mouse_pos.x = 0; mouse_pos.y = 0; rot = PI; zoom = 1.0f; org.x = 0; org.y = 0; } void check_valid_value() { if (rot > (PI * 2.0f)) rot -= (PI * 2.0f); if (rot < 0.0f) rot += (PI * 2.0f); if (zoom > 1.0f) zoom = 1.0f; if (zoom < 0.15f) zoom = 0.15f; if (org.x > 1.5f) org.x = 1.5f; if (org.x < -1.5f) org.x = -1.5f; if (org.y > 1.5f) org.y = 1.5f; if (org.y < -1.5f) org.y = -1.5f; } }; //------------------------------------------------------------------------------ PreviewScreenInfo& screen_info() { return screen_info_; } private: PreviewScreenInfo screen_info_; }; //#endif //#ifdef _YMS_TREECONTROL