Files
2018-07-17 14:15:37 +02:00

129 lines
3.7 KiB
C++

#pragma once
#include "angelscript.h"
#include "util/refcount.h"
#include "rect.h"
#include "scripts/script_bind.h"
#include "network/message.h"
#include <map>
struct Player;
struct Image;
class Object;
class SaveMessage;
namespace net { struct Message; };
namespace scripts {
class Manager;
void RegisterServerBinds(asIScriptEngine* engine);
void RegisterClientBinds(asIScriptEngine* engine);
void RegisterMenuBinds(asIScriptEngine* engine);
void RegisterShadowBinds(asIScriptEngine* engine);
void RegisterObjectDefinitions();
void RegisterObjectBinds(bool declarations, bool server, bool shadow);
void RegisterEmpireBinds(bool declarations, bool server);
void RegisterDesignBinds(bool server, bool declarations);
void RegisterGeneralBinds(bool server, bool shadow);
void RegisterGuiBinds();
void RegisterDataBinds();
void RegisterThreadingBinds();
void RegisterRenderBinds(bool decl, bool isMenu, bool server);
void RegisterParticleSystemBinds();
void RegisterProfileBinds();
void RegisterInspectionBinds();
void RegisterMenuBinds(bool ingame);
void RegisterJoystickBinds();
void RegisterObjectCreation(bool declarations);
void RegisterEventBinds(bool server, bool shadow, bool menu);
void RegisterSoundBinds();
void RegisterDynamicTypes(bool server);
void RegisterNetworkBinds(bool server);
void RegisterDatafiles();
void RegisterScriptHooks();
void RegisterFormulaBinds(bool server);
void RegisterSaveFileBinds(bool server, bool decl);
void RegisterJSONBinds();
void RegisterWebBinds();
void RegisterIRCBinds();
void buildEmpAttribIndices();
void SetObjectTypeOffsets();
void LoadScriptHooks(const std::string& filename);
void ClearEvents();
void ReadEvents(const std::string& filename);
void BindEventBinds(bool menu = false);
scripts::Manager* handleEventMessage(Player* from, net::Message& msg, bool interceptMenu = false);
void handleObjectComponentMessage(Player* from, net::Message& msg);
void handleEmpireComponentMessage(Player* from, net::Message& msg);
bool isAccessible(const std::string& filename);
void addNamespaceState();
void setClip(const recti& clip);
void resetClip();
recti* getClip();
struct ScriptImage;
ScriptImage* makeScriptImage(Image* img);
struct YieldedMessage {
net::Message msg;
YieldedMessage* next;
bool written;
bool read;
YieldedMessage()
: next(0), written(false), read(false) {
}
};
SaveMessage& saveObject(SaveMessage& msg, Object* obj);
SaveMessage& loadObject(SaveMessage& msg, Object** obj);
struct ObjectDesc;
Object* makeObject(ObjectDesc& desc);
YieldedMessage* StartYieldContext();
void EndYieldContext();
void scr_loadGame(const std::string& fname);
//Specialized array used to send objects to scripts
struct ObjArray : public AtomicRefCounted {
std::vector<Object*> objs;
ObjArray();
ObjArray(unsigned count);
static ObjArray* create();
static ObjArray* create_n(unsigned count);
void operator=(const ObjArray& other);
bool empty() const;
unsigned size() const;
void reserve(unsigned size);
void resize(unsigned size);
void clear();
Object*& operator[](unsigned index);
Object*& last();
Object* index_value(unsigned index);
Object* last_value();
void erase(unsigned index);
void insert(unsigned index, Object* obj);
void push_back(Object* obj);
void pop_back();
void sortAsc_bound(unsigned lower, unsigned upper);
void sortAsc();
void sortDesc_bound(unsigned lower, unsigned upper);
void sortDesc();
int find(const Object* obj) const;
void remove(const Object* obj);
int findSorted(const Object* obj) const;
void removeSorted(const Object* obj);
};
};
void writeObject(net::Message& msg, Object* obj, bool includeType = true);
Object* readObject(net::Message& msg, bool create = true, int knownType = -1);