22 mdl = std::move(other.mdl);
25 mesh = std::move(other.mesh);
27 pfx = std::move(other.pfx);
30 bundle = std::move(other.bundle);
45 mdl = std::move(other.mdl);
48 mesh = std::move(other.mesh);
50 pfx = std::move(other.pfx);
53 bundle = std::move(other.bundle);
65 return mdl.view.save(fout,mob);
70 return mdl.view.load(fin,mob);
73void ObjVisual::cleanup() {
93void ObjVisual::setType(Type t) {
131 const bool enableCollision = vob.cd_dynamic;
132 std::string_view visName = vob.visual->name;
140 switch (vob.visual->type) {
141 case zenkit::VisualType::MESH:
142 case zenkit::VisualType::MULTI_RESOLUTION_MESH: {
148 if(vob.show_visual) {
150 mesh.view.
setWind(vob.anim_mode,vob.anim_strength);
153 const bool windy = (vob.anim_mode!=zenkit::AnimationType::NONE && vob.anim_strength>0);
154 if(vob.show_visual && enableCollision && !windy) {
159 case zenkit::VisualType::MODEL:
160 case zenkit::VisualType::MORPH_MESH:{
162 auto visual = std::string(visName);
170 mdl.view.setYTranslationEnable(
false);
171 mdl.view.setVisual(view->skeleton.get());
173 if(vob.show_visual) {
174 if((view->skeleton==
nullptr || view->skeleton->animation()==
nullptr) && enableCollision)
176 mdl.view.setVisualBody(world,world.
addView(view));
179 if(vob.show_visual && enableCollision) {
181 mdl.physic.setSkeleton(view->skeleton.get());
185 case zenkit::VisualType::DECAL: {
187 if(vob.sprite_camera_facing_mode!=zenkit::SpriteAlignment::NONE) {
193 else if(
auto decal =
dynamic_cast<const zenkit::VisualDecal*
>(vob.visual.get())) {
199 case zenkit::VisualType::PARTICLE_EFFECT: {
207 case zenkit::VisualType::AI_CAMERA:
208 case zenkit::VisualType::UNKNOWN:
218 mdl.view.setObjMatrix(obj,
true);
219 mdl.physic.setObjMatrix(obj);
222 mesh.view.setObjMatrix(obj);
223 mesh.physic.setObjMatrix(obj);
236 mdl.view.setSlotItem(std::move(itm), slot);
245 mdl.physic.setInteractive(it);
248 mesh.physic.setInteractive(it);
258 return mdl.view.startAnimAndGet(name,tickCount,force);
265 return mdl.view.isAnimExist(name);
271 bool ret =
mdl.view.updateAnimation(npc,mobsi,world,dt,force);
273 mdl.view.syncAttaches();
281 mdl.view.processLayers(world);
287 mdl.physic.setPose(
mdl.view.pose());
302 return mdl.view.pose().bone(i);
303 static const Tempest::Matrix4x4 m;
void setWind(zenkit::AnimationType m, float intensity)
void setObjMatrix(const Tempest::Matrix4x4 &obj)
void save(Serialize &fout, const Interactive &mob) const
void load(Serialize &fin, Interactive &mob)
void setSlotItem(MeshObjects::Mesh &&itm, std::string_view slot)
bool updateAnimation(Npc *npc, Interactive *mobsi, World &world, uint64_t dt, bool force)
bool isAnimExist(std::string_view name) const
void setVisual(const zenkit::IItem &visual, World &world, bool staticDraw)
void setInteractive(Interactive *it)
const ProtoMesh * protoMesh() const
ObjVisual & operator=(ObjVisual &&other)
const Animation::Sequence * startAnimAndGet(std::string_view name, uint64_t tickCount, bool force=false)
void processLayers(World &world)
const Tempest::Matrix4x4 & bone(size_t i) const
void setLooped(bool loop)
void setObjMatrix(const Tempest::Matrix4x4 &mt)
static const ProtoMesh * loadMesh(std::string_view name)
void setObjMatrix(const Tempest::Matrix4x4 &obj)
DynamicWorld * physic() const
MeshObjects::Mesh addView(std::string_view visual) const
MeshObjects::Mesh addStaticView(const ProtoMesh *visual, bool staticDraw)
MeshObjects::Mesh addDecalView(const zenkit::VisualDecal &decal)
bool exchangeExt(std::string &s, const char *extIn, const char *extOut)
bool hasExt(std::string_view s, const char *extIn)