bool LuaChatForm::CanSell(Equip::Type t, bool verbose) const { return (GetStock(t) > 0) && DoesSell(t); }
void CInventory::Update() { if (m_bOpen) { GRAPHICS->RenderText(L"Inventory", { -300.0f, 650.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.85f, 0.8f }); GRAPHICS->RenderText(L"Resources", { -700.0f, 475.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.45f, 0.4f }); GRAPHICS->RenderText(L"Items", { -640.0f, -135.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.45f, 0.4f }); string enumSzItem[NUM_ITEMS] = { "Bones", "Wood Log", "Herb", "Gunpowder", "Bomb", "Wood Plank", "Health Potion" }; string numBones = enumSzItem[m_nCursor]; wstring wBones(numBones.begin(), numBones.end()); GRAPHICS->RenderText(wBones.c_str(), { -100.0f, 300.0f }, { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.7f, 0.65f }); float fStockY = 365.0f; for (size_t i = 0; i < NUM_ITEMS; i++) { string strAmmount = "x" + to_string(m_CurrentStock[i]); wstring printStr(strAmmount.begin(), strAmmount.end()); GRAPHICS->RenderText(printStr.c_str(), { -500.0f, fStockY }, { 1.0f, 1.0f, 1.0f, 1.0f }, { 0.4f, 0.3f }); fStockY -= 127.5f; if (i == 3) { fStockY -= 115.0f; } } #pragma region Check Cursor for Craftability //bomb = 2 bone and 2 gunpowder //wood plank = 2 wood //health potion = 1 bone and 2 herb if (CInputManager::GetInstance()->GetControllerBeingUsed() == true) { m_cpInputImgs[0]->SetTexture(L"../Game/Assets/Art/2D/Inventory/UpDPad_Controller.dds"); m_cpInputImgs[1]->SetTexture(L"../Game/Assets/Art/2D/Inventory/DownDPad_Controller.dds"); m_cpInputImgs[2]->SetTexture(L"../Game/Assets/Art/2D/Inventory/AButton_Controller.dds"); m_cpInputImgs[3]->SetTexture(L"../Game/Assets/Art/2D/Inventory/XButton_Controller.dds"); //scale down the button images for crafting m_cpInputImgs[2]->GetVertex2DArr()[1].m_fPosition[0] = 0.15f;//top-right X m_cpInputImgs[2]->GetVertex2DArr()[2].m_fPosition[0] = 0.15f;//bottom-right X m_cpInputImgs[2]->GetVertex2DArr()[0].m_fPosition[1] = 0.0f;//top left Y m_cpInputImgs[2]->GetVertex2DArr()[1].m_fPosition[1] = 0.0f;//top-right Y m_cpInputImgs[3]->GetVertex2DArr()[1].m_fPosition[0] = 0.15f;//top-right X m_cpInputImgs[3]->GetVertex2DArr()[2].m_fPosition[0] = 0.15f;//bottom-right X m_cpInputImgs[3]->GetVertex2DArr()[0].m_fPosition[1] = 0.0f;//top left Y m_cpInputImgs[3]->GetVertex2DArr()[1].m_fPosition[1] = 0.0f;//top-right Y m_cpInputImgs[2]->SetPosition(XMFLOAT3{ -0.3f, -0.45f, m_cpInputImgs[2]->GetPosition().z}); m_cpInputImgs[3]->SetPosition(XMFLOAT3{ 0.125f, -0.45f, m_cpInputImgs[3]->GetPosition().z }); } else { m_cpInputImgs[0]->SetTexture(L"../Game/Assets/Art/2D/Inventory/UpArrow_Keyboard.dds"); m_cpInputImgs[1]->SetTexture(L"../Game/Assets/Art/2D/Inventory/DownArrow_Keyboard.dds"); m_cpInputImgs[2]->SetTexture(L"../Game/Assets/Art/2D/Inventory/Enter_Keyboard.dds"); m_cpInputImgs[3]->SetTexture(L"../Game/Assets/Art/2D/Inventory/SpaceBar_Keyboard.dds"); //scale up the keyboard images for crafting m_cpInputImgs[2]->GetVertex2DArr()[1].m_fPosition[0] = 0.2f;//top-right X m_cpInputImgs[2]->GetVertex2DArr()[2].m_fPosition[0] = 0.2f;//bottom-right X m_cpInputImgs[2]->GetVertex2DArr()[0].m_fPosition[1] = 0.1f;//top left Y m_cpInputImgs[2]->GetVertex2DArr()[1].m_fPosition[1] = 0.1f;//top-right Y m_cpInputImgs[3]->GetVertex2DArr()[1].m_fPosition[0] = 0.2f;//top-right X m_cpInputImgs[3]->GetVertex2DArr()[2].m_fPosition[0] = 0.2f;//bottom-right X m_cpInputImgs[3]->GetVertex2DArr()[0].m_fPosition[1] = 0.1f;//top left Y m_cpInputImgs[3]->GetVertex2DArr()[1].m_fPosition[1] = 0.1f;//top-right Y m_cpInputImgs[2]->SetPosition(XMFLOAT3{ -0.35f, -0.5f, m_cpInputImgs[2]->GetPosition().z }); m_cpInputImgs[3]->SetPosition(XMFLOAT3{ 0.05f, -0.5f, m_cpInputImgs[3]->GetPosition().z }); } switch ((eItems)m_nCursor) { case CInventory::Bones: case CInventory::Wood: case CInventory::Herb: case CInventory::Gunpowder: { m_bAbleToCraft = false; for (unsigned int i = 0; i < 2; i++) m_cpInputImgs[i]->GetRender() = true; m_cpInputImgs[2]->GetRender() = false; m_cpInputImgs[3]->GetRender() = false; } break; case CInventory::Bomb: { if (GetStock(Gunpowder) >= 2 && GetStock(Bones) >= 2) { m_bAbleToCraft = true; GRAPHICS->RenderText(L"Craft:", { -200.0f, -200.0f }, { 0.0f, 1.0f, 0.0f, 1.0f }, { 0.75f, 0.7f }, (eTextMod)1); } else { m_bAbleToCraft = false; GRAPHICS->RenderText(L"Craft:", { -200.0f, -200.0f }, { 1.0f, 0.0f, 0.0f, 1.0f }, { 0.75f, 0.7f }, (eTextMod)1); GRAPHICS->RenderText(L"Not Enough Resources", { 250.0f, -225.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.45f, 0.4f }, (eTextMod)1); } for (unsigned int i = 0; i < 4; i++) m_cpInputImgs[i]->GetRender() = true; GRAPHICS->RenderText(L"Craft One", { -175.0f, -525.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.35f, 0.3f }); unsigned int unCraftAllAmount = 0; if (GetStock(Bones) / 2 < GetStock(Gunpowder) / 2) unCraftAllAmount = GetStock(Bones) / 2; else unCraftAllAmount = GetStock(Gunpowder) / 2; string szCraftAll = "Craft All (" + to_string(unCraftAllAmount) + ")"; wstring wszCraftAll(szCraftAll.begin(), szCraftAll.end()); GRAPHICS->RenderText(wszCraftAll.c_str(), { 375.0f, -525.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.35f, 0.3f }, (eTextMod)1); } break; case CInventory::Bridge: { if (GetStock(Wood) >= 1) { m_bAbleToCraft = true; GRAPHICS->RenderText(L"Craft:", { -200.0f, -200.0f }, { 0.0f, 1.0f, 0.0f, 1.0f }, { 0.75f, 0.7f }, (eTextMod)1); } else { m_bAbleToCraft = false; GRAPHICS->RenderText(L"Craft:", { -200.0f, -200.0f }, { 1.0f, 0.0f, 0.0f, 1.0f }, { 0.75f, 0.7f }, (eTextMod)1); GRAPHICS->RenderText(L"Not Enough Resources", { 250.0f, -225.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.45f, 0.4f }, (eTextMod)1); } for (unsigned int i = 0; i < 4; i++) m_cpInputImgs[i]->GetRender() = true; GRAPHICS->RenderText(L"Craft One", { -175.0f, -525.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.35f, 0.3f }); unsigned int unCraftAllAmount = GetStock(Wood) * 2; string szCraftAll = "Craft All (" + to_string(unCraftAllAmount) + ")"; wstring wszCraftAll(szCraftAll.begin(), szCraftAll.end()); GRAPHICS->RenderText(wszCraftAll.c_str(), { 375.0f, -525.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.35f, 0.3f }, (eTextMod)1); } break; case CInventory::HealthPotion: { if (GetStock(Herb) >= 2 && GetStock(Bones) >= 1) { m_bAbleToCraft = true; GRAPHICS->RenderText(L"Craft:", { -200.0f, -200.0f }, { 0.0f, 1.0f, 0.0f, 1.0f }, { 0.75f, 0.7f }, (eTextMod)1); } else { m_bAbleToCraft = false; GRAPHICS->RenderText(L"Craft:", { -200.0f, -200.0f }, { 1.0f, 0.0f, 0.0f, 1.0f }, { 0.75f, 0.7f }, (eTextMod)1); GRAPHICS->RenderText(L"Not Enough Resources", { 250.0f, -225.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.45f, 0.4f }, (eTextMod)1); } for (unsigned int i = 0; i < 4; i++) m_cpInputImgs[i]->GetRender() = true; GRAPHICS->RenderText(L"Craft One", { -175.0f, -525.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.35f, 0.3f }); unsigned int unCraftAllAmount = 0; if (GetStock(Bones) / 2 < GetStock(Herb)) unCraftAllAmount = GetStock(Bones) / 2; else unCraftAllAmount = GetStock(Herb); string szCraftAll = "Craft All (" + to_string(unCraftAllAmount) + ")"; wstring wszCraftAll(szCraftAll.begin(), szCraftAll.end()); GRAPHICS->RenderText(wszCraftAll.c_str(), { 375.0f, -525.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.35f, 0.3f }, (eTextMod)1); } break; default: break; } #pragma endregion #pragma region Input if (CInputManager::GetInstance()->IsKeyPressed("Down") || CInputManager::GetInstance()->IsButtonPressed("Cursor Down")) { AudioSystemWwise::Get()->PostEvent(AK::EVENTS::LOOT); m_vcBoarder[m_nCursor]->GetRender() = true; m_vcBoarder[m_nCursor]->SetTexture(L"../Game/Assets/Art/2D/Inventory/Failbot_Icon_Normal.dds"); if (m_nCursor++ >= (NUM_ITEMS - 1)) { m_nCursor = 0; } m_vcBoarder[m_nCursor]->SetTexture(L"../Game/Assets/Art/2D/Inventory/Failbot_Icon_Selected.dds"); m_cpCurrentItem->SetTexture(m_vIconPaths[m_nCursor]); } if (CInputManager::GetInstance()->IsKeyPressed("Up") || CInputManager::GetInstance()->IsButtonPressed("Cursor Up")) { AudioSystemWwise::Get()->PostEvent(AK::EVENTS::LOOT); m_vcBoarder[m_nCursor]->GetRender() = true; m_vcBoarder[m_nCursor]->SetTexture(L"../Game/Assets/Art/2D/Inventory/Failbot_Icon_Normal.dds"); if (m_nCursor-- <= 0) { m_nCursor = NUM_ITEMS - 1; } m_vcBoarder[m_nCursor]->SetTexture(L"../Game/Assets/Art/2D/Inventory/Failbot_Icon_Selected.dds"); m_cpCurrentItem->SetTexture(m_vIconPaths[m_nCursor]); } if ((CInputManager::GetInstance()->IsKeyPressed("Craft") || CInputManager::GetInstance()->IsButtonPressed("Jump Action")) && m_bAbleToCraft == true) { m_bCrafting = true; m_bCraftAll = false; } if ((CInputManager::GetInstance()->IsKeyPressed("CraftAll") || CInputManager::GetInstance()->IsButtonPressed("Health Potion")) && m_bAbleToCraft == true) { m_bCrafting = true; m_bCraftAll = true; } #pragma endregion #pragma region Input Option text Display string szTooltip[NUM_ITEMS] = { "Dropped by Skeletons", "Dropped from Trees", "Dropped from Bushes", "Dropped by Orcs", "Craftable Item\nRequires: ", "Craftable Item\nRequires: ", "Craftable Item\nRequires: ", }; wstring wToolTip(szTooltip[m_nCursor].begin(), szTooltip[m_nCursor].end()); GRAPHICS->RenderText(wToolTip.c_str(), { -300.0f, 100.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.55f, 0.5f }); if (m_nCursor > eItems::Gunpowder) { if (m_nCursor == eItems::Bomb) { XMFLOAT4 f2Color1 = { 1.0f, 0.0f, 0.0f, 1.0f }; XMFLOAT4 f2Color2 = { 1.0f, 0.0f, 0.0f, 1.0f }; string szRequirement1 = "2 Bones"; string szRequirement2 = "2 Gunpowder"; if (GetStock(eItems::Bones) >= 2) { f2Color1 = { 0.0f, 1.0f, 0.0f, 1.0f }; } if (GetStock(eItems::Gunpowder) >= 2) { f2Color2 = { 0.0f, 1.0f, 0.0f, 1.0f }; } wstring wInfo1(szRequirement1.begin(), szRequirement1.end()); wstring wInfo2(szRequirement2.begin(), szRequirement2.end()); GRAPHICS->RenderText(wInfo1.c_str(), { 0.0f, 0.0f }, f2Color1, { 0.55f, 0.5f }); GRAPHICS->RenderText(wInfo2.c_str(), { 0.0f, -60.0f }, f2Color2, { 0.55f, 0.5f }); } else if (m_nCursor == eItems::HealthPotion) { XMFLOAT4 f2Color1 = { 1.0f, 0.0f, 0.0f, 1.0f }; XMFLOAT4 f2Color2 = { 1.0f, 0.0f, 0.0f, 1.0f }; string szRequirement1 = "2 Herbs"; string szRequirement2 = "1 Bone"; if (GetStock(eItems::Herb) >= 2) { f2Color1 = { 0.0f, 1.0f, 0.0f, 1.0f }; } if (GetStock(eItems::Bones) >= 1) { f2Color2 = { 0.0f, 1.0f, 0.0f, 1.0f }; } wstring wInfo1(szRequirement1.begin(), szRequirement1.end()); wstring wInfo2(szRequirement2.begin(), szRequirement2.end()); GRAPHICS->RenderText(wInfo1.c_str(), { 0.0f, 0.0f }, f2Color1, { 0.55f, 0.5f }); GRAPHICS->RenderText(wInfo2.c_str(), { 0.0f, -60.0f }, f2Color2, { 0.55f, 0.5f }); } else if (m_nCursor == eItems::Bridge) { XMFLOAT4 f2Color = { 1.0f, 0.0f, 0.0f, 1.0f }; string szRequirement1 = "1 Wood Log"; if (GetStock(eItems::Wood) >= 1) { f2Color = { 0.0f, 1.0f, 0.0f, 1.0f }; } wstring wInfo1(szRequirement1.begin(), szRequirement1.end()); GRAPHICS->RenderText(wInfo1.c_str(), { 0.0f, 0.0f }, f2Color, { 0.55f, 0.5f }); } } #pragma endregion #pragma region Crafting //user is in the process of crafting if (m_bCrafting == true) { m_cpCraftingBar->GetRender() = true; m_fCraftTime += DELTA_TIME(); if (m_fCraftTime >= CRAFT_TIME) { m_bCrafting = false; m_fCraftTime = 0.0f; m_cpCraftingBar->GetRender() = false; AudioSystemWwise::Get()->PostEvent(AK::EVENTS::CRAFT); #pragma region Removing and Adding Items from Inventory if (m_bCraftAll == true) { switch ((eItems)m_nCursor) { case CInventory::Bomb: { unsigned int numBones = GetStock(Bones); unsigned int numGunpowder = GetStock(Gunpowder); if (numBones % 2 != 0) numBones -= 1; if (numGunpowder % 2 != 0) numGunpowder -= 1; unsigned int totalAdded = 0; if (numBones / 2 < numGunpowder / 2) totalAdded = numBones / 2; else totalAdded = numGunpowder / 2; for (unsigned int i = 0; i < totalAdded; i++) { RemoveFromInventory(Bones, 2); RemoveFromInventory(Gunpowder, 2); AddToInventory(Bomb, 1); } } break; case CInventory::Bridge://wood plank { unsigned int numWood = GetStock(Wood); for (unsigned int i = 0; i < numWood; i++) { RemoveFromInventory(Wood, 1); AddToInventory(Bridge, 2); } } break; case CInventory::HealthPotion: { unsigned int numBones = GetStock(Bones); unsigned int numHerbs = GetStock(Herb); if (numHerbs % 2 != 0) numHerbs -= 1; unsigned int totalAdded = 0; if (numHerbs / 2 < numBones) totalAdded = numHerbs / 2; else totalAdded = numBones; for (unsigned int i = 0; i < totalAdded; i++) { RemoveFromInventory(Bones, 1); RemoveFromInventory(Herb, 2); AddToInventory(HealthPotion, 1); } } break; default: break; } } else { switch ((eItems)m_nCursor) { case CInventory::Bomb: { RemoveFromInventory(Bones, 2); RemoveFromInventory(Gunpowder, 2); AddToInventory(Bomb, 1); } break; case CInventory::Bridge://wood plank { RemoveFromInventory(Wood, 1); AddToInventory(Bridge, 2); } break; case CInventory::HealthPotion: { RemoveFromInventory(Bones, 1); RemoveFromInventory(Herb, 2); AddToInventory(HealthPotion, 1); } break; default: break; } } #pragma endregion m_cpCraftingBar->GetVertex2DArr()[1].m_fPosition[0] = m_fCraftBarStartX; m_cpCraftingBar->GetVertex2DArr()[2].m_fPosition[0] = m_fCraftBarStartX; } // update index 1 and 2 of 2dVert float fRatio = m_fCraftTime / CRAFT_TIME; m_cpCraftingBar->GetVertex2DArr()[1].m_fPosition[0] = m_fCraftBarStartX + (m_fCraftBarSize * fRatio); m_cpCraftingBar->GetVertex2DArr()[2].m_fPosition[0] = m_fCraftBarStartX + (m_fCraftBarSize * fRatio); } #pragma endregion if (CInputManager::GetInstance()->IsKeyPressed("Escape")) Close(); } }