11using namespace Tempest;
14 :world(world), scene(scene), visual(visual) {
25 lastUpdate = size_t(-1);
29 static bool disabled =
false;
33 if(lastUpdate>ticks) {
38 uint64_t dt = ticks-lastUpdate;
52 auto dp = viewerPos-pos;
57 for(
auto i=bucket.begin(), end = bucket.end(); i!=end; ) {
66 i.preFrameUpdate(scene, fId);
71 i.drawGBuffer(cmd, scene, fId);
76 i.drawShadow(cmd, scene, fId, layer);
81 i.drawTranslucent(cmd, scene, fId);
88 bucket.emplace_back(decl,*
this,scene,visual);
92PfxBucket& PfxObjects::getBucket(
const Material& mat,
const zenkit::VirtualObject& vob) {
93 Tempest::Vec2 dimension {};
94 if(
auto decal =
dynamic_cast<const zenkit::VisualDecal*
>(vob.visual.get()))
95 dimension = Tempest::Vec2{decal->dimension.x, decal->dimension.y};
97 for(
auto& i:spriteEmit)
98 if(i.pfx->visMaterial==mat &&
99 i.visualCamAlign==vob.sprite_camera_facing_mode &&
101 i.decalDim==dimension) {
102 return getBucket(*i.pfx);
104 spriteEmit.emplace_back();
105 auto& e = spriteEmit.back();
107 e.visualCamAlign = vob.sprite_camera_facing_mode;
109 e.decalDim = dimension;
111 return getBucket(*e.pfx);
void preFrameUpdate(uint8_t fId)
void tick(uint64_t ticks)
void drawGBuffer(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
void drawShadow(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId, int layer)
void setViewerPos(const Tempest::Vec3 &pos)
PfxObjects(WorldView &world, const SceneGlobals &scene, VisualObjects &visual)
bool isInPfxRange(const Tempest::Vec3 &pos) const
void drawTranslucent(Tempest::Encoder< Tempest::CommandBuffer > &cmd, uint8_t fId)
static constexpr const float viewRage