2020-12-18 22:21:10 +00:00
|
|
|
#ifndef GAME_MWBASE_LUAMANAGER_H
|
|
|
|
#define GAME_MWBASE_LUAMANAGER_H
|
|
|
|
|
2021-06-26 21:10:24 +00:00
|
|
|
#include <variant>
|
2020-12-18 22:21:10 +00:00
|
|
|
#include <SDL_events.h>
|
|
|
|
|
|
|
|
namespace MWWorld
|
|
|
|
{
|
|
|
|
class Ptr;
|
|
|
|
}
|
|
|
|
|
2021-01-29 01:38:09 +00:00
|
|
|
namespace Loading
|
|
|
|
{
|
|
|
|
class Listener;
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace ESM
|
|
|
|
{
|
|
|
|
class ESMReader;
|
|
|
|
class ESMWriter;
|
2021-04-23 00:49:12 +00:00
|
|
|
struct LuaScripts;
|
2021-01-29 01:38:09 +00:00
|
|
|
}
|
|
|
|
|
2020-12-18 22:21:10 +00:00
|
|
|
namespace MWBase
|
|
|
|
{
|
|
|
|
|
|
|
|
class LuaManager
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual ~LuaManager() = default;
|
|
|
|
|
|
|
|
virtual void newGameStarted() = 0;
|
2021-04-19 11:33:25 +00:00
|
|
|
virtual void registerObject(const MWWorld::Ptr& ptr) = 0;
|
|
|
|
virtual void deregisterObject(const MWWorld::Ptr& ptr) = 0;
|
2021-04-21 02:11:11 +00:00
|
|
|
virtual void objectAddedToScene(const MWWorld::Ptr& ptr) = 0;
|
|
|
|
virtual void objectRemovedFromScene(const MWWorld::Ptr& ptr) = 0;
|
|
|
|
virtual void appliedToObject(const MWWorld::Ptr& toPtr, std::string_view recordId, const MWWorld::Ptr& fromPtr) = 0;
|
|
|
|
// TODO: notify LuaManager about other events
|
|
|
|
// virtual void objectOnHit(const MWWorld::Ptr &ptr, float damage, bool ishealth, const MWWorld::Ptr &object,
|
|
|
|
// const MWWorld::Ptr &attacker, const osg::Vec3f &hitPosition, bool successful) = 0;
|
2020-12-18 22:21:10 +00:00
|
|
|
|
2021-06-26 21:10:24 +00:00
|
|
|
struct InputEvent
|
|
|
|
{
|
|
|
|
enum {KeyPressed, KeyReleased, ControllerPressed, ControllerReleased, Action} mType;
|
|
|
|
std::variant<SDL_Keysym, int> mValue;
|
|
|
|
};
|
|
|
|
virtual void inputEvent(const InputEvent& event) = 0;
|
|
|
|
|
2021-04-23 00:49:12 +00:00
|
|
|
struct ActorControls
|
|
|
|
{
|
2021-07-12 09:01:32 +00:00
|
|
|
bool mDisableAI = false;
|
2021-08-02 23:40:44 +00:00
|
|
|
bool mChanged = false;
|
2021-07-12 09:01:32 +00:00
|
|
|
|
|
|
|
bool mJump = false;
|
|
|
|
bool mRun = false;
|
|
|
|
float mMovement = 0;
|
|
|
|
float mSideMovement = 0;
|
|
|
|
float mTurn = 0;
|
2020-12-18 22:21:10 +00:00
|
|
|
};
|
|
|
|
|
2021-04-18 20:09:01 +00:00
|
|
|
virtual ActorControls* getActorControls(const MWWorld::Ptr&) const = 0;
|
2020-12-18 22:21:10 +00:00
|
|
|
|
|
|
|
virtual void clear() = 0;
|
|
|
|
virtual void setupPlayer(const MWWorld::Ptr&) = 0;
|
2021-01-29 01:38:09 +00:00
|
|
|
|
|
|
|
// Saving
|
|
|
|
int countSavedGameRecords() const { return 1; };
|
|
|
|
virtual void write(ESM::ESMWriter& writer, Loading::Listener& progress) = 0;
|
|
|
|
virtual void saveLocalScripts(const MWWorld::Ptr& ptr, ESM::LuaScripts& data) = 0;
|
|
|
|
|
|
|
|
// Loading from a save
|
|
|
|
virtual void readRecord(ESM::ESMReader& reader, uint32_t type) = 0;
|
|
|
|
virtual void loadLocalScripts(const MWWorld::Ptr& ptr, const ESM::LuaScripts& data) = 0;
|
|
|
|
|
|
|
|
// Should be called before loading. The map is used to fix refnums if the order of content files was changed.
|
|
|
|
virtual void setContentFileMapping(const std::map<int, int>&) = 0;
|
2021-04-12 01:15:17 +00:00
|
|
|
|
|
|
|
// Drops script cache and reloads all scripts. Calls `onSave` and `onLoad` for every script.
|
|
|
|
virtual void reloadAllScripts() = 0;
|
2020-12-18 22:21:10 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // GAME_MWBASE_LUAMANAGER_H
|