mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Library/Collision: Implement PartsConnectorUtil (#722)
This commit is contained in:
parent
f2b32f130c
commit
4f6bf2e236
|
|
@ -232456,187 +232456,187 @@ Library/Collision/PartsConnectorUtil.o:
|
|||
- offset: 0x857b34
|
||||
size: 88
|
||||
label: _ZN2al18createMtxConnectorEPKNS_9LiveActorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857b8c
|
||||
size: 80
|
||||
label: _ZN2al18createMtxConnectorEPKNS_9LiveActorERKN4sead4QuatIfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857bdc
|
||||
size: 124
|
||||
label: _ZN2al21tryCreateMtxConnectorEPKNS_9LiveActorERKNS_13ActorInitInfoE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857c58
|
||||
size: 116
|
||||
label: _ZN2al21tryCreateMtxConnectorEPKNS_9LiveActorERKNS_13ActorInitInfoERKN4sead4QuatIfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857ccc
|
||||
size: 84
|
||||
label: _ZN2al29createCollisionPartsConnectorEPKNS_9LiveActorERKN4sead4QuatIfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857d20
|
||||
size: 132
|
||||
label: _ZN2al32tryCreateCollisionPartsConnectorEPKNS_9LiveActorERKNS_13ActorInitInfoE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857da4
|
||||
size: 120
|
||||
label: _ZN2al32tryCreateCollisionPartsConnectorEPKNS_9LiveActorERKNS_13ActorInitInfoERKN4sead4QuatIfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857e1c
|
||||
size: 12
|
||||
label: _ZN2al24isMtxConnectorConnectingEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857e28
|
||||
size: 12
|
||||
label: _ZN2al22disconnectMtxConnectorEPNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857e34
|
||||
size: 120
|
||||
label: _ZN2al29attachMtxConnectorToCollisionEPNS_12MtxConnectorEPKNS_9LiveActorERKN4sead7Vector3IfEES9_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857eac
|
||||
size: 36
|
||||
label: _ZN2al29attachMtxConnectorToCollisionEPNS_12MtxConnectorEPKNS_9LiveActorEb
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857ed0
|
||||
size: 244
|
||||
label: _ZN2al29attachMtxConnectorToCollisionEPNS_12MtxConnectorEPKNS_9LiveActorEff
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857fc4
|
||||
size: 16
|
||||
label: _ZN2al34attachMtxConnectorToCollisionPartsEPNS_12MtxConnectorEPKNS_14CollisionPartsE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857fd4
|
||||
size: 24
|
||||
label: _ZN2al25setConnectorBaseQuatTransERKN4sead4QuatIfEERKNS0_7Vector3IfEEPNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x857fec
|
||||
size: 68
|
||||
label: _ZN2al25setConnectorBaseQuatTransEPNS_9LiveActorEPNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858030
|
||||
size: 72
|
||||
label: _ZN2al13connectPoseQTEPNS_9LiveActorEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858078
|
||||
size: 92
|
||||
label: _ZN2al13connectPoseQTEPNS_9LiveActorEPKNS_12MtxConnectorERKN4sead4QuatIfEERKNS5_7Vector3IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8580d4
|
||||
size: 48
|
||||
label: _ZN2al16connectPoseTransEPNS_9LiveActorEPKNS_12MtxConnectorERKN4sead7Vector3IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858104
|
||||
size: 72
|
||||
label: _ZN2al14connectPoseMtxEPNS_9LiveActorEPKNS_12MtxConnectorERKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x85814c
|
||||
size: 16
|
||||
label: _ZN2al16calcConnectTransEPN4sead7Vector3IfEEPKNS_12MtxConnectorERKS2_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x85815c
|
||||
size: 52
|
||||
label: _ZN2al16calcConnectTransEPN4sead7Vector3IfEEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858190
|
||||
size: 44
|
||||
label: _ZN2al14calcConnectDirEPN4sead7Vector3IfEEPKNS_12MtxConnectorERKS2_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8581bc
|
||||
size: 24
|
||||
label: _ZN2al13calcConnectQTEPN4sead4QuatIfEEPNS0_7Vector3IfEEPKNS_12MtxConnectorERKS2_RKS5_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8581d4
|
||||
size: 28
|
||||
label: _ZN2al13calcConnectQTEPN4sead4QuatIfEEPNS0_7Vector3IfEEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8581f0
|
||||
size: 16
|
||||
label: _ZN2al14calcConnectMtxEPN4sead8Matrix34IfEEPKNS_12MtxConnectorERKS2_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858200
|
||||
size: 208
|
||||
label: _ZN2al14calcConnectMtxEPN4sead8Matrix34IfEEPKNS_12MtxConnectorERKNS0_4QuatIfEERKNS0_7Vector3IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8582d0
|
||||
size: 636
|
||||
label: _ZN2al31attachMtxConnectorToCollisionRTEPNS_12MtxConnectorEPKNS_9LiveActorEbb
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x85854c
|
||||
size: 560
|
||||
label: _ZN2al31attachMtxConnectorToCollisionQTEPNS_12MtxConnectorEPKNS_9LiveActorEbb
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x85877c
|
||||
size: 56
|
||||
label: _ZN2al25attachMtxConnectorToJointEPNS_12MtxConnectorEPKNS_9LiveActorEPKc
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8587b4
|
||||
size: 312
|
||||
label: _ZN2al25attachMtxConnectorToJointEPNS_12MtxConnectorEPKNS_9LiveActorEPKcRKN4sead7Vector3IfEESB_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8588ec
|
||||
size: 296
|
||||
label: _ZN2al26attachMtxConnectorToMtxPtrEPNS_12MtxConnectorEPKN4sead8Matrix34IfEERKNS2_7Vector3IfEESA_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858a14
|
||||
size: 60
|
||||
label: _ZN2al25attachMtxConnectorToActorEPNS_12MtxConnectorEPKNS_9LiveActorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858a50
|
||||
size: 316
|
||||
label: _ZN2al25attachMtxConnectorToActorEPNS_12MtxConnectorEPKNS_9LiveActorERKN4sead7Vector3IfEES9_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858b8c
|
||||
size: 12
|
||||
label: _ZN2al26attachMtxConnectorToMtxPtrEPNS_12MtxConnectorEPKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858b98
|
||||
size: 228
|
||||
label: _ZN2al26attachMtxConnectorToSensorEPNS_12MtxConnectorEPNS_9HitSensorERKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858c7c
|
||||
size: 232
|
||||
label: _ZN2al29attachSensorConnectorToSensorEPNS_15SensorConnectorEPNS_9HitSensorERKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858d64
|
||||
size: 228
|
||||
label: _ZN2al37attachMtxConnectorToScreenPointTargetEPNS_12MtxConnectorEPNS_17ScreenPointTargetERKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858e48
|
||||
size: 20
|
||||
label: _ZN2al29attachCollisionPartsConnectorEPNS_23CollisionPartsConnectorEPKNS_14CollisionPartsE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858e5c
|
||||
size: 244
|
||||
label: _ZN2al37attachCollisionPartsConnectorToGroundEPNS_23CollisionPartsConnectorEPKNS_9LiveActorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858f50
|
||||
size: 140
|
||||
label: _ZN2al19attachToHitTriangleEPNS_23CollisionPartsConnectorERKNS_8TriangleERKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x858fdc
|
||||
size: 140
|
||||
label: _ZN2al15attachToHitInfoEPNS_23CollisionPartsConnectorERKNS_7HitInfoERKN4sead8Matrix34IfEE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x859068
|
||||
size: 212
|
||||
label: _ZN2al26attachToHitInfoNrmToMinusZEPNS_23CollisionPartsConnectorERKNS_7HitInfoE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x85913c
|
||||
size: 4
|
||||
label: _ZN2al15calcConnectInfoEPKNS_12MtxConnectorEPN4sead7Vector3IfEEPNS3_4QuatIfEES6_RKS5_SB_
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x859140
|
||||
size: 116
|
||||
label: _ZN2al29connectPoseQTUsingConnectInfoEPNS_9LiveActorEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8591b4
|
||||
size: 20
|
||||
label: _ZN2al18getConnectBaseQuatEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
- offset: 0x8591c8
|
||||
size: 20
|
||||
label: _ZN2al19getConnectBaseTransEPKNS_12MtxConnectorE
|
||||
status: NotDecompiled
|
||||
status: Matching
|
||||
Library/Collision/PartsMtxConnector.o:
|
||||
'.text':
|
||||
- offset: 0x8591dc
|
||||
|
|
|
|||
|
|
@ -1,36 +1,110 @@
|
|||
#pragma once
|
||||
|
||||
#include <container/seadPtrArray.h>
|
||||
#include <math/seadVector.h>
|
||||
#include <prim/seadDelegate.h>
|
||||
|
||||
namespace al {
|
||||
struct ArrowHitInfo;
|
||||
class CollisionPartsFilterBase;
|
||||
class CollisionParts;
|
||||
class CollisionCheckInfoBase;
|
||||
struct DiskHitInfo;
|
||||
struct HitInfo;
|
||||
class HitSensor;
|
||||
class ICollisionPartsKeeper;
|
||||
class IUseCollision;
|
||||
class LiveActor;
|
||||
struct SphereHitInfo;
|
||||
class Triangle;
|
||||
class TriangleFilterBase;
|
||||
struct HitInfo;
|
||||
struct ArrowHitInfo;
|
||||
|
||||
bool isFloorCode(const Triangle&, const char*);
|
||||
} // namespace al
|
||||
|
||||
namespace alCollisionUtil {
|
||||
bool getFirstPolyOnArrow(const al::IUseCollision*, sead::Vector3f*, al::Triangle*,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
bool getHitPosAndNormalOnArrow(const al::IUseCollision*, sead::Vector3f*, sead::Vector3f*,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
bool getHitPosOnArrow(const al::IUseCollision*, sead::Vector3f*, const sead::Vector3f&,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
class SphereMoveHitInfo;
|
||||
|
||||
al::ICollisionPartsKeeper* getCollisionPartsKeeper(const al::IUseCollision*);
|
||||
bool isCollisionMoving(const al::HitInfo*);
|
||||
const sead::Vector3f& getCollisionHitPos(const al::HitInfo*);
|
||||
const sead::Vector3f& getCollisionHitNormal(const al::HitInfo*);
|
||||
const sead::Vector3f& getCollisionMovingReaction(const al::HitInfo*);
|
||||
al::HitSensor* getCollisionHitSensor(const al::HitInfo*);
|
||||
al::CollisionParts* getCollisionHitParts(const al::HitInfo*);
|
||||
al::LiveActor* getCollisionHitActor(const al::HitInfo*);
|
||||
s32 checkStrikeSphere(const al::IUseCollision*, const sead::Vector3f&, f32,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
s32 checkStrikeSphereMovingReaction(const al::IUseCollision*, const sead::Vector3f&, f32,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
s32 checkStrikeDisk(const al::IUseCollision*, const sead::Vector3f&, f32, f32,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
s32 checkStrikeArrow(const al::IUseCollision*, const sead::Vector3f& origin,
|
||||
const sead::Vector3f& delta, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
s32 checkStrikeSphereForPlayer(const al::IUseCollision*, const sead::Vector3f&, f32,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
|
||||
const sead::Vector3f& getCollisionHitPos(const al::HitInfo*);
|
||||
const sead::Vector3f& getCollisionHitNormal(const al::HitInfo*);
|
||||
|
||||
bool getFirstPolyOnArrow(const al::IUseCollision*, const al::ArrowHitInfo**, const sead::Vector3f&,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
const al::ArrowHitInfo& getStrikeArrowInfo(const al::IUseCollision*, u32);
|
||||
bool getFirstPolyOnArrow(const al::IUseCollision*, sead::Vector3f*, al::Triangle*,
|
||||
const sead::Vector3f&, const sead::Vector3f&, const char*);
|
||||
bool getFirstPolyOnArrow(const al::IUseCollision*, sead::Vector3f*, al::Triangle*,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
bool getHitPosOnArrow(const al::IUseCollision*, sead::Vector3f*, const sead::Vector3f&,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
bool getHitPosAndNormalOnArrow(const al::IUseCollision*, sead::Vector3f*, sead::Vector3f*,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
bool getHitPosAndNormalAndSensorOnArrow(const al::IUseCollision*, sead::Vector3f*, sead::Vector3f*,
|
||||
al::HitSensor**, const sead::Vector3f&,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
bool getFirstCollisionSensorOnArrow(const al::IUseCollision*, sead::Vector3f*, al::HitSensor**,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
bool getLastCollisionSensorOnArrow(const al::IUseCollision*, sead::Vector3f*, al::HitSensor**,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
bool getLastPolyOnArrow(const al::IUseCollision*, sead::Vector3f*, al::Triangle*,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*, const al::TriangleFilterBase*);
|
||||
bool getLastPolyOnArrow(const al::IUseCollision*, const al::ArrowHitInfo**, const sead::Vector3f&,
|
||||
const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
al::CollisionParts* getStrikeArrowCollisionParts(const al::IUseCollision*, sead::Vector3f*,
|
||||
const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
al::HitSensor* tryGetStrikeArrowCollisionSensor(const al::IUseCollision*, const sead::Vector3f&,
|
||||
const sead::Vector3f&,
|
||||
const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
s32 getStrikeArrowInfoNum(const al::IUseCollision*);
|
||||
const al::SphereHitInfo& getStrikeSphereInfo(const al::IUseCollision*, u32);
|
||||
s32 getStrikeSphereInfoNum(const al::IUseCollision*);
|
||||
const sead::Vector3f& getStrikeSphereHitPos(const al::IUseCollision*, u32);
|
||||
const al::DiskHitInfo& getStrikeDiskInfo(const al::IUseCollision*, u32);
|
||||
s32 getStrikeDiskInfoNum(const al::IUseCollision*);
|
||||
const sead::Vector3f& getStrikeDiskHitPos(const al::IUseCollision*, u32);
|
||||
bool isInvalidParts(const al::CollisionParts&, const al::CollisionCheckInfoBase&);
|
||||
bool isFarAway(const al::CollisionParts&, const sead::Vector3f&, f32);
|
||||
s32 checkStrikeSphereMove(const al::IUseCollision*, SphereMoveHitInfo*, s32, const sead::Vector3f&,
|
||||
f32, const sead::Vector3f&, const al::CollisionPartsFilterBase*,
|
||||
const al::TriangleFilterBase*);
|
||||
void searchCollisionParts(const al::IUseCollision*, const sead::Vector3f&, f32,
|
||||
sead::IDelegate1<al::CollisionParts*>&,
|
||||
const al::CollisionPartsFilterBase*);
|
||||
void validateCollisionPartsPtrArray(const al::IUseCollision*, sead::PtrArray<al::CollisionParts>*);
|
||||
void invalidateCollisionPartsPtrArray(const al::IUseCollision*);
|
||||
sead::PtrArray<al::CollisionParts>* getCollisionPartsPtrArray(const al::IUseCollision*);
|
||||
|
||||
} // namespace alCollisionUtil
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ public:
|
|||
const sead::Matrix34f& getBaseInvMtx() const;
|
||||
const sead::Matrix34f& getPrevBaseMtx() const;
|
||||
|
||||
const CollisionParts* getCollisionParts() const { return mCollisionParts; }
|
||||
|
||||
// clang-format off
|
||||
friend bool ::operator==(const Triangle& lhs, const Triangle& rhs);
|
||||
friend bool ::operator!=(const Triangle& lhs, const Triangle& rhs);
|
||||
|
|
|
|||
|
|
@ -198,12 +198,12 @@ public:
|
|||
|
||||
class CollisionPartsFilterActor : public CollisionPartsFilterBase {
|
||||
public:
|
||||
CollisionPartsFilterActor(LiveActor* actor) : mActor(actor) {}
|
||||
CollisionPartsFilterActor(const LiveActor* actor) : mActor(actor) {}
|
||||
|
||||
bool isInvalidParts(CollisionParts* collisionParts) override;
|
||||
|
||||
private:
|
||||
LiveActor* mActor;
|
||||
const LiveActor* mActor;
|
||||
bool mIsCompareEqual = true;
|
||||
};
|
||||
|
||||
|
|
|
|||
378
lib/al/Library/Collision/PartsConnectorUtil.cpp
Normal file
378
lib/al/Library/Collision/PartsConnectorUtil.cpp
Normal file
|
|
@ -0,0 +1,378 @@
|
|||
#include "Library/Collision/PartsConnectorUtil.h"
|
||||
|
||||
#include "Library/Collision/CollisionParts.h"
|
||||
#include "Library/Collision/CollisionPartsKeeperUtil.h"
|
||||
#include "Library/Collision/CollisionPartsTriangle.h"
|
||||
#include "Library/Collision/KCollisionServer.h"
|
||||
#include "Library/Collision/PartsConnector.h"
|
||||
#include "Library/Collision/PartsMtxConnector.h"
|
||||
#include "Library/Collision/SensorConnector.h"
|
||||
#include "Library/LiveActor/ActorModelFunction.h"
|
||||
#include "Library/LiveActor/ActorPoseUtil.h"
|
||||
#include "Library/LiveActor/LiveActor.h"
|
||||
#include "Library/Math/MathUtil.h"
|
||||
#include "Library/Matrix/MatrixUtil.h"
|
||||
#include "Library/Placement/PlacementFunction.h"
|
||||
#include "Library/Screen/ScreenPointTarget.h"
|
||||
#include "Project/HitSensor/HitSensor.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
inline bool IsConnectToCollision(const ActorInitInfo& initInfo) {
|
||||
bool isConnectToCollision = false;
|
||||
|
||||
if (!al::tryGetArg(&isConnectToCollision, initInfo, "IsConnectToCollision"))
|
||||
return false;
|
||||
|
||||
return isConnectToCollision;
|
||||
}
|
||||
|
||||
MtxConnector* createMtxConnector(const LiveActor* actor) {
|
||||
return new MtxConnector(getQuat(actor), getTrans(actor));
|
||||
}
|
||||
|
||||
MtxConnector* createMtxConnector(const LiveActor* actor, const sead::Quatf& quat) {
|
||||
return new MtxConnector(quat, getTrans(actor));
|
||||
}
|
||||
|
||||
MtxConnector* tryCreateMtxConnector(const LiveActor* actor, const ActorInitInfo& initInfo) {
|
||||
return IsConnectToCollision(initInfo) ? createMtxConnector(actor) : nullptr;
|
||||
}
|
||||
|
||||
MtxConnector* tryCreateMtxConnector(const LiveActor* actor, const ActorInitInfo& initInfo,
|
||||
const sead::Quatf& quat) {
|
||||
return IsConnectToCollision(initInfo) ? createMtxConnector(actor, quat) : nullptr;
|
||||
}
|
||||
|
||||
CollisionPartsConnector* createCollisionPartsConnector(const LiveActor* actor,
|
||||
const sead::Quatf& quat) {
|
||||
CollisionPartsConnector* connector = new CollisionPartsConnector();
|
||||
connector->setBaseQuatTrans(quat, getTrans(actor));
|
||||
return connector;
|
||||
}
|
||||
|
||||
CollisionPartsConnector* tryCreateCollisionPartsConnector(const LiveActor* actor,
|
||||
const ActorInitInfo& initInfo) {
|
||||
return tryCreateCollisionPartsConnector(actor, initInfo, getQuat(actor));
|
||||
}
|
||||
|
||||
CollisionPartsConnector* tryCreateCollisionPartsConnector(const LiveActor* actor,
|
||||
const ActorInitInfo& initInfo,
|
||||
const sead::Quatf& quat) {
|
||||
return IsConnectToCollision(initInfo) ? createCollisionPartsConnector(actor, quat) : nullptr;
|
||||
}
|
||||
|
||||
bool isMtxConnectorConnecting(const MtxConnector* connector) {
|
||||
return connector->isConnecting();
|
||||
}
|
||||
|
||||
void disconnectMtxConnector(MtxConnector* connector) {
|
||||
return connector->clear();
|
||||
}
|
||||
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* connector, const LiveActor* actor,
|
||||
const sead::Vector3f& pos,
|
||||
const sead::Vector3f& dir) {
|
||||
CollisionPartsFilterActor partsFilter = CollisionPartsFilterActor(actor);
|
||||
CollisionParts* parts = alCollisionUtil::getStrikeArrowCollisionParts(actor, nullptr, pos, dir,
|
||||
&partsFilter, nullptr);
|
||||
if (!parts)
|
||||
return nullptr;
|
||||
|
||||
attachMtxConnectorToCollisionParts(connector, parts);
|
||||
return parts;
|
||||
}
|
||||
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* connector, const LiveActor* actor,
|
||||
bool isAttachToGround) {
|
||||
return attachMtxConnectorToCollision(connector, actor, 50.0f,
|
||||
isAttachToGround ? -150.0f : 150.0f);
|
||||
}
|
||||
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* connector, const LiveActor* actor,
|
||||
f32 checkOffUp, f32 checkDistance) {
|
||||
sead::Vector3f upDir;
|
||||
calcUpDir(&upDir, actor);
|
||||
|
||||
sead::Vector3f dir = upDir * -checkDistance;
|
||||
sead::Vector3f pos = getTrans(actor) + upDir * checkOffUp;
|
||||
return attachMtxConnectorToCollision(connector, actor, pos, dir);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToCollisionParts(MtxConnector* connector, const CollisionParts* parts) {
|
||||
connector->init(&parts->getBaseMtx(), parts->getBaseInvMtx());
|
||||
}
|
||||
|
||||
void setConnectorBaseQuatTrans(const sead::Quatf& quat, const sead::Vector3f& trans,
|
||||
MtxConnector* connector) {
|
||||
connector->setBaseQuatTrans(quat, trans);
|
||||
}
|
||||
|
||||
void setConnectorBaseQuatTrans(LiveActor* actor, MtxConnector* connector) {
|
||||
connector->setBaseQuatTrans(getQuat(actor), getTrans(actor));
|
||||
}
|
||||
|
||||
void connectPoseQT(LiveActor* actor, const MtxConnector* connector) {
|
||||
calcConnectQT(getQuatPtr(actor), getTransPtr(actor), connector);
|
||||
}
|
||||
|
||||
void connectPoseQT(LiveActor* actor, const MtxConnector* connector, const sead::Quatf& quat,
|
||||
const sead::Vector3f& trans) {
|
||||
calcConnectQT(getQuatPtr(actor), getTransPtr(actor), connector, quat, trans);
|
||||
}
|
||||
|
||||
void connectPoseTrans(LiveActor* actor, const MtxConnector* connector,
|
||||
const sead::Vector3f& trans) {
|
||||
calcConnectTrans(getTransPtr(actor), connector, trans);
|
||||
}
|
||||
|
||||
void connectPoseMtx(LiveActor* actor, const MtxConnector* connector, const sead::Matrix34f& mtx) {
|
||||
sead::Matrix34f poseMtx;
|
||||
calcConnectMtx(&poseMtx, connector, mtx);
|
||||
normalize(&poseMtx);
|
||||
updatePoseMtx(actor, &poseMtx);
|
||||
}
|
||||
|
||||
void calcConnectTrans(sead::Vector3f* outTrans, const MtxConnector* connector,
|
||||
const sead::Vector3f& trans) {
|
||||
connector->multTrans(outTrans, trans);
|
||||
}
|
||||
|
||||
void calcConnectTrans(sead::Vector3f* outTrans, const MtxConnector* connector) {
|
||||
calcConnectTrans(outTrans, connector, connector->getBaseTrans());
|
||||
}
|
||||
|
||||
void calcConnectDir(sead::Vector3f* outDir, const MtxConnector* connector,
|
||||
const sead::Vector3f& dir) {
|
||||
connector->multVec(outDir, dir);
|
||||
normalize(outDir);
|
||||
}
|
||||
|
||||
void calcConnectQT(sead::Quatf* outQuat, sead::Vector3f* outTrans, const MtxConnector* connector,
|
||||
const sead::Quatf& poseQuat, const sead::Vector3f& poseTrans) {
|
||||
connector->multQT(outQuat, outTrans, poseQuat, poseTrans);
|
||||
}
|
||||
|
||||
void calcConnectQT(sead::Quatf* outQuat, sead::Vector3f* outTrans, const MtxConnector* connector) {
|
||||
connector->multQT(outQuat, outTrans, nullptr);
|
||||
}
|
||||
|
||||
void calcConnectMtx(sead::Matrix34f* outMtx, const MtxConnector* connector,
|
||||
const sead::Matrix34f& mtx) {
|
||||
connector->multMtx(outMtx, mtx);
|
||||
}
|
||||
|
||||
void calcConnectMtx(sead::Matrix34f* outMtx, const MtxConnector* connector, const sead::Quatf& quat,
|
||||
const sead::Vector3f& trans) {
|
||||
sead::Matrix34f mtx;
|
||||
mtx.makeQT(quat, trans);
|
||||
calcConnectMtx(outMtx, connector, mtx);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToCollisionRT(MtxConnector* connector, const LiveActor* actor,
|
||||
bool isFacingUp, bool useStrikeArrowPos) {
|
||||
sead::Vector3f facingDir;
|
||||
calcUpDir(&facingDir, actor);
|
||||
if (!isFacingUp)
|
||||
facingDir = -facingDir;
|
||||
|
||||
sead::Vector3f dir = facingDir * 150.0f;
|
||||
sead::Vector3f pos = getTrans(actor) - facingDir * 50.0f;
|
||||
|
||||
CollisionPartsFilterActor partsFilter = CollisionPartsFilterActor(actor);
|
||||
sead::Vector3f arrowPos;
|
||||
CollisionParts* parts = alCollisionUtil::getStrikeArrowCollisionParts(
|
||||
actor, &arrowPos, pos, dir, &partsFilter, nullptr);
|
||||
if (!parts)
|
||||
return;
|
||||
|
||||
const sead::Vector3f& rotate = getRotate(actor);
|
||||
sead::Matrix34f mtx;
|
||||
mtx.makeRT({sead::Mathf::deg2rad(rotate.x), sead::Mathf::deg2rad(rotate.y),
|
||||
sead::Mathf::deg2rad(rotate.z)},
|
||||
useStrikeArrowPos ? arrowPos : getTrans(actor));
|
||||
connector->init(&parts->getBaseMtx(), parts->getBaseInvMtx() * mtx);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToCollisionQT(MtxConnector* connector, const LiveActor* actor,
|
||||
bool isFacingUp, bool useStrikeArrowPos) {
|
||||
sead::Vector3f facingDir;
|
||||
calcUpDir(&facingDir, actor);
|
||||
if (!isFacingUp)
|
||||
facingDir = -facingDir;
|
||||
|
||||
sead::Vector3f dir = facingDir * 150.0f;
|
||||
sead::Vector3f pos = getTrans(actor) - facingDir * 50.0f;
|
||||
|
||||
CollisionPartsFilterActor partsFilter = CollisionPartsFilterActor(actor);
|
||||
sead::Vector3f arrowPos;
|
||||
CollisionParts* parts = alCollisionUtil::getStrikeArrowCollisionParts(
|
||||
actor, &arrowPos, pos, dir, &partsFilter, nullptr);
|
||||
if (!parts)
|
||||
return;
|
||||
|
||||
sead::Matrix34f mtx;
|
||||
mtx.makeQT(getQuat(actor), useStrikeArrowPos ? arrowPos : getTrans(actor));
|
||||
connector->init(&parts->getBaseMtx(), parts->getBaseInvMtx() * mtx);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToJoint(MtxConnector* connector, const LiveActor* actor,
|
||||
const char* jointName) {
|
||||
attachMtxConnectorToMtxPtr(connector, getJointMtxPtr(actor, jointName));
|
||||
}
|
||||
|
||||
void attachMtxConnectorToJoint(MtxConnector* connector, const LiveActor* actor,
|
||||
const char* jointName, const sead::Vector3f& rotation,
|
||||
const sead::Vector3f& trans) {
|
||||
attachMtxConnectorToMtxPtr(connector, getJointMtxPtr(actor, jointName), rotation, trans);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToMtxPtr(MtxConnector* connector, const sead::Matrix34f* mtx,
|
||||
const sead::Vector3f& rotation, const sead::Vector3f& trans) {
|
||||
sead::Quatf quat;
|
||||
quat.setRPY(sead::Mathf::deg2rad(rotation.x), sead::Mathf::deg2rad(rotation.y),
|
||||
sead::Mathf::deg2rad(rotation.z));
|
||||
connector->setBaseQuatTrans(quat, trans);
|
||||
attachMtxConnectorToMtxPtr(connector, mtx);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToActor(MtxConnector* connector, const LiveActor* actor) {
|
||||
attachMtxConnectorToMtxPtr(connector, actor->getBaseMtx());
|
||||
}
|
||||
|
||||
void attachMtxConnectorToActor(MtxConnector* connector, const LiveActor* actor,
|
||||
const sead::Vector3f& rotation, const sead::Vector3f& trans) {
|
||||
attachMtxConnectorToMtxPtr(connector, actor->getBaseMtx(), rotation, trans);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToMtxPtr(MtxConnector* connector, const sead::Matrix34f* mtx) {
|
||||
connector->init(mtx, sead::Matrix34f::ident);
|
||||
}
|
||||
|
||||
void attachMtxConnectorToSensor(MtxConnector* connector, HitSensor* hitSensor,
|
||||
const sead::Matrix34f& mtx) {
|
||||
const sead::Matrix34f* followMtx = hitSensor->getFollowMtx();
|
||||
if (followMtx) {
|
||||
sead::Matrix34f newMtx;
|
||||
newMtx.setInverse(*followMtx);
|
||||
newMtx = newMtx * mtx;
|
||||
connector->init(followMtx, newMtx);
|
||||
return;
|
||||
}
|
||||
|
||||
if (hitSensor->getParentActor()->getBaseMtx()) {
|
||||
const sead::Matrix34f* baseMtx = hitSensor->getParentActor()->getBaseMtx();
|
||||
if (baseMtx) {
|
||||
sead::Matrix34f newMtx;
|
||||
newMtx.setInverse(*baseMtx);
|
||||
newMtx = newMtx * mtx;
|
||||
connector->init(baseMtx, newMtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void attachSensorConnectorToSensor(SensorConnector* connector, HitSensor* hitSensor,
|
||||
const sead::Matrix34f& mtx) {
|
||||
const sead::Matrix34f* followMtx = hitSensor->getFollowMtx();
|
||||
if (followMtx) {
|
||||
sead::Matrix34f newMtx;
|
||||
newMtx.setInverse(*followMtx);
|
||||
newMtx = newMtx * mtx;
|
||||
connector->init(followMtx, newMtx, hitSensor);
|
||||
return;
|
||||
}
|
||||
|
||||
if (hitSensor->getParentActor()->getBaseMtx()) {
|
||||
const sead::Matrix34f* baseMtx = hitSensor->getParentActor()->getBaseMtx();
|
||||
if (baseMtx) {
|
||||
sead::Matrix34f newMtx;
|
||||
newMtx.setInverse(*baseMtx);
|
||||
newMtx = newMtx * mtx;
|
||||
connector->init(baseMtx, newMtx, hitSensor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void attachMtxConnectorToScreenPointTarget(MtxConnector* connector,
|
||||
ScreenPointTarget* screenPointTarget,
|
||||
const sead::Matrix34f& mtx) {
|
||||
const sead::Matrix34f* followMtx = screenPointTarget->getJointMtx();
|
||||
if (followMtx) {
|
||||
sead::Matrix34f newMtx;
|
||||
newMtx.setInverse(*followMtx);
|
||||
newMtx = newMtx * mtx;
|
||||
connector->init(followMtx, newMtx);
|
||||
return;
|
||||
}
|
||||
|
||||
if (screenPointTarget->getActor()->getBaseMtx()) {
|
||||
const sead::Matrix34f* baseMtx = screenPointTarget->getActor()->getBaseMtx();
|
||||
if (baseMtx) {
|
||||
sead::Matrix34f newMtx;
|
||||
newMtx.setInverse(*baseMtx);
|
||||
newMtx = newMtx * mtx;
|
||||
connector->init(baseMtx, newMtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void attachCollisionPartsConnector(CollisionPartsConnector* partsConnector,
|
||||
const CollisionParts* parts) {
|
||||
partsConnector->init(&parts->getBaseMtx(), parts->getBaseInvMtx(), parts);
|
||||
}
|
||||
|
||||
void attachCollisionPartsConnectorToGround(CollisionPartsConnector* partsConnector,
|
||||
const LiveActor* actor) {
|
||||
// Same as attachMtxConnectorToCollision(connector, actor, true)
|
||||
CollisionPartsFilterActor partsFilter = CollisionPartsFilterActor(actor);
|
||||
sead::Vector3f upDir{0.0f, 0.0f, 0.0f};
|
||||
calcUpDir(&upDir, actor);
|
||||
CollisionParts* parts = alCollisionUtil::getStrikeArrowCollisionParts(
|
||||
actor, nullptr, getTrans(actor) + upDir * 50.0f, upDir * -150.0f, &partsFilter, nullptr);
|
||||
attachCollisionPartsConnector(partsConnector, parts);
|
||||
}
|
||||
|
||||
void attachToHitTriangle(CollisionPartsConnector* partsConnector, const Triangle& triangle,
|
||||
const sead::Matrix34f& mtx) {
|
||||
const CollisionParts* collisionParts = triangle.getCollisionParts();
|
||||
sead::Matrix34f partsMtx = collisionParts->getBaseInvMtx() * mtx;
|
||||
partsConnector->init(&collisionParts->getBaseMtx(), partsMtx, collisionParts);
|
||||
}
|
||||
|
||||
void attachToHitInfo(CollisionPartsConnector* partsConnector, const HitInfo& hitInfo,
|
||||
const sead::Matrix34f& mtx) {
|
||||
attachToHitTriangle(partsConnector, hitInfo.triangle, mtx);
|
||||
}
|
||||
|
||||
void attachToHitInfoNrmToMinusZ(CollisionPartsConnector* partsConnector, const HitInfo& hitInfo) {
|
||||
sead::Matrix34f mtx;
|
||||
makeMtxFrontNoSupportPos(&mtx, -hitInfo.triangle.getFaceNormal(), hitInfo.collisionHitPos);
|
||||
attachToHitInfo(partsConnector, hitInfo, mtx);
|
||||
}
|
||||
|
||||
void calcConnectInfo(const MtxConnector* connector, sead::Vector3f* outTrans, sead::Quatf* outQuat,
|
||||
sead::Vector3f* outScale, const sead::Vector3f& vecA,
|
||||
const sead::Vector3f& vecB) {
|
||||
connector->calcConnectInfo(outTrans, outQuat, outScale, vecA, vecB);
|
||||
}
|
||||
|
||||
void connectPoseQTUsingConnectInfo(LiveActor* actor, const MtxConnector* connector) {
|
||||
if (!connector->isConnecting())
|
||||
return;
|
||||
|
||||
sead::Vector3f trans;
|
||||
sead::Quatf quat;
|
||||
connector->calcConnectInfo(&trans, &quat, nullptr, sead::Vector3f::zero, sead::Vector3f::zero);
|
||||
setTrans(actor, trans);
|
||||
setQuat(actor, quat);
|
||||
}
|
||||
|
||||
const sead::Quatf& getConnectBaseQuat(const MtxConnector* connector) {
|
||||
return connector->getBaseQuat();
|
||||
}
|
||||
|
||||
const sead::Vector3f& getConnectBaseTrans(const MtxConnector* connector) {
|
||||
return connector->getBaseTrans();
|
||||
}
|
||||
|
||||
} // namespace al
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadMatrix.h>
|
||||
#include <math/seadQuat.h>
|
||||
#include <math/seadVector.h>
|
||||
|
||||
|
|
@ -7,32 +9,92 @@ namespace al {
|
|||
struct ActorInitInfo;
|
||||
class CollisionParts;
|
||||
class CollisionPartsConnector;
|
||||
struct HitInfo;
|
||||
class HitSensor;
|
||||
class LiveActor;
|
||||
class MtxConnector;
|
||||
class ScreenPointTarget;
|
||||
class SensorConnector;
|
||||
class Triangle;
|
||||
|
||||
MtxConnector* createMtxConnector(const LiveActor* actor);
|
||||
MtxConnector* createMtxConnector(const LiveActor* actor, const sead::Quatf& quat);
|
||||
MtxConnector* tryCreateMtxConnector(const LiveActor* actor, const ActorInitInfo& initInfo);
|
||||
MtxConnector* tryCreateMtxConnector(const LiveActor* actor, const ActorInitInfo& initInfo,
|
||||
const sead::Quatf& quat);
|
||||
CollisionPartsConnector* createCollisionPartsConnector(const LiveActor* actor,
|
||||
const sead::Quatf& quat);
|
||||
MtxConnector* createMtxConnector(const LiveActor* actor);
|
||||
MtxConnector* tryCreateMtxConnector(const LiveActor* actor, const ActorInitInfo& info);
|
||||
void attachMtxConnectorToCollision(MtxConnector* mtxConnector, const LiveActor* actor, bool);
|
||||
void attachMtxConnectorToCollision(MtxConnector* mtxConnector, const LiveActor* actor,
|
||||
const sead::Vector3f&, const sead::Vector3f&);
|
||||
void attachMtxConnectorToCollisionParts(MtxConnector* mtxConnector,
|
||||
const CollisionParts* collisionParts);
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* mtxConnector, const LiveActor* actor,
|
||||
f32, f32);
|
||||
void connectPoseQT(LiveActor* actor, const MtxConnector* mtxConnector, const sead::Quatf& quat,
|
||||
const sead::Vector3f& trans);
|
||||
void connectPoseQT(LiveActor* actor, const MtxConnector* mtxConnector);
|
||||
void attachMtxConnectorToJoint(MtxConnector* mtxConnector, const LiveActor* actor,
|
||||
const char* jointName);
|
||||
void attachMtxConnectorToJoint(MtxConnector* mtxConnector, const LiveActor* actor,
|
||||
const char* jointName, const sead::Vector3f& quatInitVec,
|
||||
const sead::Vector3f& trans);
|
||||
void disconnectMtxConnector(MtxConnector* mtxConnector);
|
||||
bool isMtxConnectorConnecting(const MtxConnector* mtxConnector);
|
||||
void calcConnectTrans(sead::Vector3f* connectTrans, const MtxConnector* mtxConnector);
|
||||
CollisionPartsConnector* tryCreateCollisionPartsConnector(const LiveActor* actor,
|
||||
const ActorInitInfo& initInfo);
|
||||
CollisionPartsConnector* tryCreateCollisionPartsConnector(const LiveActor* actor,
|
||||
const ActorInitInfo& initInfo,
|
||||
const sead::Quatf& quat);
|
||||
bool isMtxConnectorConnecting(const MtxConnector* connector);
|
||||
void disconnectMtxConnector(MtxConnector* connector);
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* connector, const LiveActor* actor,
|
||||
const sead::Vector3f& pos, const sead::Vector3f& dir);
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* connector, const LiveActor* actor,
|
||||
bool isAttachToGround);
|
||||
CollisionParts* attachMtxConnectorToCollision(MtxConnector* connector, const LiveActor* actor,
|
||||
f32 checkOffUp, f32 checkDistance);
|
||||
void attachMtxConnectorToCollisionParts(MtxConnector* connector, const CollisionParts* parts);
|
||||
void setConnectorBaseQuatTrans(const sead::Quatf& quat, const sead::Vector3f& trans,
|
||||
MtxConnector* mtxConnector);
|
||||
MtxConnector* connector);
|
||||
void setConnectorBaseQuatTrans(LiveActor* actor, MtxConnector* connector);
|
||||
void connectPoseQT(LiveActor* actor, const MtxConnector* connector);
|
||||
void connectPoseQT(LiveActor* actor, const MtxConnector* connector, const sead::Quatf& quat,
|
||||
const sead::Vector3f& trans);
|
||||
void connectPoseTrans(LiveActor* actor, const MtxConnector* connector, const sead::Vector3f& trans);
|
||||
void connectPoseMtx(LiveActor* actor, const MtxConnector* connector, const sead::Matrix34f& mtx);
|
||||
void calcConnectTrans(sead::Vector3f* outTrans, const MtxConnector* connector,
|
||||
const sead::Vector3f& trans);
|
||||
void calcConnectTrans(sead::Vector3f* outTrans, const MtxConnector* connector);
|
||||
void calcConnectDir(sead::Vector3f* outDir, const MtxConnector* connector,
|
||||
const sead::Vector3f& dir);
|
||||
void calcConnectQT(sead::Quatf* outQuat, sead::Vector3f* outTrans, const MtxConnector* connector,
|
||||
const sead::Quatf& poseQuat, const sead::Vector3f& poseTrans);
|
||||
void calcConnectQT(sead::Quatf* outQuat, sead::Vector3f* outTrans, const MtxConnector* connector);
|
||||
void calcConnectMtx(sead::Matrix34f* outMtx, const MtxConnector* connector,
|
||||
const sead::Matrix34f& mtx);
|
||||
void calcConnectMtx(sead::Matrix34f* outMtx, const MtxConnector* connector, const sead::Quatf& quat,
|
||||
const sead::Vector3f& trans);
|
||||
void attachMtxConnectorToCollisionRT(MtxConnector* connector, const LiveActor* actor,
|
||||
bool isFacingUp, bool useStrikeArrowPos);
|
||||
void attachMtxConnectorToCollisionQT(MtxConnector* connector, const LiveActor* actor,
|
||||
bool isFacingUp, bool useStrikeArrowPos);
|
||||
void attachMtxConnectorToJoint(MtxConnector* connector, const LiveActor* actor,
|
||||
const char* jointName);
|
||||
void attachMtxConnectorToJoint(MtxConnector* connector, const LiveActor* actor,
|
||||
const char* jointName, const sead::Vector3f& rotation,
|
||||
const sead::Vector3f& trans);
|
||||
void attachMtxConnectorToMtxPtr(MtxConnector* connector, const sead::Matrix34f* mtx,
|
||||
const sead::Vector3f& rotation, const sead::Vector3f& trans);
|
||||
void attachMtxConnectorToActor(MtxConnector* connector, const LiveActor* actor);
|
||||
void attachMtxConnectorToActor(MtxConnector* connector, const LiveActor* actor,
|
||||
const sead::Vector3f& rotation, const sead::Vector3f& trans);
|
||||
void attachMtxConnectorToMtxPtr(MtxConnector* connector, const sead::Matrix34f* mtx);
|
||||
void attachMtxConnectorToSensor(MtxConnector* connector, HitSensor* hitSensor,
|
||||
const sead::Matrix34f& mtx);
|
||||
void attachSensorConnectorToSensor(SensorConnector* connector, HitSensor* hitSensor,
|
||||
const sead::Matrix34f& mtx);
|
||||
void attachMtxConnectorToScreenPointTarget(MtxConnector* connector,
|
||||
ScreenPointTarget* screenPointTarget,
|
||||
const sead::Matrix34f& mtx);
|
||||
void attachCollisionPartsConnector(CollisionPartsConnector* partsConnector,
|
||||
const CollisionParts* parts);
|
||||
void attachCollisionPartsConnectorToGround(CollisionPartsConnector* partsConnector,
|
||||
const LiveActor* actor);
|
||||
void attachToHitTriangle(CollisionPartsConnector* partsConnector, const Triangle& triangle,
|
||||
const sead::Matrix34f& mtx);
|
||||
void attachToHitInfo(CollisionPartsConnector* partsConnector, const HitInfo& hitInfo,
|
||||
const sead::Matrix34f& mtx);
|
||||
void attachToHitInfoNrmToMinusZ(CollisionPartsConnector* partsConnector, const HitInfo& hitInfo);
|
||||
// TODO: Rename vecA and vecB
|
||||
void calcConnectInfo(const MtxConnector* connector, sead::Vector3f* outTrans, sead::Quatf* outQuat,
|
||||
sead::Vector3f* outScale, const sead::Vector3f& vecA,
|
||||
const sead::Vector3f& vecB);
|
||||
void connectPoseQTUsingConnectInfo(LiveActor* actor, const MtxConnector* connector);
|
||||
const sead::Quatf& getConnectBaseQuat(const MtxConnector* connector);
|
||||
const sead::Vector3f& getConnectBaseTrans(const MtxConnector* connector);
|
||||
|
||||
} // namespace al
|
||||
|
|
|
|||
26
lib/al/Library/Collision/SensorConnector.h
Normal file
26
lib/al/Library/Collision/SensorConnector.h
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include <math/seadMatrix.h>
|
||||
|
||||
#include "Library/Collision/PartsMtxConnector.h"
|
||||
|
||||
namespace al {
|
||||
class HitSensor;
|
||||
|
||||
class SensorConnector : public MtxConnector {
|
||||
public:
|
||||
SensorConnector();
|
||||
|
||||
bool isConnecting() const override;
|
||||
void clear() override;
|
||||
|
||||
void init(const sead::Matrix34f*, const sead::Matrix34f&, HitSensor*);
|
||||
HitSensor* getConnectingSensor() const;
|
||||
|
||||
private:
|
||||
HitSensor* mHitSensor;
|
||||
};
|
||||
|
||||
static_assert(sizeof(SensorConnector) == 0x68);
|
||||
|
||||
} // namespace al
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadMatrix.h>
|
||||
#include <math/seadVector.h>
|
||||
|
||||
namespace al {
|
||||
class LiveActor;
|
||||
class ParameterObj;
|
||||
class ScreenPointCheckGroup;
|
||||
|
||||
class ScreenPointTarget {
|
||||
public:
|
||||
|
|
@ -27,9 +30,19 @@ public:
|
|||
|
||||
ParameterObj* getParameterObj() const { return mParameterObj; }
|
||||
|
||||
sead::Matrix34f* getJointMtx() const { return mJointMtx; }
|
||||
|
||||
LiveActor* getActor() const { return mActor; }
|
||||
|
||||
private:
|
||||
void* filler;
|
||||
ParameterObj* mParameterObj;
|
||||
char filler2[0x60];
|
||||
char filler2[0x28];
|
||||
sead::Vector3f* _38;
|
||||
sead::Matrix34f* mJointMtx;
|
||||
sead::Vector3f _48;
|
||||
sead::Vector3f _54;
|
||||
LiveActor* mActor;
|
||||
ScreenPointCheckGroup* mCheckGroup;
|
||||
};
|
||||
} // namespace al
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
#include <math/seadVector.h>
|
||||
|
||||
namespace al {
|
||||
class LiveActor;
|
||||
class HitSensor;
|
||||
class HitSensorDirectror;
|
||||
class HitSensorKeeper;
|
||||
class LiveActor;
|
||||
class SensorHitGroup;
|
||||
class HitSensor;
|
||||
|
||||
using SensorSortCmpFunc = bool (*)(HitSensor* a, HitSensor* b);
|
||||
|
||||
|
|
@ -70,6 +70,8 @@ public:
|
|||
|
||||
LiveActor* getParentActor() const { return mParentActor; }
|
||||
|
||||
const sead::Matrix34f* getFollowMtx() const { return mFollowMtx; }
|
||||
|
||||
void scaleY(f32 scaleY) {
|
||||
mRadius *= scaleY;
|
||||
mFollowPosOffset.y *= scaleY;
|
||||
|
|
|
|||
|
|
@ -314,6 +314,8 @@ def common_const_reference(c, path):
|
|||
continue
|
||||
if "sead::IDelegate1<CollisionParts*>" in line:
|
||||
continue
|
||||
if "sead::IDelegate1<al::CollisionParts*>" in line:
|
||||
continue
|
||||
if re.search(r"(?<!const)[( ][\w_:]+(<[\w_:]+[\*&]?>)?&", line):
|
||||
FAIL("References must be const!", line, path)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue