Ejemplo n.º 1
0
bool LuaChatForm::CanSell(Equip::Type t, bool verbose) const {
	return (GetStock(t) > 0) && DoesSell(t);
}
Ejemplo n.º 2
0
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();
	}

}