mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Broly: move Broly class into srb2::objects namespace
This commit is contained in:
parent
11555a2a3c
commit
b5062e8627
2 changed files with 101 additions and 92 deletions
|
|
@ -7,100 +7,11 @@
|
||||||
// See the 'LICENSE' file for more details.
|
// See the 'LICENSE' file for more details.
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#include "../math/fixed.hpp"
|
#include "broly.hpp"
|
||||||
#include "../math/vec.hpp"
|
|
||||||
#include "../mobj.hpp"
|
|
||||||
|
|
||||||
#include "../doomdef.h"
|
#include "../doomstat.h"
|
||||||
#include "../info.h"
|
|
||||||
#include "../k_kart.h"
|
|
||||||
#include "../k_objects.h"
|
|
||||||
#include "../m_easing.h"
|
|
||||||
#include "../p_local.h"
|
|
||||||
#include "../s_sound.h"
|
|
||||||
|
|
||||||
using srb2::Mobj;
|
using namespace srb2::objects;
|
||||||
using srb2::math::Fixed;
|
|
||||||
using srb2::math::Vec2;
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
|
|
||||||
struct Broly : Mobj
|
|
||||||
{
|
|
||||||
/* An object may not be visible on the same tic:
|
|
||||||
1) that it spawned
|
|
||||||
2) that it cycles to the next state */
|
|
||||||
static constexpr int kBufferTics = 2;
|
|
||||||
|
|
||||||
void extravalue1() = delete;
|
|
||||||
tic_t duration() const { return mobj_t::extravalue1; }
|
|
||||||
void duration(tic_t n) { mobj_t::extravalue1 = n; }
|
|
||||||
|
|
||||||
void threshold() = delete;
|
|
||||||
void extravalue2() = delete;
|
|
||||||
Vec2<Fixed> size() const { return {mobj_t::threshold, mobj_t::extravalue2}; }
|
|
||||||
void size(const Vec2<Fixed>& n)
|
|
||||||
{
|
|
||||||
mobj_t::threshold = n.x;
|
|
||||||
mobj_t::extravalue2 = n.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool valid() const { return duration(); }
|
|
||||||
|
|
||||||
tic_t remaining() const { return tics - kBufferTics; }
|
|
||||||
|
|
||||||
Fixed linear() const { return (remaining() * FRACUNIT) / duration(); }
|
|
||||||
|
|
||||||
static Broly* spawn(Mobj* source, tic_t duration, const Vec2<Fixed>& size)
|
|
||||||
{
|
|
||||||
if (duration == 0)
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
Broly* x = source->spawn_from<Broly>({}, MT_BROLY);
|
|
||||||
|
|
||||||
x->target(source);
|
|
||||||
|
|
||||||
// Shrink into center of source object.
|
|
||||||
x->z = source->center().z - (x->height / 2);
|
|
||||||
|
|
||||||
x->colorized = true;
|
|
||||||
x->color = source->color;
|
|
||||||
x->mobj_t::hitlag = 0; // do not copy source hitlag
|
|
||||||
|
|
||||||
x->size(size);
|
|
||||||
x->duration(duration);
|
|
||||||
|
|
||||||
x->tics = (duration + kBufferTics);
|
|
||||||
|
|
||||||
K_ReduceVFXForEveryone(x);
|
|
||||||
|
|
||||||
x->voice(sfx_cdfm74);
|
|
||||||
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool think()
|
|
||||||
{
|
|
||||||
if (!valid())
|
|
||||||
{
|
|
||||||
remove();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Fixed center = z + (height / 2);
|
|
||||||
const Vec2<Fixed> v = size();
|
|
||||||
|
|
||||||
scale(Easing_OutSine(linear(), v.y, v.x));
|
|
||||||
z = center - (height / 2);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}; // namespace
|
|
||||||
|
|
||||||
mobj_t *
|
mobj_t *
|
||||||
Obj_SpawnBrolyKi
|
Obj_SpawnBrolyKi
|
||||||
|
|
|
||||||
98
src/objects/broly.hpp
Normal file
98
src/objects/broly.hpp
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
// DR. ROBOTNIK'S RING RACERS
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Copyright (C) 2023 by James Robert Roman
|
||||||
|
//
|
||||||
|
// This program is free software distributed under the
|
||||||
|
// terms of the GNU General Public License, version 2.
|
||||||
|
// See the 'LICENSE' file for more details.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef objects_broly_hpp
|
||||||
|
#define objects_broly_hpp
|
||||||
|
|
||||||
|
#include "objects.hpp"
|
||||||
|
|
||||||
|
#include "../info.h"
|
||||||
|
#include "../k_kart.h"
|
||||||
|
#include "../m_easing.h"
|
||||||
|
|
||||||
|
namespace srb2::objects
|
||||||
|
{
|
||||||
|
|
||||||
|
struct Broly : Mobj
|
||||||
|
{
|
||||||
|
/* An object may not be visible on the same tic:
|
||||||
|
1) that it spawned
|
||||||
|
2) that it cycles to the next state */
|
||||||
|
static constexpr int kBufferTics = 2;
|
||||||
|
|
||||||
|
void extravalue1() = delete;
|
||||||
|
tic_t duration() const { return mobj_t::extravalue1; }
|
||||||
|
void duration(tic_t n) { mobj_t::extravalue1 = n; }
|
||||||
|
|
||||||
|
void threshold() = delete;
|
||||||
|
void extravalue2() = delete;
|
||||||
|
Vec2<Fixed> size() const { return {mobj_t::threshold, mobj_t::extravalue2}; }
|
||||||
|
void size(const Vec2<Fixed>& n)
|
||||||
|
{
|
||||||
|
mobj_t::threshold = n.x;
|
||||||
|
mobj_t::extravalue2 = n.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool valid() const { return duration(); }
|
||||||
|
|
||||||
|
tic_t remaining() const { return tics - kBufferTics; }
|
||||||
|
|
||||||
|
Fixed linear() const { return (remaining() * FRACUNIT) / duration(); }
|
||||||
|
|
||||||
|
static Broly* spawn(Mobj* source, tic_t duration, const Vec2<Fixed>& size)
|
||||||
|
{
|
||||||
|
if (duration == 0)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Broly* x = source->spawn_from<Broly>({}, MT_BROLY);
|
||||||
|
|
||||||
|
x->target(source);
|
||||||
|
|
||||||
|
// Shrink into center of source object.
|
||||||
|
x->z = source->center().z - (x->height / 2);
|
||||||
|
|
||||||
|
x->colorized = true;
|
||||||
|
x->color = source->color;
|
||||||
|
x->mobj_t::hitlag = 0; // do not copy source hitlag
|
||||||
|
|
||||||
|
x->size(size);
|
||||||
|
x->duration(duration);
|
||||||
|
|
||||||
|
x->tics = (duration + kBufferTics);
|
||||||
|
|
||||||
|
K_ReduceVFXForEveryone(x);
|
||||||
|
|
||||||
|
x->voice(sfx_cdfm74);
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool think()
|
||||||
|
{
|
||||||
|
if (!valid())
|
||||||
|
{
|
||||||
|
remove();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const Fixed center = z + (height / 2);
|
||||||
|
const Vec2<Fixed> v = size();
|
||||||
|
|
||||||
|
scale(Easing_OutSine(linear(), v.y, v.x));
|
||||||
|
z = center - (height / 2);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}; // namespace srb2::objects
|
||||||
|
|
||||||
|
#endif/*objects_broly_hpp*/
|
||||||
Loading…
Add table
Reference in a new issue