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 ::ll::TypedStorage<1, 1, bool> mCanPassDoors;
54 ::ll::TypedStorage<1, 1, bool> mCanOpenDoors;
55 ::ll::TypedStorage<1, 1, bool> mCanOpenIronDoors;
56 ::ll::TypedStorage<1, 1, bool> mAvoidWater;
57 ::ll::TypedStorage<1, 1, bool> mAvoidDamageBlocks;
58 ::ll::TypedStorage<1, 1, bool> mCanFloat;
59 ::ll::TypedStorage<1, 1, bool> mCanPathOverLava;
60 ::ll::TypedStorage<1, 1, bool> mCanWalkInLava;
61 ::ll::TypedStorage<1, 1, bool> mIsAmphibious;
62 ::ll::TypedStorage<1, 1, bool> mAvoidPortals;
63 ::ll::TypedStorage<1, 1, bool> mCanBreach;
64 ::ll::TypedStorage<1, 1, bool> mCanJump;
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 float _getHeightAboveBlock(::BlockPos const& blockPos, float mobHeight) const;
128
129 MCNAPI float _getHeightBelowBlock(::BlockPos const& blockPos, float mobHeight) const;
130
131 MCNAPI ::std::optional<::BlockPos> _getHighestReachablePosByJumping(
132 ::BlockPos const& originalTargetPos,
133 float maxReachableHeight,
134 ::BlockPos const& actorSize
135 ) const;
136
137 MCNAPI ::ActorPathingData::MinMaxHeightCacheEntry
138 _getMinAndMaxHeightAroundBlock(::ActorPathingData const& data, ::BlockPos const& blockPos, float mobHeight) const;
139
140 MCNAPI int _getNeighbors(
141 ::ActorPathingData const& data,
142 ::PathfinderNode& pos,
143 ::PathfinderNode const& size,
144 ::PathfinderNode const& target,
145 uint maxDistSqr,
146 ::std::bitset<18> const& validPositions
147 );
148
149 MCNAPI ::PathfinderNode* _getNode(::BlockPos const& pos, ::NodeType nodeType);
150
151 MCNAPI ::PathfinderNode* _getNode(
152 ::ActorPathingData const& data,
153 ::BlockPos const& fromPos,
154 ::BlockPos const& blockPos,
155 ::PathfinderNode const& size,
156 float jumpHeight,
157 ::CanClimbIntoNode climbIntoNode
158 );
159
160 MCNAPI ::std::optional<::NodeType> _getPartialBlockNodeType(
161 ::BlockPos const& currentBlockPos,
162 ::BlockPos const& lastBlockPos,
163 ::ActorPathingData const& data
164 );
165
166 MCNAPI float _getPathfindingMalus(::ActorPathingData const& data, ::NodeType nodeType, ::BlockPos const& blockPos);
167
168 MCNAPI ::PathfinderNode* _getUnderneathSupportedNode(
169 ::PathfinderNode* node,
170 ::ActorPathingData const& data,
171 ::BlockPos const& fromPos,
172 ::PathfinderNode const& size,
173 ::CanClimbIntoNode climbIntoNode
174 );
175
176 MCNAPI ::PathfinderNode*
177 _getWaterNode(::ActorPathingData const& data, ::BlockPos const& lastPos, ::BlockPos const& blockPos);
178
179 MCNAPI ::NodeType _isFreeStartNode(
180 ::ActorPathingData const& data,
181 ::AABB const& entityAABB,
182 ::BlockPos const& testPos,
183 ::BlockPos const& size
184 );
185
186 MCNAPI ::NodeType
187 _isFreeWaterNode(::ActorPathingData const& data, ::BlockPos const& lastPos, ::BlockPos const& blockPos);
188
190 ::PathfinderNode const& node,
191 ::PathfinderNode const& target,
192 ::BlockPos const& offset,
193 uint maxDistSqr
194 );
195
196 MCNAPI ::std::unique_ptr<::Path>
197 _reconstructPath(::PathfinderNode* to, ::PathCompletionType completionType, ::ActorUniqueID actorId);
198
199 MCNAPI ::NodeType isFree(
200 ::ActorPathingData const& data,
201 ::BlockPos const& lastPathPos,
202 ::BlockPos const& testPos,
203 ::BlockPos const& size,
204 ::CanJumpIntoNode jumpIntoNode,
205 ::CanClimbIntoNode climbIntoNode
206 );
207
208 MCNAPI ~PathFinder();
209 // NOLINTEND
210
211public:
212 // static functions
213 // NOLINTBEGIN
214 MCNAPI static float _calculateMoveCost(
215 ::ActorPathingData const& data,
216 ::PathfinderNode& start,
217 ::BlockPos const& fromPos,
219 );
220
221 MCNAPI static ::BlockPos _getStartPositionFlyingActor(
222 ::IPathBlockSource const& pathBlockSource,
223 ::BlockPos originalStartPos,
224 bool canFloat,
225 bool canPathOverLava,
226 float yFeetPosition
227 );
228
229 MCNAPI static ::ActorPathingData extractPathingData(
230 ::Actor& mutableActor,
231 ::PathFinder::ExtractionPurpose purpose,
232 ::std::optional<::Vec3> targetPos
233 );
234 // NOLINTEND
235
236public:
237 // static variables
238 // NOLINTBEGIN
239 MCNAPI static ::PreferredPathDescription const& DEFAULT_DESC();
240 // NOLINTEND
241
242public:
243 // constructor thunks
244 // NOLINTBEGIN
245 MCNAPI void* $ctor(::BlockSource& region, ::NavigationComponent const& navigation);
246 // NOLINTEND
247
248public:
249 // destructor thunk
250 // NOLINTBEGIN
251 MCNAPI void $dtor();
252 // NOLINTEND
253};
Definition AABB.h:18
Definition Actor.h:103
Definition BlockPos.h:18
Definition BlockSource.h:67
Definition Block.h:38
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 ::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