mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-23 09:04:21 +00:00
Player: Add PlayerPuppet (#826)
This commit is contained in:
parent
131c1c8e85
commit
f0237ead55
|
|
@ -10,7 +10,7 @@ class DrawContext;
|
|||
|
||||
namespace al {
|
||||
class GraphicsSystemInfo;
|
||||
class ModelDrawBufferCounter;
|
||||
struct ModelDrawBufferCounter;
|
||||
class ModelKeeper;
|
||||
class ModelDrawDisplayList;
|
||||
class ModelCtrl;
|
||||
|
|
|
|||
|
|
@ -279,7 +279,7 @@ u32 calcPlayerListOrderByDistance(const LiveActor* actor, const LiveActor** acto
|
|||
const sead::Vector3f& pos = getTrans(actor);
|
||||
|
||||
f32 distances[64];
|
||||
for (s32 i = 0; i != playerNum; i++) {
|
||||
for (s32 i = 0; i != (s32)playerNum; i++) {
|
||||
LiveActor* player = getPlayerActor(actor, i);
|
||||
f32 distance = sead::Mathf::maxNumber();
|
||||
if (!isDead(player)) {
|
||||
|
|
@ -289,14 +289,14 @@ u32 calcPlayerListOrderByDistance(const LiveActor* actor, const LiveActor** acto
|
|||
distances[i] = distance;
|
||||
}
|
||||
|
||||
for (s32 i = 0; i < size; i++) {
|
||||
for (s32 i = 0; (u32)i < size; i++) {
|
||||
f32 min_distance = sead::Mathf::maxNumber();
|
||||
s32 min_index = -1;
|
||||
|
||||
for (u32 i = 0; i < playerNum; i++) {
|
||||
if (distances[i] <= min_distance) {
|
||||
min_distance = distances[i];
|
||||
min_index = i;
|
||||
for (u32 j = 0; j < playerNum; j++) {
|
||||
if (distances[j] <= min_distance) {
|
||||
min_distance = distances[j];
|
||||
min_index = j;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ class SePlayInfo;
|
|||
class SeResourceSpecificInfo;
|
||||
class SeResourceRtpcInfo;
|
||||
class SeRtpcSetting;
|
||||
class SeUserInfo;
|
||||
struct SeUserInfo;
|
||||
} // namespace al
|
||||
|
||||
namespace alSeDbFunction {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,13 @@ struct SeUserInfo {
|
|||
|
||||
const char* name;
|
||||
bool isPartsUser = false;
|
||||
sead::PtrArray<const char*> partsUserNameList;
|
||||
sead::PtrArray<const char*>* partsUserNameList;
|
||||
AudioInfoListWithParts<SeEmitterInfo>* emitterInfoList;
|
||||
AudioInfoListWithParts<SeActionInfo>* actionInfoList;
|
||||
AudioInfoListWithParts<SePlayInfo>* playInfoList;
|
||||
AudioInfoListWithParts<SeHitReactionInfo>* hitReactionInfoList;
|
||||
};
|
||||
|
||||
static_assert(sizeof(SeUserInfo) == 0x38);
|
||||
|
||||
} // namespace al
|
||||
|
|
|
|||
52
src/Player/IUsePlayerPuppet.h
Normal file
52
src/Player/IUsePlayerPuppet.h
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadQuat.h>
|
||||
#include <math/seadVector.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
|
||||
namespace al {
|
||||
class HitSensor;
|
||||
} // namespace al
|
||||
|
||||
class IUsePlayerPuppet {
|
||||
public:
|
||||
virtual void start(al::HitSensor*, al::HitSensor*) = 0;
|
||||
virtual void end() = 0;
|
||||
virtual void cancel() = 0;
|
||||
virtual void setTrans(const sead::Vector3f&) = 0;
|
||||
virtual void setPose(const sead::Quatf&) = 0;
|
||||
virtual void setVelocity(const sead::Vector3f&) = 0;
|
||||
virtual void resetPosition(const sead::Vector3f&) = 0;
|
||||
virtual const sead::Vector3f& getTrans() const = 0;
|
||||
virtual const sead::Vector3f& getVelocity() const = 0;
|
||||
virtual const sead::Vector3f& getGravity() const = 0;
|
||||
virtual void calcFront(sead::Vector3f*) const = 0;
|
||||
virtual void calcUp(sead::Vector3f*) const = 0;
|
||||
virtual void startAction(const sead::SafeString&) const = 0;
|
||||
virtual bool isActionEnd() const = 0;
|
||||
virtual bool isActionPlaying(const char*) const = 0;
|
||||
virtual void setAnimRate(f32) const = 0;
|
||||
virtual f32 getAnimFrameMax() const = 0;
|
||||
virtual void hide() = 0;
|
||||
virtual void show() = 0;
|
||||
virtual bool isHidden() const = 0;
|
||||
virtual void hideSilhouette() = 0;
|
||||
virtual void showSilhouette() = 0;
|
||||
virtual void hideShadow() = 0;
|
||||
virtual void showShadow() = 0;
|
||||
virtual void requestDamage() = 0;
|
||||
virtual void clearRequestDamage() = 0;
|
||||
virtual bool isRequestDamage() const = 0;
|
||||
virtual void setBindEndOnGround() = 0;
|
||||
virtual bool isBindEndOnGround() const = 0;
|
||||
virtual void setBindEndJump(const sead::Vector3f&, s32) = 0;
|
||||
virtual bool isBindEndJump() const = 0;
|
||||
virtual void validateCollisionCheck() = 0;
|
||||
virtual void invalidateCollisionCheck() = 0;
|
||||
virtual bool isValidCollisionCheck() = 0;
|
||||
virtual bool isCollidedGround() = 0;
|
||||
virtual const sead::Vector3f& getCollidedGroundNormal() = 0;
|
||||
virtual void validateSensor() = 0;
|
||||
virtual void invalidateSensor() = 0;
|
||||
};
|
||||
128
src/Player/PlayerPuppet.h
Normal file
128
src/Player/PlayerPuppet.h
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
#pragma once
|
||||
|
||||
#include <basis/seadTypes.h>
|
||||
#include <math/seadQuat.h>
|
||||
#include <math/seadVector.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
|
||||
#include "Player/IUsePlayerPuppet.h"
|
||||
|
||||
namespace al {
|
||||
class AreaObj;
|
||||
class HitSensor;
|
||||
class LiveActor;
|
||||
} // namespace al
|
||||
|
||||
class ActorDimensionKeeper;
|
||||
class HackCap;
|
||||
class IPlayerModelChanger;
|
||||
class IUsePlayerCollision;
|
||||
class PlayerAnimator;
|
||||
class PlayerDamageKeeper;
|
||||
class PlayerConst;
|
||||
class PlayerCounterForceRun;
|
||||
class PlayerEffect;
|
||||
class PlayerInput;
|
||||
class WorldEndBorderKeeper;
|
||||
|
||||
class PlayerPuppet : public IUsePlayerPuppet {
|
||||
public:
|
||||
PlayerPuppet(al::LiveActor*, HackCap*, PlayerAnimator*, IUsePlayerCollision*,
|
||||
ActorDimensionKeeper*, IPlayerModelChanger*, WorldEndBorderKeeper*,
|
||||
PlayerCounterForceRun*, PlayerDamageKeeper*, PlayerEffect*, const PlayerInput*,
|
||||
const PlayerConst*);
|
||||
|
||||
void start(al::HitSensor*, al::HitSensor*) override;
|
||||
void end() override;
|
||||
void cancel() override;
|
||||
void setTrans(const sead::Vector3f&) override;
|
||||
void setPose(const sead::Quatf&) override;
|
||||
void setVelocity(const sead::Vector3f&) override;
|
||||
void resetPosition(const sead::Vector3f&) override;
|
||||
const sead::Vector3f& getTrans() const override;
|
||||
const sead::Vector3f& getVelocity() const override;
|
||||
const sead::Vector3f& getGravity() const override;
|
||||
void calcFront(sead::Vector3f*) const override;
|
||||
void calcUp(sead::Vector3f*) const override;
|
||||
void startAction(const sead::SafeString&) const override;
|
||||
bool isActionEnd() const override;
|
||||
bool isActionPlaying(const char*) const override;
|
||||
void setAnimRate(f32) const override;
|
||||
f32 getAnimFrameMax() const override;
|
||||
void hide() override;
|
||||
void show() override;
|
||||
bool isHidden() const override;
|
||||
void hideSilhouette() override;
|
||||
void showSilhouette() override;
|
||||
void hideShadow() override;
|
||||
void showShadow() override;
|
||||
void requestDamage() override;
|
||||
void clearRequestDamage() override;
|
||||
bool isRequestDamage() const override;
|
||||
void setBindEndOnGround() override;
|
||||
bool isBindEndOnGround() const override;
|
||||
void setBindEndJump(const sead::Vector3f&, s32) override;
|
||||
bool isBindEndJump() const override;
|
||||
void validateCollisionCheck() override;
|
||||
void invalidateCollisionCheck() override;
|
||||
bool isValidCollisionCheck() override;
|
||||
bool isCollidedGround() override;
|
||||
const sead::Vector3f& getCollidedGroundNormal() override;
|
||||
void validateSensor() override;
|
||||
void invalidateSensor() override;
|
||||
|
||||
void startPlayerHitReaction(const char*);
|
||||
void setBindEndWallJump(const sead::Vector3f&, s32);
|
||||
void validate2D();
|
||||
void keepOn2D();
|
||||
void endKeepOn2D();
|
||||
void requestUpdateRecoveryInfo(bool, bool, const sead::Vector3f&, const sead::Vector3f&,
|
||||
const al::AreaObj*);
|
||||
bool tryUpdateRecoveryInfo(bool*, bool*, sead::Vector3f*, sead::Vector3f*, const al::AreaObj**);
|
||||
bool isBinding() const;
|
||||
bool isNoCollide() const;
|
||||
|
||||
private:
|
||||
al::LiveActor* mActor;
|
||||
HackCap* mHackCap;
|
||||
PlayerAnimator* mPlayerAnimator;
|
||||
IUsePlayerCollision* mIUsePlayerCollision;
|
||||
ActorDimensionKeeper* mActorDimensionKeeper;
|
||||
IPlayerModelChanger* mIPlayerModelChanger;
|
||||
WorldEndBorderKeeper* mWorldEndBorderKeeper;
|
||||
PlayerCounterForceRun* mPlayerCounterForceRun;
|
||||
PlayerDamageKeeper* mPlayerDamageKeeper;
|
||||
PlayerEffect* mPlayerEffect;
|
||||
void* _58;
|
||||
PlayerInput* mPlayerInput;
|
||||
PlayerConst* mPlayerConst;
|
||||
al::HitSensor* _70;
|
||||
al::HitSensor* _78;
|
||||
bool _80;
|
||||
bool _81;
|
||||
bool _82;
|
||||
sead::Vector3f _84;
|
||||
sead::Vector3f _90;
|
||||
al::AreaObj* mAreaObj;
|
||||
bool mIsBindEndOnGround;
|
||||
bool mIsBindEndJump;
|
||||
bool _aa;
|
||||
bool mIsValidCollisionCheck;
|
||||
bool _ac;
|
||||
bool mIsRequestDamage;
|
||||
bool _ae;
|
||||
bool mIsSensorValid;
|
||||
bool _b0;
|
||||
bool _b1;
|
||||
bool _b2;
|
||||
bool _b3;
|
||||
bool _b4;
|
||||
bool _b5;
|
||||
bool _b6;
|
||||
|
||||
char filler[0x8];
|
||||
|
||||
sead::Vector3f _c8;
|
||||
};
|
||||
|
||||
static_assert(sizeof(PlayerPuppet) == 0xd0);
|
||||
Loading…
Reference in a new issue