mirror of
https://github.com/PodeCaradox/GalaxyQuest-SteamFrame.git
synced 2026-10-17 23:01:12 +02:00
- Cross-build against the Steam Runtime 4 arm64 SDK (build_linux.sh, cmake/steamrt4-arm64.cmake): the executable sits at 0x98000000 next to the game's 32-bit window, with the OpenXR loader and jsoncpp beside it (RPATH $ORIGIN); build_linux.sh also packs a release archive. - OpenXR on SteamVR: EGL surfaceless through XR_MNDX_egl_enable, the Frame controller profile (both names), a flick or a wrist turn as the Wii Remote's shake, the D-pad as look; the refresh rate goes to 120 Hz through vrcmd where the runtime offers only its current rate. - Timewarp in the app: SteamVR shows frames that arrive in time as they were rendered, so at 120 Hz every game frame stood still for two refreshes while the head turned. The game frame's eyes now go into a scene set, and every refresh composites the last finished set turned to its own head pose (timewarp.h, checked by tools/timewarp_test and by the simulator's PETARI_XRSIM_WARP); sharpening runs once per game frame; the pacing changes only after a new display period has held. - Fixes found on the way: libstdc++'s <cstdio>/<cwchar> against the MSL renames (compat.h), language archives a disc carries damaged (cook.py takes another language's), host allocations on the DVD and DSP threads, quitting without waiting on the game's threads, case of two include names. - ANLEITUNG-STEAM-FRAME.md: the player's guide in German. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
134 lines
3.4 KiB
C++
134 lines
3.4 KiB
C++
#pragma once
|
|
|
|
#include "Game/LiveActor/LiveActor.hpp"
|
|
#include "Game/System/NerveExecutor.hpp"
|
|
#include <JSystem/JGeometry/TMatrix.hpp>
|
|
|
|
class FileSelectIconID;
|
|
class FileSelectItem;
|
|
class FileSelectItemDelegatorBase;
|
|
class FileSelectModel;
|
|
class FileSelectNumber;
|
|
class MiiFaceParts;
|
|
class PartsModel;
|
|
|
|
namespace FileSelectItemSub {
|
|
class ScaleController;
|
|
class BlinkController;
|
|
} // namespace FileSelectItemSub
|
|
|
|
class FileSelectItem : public LiveActor {
|
|
public:
|
|
FileSelectItem(s32, bool, const FileSelectIconID&, const char*);
|
|
|
|
virtual ~FileSelectItem();
|
|
virtual void init(const JMapInfoIter&);
|
|
virtual void appear();
|
|
virtual void makeActorAppeared();
|
|
virtual void makeActorDead();
|
|
virtual void control();
|
|
|
|
bool isNew() const;
|
|
bool isExist() const;
|
|
void format();
|
|
void change(const FileSelectIconID&, bool);
|
|
void forceChange(const FileSelectIconID&, bool);
|
|
void invalidateSelect();
|
|
void validateSelect();
|
|
void appearIndex();
|
|
void disappearIndex();
|
|
void copyIconID(FileSelectIconID*);
|
|
void setSelectDelegator(FileSelectItemDelegatorBase*);
|
|
void onPointing();
|
|
void offPointing();
|
|
void validateRotate();
|
|
void turnToFront(s32);
|
|
void exeFormat();
|
|
void exeChangeFellow();
|
|
void exeChangeMii();
|
|
void createNew();
|
|
void createFellows();
|
|
void createMii();
|
|
void createNumber();
|
|
void updatePointing();
|
|
void updateRotate();
|
|
void playPointedME();
|
|
void playPointedNotUsingME();
|
|
void appearFellowModel();
|
|
void killAllModels();
|
|
void emitOpen();
|
|
void emitVanish();
|
|
void emitCopy();
|
|
void emitCompleteEffect();
|
|
void deleteCompleteEffect();
|
|
|
|
void exeExistWait();
|
|
void exeNewWait();
|
|
|
|
/* 0x08C */ bool _8C;
|
|
/* 0x090 */ PartsModel* mPlanetMapObj;
|
|
/* 0x094 */ FileSelectIconID* mIconID;
|
|
/* 0x098 */ FileSelectModel** mModels;
|
|
/* 0x09C */ MiiFaceParts* mFaceParts;
|
|
/* 0x0A0 */ FileSelectNumber* _A0;
|
|
/* 0x0A4 */ TPos3f _A4;
|
|
/* 0x0D4 */ TMtx34f _D4;
|
|
/* 0x104 */ TMtx34f _104;
|
|
/* 0x134 */ TVec3f _134;
|
|
/* 0x140 */ s32 _140;
|
|
/* 0x144 */ u8 _144;
|
|
/* 0x145 */ bool mIsInvalidateSelect;
|
|
/* 0x146 */ u8 _146;
|
|
/* 0x147 */ u8 _147;
|
|
/* 0x148 */ FileSelectItemSub::ScaleController* mScaleCtrl;
|
|
/* 0x14C */ FileSelectItemSub::BlinkController* mBlinkCtrl;
|
|
/* 0x150 */ FileSelectItemDelegatorBase* mDelegator;
|
|
/* 0x154 */ u8 _154;
|
|
/* 0x155 */ u8 _155;
|
|
/* 0x156 */ u8 _156;
|
|
/* 0x157 */ u8 _157;
|
|
/* 0x158 */ TVec2f _158;
|
|
/* 0x160 */ f32 _160;
|
|
/* 0x164 */ bool mIsInvalidRotate;
|
|
/* 0x165 */ u8 _165;
|
|
/* 0x166 */ u8 _166;
|
|
/* 0x167 */ u8 _167;
|
|
/* 0x168 */ s32 _168;
|
|
/* 0x16C */ s32 _16C;
|
|
};
|
|
|
|
namespace FileSelectItemSub {
|
|
class ScaleController : public NerveExecutor {
|
|
public:
|
|
ScaleController();
|
|
|
|
void exeToSmall();
|
|
void exeToBig();
|
|
void exeSmall();
|
|
void exeBig();
|
|
|
|
f32 getScale() const {
|
|
return _8;
|
|
}
|
|
|
|
f32 _8;
|
|
};
|
|
|
|
class BlinkController : public NerveExecutor {
|
|
public:
|
|
BlinkController(FileSelectItem*);
|
|
|
|
void exeOpen();
|
|
void exeShut();
|
|
void exeSleep();
|
|
void exeBlink();
|
|
void shut();
|
|
void open();
|
|
void sleep();
|
|
|
|
/* 0x08 */ FileSelectItem* mItem;
|
|
s32 _C;
|
|
s32 _10;
|
|
};
|
|
}; // namespace FileSelectItemSub
|