mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 14:13:37 +00:00
52 lines
1.7 KiB
C++
52 lines
1.7 KiB
C++
#include "../../Minecraft.World/Platform/stdafx.h"
|
|
|
|
#include "../../Minecraft.Client/Minecraft.h"
|
|
#include "../../Minecraft.Client/Player/MultiPlayerLocalPlayer.h"
|
|
#include "AreaConstraint.h"
|
|
#include "../../Minecraft.World/Util/AABB.h"
|
|
|
|
AreaConstraint::AreaConstraint(int descriptionId, double x0, double y0,
|
|
double z0, double x1, double y1, double z1,
|
|
bool contains /*= true*/,
|
|
bool restrictsMovement /*=true*/)
|
|
: TutorialConstraint(descriptionId) {
|
|
messageArea =
|
|
AABB::newPermanent(x0 + 2, y0 + 2, z0 + 2, x1 - 2, y1 - 2, z1 - 2);
|
|
movementArea = AABB::newPermanent(x0, y0, z0, x1, y1, z1);
|
|
|
|
this->contains = contains;
|
|
m_restrictsMovement = restrictsMovement;
|
|
}
|
|
|
|
AreaConstraint::~AreaConstraint() {
|
|
delete messageArea;
|
|
delete movementArea;
|
|
}
|
|
|
|
bool AreaConstraint::isConstraintSatisfied(int iPad) {
|
|
Minecraft* minecraft = Minecraft::GetInstance();
|
|
return messageArea->contains(minecraft->localplayers[iPad]->getPos(1)) ==
|
|
contains;
|
|
}
|
|
|
|
bool AreaConstraint::isConstraintRestrictive(int iPad) {
|
|
return m_restrictsMovement;
|
|
}
|
|
|
|
bool AreaConstraint::canMoveToPosition(double xo, double yo, double zo,
|
|
double xt, double yt, double zt) {
|
|
if (!m_restrictsMovement) return true;
|
|
|
|
Vec3* targetPos = Vec3::newTemp(xt, yt, zt);
|
|
Minecraft* minecraft = Minecraft::GetInstance();
|
|
|
|
if (movementArea->contains(targetPos) == contains) {
|
|
return true;
|
|
}
|
|
Vec3* origPos = Vec3::newTemp(xo, yo, zo);
|
|
|
|
double currDist = origPos->distanceTo(movementArea);
|
|
double targetDist = targetPos->distanceTo(movementArea);
|
|
return targetDist < currDist;
|
|
}
|