1
0

Makes farmers farm crops.

This commit is contained in:
STRWarrior 2014-01-27 14:40:31 +01:00
parent 09ee8a1bb6
commit ed95f4d81b
2 changed files with 76 additions and 1 deletions

View File

@ -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;
}
}
}
}
}

View File

@ -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;
} ;