6#include <zenkit/vobs/Misc.hh>
53 void tick(uint64_t dt, uint64_t dtPlayer);
55 Npc*
addNpc(
size_t itemInstance, std::string_view at);
56 Npc*
addNpc(
size_t itemInstance,
const Tempest::Vec3& at);
68 void detectNpc (
const float x,
const float y,
const float z,
const float r,
const std::function<
void(
Npc&)>& f);
69 void detectItem(
const float x,
const float y,
const float z,
const float r,
const std::function<
void(
Item&)>& f);
71 uint32_t
npcId(
const Npc *ptr)
const;
72 size_t npcCount()
const {
return npcArr.size(); }
73 const Npc&
npc(
size_t i)
const {
return *npcArr[i]; }
74 Npc&
npc(
size_t i) {
return *npcArr[i]; }
76 size_t itmCount()
const {
return itemArr.size(); }
77 Item&
itm(
size_t i) {
return *itemArr[i]; }
78 uint32_t
itmId(
const void* ptr)
const;
82 uint32_t
mobsiId(
const void* ptr)
const;
101 Item*
addItem (
size_t itemInstance, std::string_view at);
103 Item*
addItem (
size_t itemInstance,
const Tempest::Vec3& pos);
104 Item*
addItem (
size_t itemInstance,
const Tempest::Vec3& pos,
const Tempest::Vec3& dir);
105 Item*
addItemDyn(
size_t itemInstance,
const Tempest::Matrix4x4& pos,
size_t owner);
108 size_t hasItems(std::string_view tag,
size_t itemCls);
115 void addRoot (
const std::shared_ptr<zenkit::VirtualObject>& vob,
bool startup);
147 std::vector<MobRoutine> routines;
148 int32_t curState = 0;
149 int32_t stateByTime(
gtime t)
const;
156 uint64_t timeUntil = 0;
161 std::vector<CollisionZone*> collisionZn;
162 std::vector<std::unique_ptr<Vob>> rootVobs;
167 std::vector<StaticObj*> objStatic;
168 std::vector<std::unique_ptr<Item>> itemArr;
169 std::list<MobStates> routines;
171 std::list<Bullet> bullets;
172 std::vector<EffectState> effects;
174 std::vector<std::unique_ptr<Npc>> npcArr;
175 std::vector<std::unique_ptr<Npc>> npcInvalid;
176 std::vector<std::unique_ptr<Npc>> npcRemoved;
177 std::vector<Npc*> npcNear;
179 std::vector<AbstractTrigger*> triggers;
180 std::vector<AbstractTrigger*> triggersTk;
181 std::vector<AbstractTrigger*> triggersDef;
182 std::vector<PerceptionMsg> sndPerc;
183 std::vector<TriggerEvent> triggerEvents;
184 CsCamera* currentCsCamera =
nullptr;
187 auto findObj(T &src,
const Npc &pl,
const SearchOpt& opt) ->
typename std::remove_reference<
decltype(src[0])>::type;
190 bool testObj(T &src,
const Npc &pl,
const SearchOpt& opt);
192 bool testObj(T &src,
const Npc &pl,
const SearchOpt& opt,
float& rlen);
194 void setMobState(std::string_view scheme, int32_t st);
197 void tickNear(uint64_t dt);
198 void tickTriggers(uint64_t dt);
199 static bool isTargetedBy(
Npc&
npc,
Npc& by);
Item * validateItem(Item *def)
void addRoot(const std::shared_ptr< zenkit::VirtualObject > &vob, bool startup)
auto takeItem(Item &it) -> std::unique_ptr< Item >
void addInteractive(Interactive *obj)
void load(Serialize &fout)
void detectNpc(const float x, const float y, const float z, const float r, const std::function< void(Npc &)> &f)
CsCamera * currentCs() const
Interactive & mobsi(size_t i)
void tick(uint64_t dt, uint64_t dtPlayer)
Item * findItem(const Npc &pl, Item *def, const SearchOpt &opt)
void enableDefTrigger(AbstractTrigger &trigger)
void enableTicks(AbstractTrigger &t)
uint32_t itmId(const void *ptr) const
void addTrigger(AbstractTrigger *trigger)
void updateAnimation(uint64_t dt)
void setMobRoutine(gtime time, std::string_view scheme, int32_t state)
void detectItem(const float x, const float y, const float z, const float r, const std::function< void(Item &)> &f)
void runEffect(Effect &&e)
Npc * findNpcNear(const Npc &pl, Npc *def, const SearchOpt &opt)
void stopEffect(const VisualFx &vfx)
void invalidateVobIndex()
bool isTargeted(Npc &npc)
Interactive * findInteractive(const Npc &pl, Interactive *def, const SearchOpt &opt)
uint32_t npcId(const Npc *ptr) const
Bullet & shootBullet(const Item &itmId, const Tempest::Vec3 &pos, const Tempest::Vec3 &dir, float tgRange, float speed)
bool triggerOnStart(bool firstTime)
Interactive * validateInteractive(Interactive *def)
void marchInteractives(DbgPainter &p) const
uint32_t mobsiId(const void *ptr) const
Item * addItemDyn(size_t itemInstance, const Tempest::Matrix4x4 &pos, size_t owner)
void save(Serialize &fout)
void enableCollizionZone(CollisionZone &z)
const Npc & npc(size_t i) const
Npc * insertPlayer(std::unique_ptr< Npc > &&npc, std::string_view at)
Npc * validateNpc(Npc *def)
Npc * addNpc(size_t itemInstance, std::string_view at)
void setCurrentCs(CsCamera *cs)
void sendPassivePerc(Npc &self, Npc &other, Npc *victim, Item *itm, int32_t perc)
void addStatic(StaticObj *obj)
void removeItem(Item &it)
size_t hasItems(std::string_view tag, size_t itemCls)
Npc * findNpcByInstance(size_t instance, size_t n=0)
void sendImmediatePerc(Npc &self, Npc &other, Npc &victim, Item *itm, int32_t perc)
auto takeNpc(const Npc *npc) -> std::unique_ptr< Npc >
void onItemRemoved(const Item &itm)
bool testFocusNpc(const Npc &pl, Npc *def, const SearchOpt &opt)
bool execTriggerEvent(const TriggerEvent &e)
void disableCollizionZone(CollisionZone &z)
size_t mobsiCount() const
void detectNpcNear(const std::function< void(Npc &)> &f)
Item * findItemByInstance(size_t instance, size_t n=0)
void triggerEvent(const TriggerEvent &e)
Interactive * availableMob(const Npc &pl, std::string_view name)
void disableTicks(AbstractTrigger &t)
Item * addItem(size_t itemInstance, std::string_view at)
Npc * addNpc(size_t itemInstance, const Tempest::Vec3 &at)
void marchCsCameras(DbgPainter &p) const
static CommandLine * instance
TargetCollect collectAlgo