mirror of https://github.com/zeldaret/tp.git
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
|
|
#include "f/f_pc/f_pc_pause.h"
|
|
#include "f/f_pc/f_pc_base.h"
|
|
#include "f/f_pc/f_pc_layer_iter.h"
|
|
#include "f/f_pc/f_pc_node.h"
|
|
|
|
// f_pc_node::g_fpcNd_type
|
|
extern s32 g_fpcNd_type;
|
|
|
|
#ifdef NON_MATCHING
|
|
s32 fpcPause_IsEnable(void* pProcess, u8 flag) {
|
|
base_process_class* pProc = (base_process_class*)pProcess;
|
|
// extra addic/subfe?
|
|
return (pProc->mPauseFlag & flag) == flag;
|
|
}
|
|
#else
|
|
asm s32 fpcPause_IsEnable(void* pProcess, u8 flag) {
|
|
nofralloc
|
|
#include "f/f_pc/asm/80023844.s"
|
|
}
|
|
#endif
|
|
|
|
s32 fpcPause_Enable(void* pProcess, u8 flag) {
|
|
base_process_class* pProc = (base_process_class*)pProcess;
|
|
pProc->mPauseFlag |= flag;
|
|
|
|
if (fpcBs_Is_JustOfType(g_fpcNd_type, pProc->mSubType)) {
|
|
process_node_class* pNode = (process_node_class*)pProc;
|
|
fpcLyIt_OnlyHere(&pNode->mLayer, (fpcLyIt_OnlyHereFunc)fpcPause_Enable,
|
|
(void*)(flag & 0xFF));
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
s32 fpcPause_Disable(void* pProcess, u8 flag) {
|
|
base_process_class* pProc = (base_process_class*)pProcess;
|
|
pProc->mPauseFlag &= (0xFF - flag) & 0xFF;
|
|
|
|
if (fpcBs_Is_JustOfType(g_fpcNd_type, pProc->mSubType)) {
|
|
process_node_class* pNode = (process_node_class*)pProc;
|
|
fpcLyIt_OnlyHere(&pNode->mLayer, (fpcLyIt_OnlyHereFunc)fpcPause_Disable, (void*)flag);
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
void fpcPause_Init(void* pProcess) {
|
|
base_process_class* pProc = (base_process_class*)pProcess;
|
|
pProc->mPauseFlag = 0;
|
|
}
|