mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-23 22:43:36 +00:00
61 lines
2.4 KiB
C++
61 lines
2.4 KiB
C++
#include "../../Platform/stdafx.h"
|
|
#include "../../Headers/net.minecraft.world.entity.h"
|
|
#include "../../Headers/net.minecraft.world.entity.ai.control.h"
|
|
#include "../../Headers/net.minecraft.world.entity.ai.navigation.h"
|
|
#include "../../Headers/net.minecraft.world.entity.ai.util.h"
|
|
#include "../../Headers/net.minecraft.world.phys.h"
|
|
#include "../../Util/SharedConstants.h"
|
|
#include "RandomStrollGoal.h"
|
|
|
|
RandomStrollGoal::RandomStrollGoal(PathfinderMob* mob, double speedModifier) {
|
|
this->mob = mob;
|
|
this->speedModifier = speedModifier;
|
|
setRequiredControlFlags(Control::MoveControlFlag |
|
|
Control::LookControlFlag);
|
|
}
|
|
|
|
bool RandomStrollGoal::canUse() {
|
|
// 4J - altered a little so we can do some more random strolling when
|
|
// appropriate, to try and move any animals that aren't confined to a
|
|
// fenced-off region far enough to determine we can despawn them
|
|
if (mob->getNoActionTime() < SharedConstants::TICKS_PER_SECOND * 5) {
|
|
if (mob->getRandom()->nextInt(120) == 0) {
|
|
Vec3* pos =
|
|
RandomPos::getPos(std::dynamic_pointer_cast<PathfinderMob>(
|
|
mob->shared_from_this()),
|
|
10, 7);
|
|
if (pos == NULL) return false;
|
|
wantedX = pos->x;
|
|
wantedY = pos->y;
|
|
wantedZ = pos->z;
|
|
return true;
|
|
}
|
|
} else {
|
|
// This entity wouldn't normally be randomly strolling. However, if our
|
|
// management system says that it should do, then do. Don't bother
|
|
// waiting for random conditions to be met before picking a direction
|
|
// though as the point here is to see if it is possible to stroll out of
|
|
// a given area and so waiting around is just wasting time
|
|
|
|
if (mob->isExtraWanderingEnabled()) {
|
|
Vec3* pos =
|
|
RandomPos::getPos(std::dynamic_pointer_cast<PathfinderMob>(
|
|
mob->shared_from_this()),
|
|
10, 7, mob->getWanderingQuadrant());
|
|
if (pos == NULL) return false;
|
|
wantedX = pos->x;
|
|
wantedY = pos->y;
|
|
wantedZ = pos->z;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool RandomStrollGoal::canContinueToUse() {
|
|
return !mob->getNavigation()->isDone();
|
|
}
|
|
|
|
void RandomStrollGoal::start() {
|
|
mob->getNavigation()->moveTo(wantedX, wantedY, wantedZ, speedModifier);
|
|
} |