void CUICarBodyWnd::SendMessage(CUIWindow *pWnd, s16 msg, void *pData) { if (BUTTON_CLICKED == msg && m_pUITakeAll == pWnd) { TakeAll (); } else if(pWnd == m_pUIPropertiesBox && msg == PROPERTY_CLICKED) { if(m_pUIPropertiesBox->GetClickedItem()) { switch(m_pUIPropertiesBox->GetClickedItem()->GetID()) { case INVENTORY_EAT_ACTION: //съесть объект EatItem(); break; case INVENTORY_UNLOAD_MAGAZINE: { CUICellItem * itm = CurrentItem(); (smart_cast<CWeaponMagazined*>((CWeapon*)itm->m_pData))->UnloadMagazine(); for(u32 i=0; i<itm->ChildsCount(); ++i) { CUICellItem * child_itm = itm->Child(i); (smart_cast<CWeaponMagazined*>((CWeapon*)child_itm->m_pData))->UnloadMagazine(); } }break; } } } inherited::SendMessage (pWnd, msg, pData); }
void CUICarBodyWnd::TakeAll() { u32 cnt = m_pUIOthersBagList->ItemsCount(); u16 tmp_id = 0; if(m_pInventoryBox){ tmp_id = (smart_cast<CGameObject*>(m_pOurObject))->ID(); } for(u32 i=0; i<cnt; ++i) { CUICellItem* ci = m_pUIOthersBagList->GetItemIdx(i); for(u32 j=0; j<ci->ChildsCount(); ++j) { PIItem _itm = (PIItem)(ci->Child(j)->m_pData); if(m_pOthersObject) TransferItem (_itm, m_pOthersObject, m_pOurObject, false); else{ move_item (m_pInventoryBox->ID(), tmp_id, _itm->object().ID()); //. Actor()->callback(GameObject::eInvBoxItemTake)( m_pInventoryBox->lua_game_object(), _itm->object().lua_game_object() ); } } PIItem itm = (PIItem)(ci->m_pData); if(m_pOthersObject) TransferItem (itm, m_pOthersObject, m_pOurObject, false); else{ move_item (m_pInventoryBox->ID(), tmp_id, itm->object().ID()); //. Actor()->callback(GameObject::eInvBoxItemTake)(m_pInventoryBox->lua_game_object(), itm->object().lua_game_object() ); } } }
void CUIActorMenu::TakeAllFromPartner(CUIWindow* w, void* d) { VERIFY( m_pActorInvOwner ); if ( !m_pPartnerInvOwner ) { if ( m_pInvBox ) { TakeAllFromInventoryBox(); } return; } u32 const cnt = m_pDeadBodyBagList->ItemsCount(); for ( u32 i = 0; i < cnt; ++i ) { CUICellItem* ci = m_pDeadBodyBagList->GetItemIdx(i); for ( u32 j = 0; j < ci->ChildsCount(); ++j ) { PIItem j_item = (PIItem)(ci->Child(j)->m_pData); move_item_check( j_item, m_pPartnerInvOwner, m_pActorInvOwner, false ); } PIItem item = (PIItem)(ci->m_pData); move_item_check( item, m_pPartnerInvOwner, m_pActorInvOwner, false ); }//for i m_pDeadBodyBagList->ClearAll( true ); // false }
void CUIInventoryWnd::ProcessPropertiesBoxClicked () { if(UIPropertiesBox.GetClickedItem()) { switch(UIPropertiesBox.GetClickedItem()->GetID()) { case INVENTORY_TO_SLOT_ACTION: ToSlot(CurrentItem(), true); break; case INVENTORY_TO_BELT_ACTION: ToBelt(CurrentItem(),false); break; case INVENTORY_TO_BAG_ACTION: ToBag(CurrentItem(),false); break; case INVENTORY_DROP_ACTION: { void* d = UIPropertiesBox.GetClickedItem()->GetData(); bool b_all = (d==(void*)33); DropCurrentItem(b_all); }break; case INVENTORY_EAT_ACTION: EatItem(CurrentIItem()); break; case INVENTORY_ATTACH_ADDON: AttachAddon((PIItem)(UIPropertiesBox.GetClickedItem()->GetData())); break; case INVENTORY_DETACH_SCOPE_ADDON: DetachAddon(*(smart_cast<CWeapon*>(CurrentIItem()))->GetScopeName()); break; case INVENTORY_DETACH_SILENCER_ADDON: DetachAddon(*(smart_cast<CWeapon*>(CurrentIItem()))->GetSilencerName()); break; case INVENTORY_DETACH_GRENADE_LAUNCHER_ADDON: DetachAddon(*(smart_cast<CWeapon*>(CurrentIItem()))->GetGrenadeLauncherName()); break; case INVENTORY_ACTIVATE_ARTEFACT_ACTION: Activate_Artefact(); break; case INVENTORY_RELOAD_MAGAZINE: (smart_cast<CWeapon*>(CurrentIItem()))->Action(kWPN_RELOAD, CMD_START); break; case INVENTORY_UNLOAD_MAGAZINE: { CUICellItem * itm = CurrentItem(); (smart_cast<CWeaponMagazined*>((CWeapon*)itm->m_pData))->UnloadMagazine(); for(u32 i=0; i<itm->ChildsCount(); ++i) { CUICellItem * child_itm = itm->Child(i); (smart_cast<CWeaponMagazined*>((CWeapon*)child_itm->m_pData))->UnloadMagazine(); } }break; } } }
CUICellItem* CUICellItem::PopChild() { CUICellItem* itm = m_childs.back(); m_childs.pop_back (); std::swap (itm->m_pData, m_pData); UpdateItemText (); R_ASSERT (itm->ChildsCount()==0); itm->SetOwnerList (NULL); return itm; }
float CUITradeWnd::CalcItemsWeight(CUIDragDropListEx* pList) { float res = 0.0f; for(u32 i=0; i<pList->ItemsCount(); ++i) { CUICellItem* itm = pList->GetItemIdx (i); PIItem iitem = (PIItem)itm->m_pData; res += iitem->Weight(); for(u32 j=0; j<itm->ChildsCount(); ++j){ PIItem jitem = (PIItem)itm->Child(j)->m_pData; res += jitem->Weight(); } } return res; }
u32 CUIAmmoCellItem::CalculateAmmoCount() { xr_vector<CUICellItem*>::iterator it = m_childs.begin(); xr_vector<CUICellItem*>::iterator it_e = m_childs.end(); u32 total = IsHelper() ? 0 : object()->m_boxCurr; for ( ; it != it_e; ++it ) { CUICellItem* child = *it; if ( !child->IsHelper() ) { total += ((CUIAmmoCellItem*)(*it))->object()->m_boxCurr; } } return total; }
u32 CUIActorMenu::CalcItemsPrice(CUIDragDropListEx* pList, CTrade* pTrade, bool bBuying) { u32 res = 0; for( u32 i = 0; i < pList->ItemsCount(); ++i ) { CUICellItem* itm = pList->GetItemIdx(i); PIItem iitem = (PIItem)itm->m_pData; res += pTrade->GetItemPrice(iitem, bBuying); for( u32 j = 0; j < itm->ChildsCount(); ++j ) { PIItem jitem = (PIItem)itm->Child(j)->m_pData; res += pTrade->GetItemPrice(jitem, bBuying); } } return res; }
CUICellItem* CUICellItem::PopChild(CUICellItem* needed) { CUICellItem* itm = m_childs.back(); m_childs.pop_back (); if(needed) { if(itm!=needed) std::swap (itm->m_pData, needed->m_pData); }else { std::swap (itm->m_pData, m_pData); } UpdateItemText (); R_ASSERT (itm->ChildsCount()==0); itm->SetOwnerList (NULL); return itm; }
void CUIActorMenu::TakeAllFromInventoryBox() { u16 actor_id = m_pActorInvOwner->object_id(); u32 const cnt = m_pDeadBodyBagList->ItemsCount(); for ( u32 i = 0; i < cnt; ++i ) { CUICellItem* ci = m_pDeadBodyBagList->GetItemIdx(i); for ( u32 j = 0; j < ci->ChildsCount(); ++j ) { PIItem j_item = (PIItem)(ci->Child(j)->m_pData); move_item_from_to( m_pInvBox->ID(), actor_id, j_item->object_id() ); } PIItem item = (PIItem)(ci->m_pData); move_item_from_to( m_pInvBox->ID(), actor_id, item->object_id() ); }//for i m_pDeadBodyBagList->ClearAll( true ); // false }
void CUIDragDropReferenceList::OnItemDrop(CUIWindow* w, void* pData) { OnItemSelected(w, pData); CUICellItem* itm = smart_cast<CUICellItem*>(w); VERIFY(itm->OwnerList() == itm->OwnerList()); if(m_f_item_drop && m_f_item_drop(itm)) { DestroyDragItem(); return; } CUIDragDropListEx* old_owner = itm->OwnerList(); CUIDragDropListEx* new_owner = m_drag_item->BackList(); if(old_owner && new_owner && old_owner!=new_owner) { inherited::OnItemDrop(w, pData); return; } CActor* actor = smart_cast<CActor*>(Level().CurrentViewEntity()); if(actor) { Ivector2 vec = PickCell(GetUICursor().GetCursorPosition()); if(vec.x!=-1&&vec.y!=-1) { Ivector2 vec2 = m_container->GetItemPos(itm); if(vec2.x!=-1&&vec2.y!=-1) { u8 index = u8(vec2.x); shared_str tmp = ACTOR_DEFS::g_quick_use_slots[vec.x]; xr_strcpy(ACTOR_DEFS::g_quick_use_slots[vec.x], ACTOR_DEFS::g_quick_use_slots[index]); xr_strcpy(ACTOR_DEFS::g_quick_use_slots[index], tmp.c_str()); ReloadReferences(actor); return; } } } DestroyDragItem(); }
void CUIBagWnd::FillUpGroup(const u32 group) { string64 tmp_str; for (u32 j = 0; j < m_wpnSectStorage[group].size(); ++j) { const shared_str& sect = m_wpnSectStorage[group][j]; int count = g_mp_restrictions.GetItemCount( m_wpnSectStorage[group][j] ); for (int i = 0; i < count; i++) { // Create item CUICellItem* itm = CreateItem(sect); // Set custom draw itoa (j+1, tmp_str ,10); CBuyItemCustomDrawCell* p = xr_new<CBuyItemCustomDrawCell>(tmp_str,UI()->Font()->pFontLetterica16Russian); itm->SetCustomDraw (p); // Set Number itm->m_index = m_allItems.size(); // item info m_allItems.push_back (itm); ItmInfo ii; ii.price = pSettings->r_s32(m_sectionPrice, m_wpnSectStorage[group][j].c_str()); m_info.push_back (ii); // m_info[itm->m_index].short_cut = u32(j + 1 % 10); m_info[itm->m_index].active = true; m_info[itm->m_index].bought = false; m_info[itm->m_index].section = group; m_info[itm->m_index].pos_in_section = j; m_info[itm->m_index].external = false; PutItemToGroup (itm, group); } } }
void CUIInventoryWnd::ActivatePropertiesBox() { // Флаг-признак для невлючения пункта контекстного меню: Dreess Outfit, если костюм уже надет bool bAlreadyDressed = false; UIPropertiesBox.RemoveAll(); CMedkit* pMedkit = smart_cast<CMedkit*> (CurrentIItem()); CAntirad* pAntirad = smart_cast<CAntirad*> (CurrentIItem()); CEatableItem* pEatableItem = smart_cast<CEatableItem*> (CurrentIItem()); CCustomOutfit* pOutfit = smart_cast<CCustomOutfit*> (CurrentIItem()); //. CArtefact* pArtefact = smart_cast<CArtefact*> (CurrentIItem()); CWeapon* pWeapon = smart_cast<CWeapon*> (CurrentIItem()); CScope* pScope = smart_cast<CScope*> (CurrentIItem()); CSilencer* pSilencer = smart_cast<CSilencer*> (CurrentIItem()); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*> (CurrentIItem()); CBottleItem* pBottleItem = smart_cast<CBottleItem*> (CurrentIItem()); bool b_show = false; if(!pOutfit && CurrentIItem()->GetSlot()!=NO_ACTIVE_SLOT && !m_pInv->m_slots[CurrentIItem()->GetSlot()].m_bPersistent && m_pInv->CanPutInSlot(CurrentIItem())) { UIPropertiesBox.AddItem("st_move_to_slot", NULL, INVENTORY_TO_SLOT_ACTION); b_show = true; } if(CurrentIItem()->Belt() && m_pInv->CanPutInBelt(CurrentIItem())) { UIPropertiesBox.AddItem("st_move_on_belt", NULL, INVENTORY_TO_BELT_ACTION); b_show = true; } if(CurrentIItem()->Ruck() && m_pInv->CanPutInRuck(CurrentIItem()) && (CurrentIItem()->GetSlot()==u32(-1) || !m_pInv->m_slots[CurrentIItem()->GetSlot()].m_bPersistent) ) { if(!pOutfit) UIPropertiesBox.AddItem("st_move_to_bag", NULL, INVENTORY_TO_BAG_ACTION); else UIPropertiesBox.AddItem("st_undress_outfit", NULL, INVENTORY_TO_BAG_ACTION); bAlreadyDressed = true; b_show = true; } if(pOutfit && !bAlreadyDressed ) { UIPropertiesBox.AddItem("st_dress_outfit", NULL, INVENTORY_TO_SLOT_ACTION); b_show = true; } //отсоединение аддонов от вещи if(pWeapon) { if(pWeapon->GrenadeLauncherAttachable() && pWeapon->IsGrenadeLauncherAttached()) { UIPropertiesBox.AddItem("st_detach_gl", NULL, INVENTORY_DETACH_GRENADE_LAUNCHER_ADDON); b_show = true; } if(pWeapon->ScopeAttachable() && pWeapon->IsScopeAttached()) { UIPropertiesBox.AddItem("st_detach_scope", NULL, INVENTORY_DETACH_SCOPE_ADDON); b_show = true; } if(pWeapon->SilencerAttachable() && pWeapon->IsSilencerAttached()) { UIPropertiesBox.AddItem("st_detach_silencer", NULL, INVENTORY_DETACH_SILENCER_ADDON); b_show = true; } if(smart_cast<CWeaponMagazined*>(pWeapon) && IsGameTypeSingle()) { bool b = (0!=pWeapon->GetAmmoElapsed()); if(!b) { CUICellItem * itm = CurrentItem(); for(u32 i=0; i<itm->ChildsCount(); ++i) { pWeapon = smart_cast<CWeaponMagazined*>((CWeapon*)itm->Child(i)->m_pData); if(pWeapon->GetAmmoElapsed()) { b = true; break; } } } if(b){ UIPropertiesBox.AddItem("st_unload_magazine", NULL, INVENTORY_UNLOAD_MAGAZINE); b_show = true; } } } //присоединение аддонов к активному слоту (2 или 3) if(pScope) { if(m_pInv->m_slots[PISTOL_SLOT].m_pIItem != NULL && m_pInv->m_slots[PISTOL_SLOT].m_pIItem->CanAttach(pScope)) { PIItem tgt = m_pInv->m_slots[PISTOL_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_scope_to_pistol", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pScope)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_scope_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } else if(pSilencer) { if(m_pInv->m_slots[PISTOL_SLOT].m_pIItem != NULL && m_pInv->m_slots[PISTOL_SLOT].m_pIItem->CanAttach(pSilencer)) { PIItem tgt = m_pInv->m_slots[PISTOL_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_silencer_to_pistol", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pSilencer)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_silencer_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } else if(pGrenadeLauncher) { if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pGrenadeLauncher)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_gl_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } LPCSTR _action = NULL; if(pMedkit || pAntirad) { _action = "st_use"; } else if(pEatableItem) { if(pBottleItem) _action = "st_drink"; else _action = "st_eat"; } if(_action){ UIPropertiesBox.AddItem(_action, NULL, INVENTORY_EAT_ACTION); b_show = true; } //. if(pArtefact&&pArtefact->CanBeActivated()) //. UIPropertiesBox.AddItem("st_activate_artefact", NULL, INVENTORY_ACTIVATE_ARTEFACT_ACTION); if(!CurrentIItem()->IsQuestItem()){ UIPropertiesBox.AddItem("st_drop", NULL, INVENTORY_DROP_ACTION); b_show = true; if(CurrentItem()->ChildsCount()) UIPropertiesBox.AddItem("st_drop_all", (void*)33, INVENTORY_DROP_ACTION); } if(b_show) { UIPropertiesBox.AutoUpdateSize (); UIPropertiesBox.BringAllToTop (); Fvector2 cursor_pos; Frect vis_rect; GetAbsoluteRect (vis_rect); GetUICursor()->GetPos (cursor_pos.x, cursor_pos.y); cursor_pos.sub (vis_rect.lt); UIPropertiesBox.Show (vis_rect, cursor_pos); PlaySnd (eInvProperties); } }
bool CUIBagWnd::OnKeyboard(int dik, EUIMessages keyboard_action) { int iGroup; if (DIK_ESCAPE == dik) { m_btnBack.OnClick(); return true; } switch (GetMenuLevel()) { case mlRoot: R_ASSERT2(false,"error: CUIBagWnd on level <mlRoot> can't handle keyboard"); break; case mlBoxes: if (DIK_ESCAPE == dik) { ShowSectionEx(-1); return true; } switch (dik) { case DIK_1: OnBtnShotgunsClicked(); return true; case DIK_2: OnBtnMachinegunsClicked(); return true; case DIK_3: OnBtnSniperClicked(); return true; case DIK_4: OnBtnHeavyClicked(); return true; } break; case mlWpnSubType: iGroup = GetCurrentGroupIndex(); if (DIK_ESCAPE == dik) { if (iGroup >= GROUP_31 && iGroup <= GROUP_34 ) ShowSectionEx(GROUP_BOXES); else ShowSectionEx(-1); return true; } if (dik <= DIK_0 && dik >= DIK_1) { CUICellItem* itm = GetItemByKey(dik,GetCurrentGroupIndex()); if (itm && IsInBag(itm)) itm->GetMessageTarget()->SendMessage(itm, DRAG_DROP_ITEM_DB_CLICK, NULL); } break; default: NODEFAULT; } return false; }