Added support for client-side VisualThinkers

This commit is contained in:
Boondorl 2025-07-08 14:19:29 -04:00 committed by Ricardo Luís Vaz Silva
commit ca98f33f42
5 changed files with 11 additions and 10 deletions

View file

@ -2714,7 +2714,7 @@ void Net_DoCommand(int cmd, uint8_t **stream, int player)
if (typeinfo && typeinfo->IsDescendantOf("VisualThinker"))
{
DVector3 spawnpos = source->Vec3Angle(source->radius * 4, source->Angles.Yaw, 8.);
auto vt = DVisualThinker::NewVisualThinker(source->Level, typeinfo);
auto vt = DVisualThinker::NewVisualThinker(source->Level, typeinfo, false);
if (vt)
{
vt->PT.Pos = spawnpos;

View file

@ -1033,7 +1033,7 @@ DVisualThinker* DVisualThinker::GetNext() const
return _next;
}
DVisualThinker* DVisualThinker::NewVisualThinker(FLevelLocals* Level, PClass* type)
DVisualThinker* DVisualThinker::NewVisualThinker(FLevelLocals* Level, PClass* type, bool clientSide)
{
if (type == nullptr)
{
@ -1050,7 +1050,7 @@ DVisualThinker* DVisualThinker::NewVisualThinker(FLevelLocals* Level, PClass* ty
return nullptr;
}
auto zs = static_cast<DVisualThinker*>(Level->CreateThinker(type, DVisualThinker::DEFAULT_STAT));
auto zs = static_cast<DVisualThinker*>(clientSide ? Level->CreateClientsideThinker(type, DVisualThinker::DEFAULT_STAT) : Level->CreateThinker(type, DVisualThinker::DEFAULT_STAT));
zs->Construct();
IFOVERRIDENVIRTUALPTRNAME(zs, NAME_VisualThinker, BeginPlay)
@ -1065,9 +1065,9 @@ DVisualThinker* DVisualThinker::NewVisualThinker(FLevelLocals* Level, PClass* ty
return zs;
}
static DVisualThinker* SpawnVisualThinker(FLevelLocals* Level, PClass* type)
static DVisualThinker* SpawnVisualThinker(FLevelLocals* Level, PClass* type, bool clientSide)
{
return DVisualThinker::NewVisualThinker(Level, type);
return DVisualThinker::NewVisualThinker(Level, type, clientSide);
}
void DVisualThinker::UpdateSector(subsector_t * newSubsector)
@ -1101,7 +1101,8 @@ DEFINE_ACTION_FUNCTION_NATIVE(FLevelLocals, SpawnVisualThinker, SpawnVisualThink
{
PARAM_SELF_STRUCT_PROLOGUE(FLevelLocals);
PARAM_CLASS_NOT_NULL(type, DVisualThinker);
DVisualThinker* zs = SpawnVisualThinker(self, type);
PARAM_BOOL(clientSide);
DVisualThinker* zs = SpawnVisualThinker(self, type, clientSide);
ACTION_RETURN_OBJECT(zs);
}

View file

@ -55,7 +55,7 @@ public:
void OnDestroy() override;
DVisualThinker* GetNext() const;
static DVisualThinker* NewVisualThinker(FLevelLocals* Level, PClass* type);
static DVisualThinker* NewVisualThinker(FLevelLocals* Level, PClass* type, bool clientSide);
void SetTranslation(FName trname);
int GetRenderStyle() const;
bool isFrozen();