100 lines
2.8 KiB
C++
Raw Normal View History

2017-01-20 14:36:52 +01:00
#pragma once
2017-01-19 22:23:59 +01:00
namespace Components
{
class Script : public Component
{
public:
Script();
static void AddFunction(const std::string& name, Game::BuiltinFunction func, bool type = false);
static void AddMethod(const std::string& name, Game::BuiltinMethod func, bool type = false);
2017-01-19 22:23:59 +01:00
static Game::client_t* GetClient(const Game::gentity_t* gentity);
2022-06-14 20:43:19 +02:00
static const char* GetCodePosForParam(int index);
2022-11-24 15:30:06 +00:00
// Probably a macro 'originally' but this is fine
static Game::gentity_s* Scr_GetPlayerEntity(Game::scr_entref_t entref)
{
if (entref.classnum != 0)
{
Game::Scr_ObjectError("not an entity");
return nullptr;
}
assert(entref.entnum < Game::MAX_GENTITIES);
auto* ent = &Game::g_entities[entref.entnum];
if (ent->client == nullptr)
{
Game::Scr_ObjectError(Utils::String::VA("entity %i is not a player", entref.entnum));
return nullptr;
}
return ent;
}
2017-01-19 22:23:59 +01:00
private:
struct ScriptFunction
{
Game::BuiltinFunction actionFunc;
bool type;
};
struct ScriptMethod
{
Game::BuiltinMethod actionFunc;
bool type;
};
static std::unordered_map<std::string, ScriptFunction> CustomScrFunctions;
static std::unordered_map<std::string, ScriptMethod> CustomScrMethods;
2017-01-19 22:23:59 +01:00
static std::string ScriptName;
static std::vector<std::string> ScriptNameStack;
static unsigned short FunctionName;
static std::unordered_map<int, std::string> ScriptBaseProgramNum;
2022-06-25 14:22:13 +02:00
static int LastFrameTime;
2022-11-24 15:30:06 +00:00
static std::unordered_map<std::string, int> ScriptMainHandles;
static std::unordered_map<std::string, int> ScriptInitHandles;
2022-06-25 14:22:13 +02:00
2021-11-13 13:15:27 +00:00
static std::unordered_map<const char*, const char*> ReplacedFunctions;
static const char* ReplacedPos;
2017-01-19 22:23:59 +01:00
static void CompileError(unsigned int offset, const char* message, ...);
static void PrintSourcePos(const char* filename, unsigned int offset);
static void FunctionError();
static void StoreFunctionNameStub();
2022-01-23 19:32:20 +00:00
static void RuntimeError(const char* codePos, unsigned int index, const char* msg, const char* dialogMessage);
2017-01-19 22:23:59 +01:00
static void StoreScriptName(const char* name);
static void StoreScriptNameStub();
static void RestoreScriptName();
static void RestoreScriptNameStub();
2022-06-25 14:22:13 +02:00
static void Scr_LoadGameType_Stub();
static void Scr_StartupGameType_Stub();
static void GScr_LoadGameTypeScript_Stub();
2017-04-29 23:08:41 +02:00
2022-04-12 14:34:51 +02:00
static Game::BuiltinFunction BuiltIn_GetFunctionStub(const char** pName, int* type);
static Game::BuiltinMethod BuiltIn_GetMethodStub(const char** pName, int* type);
static void StoreScriptBaseProgramNumStub();
static void StoreScriptBaseProgramNum();
static void Scr_PrintPrevCodePosStub();
static void Scr_PrintPrevCodePos(int);
2017-05-14 20:14:52 +02:00
2021-11-13 13:22:06 +00:00
static unsigned int SetExpFogStub();
2021-11-13 13:15:27 +00:00
static void GetReplacedPos(const char* pos);
static void SetReplacedPos(const char* what, const char* with);
static void VMExecuteInternalStub();
static void AddFunctions();
2017-01-19 22:23:59 +01:00
};
}