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/CachedChunkBlockSource.h"
7#include "mc/world/level/block/BlockProperty.h"
8#include "mc/world/level/pathfinder/ActorPathingData.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 BlockPos;
21class BlockSource;
25class Path;
26class PathfinderNode;
27class Vec3;
28struct ActorPathingData;
29struct ActorUniqueID;
31// clang-format on
32
34public:
35 // PathFinder inner types define
36 enum class ExtractionPurpose : uchar {
37 Pathing = 0,
38 IsFree = 1,
39 };
40
41 enum class NeighborDiagonalType : int {
42 Default = 0,
43 Liquid = 1,
44 };
45
46public:
47 // member variables
48 // NOLINTBEGIN
49 ::ll::TypedStorage<8, 48, ::CachedChunkBlockSource> mRegion;
50 ::ll::TypedStorage<8, 32, ::BinaryHeap> mOpenSet;
51 ::ll::TypedStorage<8, 64, ::std::unordered_map<::BlockPos, ::PathfinderNode>> mNodes;
52 ::ll::TypedStorage<8, 256, ::std::array<::PathfinderNode*, 32>> mNeighbors;
53 bool mCanPassDoors : 1;
54 bool mCanOpenDoors : 1;
55 bool mCanOpenIronDoors : 1;
56 bool mAvoidWater : 1;
57 bool mAvoidDamageBlocks : 1;
58 bool mCanFloat : 1;
59 bool mCanPathOverLava : 1;
60 bool mCanWalkInLava : 1;
61 bool mIsAmphibious : 1;
62 bool mAvoidPortals : 1;
63 bool mCanBreach : 1;
64 bool mCanJump : 1;
65 // NOLINTEND
66
67public:
68 // prevent constructor by default
69 PathFinder();
70
71public:
72 // member functions
73 // NOLINTBEGIN
74 MCNAPI PathFinder(::BlockSource& region, ::NavigationComponent const& navigation);
75
77 ::ActorPathingData const& data,
78 ::BlockPos const& pos,
79 ::Block const& block,
80 ::BlockProperty testProperty,
81 int radius,
82 ::BreakBlocksComponent const* breakBlocksComponent,
83 ::std::function<bool(::Block const&, ::BlockPos const&)> extraCondition
84 );
85
87 ::ActorPathingData const& data,
88 ::BlockPos const& pos,
89 ::Block const& block,
90 int radius,
91 ::BreakBlocksComponent const* breakBlocksComponent
92 );
93
94 MCNAPI ::NodeType _classifyDoorNode(
95 ::ActorPathingData const& data,
96 ::Block const& testBlock,
97 ::BlockPos const& testPos,
98 ::BlockPos const& lastPathPos
99 );
100
101 MCNAPI ::NodeType
102 _classifyNode(::ActorPathingData const& data, ::BlockPos const& fromPos, ::BlockPos const& testPos);
103
104 MCNAPI ::NodeType _classifyNode(
105 ::ActorPathingData const& data,
106 ::BlockPos const& lastPathPos,
107 ::Block const& testBlock,
108 ::BlockPos const& testPos,
109 ::CanJumpIntoNode jumpIntoNode,
110 ::CanClimbIntoNode climbIntoNode
111 );
112
113 MCNAPI bool
115
116 MCNAPI ::std::unique_ptr<::Path>
117 _findPath(::ActorPathingData const& actorData, float xt, float yt, float zt, float maxDist);
118
119 MCNAPI ::std::unique_ptr<::Path> _findPath(
120 ::ActorPathingData const& data,
121 ::PathfinderNode* from,
123 ::PathfinderNode const& size,
124 float maxDist
125 );
126
127 MCNAPI ::AABB _getAABBForHeightComputation(::BlockPos const& pos, ::Block const& block) const;
128
129 MCNAPI float _getHeightAboveBlock(::BlockPos const& blockPos, float mobHeight) const;
130
131 MCNAPI float _getHeightBelowBlock(::BlockPos const& blockPos, float mobHeight) const;
132
133 MCNAPI ::std::optional<::BlockPos> _getHighestReachablePosByJumping(
134 ::BlockPos const& originalTargetPos,
135 float maxReachableHeight,
136 ::BlockPos const& actorSize
137 ) const;
138
139 MCNAPI ::ActorPathingData::MinMaxHeightCacheEntry
140 _getMinAndMaxHeightAroundBlock(::ActorPathingData const& data, ::BlockPos const& blockPos, float mobHeight) const;
141
142 MCNAPI int _getNeighbors(
143 ::ActorPathingData const& data,
144 ::PathfinderNode& pos,
145 ::PathfinderNode const& size,
146 ::PathfinderNode const& target,
147 uint maxDistSqr,
148 ::std::bitset<18> const& validPositions
149 );
150
151 MCNAPI ::PathfinderNode* _getNode(::BlockPos const& pos, ::NodeType nodeType);
152
153 MCNAPI ::PathfinderNode* _getNode(
154 ::ActorPathingData const& data,
155 ::BlockPos const& fromPos,
156 ::BlockPos const& blockPos,
157 ::PathfinderNode const& size,
158 float jumpHeight,
159 ::CanClimbIntoNode climbIntoNode
160 );
161
162 MCNAPI ::std::optional<::NodeType> _getPartialBlockNodeType(
163 ::BlockPos const& currentBlockPos,
164 ::BlockPos const& lastBlockPos,
165 ::ActorPathingData const& data
166 );
167
168 MCNAPI float _getPathfindingMalus(::ActorPathingData const& data, ::NodeType nodeType, ::BlockPos const& blockPos);
169
170 MCNAPI ::PathfinderNode* _getUnderneathSupportedNode(
171 ::PathfinderNode* node,
172 ::ActorPathingData const& data,
173 ::BlockPos const& fromPos,
174 ::PathfinderNode const& size,
175 ::CanClimbIntoNode climbIntoNode
176 );
177
178 MCNAPI ::PathfinderNode*
179 _getWaterNode(::ActorPathingData const& data, ::BlockPos const& lastPos, ::BlockPos const& blockPos);
180
181 MCNAPI ::NodeType _isFreeStartNode(
182 ::ActorPathingData const& data,
183 ::AABB const& entityAABB,
184 ::BlockPos const& testPos,
185 ::BlockPos const& size
186 );
187
188 MCNAPI ::NodeType
189 _isFreeWaterNode(::ActorPathingData const& data, ::BlockPos const& lastPos, ::BlockPos const& blockPos);
190
192 ::PathfinderNode const& node,
193 ::PathfinderNode const& target,
194 ::BlockPos const& offset,
195 uint maxDistSqr
196 );
197
198 MCNAPI ::std::unique_ptr<::Path>
199 _reconstructPath(::PathfinderNode* to, ::PathCompletionType completionType, ::ActorUniqueID actorId);
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:102
Definition BlockPos.h:17
Definition BlockSource.h:66
Definition Block.h:37
Definition BreakBlocksComponent.h:12
Definition CachedChunkBlockSource.h:18
Definition IPathBlockSource.h:10
Definition NavigationComponent.h:22
Definition PathFinder.h:33
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 ~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::ActorPathingData::MinMaxHeightCacheEntry _getMinAndMaxHeightAroundBlock(::ActorPathingData const &data, ::BlockPos const &blockPos, float mobHeight) const
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 > _reconstructPath(::PathfinderNode *to, ::PathCompletionType completionType, ::ActorUniqueID actorId)
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 ::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 bool _checkForDamagingBlock(::ActorPathingData const &data, ::BlockPos const &pos, ::Block const &block, int radius, ::BreakBlocksComponent const *breakBlocksComponent)
MCAPI float _getHeightBelowBlock(::BlockPos const &blockPos, float mobHeight) const
MCAPI::NodeType _classifyNode(::ActorPathingData const &data, ::BlockPos const &fromPos, ::BlockPos const &testPos)
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 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:5
Definition Vec3.h:10
Definition ActorPathingData.h:5
Definition ActorUniqueID.h:5
Definition PreferredPathDescription.h:13