aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/PathNavigation.h
blob: 9b68637a50954794fd83f0f5ce93afdea8eaf7b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#pragma once

class Mob;
class Level;
class Path;

class PathNavigation
{
private:
	Mob *mob;
	Level *level;
	Path *path;
	double speedModifier;
	AttributeInstance *dist;
	bool avoidSun;
	int _tick;
	int lastStuckCheck;
	Vec3 *lastStuckCheckPos;

	bool _canPassDoors;
	bool _canOpenDoors;
	bool avoidWater;
	bool canFloat;

public:
	PathNavigation(Mob *mob, Level *level);
	~PathNavigation();

	void setAvoidWater(bool avoidWater);
	bool getAvoidWater();
	void setCanOpenDoors(bool canOpenDoors);
	bool canPassDoors();
	void setCanPassDoors(bool canPass);
	bool canOpenDoors();
	void setAvoidSun(bool avoidSun);
	void setSpeedModifier(double speedModifier);
	void setCanFloat(bool canFloat);
	float getMaxDist();
	Path *createPath(double x, double y, double z);
	bool moveTo(double x, double y, double z, double speedModifier);
	Path *createPath(shared_ptr<Entity> target);
	bool moveTo(shared_ptr<Entity> target, double speedModifier);
	bool moveTo(Path *newPath, double speedModifier);
	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);
};