mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-10 19:01:50 +00:00
Broly: separate explosion behavior from main class
This commit is contained in:
parent
b5062e8627
commit
df023246a5
2 changed files with 21 additions and 13 deletions
|
|
@ -10,6 +10,8 @@
|
||||||
#include "broly.hpp"
|
#include "broly.hpp"
|
||||||
|
|
||||||
#include "../doomstat.h"
|
#include "../doomstat.h"
|
||||||
|
#include "../k_kart.h"
|
||||||
|
#include "../sounds.h"
|
||||||
|
|
||||||
using namespace srb2::objects;
|
using namespace srb2::objects;
|
||||||
|
|
||||||
|
|
@ -18,7 +20,15 @@ Obj_SpawnBrolyKi
|
||||||
( mobj_t * source,
|
( mobj_t * source,
|
||||||
tic_t duration)
|
tic_t duration)
|
||||||
{
|
{
|
||||||
return Broly::spawn(static_cast<Mobj*>(source), duration, {64 * mapobjectscale, 0});
|
Broly* x = Broly::spawn<Broly>(static_cast<Mobj*>(source), duration, {64 * mapobjectscale, 0});
|
||||||
|
|
||||||
|
x->colorized = true;
|
||||||
|
x->color = source->color;
|
||||||
|
|
||||||
|
K_ReduceVFXForEveryone(x);
|
||||||
|
x->voice(sfx_cdfm74);
|
||||||
|
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,11 @@
|
||||||
#ifndef objects_broly_hpp
|
#ifndef objects_broly_hpp
|
||||||
#define objects_broly_hpp
|
#define objects_broly_hpp
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
#include "objects.hpp"
|
#include "objects.hpp"
|
||||||
|
|
||||||
#include "../info.h"
|
#include "../info.h"
|
||||||
#include "../k_kart.h"
|
|
||||||
#include "../m_easing.h"
|
#include "../m_easing.h"
|
||||||
|
|
||||||
namespace srb2::objects
|
namespace srb2::objects
|
||||||
|
|
@ -21,6 +22,8 @@ namespace srb2::objects
|
||||||
|
|
||||||
struct Broly : Mobj
|
struct Broly : Mobj
|
||||||
{
|
{
|
||||||
|
static constexpr mobjtype_t kMobjType = MT_BROLY;
|
||||||
|
|
||||||
/* An object may not be visible on the same tic:
|
/* An object may not be visible on the same tic:
|
||||||
1) that it spawned
|
1) that it spawned
|
||||||
2) that it cycles to the next state */
|
2) that it cycles to the next state */
|
||||||
|
|
@ -45,33 +48,28 @@ struct Broly : Mobj
|
||||||
|
|
||||||
Fixed linear() const { return (remaining() * FRACUNIT) / duration(); }
|
Fixed linear() const { return (remaining() * FRACUNIT) / duration(); }
|
||||||
|
|
||||||
static Broly* spawn(Mobj* source, tic_t duration, const Vec2<Fixed>& size)
|
template <typename T>
|
||||||
|
static T* spawn(Mobj* source, tic_t duration, const Vec2<Fixed>& size)
|
||||||
{
|
{
|
||||||
|
static_assert(std::is_base_of_v<Broly, T>);
|
||||||
|
|
||||||
if (duration == 0)
|
if (duration == 0)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Broly* x = source->spawn_from<Broly>({}, MT_BROLY);
|
T* x = Mobj::spawn<T>(source->center(), T::kMobjType);
|
||||||
|
|
||||||
x->target(source);
|
x->target(source);
|
||||||
|
|
||||||
// Shrink into center of source object.
|
// Shrink into center of source object.
|
||||||
x->z = source->center().z - (x->height / 2);
|
x->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->size(size);
|
||||||
x->duration(duration);
|
x->duration(duration);
|
||||||
|
|
||||||
x->tics = (duration + kBufferTics);
|
x->tics = (duration + kBufferTics);
|
||||||
|
|
||||||
K_ReduceVFXForEveryone(x);
|
|
||||||
|
|
||||||
x->voice(sfx_cdfm74);
|
|
||||||
|
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue