colobot/colobot-base/script/scriptfunc.h

171 lines
11 KiB
C++

/*
* This file is part of the Colobot: Gold Edition source code
* Copyright (C) 2001-2023, Daniel Roux, EPSITEC SA & TerranovaTeam
* http://epsitec.ch; http://colobot.info; http://github.com/colobot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://gnu.org/licenses
*/
/**
* \file script/scriptfunc.h
* \brief CBot script functions
*/
#pragma once
#include "CBot/CBot.h"
#include "common/error.h"
#include <string>
#include <unordered_map>
#include <memory>
class CObject;
class CScript;
class CExchangePost;
namespace CBot
{
class CBotVar;
}
class CScriptFunctions
{
public:
static void Init();
static CBot::CBotVar* CreateObjectVar(CObject* obj);
static void DestroyObjectVar(CBot::CBotVar* botVar, bool permanent);
static bool CheckOpenFiles();
private:
static CBot::CBotTypResult cEndMission(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cPlayMusic(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cGetObject(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cDelete(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cSearch(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cSearchAll(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cRadar(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cRadarAll(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cDetect(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cDirection(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cProduce(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cDistance(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cSpace(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cFlatSpace(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cFlatGround(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cGoto(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cGrabDrop(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cReceive(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cSend(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cDeleteInfo(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cTestInfo(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cShield(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cFire(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cAim(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cMotor(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cTopo(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cMessage(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cPenDown(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cIsBusy(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cFactory(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cResearch(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cOnePoint(CBot::CBotVar* &var, void* user);
static CBot::CBotTypResult cOneObject(CBot::CBotVar* &var, void* user);
static bool rEndMission(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rPlayMusic(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rStopMusic(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGetBuild(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGetResearchEnable(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGetResearchDone(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSetBuild(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSetResearchEnable(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSetResearchDone(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGetObjectById(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGetObject(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDelete(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSearch(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSearchAll(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rRadar(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rRadarAll(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDetect(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDirection(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rCanBuild(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rCanResearch(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rResearched(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rBuildingEnabled(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rBuild(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rFlag(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDeflag(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rProduce(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDistance(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDistance2d(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSpace(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rFlatSpace(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rFlatGround(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rWait(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rMove(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rTurn(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGoto(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rGrab(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDrop(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSniff(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rReceive(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rSend(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDeleteInfo(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rTestInfo(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rThump(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rRecycle(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rShield(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rFire(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rAim(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rMotor(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rJet(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rTopo(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rMessage(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rCmdline(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rIsMovie(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rErrMode(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rIPF(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rAbsTime(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rPenDown(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rPenUp(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rPenColor(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rPenWidth(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rCameraFocus(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rIsBusy(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rTakeOff(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rFactory(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rResearch(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static bool rDestroy(CBot::CBotVar* var, CBot::CBotVar* result, int& exception, void* user);
static CBot::CBotTypResult cClassNull(CBot::CBotVar* thisclass, CBot::CBotVar* &var);
static CBot::CBotTypResult cClassOneFloat(CBot::CBotVar* thisclass, CBot::CBotVar* &var);
static CBot::CBotTypResult cPointConstructor(CBot::CBotVar* pThis, CBot::CBotVar* &var);
static bool rPointConstructor(CBot::CBotVar* pThis, CBot::CBotVar* var, CBot::CBotVar* pResult, int& Exception, void* user);
static void uObject(CBot::CBotVar* botThis, void* user);
private:
static bool WaitForForegroundTask(CScript* script, CBot::CBotVar* result, int &exception);
static bool WaitForBackgroundTask(CScript* script, CBot::CBotVar* result, int &exception);
static bool ShouldTaskStop(Error err, int errMode);
static CExchangePost* FindExchangePost(CObject* object, float power);
};