mirror of
https://github.com/Almamu/linux-wallpaperengine.git
synced 2025-07-15 22:02:29 +08:00

+ Added partial parsing of particles + Support for particle emitter parsing + Support for particle initializers parsing + Support for particle controlpoints parsing Signed-off-by: Alexis Maiquez <almamu@almamu.com>
110 lines
2.5 KiB
C++
110 lines
2.5 KiB
C++
#include "emitter.h"
|
|
|
|
#include "../../../core.h"
|
|
|
|
using namespace wp::core::objects::particles;
|
|
|
|
emitter* emitter::fromJSON (json data)
|
|
{
|
|
json::const_iterator directions_it = data.find ("directions");
|
|
json::const_iterator distancemax_it = data.find ("distancemax");
|
|
json::const_iterator distancemin_it = data.find ("distancemin");
|
|
json::const_iterator id_it = data.find ("id");
|
|
json::const_iterator name_it = data.find ("name");
|
|
json::const_iterator origin_it = data.find ("origin");
|
|
json::const_iterator rate_it = data.find ("rate");
|
|
|
|
if (directions_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have direction specified");
|
|
}
|
|
|
|
if (distancemax_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have maximum distance");
|
|
}
|
|
|
|
if (distancemin_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have minimum distance");
|
|
}
|
|
|
|
if (id_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have an id");
|
|
}
|
|
|
|
if (name_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have a name");
|
|
}
|
|
|
|
if (origin_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have an origin");
|
|
}
|
|
|
|
if (rate_it == data.end ())
|
|
{
|
|
throw std::runtime_error ("Particle emitter must have a rate");
|
|
}
|
|
|
|
return new emitter (
|
|
wp::core::ato3vf (*directions_it),
|
|
*distancemax_it,
|
|
*distancemin_it,
|
|
*id_it,
|
|
*name_it,
|
|
wp::core::ato3vf (*origin_it),
|
|
*rate_it
|
|
);
|
|
}
|
|
|
|
emitter::emitter (
|
|
const irr::core::vector3df& directions,
|
|
irr::u32 distancemax,
|
|
irr::u32 distancemin,
|
|
irr::u32 id,
|
|
std::string name,
|
|
const irr::core::vector3df& origin,
|
|
irr::f64 rate):
|
|
m_directions (directions),
|
|
m_distancemax (distancemax),
|
|
m_distancemin (distancemin),
|
|
m_id (id),
|
|
m_name (std::move(name)),
|
|
m_origin (origin),
|
|
m_rate (rate)
|
|
{
|
|
}
|
|
|
|
|
|
const std::string& emitter::getName () const
|
|
{
|
|
return this->m_name;
|
|
}
|
|
|
|
irr::u32 emitter::getDistanceMax () const
|
|
{
|
|
return this->m_distancemax;
|
|
}
|
|
|
|
irr::u32 emitter::getDistanceMin () const
|
|
{
|
|
return this->m_distancemin;
|
|
}
|
|
|
|
irr::core::vector3df* emitter::getDirections ()
|
|
{
|
|
return &this->m_directions;
|
|
}
|
|
|
|
irr::core::vector3df* emitter::getOrigin ()
|
|
{
|
|
return &this->m_origin;
|
|
}
|
|
|
|
irr::f64 emitter::getRate () const
|
|
{
|
|
return this->m_rate;
|
|
} |