Files
mcpe/source/world/entity/Animal.cpp
iProgramInCpp 3443349df0 * Add Pig
2023-12-06 21:58:28 +02:00

96 lines
1.7 KiB
C++

/********************************************************************
Minecraft: Pocket Edition - Decompilation Project
Copyright (C) 2023 iProgramInCpp
The following code is licensed under the BSD 1 clause license.
SPDX-License-Identifier: BSD-1-Clause
********************************************************************/
#include "Animal.hpp"
#include "world/level/Level.hpp"
Animal::Animal(Level* pLevel) : PathfinderMob(pLevel)
{
field_BB4 = 0;
m_age = 0;
}
void Animal::aiStep()
{
int age = getAge();
if (age < 0)
setAge(age + 1);
else if (age)
setAge(age - 1);
Mob::aiStep();
}
bool Animal::isBaby()
{
return getAge() < 0;
}
bool Animal::canSpawn()
{
int x = Mth::floor(m_pos.x);
int y = Mth::floor(m_hitbox.min.y);
int z = Mth::floor(m_pos.z);
if (m_pLevel->getTile(x, y - 1, z) != Tile::grass->m_ID || m_pLevel->getRawBrightness(x, y, z) < 8)
return false;
return PathfinderMob::canSpawn();
}
Entity* Animal::findAttackTarget()
{
// Animals are passive mobs.
return nullptr;
}
int Animal::getAmbientSoundInterval()
{
return 240;
}
int Animal::getCreatureBaseType()
{
return BASE_ANIMAL;
}
float Animal::getWalkTargetValue(int x, int y, int z)
{
// Animals would rather walk on grass.
if (m_pLevel->getTile(x, y - 1, z) == Tile::grass->m_ID)
return 10.0f;
// Animals will avoid dark areas.
return m_pLevel->getBrightness(x, y, z) - 0.5f;
}
bool Animal::hurt(Entity* pCulprit, int damage)
{
// Run around erratically for three seconds.
field_BA4 = 60;
m_pAttackTarget = nullptr;
field_BB4 = 0;
return Mob::hurt(pCulprit, damage);
}
bool Animal::removeWhenFarAway()
{
return false;
}
int Animal::getAge()
{
return m_age;
}
void Animal::setAge(int age)
{
m_age = age;
}