mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-28 04:51:42 +00:00
Add CameraWait ACS function
Pauses a script until the tagged camera has no more waypoints to follow.
This commit is contained in:
parent
9b18ce7849
commit
9073d5bd17
6 changed files with 38 additions and 1 deletions
|
|
@ -445,6 +445,25 @@ bool CallFunc_PolyWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Wo
|
||||||
return true; // Execution interrupted
|
return true; // Execution interrupted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
bool CallFunc_CameraWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC)
|
||||||
|
|
||||||
|
Pauses the thread until the tagged
|
||||||
|
camera is done moving.
|
||||||
|
--------------------------------------------------*/
|
||||||
|
bool CallFunc_CameraWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC)
|
||||||
|
{
|
||||||
|
(void)argC;
|
||||||
|
|
||||||
|
thread->state = {
|
||||||
|
ACSVM::ThreadState::WaitTag,
|
||||||
|
argV[0],
|
||||||
|
ACS_TAGTYPE_CAMERA
|
||||||
|
};
|
||||||
|
|
||||||
|
return true; // Execution interrupted
|
||||||
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
bool CallFunc_ChangeFloor(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC)
|
bool CallFunc_ChangeFloor(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ bool CallFunc_Random(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word
|
||||||
bool CallFunc_ThingCount(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
bool CallFunc_ThingCount(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
bool CallFunc_TagWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
bool CallFunc_TagWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
bool CallFunc_PolyWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
bool CallFunc_PolyWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
|
bool CallFunc_CameraWait(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
bool CallFunc_ChangeFloor(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
bool CallFunc_ChangeFloor(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
bool CallFunc_ChangeCeiling(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
bool CallFunc_ChangeCeiling(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
bool CallFunc_LineSide(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
bool CallFunc_LineSide(ACSVM::Thread *thread, const ACSVM::Word *argV, ACSVM::Word argC);
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ extern "C" {
|
||||||
#include "../p_spec.h"
|
#include "../p_spec.h"
|
||||||
#include "../w_wad.h"
|
#include "../w_wad.h"
|
||||||
#include "../z_zone.h"
|
#include "../z_zone.h"
|
||||||
|
#include "../p_local.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "environment.hpp"
|
#include "environment.hpp"
|
||||||
|
|
@ -160,6 +161,8 @@ Environment::Environment()
|
||||||
addFuncDataACS0( 307, addCallFunc(CallFunc_PlayerLap));
|
addFuncDataACS0( 307, addCallFunc(CallFunc_PlayerLap));
|
||||||
addFuncDataACS0( 308, addCallFunc(CallFunc_LowestLap));
|
addFuncDataACS0( 308, addCallFunc(CallFunc_LowestLap));
|
||||||
addFuncDataACS0( 309, addCallFunc(CallFunc_EncoreMode));
|
addFuncDataACS0( 309, addCallFunc(CallFunc_EncoreMode));
|
||||||
|
|
||||||
|
addFuncDataACS0( 500, addCallFunc(CallFunc_CameraWait));
|
||||||
}
|
}
|
||||||
|
|
||||||
ACSVM::Thread *Environment::allocThread()
|
ACSVM::Thread *Environment::allocThread()
|
||||||
|
|
@ -262,6 +265,17 @@ bool Environment::checkTag(ACSVM::Word type, ACSVM::Word tag)
|
||||||
const polyobj_t *po = Polyobj_GetForNum(tag);
|
const polyobj_t *po = Polyobj_GetForNum(tag);
|
||||||
return (po == nullptr || po->thinker == nullptr);
|
return (po == nullptr || po->thinker == nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ACS_TAGTYPE_CAMERA:
|
||||||
|
{
|
||||||
|
const mobj_t *camera = P_FindObjectTypeFromTag(MT_ALTVIEWMAN, tag);
|
||||||
|
if (camera == nullptr || camera->spawnpoint == nullptr)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (camera->tracer == nullptr || P_MobjWasRemoved(camera->tracer) == true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ enum acs_tagType_e
|
||||||
{
|
{
|
||||||
ACS_TAGTYPE_POLYOBJ,
|
ACS_TAGTYPE_POLYOBJ,
|
||||||
ACS_TAGTYPE_SECTOR,
|
ACS_TAGTYPE_SECTOR,
|
||||||
|
ACS_TAGTYPE_CAMERA,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ThreadInfo : public ACSVM::ThreadInfo
|
class ThreadInfo : public ACSVM::ThreadInfo
|
||||||
|
|
|
||||||
|
|
@ -2405,7 +2405,7 @@ static void P_SwitchSkybox(INT32 args, player_t *player, skybox_t *skybox)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static mobj_t* P_FindObjectTypeFromTag(mobjtype_t type, mtag_t tag)
|
mobj_t* P_FindObjectTypeFromTag(mobjtype_t type, mtag_t tag)
|
||||||
{
|
{
|
||||||
if (udmf)
|
if (udmf)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -582,6 +582,8 @@ void P_CrossSpecialLine(line_t *line, INT32 side, mobj_t *thing);
|
||||||
void P_PushSpecialLine(line_t *line, mobj_t *thing);
|
void P_PushSpecialLine(line_t *line, mobj_t *thing);
|
||||||
void P_ActivateThingSpecial(mobj_t *mo, mobj_t *source);
|
void P_ActivateThingSpecial(mobj_t *mo, mobj_t *source);
|
||||||
|
|
||||||
|
mobj_t* P_FindObjectTypeFromTag(mobjtype_t type, mtag_t tag);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Special activation info
|
// Special activation info
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue