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_BeginEmeraldOrbit(mobj_t *emerald, mobj_t *target, fixed_t radius, INT32 revolution_time, tic_t fuse);
|
||||||
void Obj_GiveEmerald(mobj_t *emerald);
|
void Obj_GiveEmerald(mobj_t *emerald);
|
||||||
|
|
||||||
|
/* Fake Shadow */
|
||||||
|
mobj_t *Obj_SpawnFakeShadow(mobj_t *from);
|
||||||
|
void Obj_FakeShadowThink(mobj_t *shadow);
|
||||||
|
|
||||||
/* Checkpoints */
|
/* Checkpoints */
|
||||||
void Obj_ResetCheckpoints(void);
|
void Obj_ResetCheckpoints(void);
|
||||||
void Obj_LinkCheckpoint(mobj_t *end);
|
void Obj_LinkCheckpoint(mobj_t *end);
|
||||||
|
|
|
||||||
|
|
@ -29,4 +29,5 @@ target_sources(SRB2SDL2 PRIVATE
|
||||||
sneaker-panel.c
|
sneaker-panel.c
|
||||||
emerald.c
|
emerald.c
|
||||||
checkpoint.cpp
|
checkpoint.cpp
|
||||||
|
shadow.cpp
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -183,20 +183,6 @@ project_hyudoro_hover (mobj_t *hyu)
|
||||||
bob_in_place(hyu, 64);
|
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 *
|
static mobj_t *
|
||||||
find_duel_target (mobj_t *ignore)
|
find_duel_target (mobj_t *ignore)
|
||||||
{
|
{
|
||||||
|
|
@ -572,7 +558,7 @@ Obj_InitHyudoroCenter (mobj_t * center, mobj_t * master)
|
||||||
hyu->renderflags &= ~(K_GetPlayerDontDrawFlag(master->player));
|
hyu->renderflags &= ~(K_GetPlayerDontDrawFlag(master->player));
|
||||||
}
|
}
|
||||||
|
|
||||||
spawn_hyudoro_shadow(hyu); // this sucks btw
|
Obj_SpawnFakeShadow(hyu); // this sucks btw
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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)
|
switch (mobj->type)
|
||||||
{
|
{
|
||||||
case MT_SHADOW:
|
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;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue