LeviLamina
Loading...
Searching...
No Matches
PathFinder.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/world/level/BlockPos.h"
7#include "mc/world/level/CachedChunkBlockSource.h"
8#include "mc/world/level/block/BlockProperty.h"
9#include "mc/world/level/pathfinder/BinaryHeap.h"
10#include "mc/world/level/pathfinder/CanClimbIntoNode.h"
11#include "mc/world/level/pathfinder/CanJumpIntoNode.h"
12#include "mc/world/level/pathfinder/NodeType.h"
13#include "mc/world/level/pathfinder/PathCompletionType.h"
14
15// auto generated forward declare list
16// clang-format off
17class AABB;
18class Actor;
19class Block;
20class BlockSource;
24class Path;
25class PathfinderNode;
26class Vec3;
27struct ActorPathingData;
28struct ActorUniqueID;
30// clang-format on
31
32class PathFinder {
33public:
34 // PathFinder inner types define
35 enum class ExtractionPurpose : uchar {
36 Pathing = 0,
37 IsFree = 1,
38 };
39
40 enum class NeighborDiagonalType : int {
41 Default = 0,
42 Liquid = 1,
43 };
44
45public:
46 // member variables
47 // NOLINTBEGIN
48 ::ll::TypedStorage<8, 48, ::CachedChunkBlockSource> mRegion;
49 ::ll::TypedStorage<8, 32, ::BinaryHeap> mOpenSet;
50 ::ll::TypedStorage<8, 64, ::std::unordered_map<::BlockPos, ::PathfinderNode>> mNodes;
51 ::ll::TypedStorage<8, 256, ::std::array<::PathfinderNode*, 32>> mNeighbors;
52 bool mCanPassDoors : 1;
53 bool mCanOpenDoors : 1;
54 bool mCanOpenIronDoors : 1;
55 bool mAvoidWater : 1;
56 bool mAvoidDamageBlocks : 1;
57 bool mCanFloat : 1;
58 bool mCanPathOverLava : 1;
59 bool mCanWalkInLava : 1;
60 bool mIsAmphibious : 1;
61 bool mAvoidPortals : 1;
62 bool mCanBreach : 1;
63 bool mCanJump : 1;
64 // NOLINTEND
65
66public:
67 // prevent constructor by default
68 PathFinder();
69
70public:
71 // member functions
72 // NOLINTBEGIN
73 MCNAPI PathFinder(::BlockSource& region, ::NavigationComponent const& navigation);
74
76 ::ActorPathingData const& data,
77 ::BlockPos const& pos,
78 ::Block const& block,
79 ::BlockProperty testProperty,
80 int radius,
81 ::BreakBlocksComponent const* breakBlocksComponent,
82 ::std::function<bool(::Block const&, ::BlockPos const&)> extraCondition
83 );
84
85 MCNAPI ::NodeType _classifyDoorNode(
86 ::ActorPathingData const& data,
87 ::Block const& testBlock,
88 ::BlockPos const& testPos,
89 ::BlockPos const& lastPathPos
90 );
91
92 MCNAPI ::NodeType _classifyNode(
93 ::ActorPathingData const& data,
94 ::BlockPos const& lastPathPos,
95 ::Block const& testBlock,
96 ::BlockPos const& testPos,
97 ::CanJumpIntoNode jumpIntoNode,
98 ::CanClimbIntoNode climbIntoNode
99 );
100
101 MCNAPI bool
103
104 MCNAPI ::std::unique_ptr<::Path>
105 _findPath(::ActorPathingData const& actorData, float xt, float yt, float zt, float maxDist);
106
107 MCNAPI ::std::unique_ptr<::Path> _findPath(
108 ::ActorPathingData const& data,
109 ::PathfinderNode* from,
111 ::PathfinderNode const& size,
112 float maxDist
113 );
114
115 MCNAPI ::AABB _getAABBForHeightComputation(::BlockPos const& pos, ::Block const& block) const;
116
117 MCNAPI float _getHeightAboveBlock(::BlockPos const& blockPos, float mobHeight) const;
118
119 MCNAPI float _getHeightBelowBlock(::BlockPos const& blockPos, float mobHeight) const;
120
121 MCNAPI ::std::optional<::BlockPos> _getHighestReachablePosByJumping(
122 ::BlockPos const& originalTargetPos,
123 float maxReachableHeight,
124 ::BlockPos const& actorSize
125 ) const;
126
127 MCNAPI int _getNeighbors(
128 ::ActorPathingData const& data,
129 ::PathfinderNode& pos,
130 ::PathfinderNode const& size,
131 ::PathfinderNode const& target,
132 uint maxDistSqr,
133 ::std::bitset<18> const& validPositions
134 );
135
136 MCNAPI ::PathfinderNode* _getNode(::BlockPos const& pos, ::NodeType nodeType);
137
138 MCNAPI ::PathfinderNode* _getNode(
139 ::ActorPathingData const& data,
140 ::BlockPos const& fromPos,
141 ::BlockPos const& blockPos,
142 ::PathfinderNode const& size,
143 float jumpHeight,
144 ::CanClimbIntoNode climbIntoNode
145 );
146
147 MCNAPI ::std::optional<::NodeType> _getPartialBlockNodeType(
148 ::BlockPos const& currentBlockPos,
149 ::BlockPos const& lastBlockPos,
150 ::ActorPathingData const& data
151 );
152
153 MCNAPI float _getPathfindingMalus(::ActorPathingData const& data, ::NodeType nodeType, ::BlockPos const& blockPos);
154
155 MCNAPI ::PathfinderNode* _getUnderneathSupportedNode(
156 ::PathfinderNode* node,
157 ::ActorPathingData const& data,
158 ::BlockPos const& fromPos,
159 ::PathfinderNode const& size,
160 ::CanClimbIntoNode climbIntoNode
161 );
162
163 MCNAPI ::PathfinderNode*
164 _getWaterNode(::ActorPathingData const& data, ::BlockPos const& lastPos, ::BlockPos const& blockPos);
165
166 MCNAPI bool _isBlockWater(::BlockPos const& pos) const;
167
168 MCNAPI ::NodeType _isFreeStartNode(
169 ::ActorPathingData const& data,
170 ::AABB const& entityAABB,
171 ::BlockPos const& testPos,
172 ::BlockPos const& size
173 );
174
175 MCNAPI ::NodeType
176 _isFreeWaterNode(::ActorPathingData const& data, ::BlockPos const& lastPos, ::BlockPos const& blockPos);
177
179 ::PathfinderNode const& node,
180 ::PathfinderNode const& target,
181 ::BlockPos const& offset,
182 uint maxDistSqr
183 );
184
185 MCNAPI ::std::unique_ptr<::Path>
186 _reconstructPath(::PathfinderNode* to, ::PathCompletionType completionType, ::ActorUniqueID);
187
188 MCNAPI ::std::unique_ptr<::Path> findPath(::Actor& from, ::Actor const& to, float maxDist);
189
190 MCNAPI ::std::unique_ptr<::Path> findPath(::Actor& from, int x, int y, int z, float maxDist);
191
192 MCNAPI ::NodeType isFree(
193 ::Actor& actor,
194 ::BlockPos const& fromPos,
195 ::BlockPos const& testPos,
196 ::BlockPos const& size,
197 ::CanJumpIntoNode jumpIntoNode,
198 ::CanClimbIntoNode climbIntoNode
199 );
200
201 MCNAPI ::NodeType isFree(
202 ::ActorPathingData const& data,
203 ::BlockPos const& lastPathPos,
204 ::BlockPos const& testPos,
205 ::BlockPos const& size,
206 ::CanJumpIntoNode jumpIntoNode,
207 ::CanClimbIntoNode climbIntoNode
208 );
209
210 MCNAPI ~PathFinder();
211 // NOLINTEND
212
213public:
214 // static functions
215 // NOLINTBEGIN
216 MCNAPI static float _calculateMoveCost(
217 ::ActorPathingData const& data,
218 ::PathfinderNode& start,
219 ::BlockPos const& fromPos,
221 );
222
223 MCNAPI static ::BlockPos _getStartPositionFlyingActor(
224 ::IPathBlockSource const& pathBlockSource,
225 ::BlockPos originalStartPos,
226 bool canFloat,
227 bool canPathOverLava,
228 float yFeetPosition
229 );
230
231 MCNAPI static ::ActorPathingData extractPathingData(
232 ::Actor& mutableActor,
233 ::PathFinder::ExtractionPurpose purpose,
234 ::std::optional<::Vec3> targetPos
235 );
236 // NOLINTEND
237
238public:
239 // static variables
240 // NOLINTBEGIN
241 MCNAPI static ::PreferredPathDescription const& DEFAULT_DESC();
242 // NOLINTEND
243
244public:
245 // constructor thunks
246 // NOLINTBEGIN
247 MCNAPI void* $ctor(::BlockSource& region, ::NavigationComponent const& navigation);
248 // NOLINTEND
249
250public:
251 // destructor thunk
252 // NOLINTBEGIN
253 MCNAPI void $dtor();
254 // NOLINTEND
255};
Definition AABB.h:18
Definition Actor.h:125
Definition BlockPos.h:21
Definition BlockSource.h:73
Definition Block.h:69
Definition BreakBlocksComponent.h:12
Definition CachedChunkBlockSource.h:18
Definition IPathBlockSource.h:10
Definition NavigationComponent.h:22
MCAPI::PathfinderNode * _getNode(::ActorPathingData const &data, ::BlockPos const &fromPos, ::BlockPos const &blockPos, ::PathfinderNode const &size, float jumpHeight, ::CanClimbIntoNode climbIntoNode)
MCAPI::PathfinderNode * _getWaterNode(::ActorPathingData const &data, ::BlockPos const &lastPos, ::BlockPos const &blockPos)
MCAPI bool _findNearestPathableNeighbor(::BlockPos &outPos, ::ActorPathingData const &data, ::BlockPos const &testPos)
static MCAPI ::PreferredPathDescription const & DEFAULT_DESC()
static MCAPI ::ActorPathingData extractPathingData(::Actor &mutableActor, ::PathFinder::ExtractionPurpose purpose, ::std::optional<::Vec3 > targetPos)
MCAPI ::std::unique_ptr<::Path > findPath(::Actor &from, int x, int y, int z, float maxDist)
MCAPI ~PathFinder()
static MCAPI float _calculateMoveCost(::ActorPathingData const &data, ::PathfinderNode &start, ::BlockPos const &fromPos, ::CachedChunkBlockSource &region)
MCAPI::NodeType _isFreeStartNode(::ActorPathingData const &data, ::AABB const &entityAABB, ::BlockPos const &testPos, ::BlockPos const &size)
MCAPI bool _isNeighborPotentiallyValid(::PathfinderNode const &node, ::PathfinderNode const &target, ::BlockPos const &offset, uint maxDistSqr)
MCAPI void $dtor()
MCAPI::NodeType _classifyNode(::ActorPathingData const &data, ::BlockPos const &lastPathPos, ::Block const &testBlock, ::BlockPos const &testPos, ::CanJumpIntoNode jumpIntoNode, ::CanClimbIntoNode climbIntoNode)
MCAPI::NodeType _classifyDoorNode(::ActorPathingData const &data, ::Block const &testBlock, ::BlockPos const &testPos, ::BlockPos const &lastPathPos)
MCAPI::AABB _getAABBForHeightComputation(::BlockPos const &pos, ::Block const &block) const
MCAPI ::std::optional<::NodeType > _getPartialBlockNodeType(::BlockPos const &currentBlockPos, ::BlockPos const &lastBlockPos, ::ActorPathingData const &data)
MCAPI ::std::unique_ptr<::Path > findPath(::Actor &from, ::Actor const &to, float maxDist)
MCAPI::PathfinderNode * _getNode(::BlockPos const &pos, ::NodeType nodeType)
MCAPI ::std::optional<::BlockPos > _getHighestReachablePosByJumping(::BlockPos const &originalTargetPos, float maxReachableHeight, ::BlockPos const &actorSize) const
MCAPI float _getHeightAboveBlock(::BlockPos const &blockPos, float mobHeight) const
MCAPI bool _isBlockWater(::BlockPos const &pos) const
MCAPI ::std::unique_ptr<::Path > _findPath(::ActorPathingData const &data, ::PathfinderNode *from, ::PathfinderNode *to, ::PathfinderNode const &size, float maxDist)
static MCAPI ::BlockPos _getStartPositionFlyingActor(::IPathBlockSource const &pathBlockSource, ::BlockPos originalStartPos, bool canFloat, bool canPathOverLava, float yFeetPosition)
MCAPI::NodeType _isFreeWaterNode(::ActorPathingData const &data, ::BlockPos const &lastPos, ::BlockPos const &blockPos)
MCAPI float _getHeightBelowBlock(::BlockPos const &blockPos, float mobHeight) const
MCAPI void * $ctor(::BlockSource &region, ::NavigationComponent const &navigation)
MCAPI bool _checkBlockAndNeighborsProperty(::ActorPathingData const &data, ::BlockPos const &pos, ::Block const &block, ::BlockProperty testProperty, int radius, ::BreakBlocksComponent const *breakBlocksComponent, ::std::function< bool(::Block const &, ::BlockPos const &)> extraCondition)
MCAPI::NodeType isFree(::Actor &actor, ::BlockPos const &fromPos, ::BlockPos const &testPos, ::BlockPos const &size, ::CanJumpIntoNode jumpIntoNode, ::CanClimbIntoNode climbIntoNode)
MCAPI ::std::unique_ptr<::Path > _reconstructPath(::PathfinderNode *to, ::PathCompletionType completionType, ::ActorUniqueID)
MCAPI PathFinder(::BlockSource &region, ::NavigationComponent const &navigation)
MCAPI::NodeType isFree(::ActorPathingData const &data, ::BlockPos const &lastPathPos, ::BlockPos const &testPos, ::BlockPos const &size, ::CanJumpIntoNode jumpIntoNode, ::CanClimbIntoNode climbIntoNode)
MCAPI int _getNeighbors(::ActorPathingData const &data, ::PathfinderNode &pos, ::PathfinderNode const &size, ::PathfinderNode const &target, uint maxDistSqr, ::std::bitset< 18 > const &validPositions)
MCAPI float _getPathfindingMalus(::ActorPathingData const &data, ::NodeType nodeType, ::BlockPos const &blockPos)
MCAPI::PathfinderNode * _getUnderneathSupportedNode(::PathfinderNode *node, ::ActorPathingData const &data, ::BlockPos const &fromPos, ::PathfinderNode const &size, ::CanClimbIntoNode climbIntoNode)
MCAPI ::std::unique_ptr<::Path > _findPath(::ActorPathingData const &actorData, float xt, float yt, float zt, float maxDist)
Definition Path.h:16
Definition PathfinderNode.h:13
Definition Vec3.h:10
Definition ActorPathingData.h:5
Definition ActorUniqueID.h:10
Definition PreferredPathDescription.h:14