From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/PathNavigation.h | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Minecraft.World/PathNavigation.h (limited to 'Minecraft.World/PathNavigation.h') diff --git a/Minecraft.World/PathNavigation.h b/Minecraft.World/PathNavigation.h new file mode 100644 index 00000000..b8a8cfd6 --- /dev/null +++ b/Minecraft.World/PathNavigation.h @@ -0,0 +1,67 @@ +#pragma once + +class Mob; +class Level; +class Path; + +class PathNavigation +{ +private: + Mob *mob; + Level *level; + Path *path; + float speed; + float maxDist; + bool avoidSun; + int _tick; + int lastStuckCheck; + Vec3 *lastStuckCheckPos; + + bool _canPassDoors; + bool _canOpenDoors; + bool avoidWater; + bool canFloat; + +public: + PathNavigation(Mob *mob, Level *level, float maxDist); + ~PathNavigation(); + + void setAvoidWater(bool avoidWater); + bool getAvoidWater(); + void setCanOpenDoors(bool canOpenDoors); + bool canPassDoors(); + void setCanPassDoors(bool canPass); + bool canOpenDoors(); + void setAvoidSun(bool avoidSun); + void setSpeed(float speed); + void setCanFloat(bool canFloat); + Path *createPath(double x, double y, double z); + bool moveTo(double x, double y, double z, float speed); + Path *createPath(shared_ptr target); + bool moveTo(shared_ptr target, float speed); + bool moveTo(Path *newPath, float speed); + Path *getPath(); + void tick(); + +private: + void updatePath(); + +public: + bool isDone(); + + void stop(); + +private: + Vec3 *getTempMobPos(); + int getSurfaceY(); + bool canUpdatePath(); + bool isInLiquid(); + void trimPathFromSun(); + bool canMoveDirectly(Vec3 *startPos, Vec3 *stopPos, int sx, int sy, int sz); + bool canWalkOn(int x, int y, int z, int sx, int sy, int sz, Vec3 *startPos, double goalDirX, double goalDirZ); + bool canWalkAbove(int startX, int startY, int startZ, int sx, int sy, int sz, Vec3 *startPos, double goalDirX, double goalDirZ); + +public: + // 4J Added override to update ai elements when loading entity from schematics + void setLevel(Level *level); +}; \ No newline at end of file -- cgit v1.2.3