3#include <Tempest/Matrix4x4>
31 void setObjMatrix(
const Tempest::Matrix4x4 &m,
bool syncAttach =
false);
81 auto mapBone(
const size_t boneId)
const -> Tempest::Vec3;
96 void startMMAnim (
Npc& npc, std::string_view anim, std::string_view node);
97 void startFaceAnim (
Npc& npc, std::string_view anim,
float intensity, uint64_t duration);
101 bool hasAnim (std::string_view scheme) const;
109 const Tempest::Matrix4x4&
transform()
const {
return pos; }
120 size_t boneId=size_t(-1);
122 std::string_view bone;
124 using MeshAttach = Attach<MeshObjects::Mesh>;
125 using PfxAttach = Attach<Effect>;
129 uint64_t timeUntil=0;
135 std::unique_ptr<ObjVisual> view;
136 size_t boneId=size_t(-1);
143 void bind(PfxAttach& slot,
Effect&& itm, std::string_view bone);
146 void bind(Attach<View>& slot, std::string_view bone);
151 void rebindAttaches(Attach<View>& mesh,
const Skeleton& to);
152 void rebindAttaches(
const Skeleton& to);
154 Tempest::Matrix4x4 pos;
157 MeshAttach head, sword, bow, shield;
158 MeshAttach ammunition, stateItm;
159 std::vector<MeshAttach> item;
160 std::vector<MeshAttach> attach;
162 std::vector<PfxSlot> effects;
167 std::string hnpcVisualName;
168 bool hnpcFlagGhost =
false;
175 std::unique_ptr<Pose> skInst;
std::string_view visualSkeletonScheme() const
void setMagicWeaponKey(World &owner, SpellFxKey key, int32_t keyLvl=0)
bool hasAnim(std::string_view scheme) const
void setArmor(Npc &npc, MeshObjects::Mesh &&armor)
MdlVisual(MdlVisual &&)=default
void setBody(Npc &npc, MeshObjects::Mesh &&body, const int32_t version)
void processLayers(World &world)
void stopDlgAnim(Npc &npc)
bool isUsingTorch() const
void setHeadRotation(float dx, float dz)
auto mapBone(const size_t boneId) const -> Tempest::Vec3
void stopAnim(Npc &npc, std::string_view anim)
void setVisualBody(World &owner, MeshObjects::Mesh &&body)
const Skeleton * visualSkeleton() const
void stopWalkAnim(Npc &npc)
auto mapWeaponBone() const -> Tempest::Vec3
void startEffect(World &owner, Effect &&pfx, int32_t slot, bool noSlot)
uint16_t comboLength() const
void setAmmoItem(MeshObjects::Mesh &&ammo, std::string_view bone)
float viewDirection() const
void setObjMatrix(const Tempest::Matrix4x4 &m, bool syncAttach=false)
void clearSlotItem(std::string_view bone)
void setNpcEffect(World &owner, Npc &npc, std::string_view s, zenkit::NpcFlag flags)
const Animation::Sequence * startAnimItem(Npc &npc, std::string_view scheme, int state)
bool startAnim(Npc &npc, WeaponState st)
const Animation::Sequence * startAnimAndGet(std::string_view name, uint64_t tickCount, bool forceAnim=false)
void save(Serialize &fout, const Npc &npc) const
void setSword(MeshObjects::Mesh &&sword)
MdlVisual(const MdlVisual &)=delete
void setSlotItem(MeshObjects::Mesh &&itm, std::string_view bone)
bool updateAnimation(Npc *npc, Interactive *mobsi, World &world, uint64_t dt, bool force)
MdlVisual & operator=(MdlVisual &&)=default
bool startAnimDialog(Npc &npc)
void delOverlay(std::string_view sk)
auto mapHeadBone() const -> Tempest::Vec3
void setVisual(const Skeleton *visual)
void setStateItem(MeshObjects::Mesh &&itm, std::string_view bone)
void setYTranslationEnable(bool e)
bool setToFightMode(const WeaponState ws)
Tempest::Vec3 displayPosition() const
const Pose & pose() const
void setRangedWeapon(MeshObjects::Mesh &&bow)
WeaponState fightMode() const
void setShield(MeshObjects::Mesh &&shield)
bool setFightMode(zenkit::MdsFightMode mode)
bool processEvents(World &world, uint64_t &barrier, Animation::EvCount &ev)
const Tempest::Matrix4x4 & transform() const
void dropShield(Npc &owner)
Tempest::Vec2 headRotation() const
void addOverlay(const Skeleton *sk, uint64_t time)
void setAnimWhirl(Npc &npc, int dir)
void stopEffect(const VisualFx &vfx)
bool stopItemStateAnim(Npc &npc)
const Animation::Sequence * startAnimSpell(Npc &npc, std::string_view scheme, bool invest)
const Animation::Sequence * continueCombo(Npc &npc, AnimationSolver::Anim a, BodyState bs, WeaponState st, WalkBit wlk)
void load(Serialize &fin, Npc &npc)
void setAnimRotate(Npc &npc, int dir)
void updateWeaponSkeleton(const Item *sword, const Item *bow)
bool hasOverlay(const Skeleton *sk) const
bool isAnimExist(std::string_view name) const
void setMagicWeapon(Effect &&spell, World &owner)
void startFaceAnim(Npc &npc, std::string_view anim, float intensity, uint64_t duration)
void dropWeapon(Npc &owner)
void startMMAnim(Npc &npc, std::string_view anim, std::string_view node)
void emitBlockEffect(Npc &dst, Npc &src)
void setTorch(bool t, World &owner)