21 for (LegoPathActorSet::iterator it = m_actors.begin(); !(it == m_actors.end()); it++) {
22 (*it)->SetBoundary(
NULL);
25 m_actors.erase(m_actors.begin(), m_actors.end());
32 m_actors.insert(p_actor);
41 m_actors.erase(p_actor);
72 else if (dot2 < dot1) {
98 if (newBoundary ==
NULL) {
99 newBoundary = p_boundary;
119 }
while (p_edge != e);
122 MxS32 local8 = local10 - 1;
127 else if (local10 == 2) {
154 if (p_boundary != newBoundary) {
156 p_boundary = newBoundary;
160 p_unk0xe4 = 1.0 - p_unk0xe4;
170 }
while (p_edge != e);
177 p_unk0xe4 = 1.0 - p_unk0xe4;
219 if (local34 >= -0.001 && local34 <= len && (e ==
NULL || local34 < localc)) {
238 p_point3 += p_point1;
245 float local58 = local50.
Dot(local50, local70);
248 if (local58 < 0.0f) {
253 local88->FUN_1002ddc0(*
this, local84);
255 if (local84.
Dot(local84, local70) <= 0.9) {
259 Vector3* local90 = local88->CWVertex(*
this);
263 float local8c = locala4.
Dot(locala4, local84);
265 if (local8c > local58 && local8c < local88->m_unk0x3c) {
280 locala8->FUN_1002ddc0(*
this, localbc);
282 if (localbc.
Dot(localbc, local70) <= 0.9) {
286 Vector3* localc4 = locala8->CWVertex(*
this);
290 float localc0 = locald8.
Dot(locald8, localbc);
292 if (localc0 < local58 && localc0 >= 0.0f) {
302 if (local54 !=
NULL) {
306 if (local58 <= 0.0f) {
317 else if (local58 > 0.0f && e->
m_unk0x3c > local58) {
320 p_point3 += *local5c;
353 if (len > 0.001 && len > local20 * local20) {
368 if (p_presenter !=
NULL) {
378 for (LegoAnimPresenterSet::iterator it = m_presenters.begin(); it != m_presenters.end(); it++) {
379 (*it)->SetCurrentWorld(
NULL);
[AI] Handles playback and synchronization of animated LEGO objects, including variable substitution,...
Mx3DPointFloat m_unk0xa8
[AI] 3D float property, used for animation base position offset.
float m_unk0xa4
[AI] Animation touch radius for path boundary checks and state (set from resource).
[AI] Specialized presenter class for handling locomotion animation playback and state in the LEGO Isl...
[AI] An actor that moves along a predefined path, supporting boundary transitions,...
void SetBoundary(LegoPathBoundary *p_boundary)
[AI] Assigns a new boundary for the actor (for path switching).
virtual MxBool GetUserNavFlag()
[AI] Returns user navigation state (whether actor follows player input).
virtual void VTable0xa4(MxBool &p_und1, MxS32 &p_und2)
[AI] Returns information depending on actor type.
[AI] Represents a path segment or boundary in the navigation network for actors (vehicles,...
void FUN_100575b0(Vector3 &p_point1, Vector3 &p_point2, LegoPathActor *p_actor)
[AI] Handles processing path triggers along this boundary as an actor moves from p_point1 to p_point2...
~LegoPathBoundary() override
[AI] Destructor.
MxU32 FUN_10057fe0(LegoAnimPresenter *p_presenter)
[AI] Adds an animation presenter to the set if within region, based on spatial bounds.
MxResult AddActor(LegoPathActor *p_actor)
[AI] Adds the given actor to this path boundary and sets its boundary pointer.
MxResult RemoveActor(LegoPathActor *p_actor)
[AI] Removes the actor from this boundary's actor set.
MxU32 FUN_100586e0(LegoAnimPresenter *p_presenter)
[AI] Removes an animation presenter from the set, or if nullptr resets all presenters' world associat...
void SwitchBoundary(LegoPathActor *p_actor, LegoPathBoundary *&p_boundary, LegoUnknown100db7f4 *&p_edge, float &p_unk0xe4)
[AI] Switches the boundary that the actor is associated with based on edge traversal.
MxU32 Intersect(float p_scale, Vector3 &p_point1, Vector3 &p_point2, Vector3 &p_point3, LegoUnknown100db7f4 *&p_edge)
[AI] Tests for intersection between a path and this boundary; finds the first edge hit and intersecti...
[AI] Represents a trigger/control element in the LEGO world's path system, linked logically to the wo...
virtual void HandleTrigger(LegoPathActor *p_actor, MxBool p_direction, MxU32 p_data)
[AI] Main trigger handler; evaluates flags and name-based script to decide what action to take when a...
LegoU8 m_numEdges
[AI] Number of edge elements in m_edges; number of sides of the polygon. [AI]
LegoUnknown100db7f4 ** m_edges
[AI] Array of pointers to edge objects (LegoUnknown100db7f4) comprising this face....
float m_unk0x44
[AI] Maximum squared distance from center—polygon bounding radius or similar. [AI]
LegoU8 m_numTriggers
[AI] Number of trigger (path/segment) structures attached to this edge. [AI]
Mx3DPointFloat * m_unk0x50
[AI] Transition direction/unit vector—used for edge trigger geometry. [AI]
Mx4DPointFloat * m_edgeNormals
[AI] Per-edge normals for each polygon segment, allocated dynamically. [AI]
PathWithTrigger * m_pathTrigger
[AI] Array of triggers influencing entity motion or event logic on this edge. [AI]
Mx3DPointFloat m_unk0x30
[AI] Cached center for the edge polygon, used in geometric calculations. [AI]
[AI] Represents a 3D point with floating-point precision, inheriting from Vector3.
virtual float Dot(const float *p_a, const float *p_b) const
[AI] Compute the dot product of the two float arrays interpreted as vectors of 2 elements.
[AI] 3D vector class, providing vector and cross-product operations in 3D space.
float LenSquared() const override
[AI] Computes the squared magnitude (x^2 + y^2 + z^2) of this vector.
#define DECOMP_SIZE_ASSERT(T, S)
#define NULL
[AI] Null pointer value (C/C++ semantics).
#define SUCCESS
[AI] Used to indicate a successful operation in result codes.
Vector3 * CWVertex(LegoWEEdge &p_face)
[AI] Returns the "clockwise" endpoint of this edge with respect to a given face.
LegoEdge * GetCounterclockwiseEdge(LegoWEEdge &p_face)
[AI] Returns the counterclockwise adjacent edge relative to the given face.
LegoEdge * GetClockwiseEdge(LegoWEEdge &p_face)
[AI] Returns the clockwise adjacent edge relative to the given face.
Vector3 * CCWVertex(LegoWEEdge &p_face)
[AI] Returns the "counterclockwise" endpoint of this edge with respect to a given face.
[AI] Represents an advanced edge in the LEGO Island geometry system, with direction,...
LegoU32 GetMask0x03()
[AI] Returns a mask of flags relevant to the two faces (bits 0 and 1: c_bit1, c_bit2).
float m_unk0x3c
[AI] Unknown float; likely represents additional metric (possibly precomputed distance/weight).
LegoU32 BETA_1004a830(LegoWEGEdge &p_face, LegoU8 p_mask)
[AI] Tests whether a WEG-edge meets complex mask and flag criteria for this edge, depending on mask a...
LegoWEEdge * OtherFace(LegoWEEdge *p_other)
[AI] Returns the opposite face pointer to the one passed in.
LegoU32 BETA_100b53b0(LegoWEGEdge &p_face)
[AI] Checks if a WEG-edge is connected to this edge with proper flagging for its side.
LegoResult FUN_1002ddc0(LegoWEEdge &p_f, Vector3 &p_point) const
[AI] Calculates the edge normal for use from the given face, negating it if called from faceA.
LegoPathStruct * m_pathStruct
[AI] Pointer to a path structure associated with this trigger. [AI]