mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
MT_SHADOW: move code to objects/shadow.cpp; copy whiteshadow from followed object
This commit is contained in:
parent
72ef1d352b
commit
fac5abf69e
5 changed files with 68 additions and 24 deletions
|
|
@ -214,6 +214,10 @@ void Obj_EmeraldFlareThink(mobj_t *flare);
|
|||
void Obj_BeginEmeraldOrbit(mobj_t *emerald, mobj_t *target, fixed_t radius, INT32 revolution_time, tic_t fuse);
|
||||
void Obj_GiveEmerald(mobj_t *emerald);
|
||||
|
||||
/* Fake Shadow */
|
||||
mobj_t *Obj_SpawnFakeShadow(mobj_t *from);
|
||||
void Obj_FakeShadowThink(mobj_t *shadow);
|
||||
|
||||
/* Checkpoints */
|
||||
void Obj_ResetCheckpoints(void);
|
||||
void Obj_LinkCheckpoint(mobj_t *end);
|
||||
|
|
|
|||
|
|
@ -29,4 +29,5 @@ target_sources(SRB2SDL2 PRIVATE
|
|||
sneaker-panel.c
|
||||
emerald.c
|
||||
checkpoint.cpp
|
||||
shadow.cpp
|
||||
)
|
||||
|
|
|
|||
|
|
@ -183,20 +183,6 @@ project_hyudoro_hover (mobj_t *hyu)
|
|||
bob_in_place(hyu, 64);
|
||||
}
|
||||
|
||||
static void
|
||||
spawn_hyudoro_shadow (mobj_t *hyu)
|
||||
{
|
||||
mobj_t *shadow = P_SpawnMobjFromMobj(
|
||||
hyu, 0, 0, 0, MT_SHADOW);
|
||||
|
||||
shadow->whiteshadow = true;
|
||||
|
||||
shadow->shadowscale = hyu->shadowscale;
|
||||
hyu->shadowscale = 0;
|
||||
|
||||
P_SetTarget(&shadow->tracer, hyu);
|
||||
}
|
||||
|
||||
static mobj_t *
|
||||
find_duel_target (mobj_t *ignore)
|
||||
{
|
||||
|
|
@ -572,7 +558,7 @@ Obj_InitHyudoroCenter (mobj_t * center, mobj_t * master)
|
|||
hyu->renderflags &= ~(K_GetPlayerDontDrawFlag(master->player));
|
||||
}
|
||||
|
||||
spawn_hyudoro_shadow(hyu); // this sucks btw
|
||||
Obj_SpawnFakeShadow(hyu); // this sucks btw
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
59
src/objects/shadow.cpp
Normal file
59
src/objects/shadow.cpp
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#include "../info.h"
|
||||
#include "../k_objects.h"
|
||||
#include "../p_local.h"
|
||||
#include "../p_mobj.h"
|
||||
#include "../p_tick.h"
|
||||
#include "../typedef.h"
|
||||
|
||||
#define shadow_follow(o) ((o)->tracer)
|
||||
|
||||
struct Shadow : mobj_t
|
||||
{
|
||||
mobj_t* follow() const { return shadow_follow(this); }
|
||||
void follow(mobj_t* n) { P_SetTarget(&shadow_follow(this), n); }
|
||||
|
||||
static Shadow* spawn(mobj_t* from)
|
||||
{
|
||||
return static_cast<Shadow*>(P_SpawnMobjFromMobj(from, 0, 0, 0, MT_SHADOW))->init(from);
|
||||
}
|
||||
|
||||
bool valid() const { return !P_MobjWasRemoved(this) && !P_MobjWasRemoved(follow()); }
|
||||
|
||||
void destroy() { P_RemoveMobj(this); }
|
||||
|
||||
void move()
|
||||
{
|
||||
whiteshadow = follow()->whiteshadow;
|
||||
|
||||
P_MoveOrigin(this, follow()->x, follow()->y, P_GetMobjFeet(follow()));
|
||||
}
|
||||
|
||||
private:
|
||||
Shadow* init(mobj_t* from)
|
||||
{
|
||||
shadowscale = from->shadowscale;
|
||||
from->shadowscale = 0;
|
||||
|
||||
follow(from);
|
||||
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
mobj_t* Obj_SpawnFakeShadow(mobj_t* from)
|
||||
{
|
||||
return Shadow::spawn(from);
|
||||
}
|
||||
|
||||
void Obj_FakeShadowThink(mobj_t* shadow)
|
||||
{
|
||||
auto x = static_cast<Shadow*>(shadow);
|
||||
|
||||
if (!x->valid())
|
||||
{
|
||||
x->destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
x->move();
|
||||
}
|
||||
12
src/p_mobj.c
12
src/p_mobj.c
|
|
@ -5782,16 +5782,10 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
switch (mobj->type)
|
||||
{
|
||||
case MT_SHADOW:
|
||||
if (mobj->tracer)
|
||||
Obj_FakeShadowThink(mobj);
|
||||
|
||||
if (P_MobjWasRemoved(mobj))
|
||||
{
|
||||
P_MoveOrigin(mobj,
|
||||
mobj->tracer->x,
|
||||
mobj->tracer->y,
|
||||
mobj->tracer->z);
|
||||
}
|
||||
else
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue