3#include <Tempest/VertexBuffer>
4#include <Tempest/IndexBuffer>
5#include <Tempest/Matrix4x4>
9#include <zenkit/World.hh>
35 World(
GameSession& game, std::string_view file,
bool startup, std::function<
void(
int)> loadProgress);
39 void insertPlayer(std::unique_ptr<Npc>&& npc, std::string_view waypoint);
42 std::string_view
name()
const {
return wname; }
47 uint32_t
npcId(
const Npc* ptr)
const;
54 uint32_t
itmId(
const void* ptr)
const;
74 void detectNpc (
const Tempest::Vec3& p,
const float r,
const std::function<
void(
Npc&)>& f);
75 void detectItem(
const Tempest::Vec3& p,
const float r,
const std::function<
void(
Item&)>& f);
97 MeshObjects::Mesh
addView(std::string_view visual, int32_t headTex, int32_t teetTex, int32_t bodyColor) const;
114 std::string_view
roomAt(
const Tempest::Vec3& arr);
117 void tick(uint64_t dt);
154 Npc*
addNpc (
size_t npcInstance, std::string_view at);
155 Npc*
addNpc (
size_t npcInstance,
const Tempest::Vec3& at);
158 Item*
addItem (
size_t itemInstance, std::string_view at);
160 Item*
addItem (
size_t itemInstance,
const Tempest::Vec3& pos);
161 Item*
addItemDyn (
size_t itemInstance,
const Tempest::Matrix4x4& pos,
size_t owner);
164 size_t hasItems(std::string_view tag,
size_t itemCls);
180 void addDlgSound(std::string_view s,
const Tempest::Vec3& pos,
float range, uint64_t &timeLen);
188 void addStartPoint (
const Tempest::Vec3& pos,
const Tempest::Vec3& dir, std::string_view
name);
189 void addFreePoint (
const Tempest::Vec3& pos,
const Tempest::Vec3& dir, std::string_view
name);
190 void addSound (
const zenkit::VirtualObject& vob);
199 std::unique_ptr<WayMatrix> wmatrix;
201 struct BspSector final {
212 Npc* npcPlayer=
nullptr;
214 std::unique_ptr<DynamicWorld> wdynamic;
215 std::unique_ptr<WorldView> wview;
216 std::unique_ptr<GlobalEffects> globFx;
219 std::unique_ptr<Npc> lvlInspector;
221 auto roomAt(
const zenkit::BspNode &node) -> std::string_view;
222 auto portalAt(std::string_view tag) -> BspSector*;
224 void initScripts(
bool firstTime);
226 Sound addHitEffect(std::string_view src, std::string_view reciver, std::string_view scheme,
const Tempest::Matrix4x4& pos);
auto version() const -> const VersionInfo &
void sendPassivePerc(Npc &self, Npc &other, int32_t perc)
int32_t guildOfRoom(const Tempest::Vec3 &pos)
CsCamera * currentCs() const
void save(Serialize &fout)
void triggerOnStart(bool firstTime)
void addDlgSound(std::string_view s, const Tempest::Vec3 &pos, float range, uint64_t &timeLen)
std::vector< zenkit::BspSector > sectors
void runEffect(Effect &&e)
void marchCsCameras(DbgPainter &p) const
size_t hasItems(std::string_view tag, size_t itemCls)
void triggerChangeWorld(std::string_view world, std::string_view wayPoint)
void disableCollizionZone(CollisionZone &z)
void scaleTime(uint64_t &dt)
LightGroup::Light addLight(const zenkit::VLight &vob)
void triggerEvent(const TriggerEvent &e)
AiOuputPipe * openDlgOuput(Npc &player, Npc &npc)
const WayPoint * findNextWayPoint(const Npc &npc) const
Interactive * findInteractive(const Npc &pl)
DynamicWorld * physic() const
bool isTargeted(Npc &npc)
void load(Serialize &fin)
MeshObjects::Mesh addAtachView(const ProtoMesh::Attach &visual, const int32_t version)
std::string_view roomAt(const Tempest::Vec3 &arr)
Interactive * availableMob(const Npc &pl, std::string_view name)
Focus validateFocus(const Focus &def)
void enableCollizionZone(CollisionZone &z)
auto takeHero() -> std::unique_ptr< Npc >
WayPath wayTo(const Npc &pos, const WayPoint &end) const
uint64_t tickCount() const
bool isCutsceneLock() const
GameSession & gameSession() const
Npc * addNpc(std::string_view name, std::string_view at)
const WayPoint * findNextFreePoint(const Npc &pos, std::string_view name) const
void sendImmediatePerc(Npc &self, Npc &other, Npc &victim, int32_t perc)
void enableTicks(AbstractTrigger &t)
Sound addLandHitEffect(ItemMaterial src, zenkit::MaterialGroup reciver, const Tempest::Matrix4x4 &pos)
const WayPoint * findPoint(std::string_view name, bool inexact=true) const
uint32_t itmId(const void *ptr) const
void detectNpcNear(std::function< void(Npc &)> f)
bool testFocusNpc(Npc *def)
void invalidateVobIndex()
Item * itmById(uint32_t id)
void insertPlayer(std::unique_ptr< Npc > &&npc, std::string_view waypoint)
Sound addWeaponBlkEffect(ItemMaterial src, ItemMaterial reciver, const Tempest::Matrix4x4 &pos)
uint32_t npcId(const Npc *ptr) const
uint32_t mobsiId(const Interactive *ptr) const
void disableTicks(AbstractTrigger &t)
Npc * findNpcByInstance(size_t instance, size_t n=0)
bool isInSfxRange(const Tempest::Vec3 &pos) const
std::vector< std::uint64_t > leaf_node_indices
void updateAnimation(uint64_t dt)
Item * addItemDyn(size_t itemInstance, const Tempest::Matrix4x4 &pos, size_t owner)
void addTrigger(AbstractTrigger *trigger)
void removeItem(Item &it)
void createPlayer(std::string_view cls)
const WayPoint & deadPoint() const
GlobalEffects * globalFx() const
void detectItem(const Tempest::Vec3 &p, const float r, const std::function< void(Item &)> &f)
Npc * npcById(uint32_t id)
std::string_view name() const
void marchPoints(DbgPainter &p) const
Item * addItem(size_t itemInstance, std::string_view at)
auto takeItem(Item &it) -> std::unique_ptr< Item >
void addSound(const zenkit::VirtualObject &vob)
GlobalFx addGlobalEffect(std::string_view what, uint64_t len, const std::string *argv, size_t argc)
void addFreePoint(const Tempest::Vec3 &pos, const Tempest::Vec3 &dir, std::string_view name)
bool isInPfxRange(const Tempest::Vec3 &pos) const
void setCurrentCs(CsCamera *cs)
void detectNpc(const Tempest::Vec3 &p, const float r, const std::function< void(Npc &)> &f)
Interactive * mobsiById(uint32_t id)
void stopEffect(const VisualFx &vfx)
MeshObjects::Mesh addView(std::string_view visual) const
std::vector< BspSector > sectorsData
void enableDefTrigger(AbstractTrigger &t)
std::vector< zenkit::BspNode > nodes
uint32_t npcCount() const
const WayPoint * findFreePoint(const Npc &pos, std::string_view name) const
const WayPoint & startPoint() const
void setMobRoutine(gtime time, std::string_view scheme, int32_t state)
const WayPoint * findWayPoint(std::string_view name) const
void addStartPoint(const Tempest::Vec3 &pos, const Tempest::Vec3 &dir, std::string_view name)
void aiOutputSound(Npc &player, std::string_view msg)
void setDayTime(int32_t h, int32_t min)
MeshObjects::Mesh addStaticView(const ProtoMesh *visual, bool staticDraw)
Sound addWeaponHitEffect(Npc &src, const Bullet *srcArrow, Npc &reciver)
const WayPoint * findNextPoint(const WayPoint &pos) const
World(const World &)=delete
Item * findItemByInstance(size_t instance, size_t n=0)
void assignRoomToGuild(std::string_view room, int32_t guildId)
GameScript & script() const
void marchInteractives(DbgPainter &p) const
MeshObjects::Mesh addDecalView(const zenkit::VisualDecal &decal)
void addInteractive(Interactive *inter)
Bullet & shootSpell(const Item &itm, const Npc &npc, const Npc *target)
Focus findFocus(const Npc &pl, const Focus &def)
void execTriggerEvent(const TriggerEvent &e)
Bullet & shootBullet(const Item &itmId, const Npc &npc, const Npc *target, const Interactive *inter)
static CommandLine * instance