Merge remote-tracking branch 'MikeHunsinger/master'
This commit is contained in:
@@ -1420,59 +1420,68 @@ AString cPlayer::GetColor(void) const
|
||||
|
||||
|
||||
|
||||
void cPlayer::TossItem(
|
||||
bool a_bDraggingItem,
|
||||
char a_Amount /* = 1 */,
|
||||
short a_CreateType /* = 0 */,
|
||||
short a_CreateHealth /* = 0 */
|
||||
)
|
||||
void cPlayer::TossEquippedItem(char a_Amount)
|
||||
{
|
||||
cItems Drops;
|
||||
if (a_CreateType != 0)
|
||||
cItem DroppedItem(GetInventory().GetEquippedItem());
|
||||
if (!DroppedItem.IsEmpty())
|
||||
{
|
||||
// Just create item without touching the inventory (used in creative mode)
|
||||
Drops.push_back(cItem(a_CreateType, a_Amount, a_CreateHealth));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Drop an item from the inventory:
|
||||
if (a_bDraggingItem)
|
||||
char NewAmount = a_Amount;
|
||||
if (NewAmount > GetInventory().GetEquippedItem().m_ItemCount)
|
||||
{
|
||||
cItem & Item = GetDraggingItem();
|
||||
if (!Item.IsEmpty())
|
||||
{
|
||||
char OriginalItemAmount = Item.m_ItemCount;
|
||||
Item.m_ItemCount = std::min(OriginalItemAmount, a_Amount);
|
||||
Drops.push_back(Item);
|
||||
if (OriginalItemAmount > a_Amount)
|
||||
{
|
||||
Item.m_ItemCount = OriginalItemAmount - (char)a_Amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
Item.Empty();
|
||||
}
|
||||
}
|
||||
NewAmount = GetInventory().GetEquippedItem().m_ItemCount; // Drop only what's there
|
||||
}
|
||||
|
||||
GetInventory().GetHotbarGrid().ChangeSlotCount(GetInventory().GetEquippedSlotNum() /* Returns hotbar subslot, which HotbarGrid takes */, -a_Amount);
|
||||
|
||||
DroppedItem.m_ItemCount = NewAmount;
|
||||
Drops.push_back(DroppedItem);
|
||||
}
|
||||
|
||||
double vX = 0, vY = 0, vZ = 0;
|
||||
EulerToVector(-GetYaw(), GetPitch(), vZ, vX, vY);
|
||||
vY = -vY * 2 + 1.f;
|
||||
m_World->SpawnItemPickups(Drops, GetPosX(), GetEyeHeight(), GetPosZ(), vX * 3, vY * 3, vZ * 3, true); // 'true' because created by player
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cPlayer::TossHeldItem(char a_Amount)
|
||||
{
|
||||
cItems Drops;
|
||||
cItem & Item = GetDraggingItem();
|
||||
if (!Item.IsEmpty())
|
||||
{
|
||||
char OriginalItemAmount = Item.m_ItemCount;
|
||||
Item.m_ItemCount = std::min(OriginalItemAmount, a_Amount);
|
||||
Drops.push_back(Item);
|
||||
if (OriginalItemAmount > a_Amount)
|
||||
{
|
||||
Item.m_ItemCount = OriginalItemAmount - a_Amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Else drop equipped item
|
||||
cItem DroppedItem(GetInventory().GetEquippedItem());
|
||||
if (!DroppedItem.IsEmpty())
|
||||
{
|
||||
char NewAmount = a_Amount;
|
||||
if (NewAmount > GetInventory().GetEquippedItem().m_ItemCount)
|
||||
{
|
||||
NewAmount = GetInventory().GetEquippedItem().m_ItemCount; // Drop only what's there
|
||||
}
|
||||
|
||||
GetInventory().GetHotbarGrid().ChangeSlotCount(GetInventory().GetEquippedSlotNum() /* Returns hotbar subslot, which HotbarGrid takes */, -a_Amount);
|
||||
|
||||
DroppedItem.m_ItemCount = NewAmount;
|
||||
Drops.push_back(DroppedItem);
|
||||
}
|
||||
Item.Empty();
|
||||
}
|
||||
}
|
||||
|
||||
double vX = 0, vY = 0, vZ = 0;
|
||||
EulerToVector(-GetYaw(), GetPitch(), vZ, vX, vY);
|
||||
vY = -vY * 2 + 1.f;
|
||||
m_World->SpawnItemPickups(Drops, GetPosX(), GetEyeHeight(), GetPosZ(), vX * 3, vY * 3, vZ * 3, true); // 'true' because created by player
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cPlayer::TossPickup(const cItem & a_Item)
|
||||
{
|
||||
cItems Drops;
|
||||
Drops.push_back(a_Item);
|
||||
|
||||
double vX = 0, vY = 0, vZ = 0;
|
||||
EulerToVector(-GetYaw(), GetPitch(), vZ, vX, vY);
|
||||
vY = -vY * 2 + 1.f;
|
||||
|
||||
Reference in New Issue
Block a user