8using namespace Tempest;
18 if(
auto decal =
dynamic_cast<const zenkit::VisualDecal*
>(vob.visual.get())) {
20 2.f*decal->dimension.y);
33 visYawAlign = vob.sprite_camera_facing_mode==zenkit::SpriteAlignment::YAW;
41 ppsValue = std::max(0.f,src.pps_value);
45 ppsFPS = src.pps_fps>0 ? src.pps_fps : 1.f;
49 shpType = loadEmitType(src.shp_type_s);
50 shpFOR = loadFrameType(src.shp_for_s);
64 dirMode = loadDirType(src.dir_mode_s);
65 dirFOR = loadFrameType(src.dir_for_s);
162 auto time = std::max(v0,v1);
164 time = std::max<uint64_t>(1,time);
193uint64_t ParticleFx::calcPrefferedTimeSingle()
const {
199uint64_t ParticleFx::calcPrefferedTimeSingle(
const KeyList& k,
float fps) {
200 if(k.size()==0 || fps<=0.f)
203 float raw = float(k.size())*1000.f/fps;
204 if(raw>
float(std::numeric_limits<uint32_t>::max()))
207 auto sec = std::max<uint64_t>(1,uint64_t(std::ceil(raw)));
211const Tempest::Texture2d* ParticleFx::loadTexture(std::string_view src) {
220 std::vector<float> v;
222 const char* str = src.c_str();
225 float f = std::strtof(str,&next);
261 if(src==
"RAND" || src==
"RANDOM")
267 if(src==
"WALK" || src==
"WALKW")
292float ParticleFx::fetchScaleKey(uint64_t time,
const KeyList& keys,
float fps,
bool smooth,
bool loop)
const {
296 uint64_t timeScaled = uint64_t(fps*
float(time));
297 size_t at = size_t(timeScaled/1000);
298 float alpha = float(timeScaled%1000)/1000.f;
300 size_t frameA = 0, frameB = 0;
302 frameA = (at )%keys.size();
303 frameB = (at+1)%keys.size();
305 frameA = std::min(at, keys.size()-1);
306 frameB = std::min(at+1,keys.size()-1);
308 float k0 = keys[frameA];
309 float k1 = keys[frameB];
311 return k0+alpha*(k1-k0);
auto loadParticleFx(std::string_view name, bool relaxed=false) -> const ParticleFx *
const Tempest::Texture2d * trlTexture
const Tempest::Texture2d * mrkTexture
uint64_t ppsCreateEmDelay
Tempest::Vec3 visTexColorStart
const ParticleFx * ppsCreateEm
uint64_t effectPrefferedTime() const
std::string timeStartEnd_S
const PfxEmitterMesh * shpMesh
float shpDistribWalkSpeed
Tempest::Vec3 visTexColorEnd
ParticleFx(const Material &mat, const zenkit::VirtualObject &vob)
uint64_t maxLifetime() const
Tempest::Vec2 visSizeStart
Tempest::Vec3 shpOffsetVec
float ppsScale(uint64_t time) const
Orientation visOrientation
float shpScale(uint64_t time) const
Distribution shpDistribType
Tempest::Vec3 dirModeTargetPos
std::vector< float > KeyList
static const PfxEmitterMesh * loadEmiterMesh(std::string_view name)
static const Tempest::Texture2d * loadTexture(std::string_view name, bool forceMips=false)
static const Tempest::Texture2d & fallbackBlack()
std::string pfx_shpDistribType_S
std::string pfx_dirModeTargetFOR_S
std::string pfx_dirModeTargetPos_S
float pfx_shpDistribWalkSpeed
std::string pfx_dirMode_S
Tempest::Vec3 loadVec3(std::string_view src)
Tempest::Vec2 loadVec2(std::string_view src)