linux-wallpaperengine/wallpaperengine/core/objects/particles/emitter.cpp
Alexis Maiquez c2bc23414e + Added string to integer color conversion
+ 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>
2019-08-14 16:55:15 +02:00

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;
}