Makes farmers farm crops.
This commit is contained in:
parent
09ee8a1bb6
commit
ed95f4d81b
@ -3,6 +3,8 @@
|
||||
|
||||
#include "Villager.h"
|
||||
#include "../World.h"
|
||||
#include "../Blockarea.h"
|
||||
#include "../Blocks/BlockHandler.h"
|
||||
|
||||
|
||||
|
||||
@ -10,7 +12,8 @@
|
||||
|
||||
cVillager::cVillager(eVillagerType VillagerType) :
|
||||
super("Villager", mtVillager, "", "", 0.6, 1.8),
|
||||
m_Type(VillagerType)
|
||||
m_Type(VillagerType),
|
||||
m_DidFindCrops(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -33,3 +36,70 @@ void cVillager::DoTakeDamage(TakeDamageInfo & a_TDI)
|
||||
|
||||
|
||||
|
||||
|
||||
void cVillager::Tick(float a_Dt, cChunk & a_Chunk)
|
||||
{
|
||||
super::Tick(a_Dt, a_Chunk);
|
||||
if (m_DidFindCrops)
|
||||
{
|
||||
Vector3i Pos = Vector3i(GetPosition());
|
||||
std::cout << Pos.Equals(m_CropsPos) << "\n";
|
||||
if (Pos.Equals(m_CropsPos))
|
||||
{
|
||||
cBlockHandler Handler(E_BLOCK_CROPS);
|
||||
Handler.DropBlock(m_World, this, m_CropsPos.x, m_CropsPos.y, m_CropsPos.z);
|
||||
m_DidFindCrops = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_World->GetTickRandomNumber(50) != 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (m_Type)
|
||||
{
|
||||
case vtFarmer:
|
||||
{
|
||||
HandleFarmer();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void cVillager::HandleFarmer()
|
||||
{
|
||||
cBlockArea Surrounding;
|
||||
Surrounding.Read(m_World,
|
||||
(int) GetPosX() - 5,
|
||||
(int) GetPosX() + 5,
|
||||
(int) GetPosY() - 3,
|
||||
(int) GetPosY() + 3,
|
||||
(int) GetPosZ() - 5,
|
||||
(int) GetPosZ() + 5);
|
||||
|
||||
// Check for crops in a 10x6x10 area.
|
||||
for (int X = 0; X < 10; X++)
|
||||
{
|
||||
for (int Y = 0; Y < 6; Y++)
|
||||
{
|
||||
for (int Z = 0; Z < 10; Z++)
|
||||
{
|
||||
if (Surrounding.GetRelBlockType(X, Y, Z) == E_BLOCK_CROPS && Surrounding.GetRelBlockMeta(X, Y, Z) == 0x7)
|
||||
{
|
||||
m_DidFindCrops = true;
|
||||
m_CropsPos = Vector3i((int) GetPosX() + X - 5, (int) GetPosY() + Y - 3, (int) GetPosZ() + Z - 5);
|
||||
MoveToPosition(Vector3f((float) GetPosX() + X - 5, (float) GetPosY() + Y - 3, (float) GetPosZ() + Z - 5));
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -30,11 +30,16 @@ public:
|
||||
CLASS_PROTODEF(cVillager);
|
||||
|
||||
virtual void DoTakeDamage(TakeDamageInfo & a_TDI) override;
|
||||
virtual void Tick (float a_Dt, cChunk & a_Chunk) override;
|
||||
|
||||
void HandleFarmer();
|
||||
int GetVilType(void) const { return m_Type; }
|
||||
|
||||
private:
|
||||
|
||||
int m_Type;
|
||||
bool m_DidFindCrops;
|
||||
Vector3i m_CropsPos;
|
||||
|
||||
} ;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user