Implemented milk, added documentation to Pawn.h
This commit is contained in:
parent
615152eb8c
commit
1eb04a48ee
|
@ -850,7 +850,7 @@ void cClientHandle::HandleLeftClick(int a_BlockX, int a_BlockY, int a_BlockZ, eB
|
||||||
case DIG_STATUS_SHOOT_EAT:
|
case DIG_STATUS_SHOOT_EAT:
|
||||||
{
|
{
|
||||||
cItemHandler * ItemHandler = cItemHandler::GetItemHandler(m_Player->GetEquippedItem());
|
cItemHandler * ItemHandler = cItemHandler::GetItemHandler(m_Player->GetEquippedItem());
|
||||||
if (ItemHandler->IsFood())
|
if (ItemHandler->IsFood() || ItemHandler->IsDrinkable())
|
||||||
{
|
{
|
||||||
m_Player->AbortEating();
|
m_Player->AbortEating();
|
||||||
return;
|
return;
|
||||||
|
@ -1182,9 +1182,9 @@ void cClientHandle::HandleRightClick(int a_BlockX, int a_BlockY, int a_BlockZ, e
|
||||||
{
|
{
|
||||||
HandlePlaceBlock(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, *ItemHandler);
|
HandlePlaceBlock(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, *ItemHandler);
|
||||||
}
|
}
|
||||||
else if (ItemHandler->IsFood() && !m_Player->IsGameModeCreative())
|
else if ((ItemHandler->IsFood() || ItemHandler->IsDrinkable()) && !m_Player->IsGameModeCreative())
|
||||||
{
|
{
|
||||||
if (m_Player->IsSatiated())
|
if (m_Player->IsSatiated() && !ItemHandler->IsDrinkable())
|
||||||
{
|
{
|
||||||
// The player is satiated, they cannot eat
|
// The player is satiated, they cannot eat
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -72,6 +72,26 @@ void cPawn::RemoveEntityEffect(cEntityEffect::eType a_EffectType)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cPawn::ClearEntityEffects()
|
||||||
|
{
|
||||||
|
// Iterate through this entity's applied effects
|
||||||
|
for (tEffectMap::iterator iter = m_EntityEffects.begin(); iter != m_EntityEffects.end();)
|
||||||
|
{
|
||||||
|
// Copy values to prevent pesky wrong erasures
|
||||||
|
cEntityEffect::eType effect_type = iter->first;
|
||||||
|
|
||||||
|
// Iterates (must be called before any possible erasure)
|
||||||
|
++iter;
|
||||||
|
|
||||||
|
// Remove effect
|
||||||
|
RemoveEntityEffect(effect_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPawn::HandleEntityEffects(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect)
|
void cPawn::HandleEntityEffects(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect)
|
||||||
{
|
{
|
||||||
switch (a_EffectType)
|
switch (a_EffectType)
|
||||||
|
|
|
@ -22,13 +22,28 @@ public:
|
||||||
|
|
||||||
virtual void Tick(float a_Dt, cChunk & a_Chunk) override;
|
virtual void Tick(float a_Dt, cChunk & a_Chunk) override;
|
||||||
|
|
||||||
|
/** Applies an entity effect
|
||||||
|
* @param a_EffectType The entity effect to apply
|
||||||
|
* @param a_Effect The parameters of the effect
|
||||||
|
*/
|
||||||
void AddEntityEffect(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect);
|
void AddEntityEffect(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect);
|
||||||
|
|
||||||
|
/** Removes a currently applied entity effect
|
||||||
|
* @param a_EffectType The entity effect to remove
|
||||||
|
*/
|
||||||
void RemoveEntityEffect(cEntityEffect::eType a_EffectType);
|
void RemoveEntityEffect(cEntityEffect::eType a_EffectType);
|
||||||
|
|
||||||
|
/** Removes all currently applied entity effects (used when drinking milk) */
|
||||||
|
void ClearEntityEffects();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef std::map<cEntityEffect::eType, cEntityEffect> tEffectMap;
|
typedef std::map<cEntityEffect::eType, cEntityEffect> tEffectMap;
|
||||||
tEffectMap m_EntityEffects;
|
tEffectMap m_EntityEffects;
|
||||||
|
|
||||||
|
/** Applies entity effect effects
|
||||||
|
* @param a_EffectType The selected entity effect
|
||||||
|
* @param a_Effect The parameters of the selected entity effect
|
||||||
|
*/
|
||||||
virtual void HandleEntityEffects(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect);
|
virtual void HandleEntityEffects(cEntityEffect::eType a_EffectType, cEntityEffect a_Effect);
|
||||||
} ; // tolua_export
|
} ; // tolua_export
|
||||||
|
|
||||||
|
|
|
@ -552,7 +552,7 @@ void cPlayer::SetFoodExhaustionLevel(double a_FoodExhaustionLevel)
|
||||||
|
|
||||||
bool cPlayer::Feed(int a_Food, double a_Saturation)
|
bool cPlayer::Feed(int a_Food, double a_Saturation)
|
||||||
{
|
{
|
||||||
if (m_FoodLevel >= MAX_FOOD_LEVEL)
|
if (IsSatiated())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "ItemCloth.h"
|
#include "ItemCloth.h"
|
||||||
#include "ItemComparator.h"
|
#include "ItemComparator.h"
|
||||||
#include "ItemDoor.h"
|
#include "ItemDoor.h"
|
||||||
|
#include "ItemMilk.h"
|
||||||
#include "ItemDye.h"
|
#include "ItemDye.h"
|
||||||
#include "ItemEmptyMap.h"
|
#include "ItemEmptyMap.h"
|
||||||
#include "ItemFishingRod.h"
|
#include "ItemFishingRod.h"
|
||||||
|
@ -119,6 +120,7 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType)
|
||||||
case E_ITEM_FLOWER_POT: return new cItemFlowerPotHandler(a_ItemType);
|
case E_ITEM_FLOWER_POT: return new cItemFlowerPotHandler(a_ItemType);
|
||||||
case E_BLOCK_LILY_PAD: return new cItemLilypadHandler(a_ItemType);
|
case E_BLOCK_LILY_PAD: return new cItemLilypadHandler(a_ItemType);
|
||||||
case E_ITEM_MAP: return new cItemMapHandler();
|
case E_ITEM_MAP: return new cItemMapHandler();
|
||||||
|
case E_ITEM_MILK: return new cItemMilkHandler();
|
||||||
case E_ITEM_ITEM_FRAME: return new cItemItemFrameHandler(a_ItemType);
|
case E_ITEM_ITEM_FRAME: return new cItemItemFrameHandler(a_ItemType);
|
||||||
case E_ITEM_NETHER_WART: return new cItemNetherWartHandler(a_ItemType);
|
case E_ITEM_NETHER_WART: return new cItemNetherWartHandler(a_ItemType);
|
||||||
case E_ITEM_PAINTING: return new cItemPaintingHandler(a_ItemType);
|
case E_ITEM_PAINTING: return new cItemPaintingHandler(a_ItemType);
|
||||||
|
@ -475,7 +477,6 @@ bool cItemHandler::IsFood(void)
|
||||||
case E_ITEM_BREAD:
|
case E_ITEM_BREAD:
|
||||||
case E_ITEM_RAW_PORKCHOP:
|
case E_ITEM_RAW_PORKCHOP:
|
||||||
case E_ITEM_COOKED_PORKCHOP:
|
case E_ITEM_COOKED_PORKCHOP:
|
||||||
case E_ITEM_MILK:
|
|
||||||
case E_ITEM_RAW_FISH:
|
case E_ITEM_RAW_FISH:
|
||||||
case E_ITEM_COOKED_FISH:
|
case E_ITEM_COOKED_FISH:
|
||||||
case E_ITEM_COOKIE:
|
case E_ITEM_COOKIE:
|
||||||
|
@ -501,6 +502,22 @@ bool cItemHandler::IsFood(void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cItemHandler::IsDrinkable(void)
|
||||||
|
{
|
||||||
|
switch (m_ItemType)
|
||||||
|
{
|
||||||
|
case E_ITEM_MILK:
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} // switch (m_ItemType)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cItemHandler::IsPlaceable(void)
|
bool cItemHandler::IsPlaceable(void)
|
||||||
{
|
{
|
||||||
// We can place any block that has a corresponding E_BLOCK_TYPE:
|
// We can place any block that has a corresponding E_BLOCK_TYPE:
|
||||||
|
|
|
@ -82,6 +82,9 @@ public:
|
||||||
/** Indicates if this item is food */
|
/** Indicates if this item is food */
|
||||||
virtual bool IsFood(void);
|
virtual bool IsFood(void);
|
||||||
|
|
||||||
|
/** Indicates if this item is drinkable */
|
||||||
|
virtual bool IsDrinkable(void);
|
||||||
|
|
||||||
/** Blocks simply get placed */
|
/** Blocks simply get placed */
|
||||||
virtual bool IsPlaceable(void);
|
virtual bool IsPlaceable(void);
|
||||||
|
|
||||||
|
|
26
src/Items/ItemMilk.h
Normal file
26
src/Items/ItemMilk.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class cItemMilkHandler:
|
||||||
|
public cItemHandler
|
||||||
|
{
|
||||||
|
typedef cItemHandler super;
|
||||||
|
public:
|
||||||
|
cItemMilkHandler():
|
||||||
|
super(E_ITEM_MILK)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool IsDrinkable(void) override
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool EatItem(cPlayer * a_Player, cItem * a_Item) override
|
||||||
|
{
|
||||||
|
a_Player->ClearEntityEffects();
|
||||||
|
a_Player->GetInventory().RemoveOneEquippedItem();
|
||||||
|
a_Player->GetInventory().AddItem(E_ITEM_BUCKET);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user