mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 20:41:46 +00:00
objects/battle-ufo.cpp: refactor to make some use of srb2::Mobj
This commit is contained in:
parent
ada9263374
commit
ca1bbfd53f
1 changed files with 24 additions and 15 deletions
|
|
@ -2,6 +2,9 @@
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
|
#include "../math/fixed.hpp"
|
||||||
|
#include "../mobj.hpp"
|
||||||
|
|
||||||
#include "../doomdef.h"
|
#include "../doomdef.h"
|
||||||
#include "../m_random.h"
|
#include "../m_random.h"
|
||||||
#include "../p_local.h"
|
#include "../p_local.h"
|
||||||
|
|
@ -9,36 +12,45 @@
|
||||||
#include "../k_objects.h"
|
#include "../k_objects.h"
|
||||||
#include "../k_kart.h"
|
#include "../k_kart.h"
|
||||||
|
|
||||||
|
using srb2::math::Fixed;
|
||||||
|
using srb2::Mobj;
|
||||||
|
|
||||||
#define BATTLEUFO_LEG_ZOFFS (3*FRACUNIT) // Spawn height offset from the body
|
#define BATTLEUFO_LEG_ZOFFS (3*FRACUNIT) // Spawn height offset from the body
|
||||||
#define BATTLEUFO_LEGS (3) // Number of UFO legs to spawn
|
#define BATTLEUFO_LEGS (3) // Number of UFO legs to spawn
|
||||||
#define BATTLEUFO_BOB_AMP (4) // UFO bob strength
|
#define BATTLEUFO_BOB_AMP (4) // UFO bob strength
|
||||||
#define BATTLEUFO_BOB_SPEED (TICRATE*2) // UFO bob speed
|
#define BATTLEUFO_BOB_SPEED (TICRATE*2) // UFO bob speed
|
||||||
|
|
||||||
#define spawner_id(o) ((o)->thing_args[0])
|
|
||||||
|
|
||||||
#define ufo_spawner(o) ((o)->target)
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
struct Spawner : mobj_t
|
struct Spawner : Mobj
|
||||||
{
|
{
|
||||||
INT32 id() const { return spawner_id(this); }
|
void thing_args() = delete;
|
||||||
|
INT32 id() const { return this->mobj_t::thing_args[0]; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UFO : mobj_t
|
struct UFO : Mobj
|
||||||
{
|
{
|
||||||
Spawner* spawner() const { return static_cast<Spawner*>(ufo_spawner(this)); }
|
void target() = delete;
|
||||||
void spawner(Spawner* n) { P_SetTarget(&ufo_spawner(this), n); }
|
Spawner* spawner() const { return Mobj::target<Spawner>(); }
|
||||||
|
void spawner(Spawner* n) { Mobj::target(n); }
|
||||||
|
|
||||||
void spawn_beam()
|
void spawn_beam()
|
||||||
{
|
{
|
||||||
mobj_t *x;
|
Mobj *x = spawn_from<Mobj>({0, 0, height / 4}, MT_BATTLEUFO_BEAM);
|
||||||
|
|
||||||
x = P_SpawnMobjFromMobj(this, 0, 0, FixedDiv(this->height / 4, this->scale), MT_BATTLEUFO_BEAM);
|
|
||||||
x->renderflags |= RF_FLOORSPRITE|RF_NOSPLATBILLBOARD|RF_SLOPESPLAT|RF_NOSPLATROLLANGLE;
|
x->renderflags |= RF_FLOORSPRITE|RF_NOSPLATBILLBOARD|RF_SLOPESPLAT|RF_NOSPLATROLLANGLE;
|
||||||
x->colorized = true;
|
x->colorized = true;
|
||||||
x->color = SKINCOLOR_SAPPHIRE;
|
x->color = SKINCOLOR_SAPPHIRE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bob()
|
||||||
|
{
|
||||||
|
// Copied and slightly modified from k_kart.c
|
||||||
|
Fixed sine = (BATTLEUFO_BOB_AMP * Fixed {FSIN(M_TAU_FIXED * BATTLEUFO_BOB_SPEED * leveltime)}) / 4;
|
||||||
|
|
||||||
|
momz = flip(sine * scale());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SpawnerCompare
|
struct SpawnerCompare
|
||||||
|
|
@ -123,10 +135,7 @@ void Obj_BattleUFOThink(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
UFO* ufo = static_cast<UFO*>(mobj);
|
UFO* ufo = static_cast<UFO*>(mobj);
|
||||||
|
|
||||||
// Copied and slightly modified from k_kart.c
|
ufo->bob();
|
||||||
fixed_t sine = (BATTLEUFO_BOB_AMP * FINESINE((((M_TAU_FIXED * BATTLEUFO_BOB_SPEED) * leveltime) >> ANGLETOFINESHIFT) & FINEMASK)) / 4;
|
|
||||||
fixed_t targz = FixedMul(ufo->scale, sine) * P_MobjFlip(ufo);
|
|
||||||
ufo->momz = targz;
|
|
||||||
|
|
||||||
if ((leveltime/2) & 1)
|
if ((leveltime/2) & 1)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue