[colobot] 245/390: Moved "file" CBot class (CRobotMain -> CScript)
Didier Raboud
odyx at moszumanska.debian.org
Fri Jun 12 14:21:50 UTC 2015
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch upstream/latest
in repository colobot.
commit ce27a80caa282a74749626d2a274c1c2209def90
Author: krzys-h <krzys_h at interia.pl>
Date: Sat Dec 20 18:03:49 2014 +0100
Moved "file" CBot class (CRobotMain -> CScript)
---
src/object/robotmain.cpp | 629 +----------------------------------------------
src/script/script.cpp | 612 ++++++++++++++++++++++++++++++++++++++++++++-
src/script/script.h | 24 +-
3 files changed, 637 insertions(+), 628 deletions(-)
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index f0967f8..c6bf7c0 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -115,504 +115,7 @@ float g_unit; // conversion factor
-// Static variables
-static CBotClass* m_pClassFILE;
-//static CBotProgram* m_pFuncFile;
-static int m_CompteurFileOpen = 0;
-static std::string m_filesDir;
-
-
-
-// Prepares a file name.
-
-void PrepareFilename(CBotString &filename)
-{
- int pos = filename.ReverseFind('/');
- if ( pos > 0 )
- {
- filename = filename.Mid(pos+1); // Remove files with
- }
-
- pos = filename.ReverseFind('/');
- if ( pos > 0 )
- {
- filename = filename.Mid(pos+1); // also with /
- }
-
- pos = filename.ReverseFind(':');
- if ( pos > 0 )
- {
- filename = filename.Mid(pos+1); // also removes the drive letter C:
- }
-
- filename = CBotString(m_filesDir.c_str()) + CBotString("/") + filename;
-}
-
-
-// constructor of the class
-// get the filename as a parameter
-
-// execution
-bool rfconstruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- CBotString mode;
-
- // accepts no parameters
- if ( pVar == NULL ) return true;
-
- // must be a character string
- if ( pVar->GetType() != CBotTypString ) { Exception = CBotErrBadString; return false; }
-
- CBotString filename = pVar->GetValString();
- PrepareFilename(filename);
-
- // there may be a second parameter
- pVar = pVar->GetNext();
- if ( pVar != NULL )
- {
- // recover mode
- mode = pVar->GetValString();
- if ( mode != "r" && mode != "w" ) { Exception = CBotErrBadParam; return false; }
-
- // no third parameter
- if ( pVar->GetNext() != NULL ) { Exception = CBotErrOverParam; return false; }
- }
-
- // saves the file name
- pVar = pThis->GetItem("filename");
- pVar->SetValString(filename);
-
- if ( ! mode.IsEmpty() )
- {
- // opens the requested file
- FILE* pFile = fopen( filename, mode );
- if ( pFile == NULL ) { Exception = CBotErrFileOpen; return false; }
-
- m_CompteurFileOpen ++;
-
- // save the channel file
- pVar = pThis->GetItem("handle");
- pVar->SetValInt(reinterpret_cast<long>(pFile));
- }
-
- return true;
-}
-
-// compilation
-CBotTypResult cfconstruct (CBotVar* pThis, CBotVar* &pVar)
-{
- // accepts no parameters
- if ( pVar == NULL ) return CBotTypResult( 0 );
-
- // must be a character string
- if ( pVar->GetType() != CBotTypString )
- return CBotTypResult( CBotErrBadString );
-
- // there may be a second parameter
- pVar = pVar->GetNext();
- if ( pVar != NULL )
- {
- // which must be a string
- if ( pVar->GetType() != CBotTypString )
- return CBotTypResult( CBotErrBadString );
- // no third parameter
- if ( pVar->GetNext() != NULL ) return CBotTypResult( CBotErrOverParam );
- }
-
- // the result is void (constructor)
- return CBotTypResult( 0 );
-}
-
-
-// destructor of the class
-
-// execution
-bool rfdestruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- // retrieve the item "handle"
- pVar = pThis->GetItem("handle");
-
- // don't open? no problem :)
- if ( pVar->GetInit() != IS_DEF) return true;
-
- FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
- fclose(pFile);
- m_CompteurFileOpen --;
-
- pVar->SetInit(IS_NAN);
-
- return true;
-}
-
-
-// process FILE :: open
-// get the r/w mode as a parameter
-
-// execution
-bool rfopen (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- // there must be a parameter
- if ( pVar == NULL ) { Exception = CBotErrLowParam; return false; }
-
- // which must be a character string
- if ( pVar->GetType() != CBotTypString ) { Exception = CBotErrBadString; return false; }
-
- // There may be a second parameter
- if ( pVar->GetNext() != NULL )
- {
- // if the first parameter is the file name
- CBotString filename = pVar->GetValString();
- PrepareFilename(filename);
-
- // saves the file name
- CBotVar* pVar2 = pThis->GetItem("filename");
- pVar2->SetValString(filename);
-
- // next parameter is the mode
- pVar = pVar -> GetNext();
- }
-
- CBotString mode = pVar->GetValString();
- if ( mode != "r" && mode != "w" ) { Exception = CBotErrBadParam; return false; }
-
- // no third parameter
- if ( pVar->GetNext() != NULL ) { Exception = CBotErrOverParam; return false; }
-
- // retrieve the item "handle"
- pVar = pThis->GetItem("handle");
-
- // which must not be initialized
- if ( pVar->GetInit() == IS_DEF) { Exception = CBotErrFileOpen; return false; }
-
- // file contains the name
- pVar = pThis->GetItem("filename");
- CBotString filename = pVar->GetValString();
-
- PrepareFilename(filename); // if the name was h.filename attribute = "...";
-
- // opens the requested file
- FILE* pFile = fopen( filename, mode );
- if ( pFile == NULL )
- {
- pResult->SetValInt(false);
- return true;
- }
-
- m_CompteurFileOpen ++;
-
- // Registered the channel file
- pVar = pThis->GetItem("handle");
- pVar->SetValInt(reinterpret_cast<long>(pFile));
-
- pResult->SetValInt(true);
- return true;
-}
-
-// compilation
-CBotTypResult cfopen (CBotVar* pThis, CBotVar* &pVar)
-{
- // there must be a parameter
- if ( pVar == NULL ) return CBotTypResult( CBotErrLowParam );
-
- // which must be a string
- if ( pVar->GetType() != CBotTypString )
- return CBotTypResult( CBotErrBadString );
-
- // there may be a second parameter
- pVar = pVar->GetNext();
- if ( pVar != NULL )
- {
- // which must be a string
- if ( pVar->GetType() != CBotTypString )
- return CBotTypResult( CBotErrBadString );
-
- // no third parameter
- if ( pVar->GetNext() != NULL ) return CBotTypResult( CBotErrOverParam );
- }
-
- // the result is bool
- return CBotTypResult(CBotTypBoolean);
-}
-
-
-// process FILE :: close
-
-// execeution
-bool rfclose (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- // it shouldn't be any parameters
- if ( pVar != NULL ) return CBotErrOverParam;
-
- // retrieve the item "handle"
- pVar = pThis->GetItem("handle");
-
- if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
-
- FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
- fclose(pFile);
- m_CompteurFileOpen --;
-
- pVar->SetInit(IS_NAN);
-
- return true;
-}
-
-// compilation
-CBotTypResult cfclose (CBotVar* pThis, CBotVar* &pVar)
-{
- // it shouldn't be any parameters
- if ( pVar != NULL ) return CBotTypResult( CBotErrOverParam );
-
- // function returns a result "void"
- return CBotTypResult( 0 );
-}
-
-// process FILE :: writeln
-
-// execution
-bool rfwrite (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- // there must be a parameter
- if ( pVar == NULL ) { Exception = CBotErrLowParam; return false; }
-
- // which must be a character string
- if ( pVar->GetType() != CBotTypString ) { Exception = CBotErrBadString; return false; }
-
- CBotString param = pVar->GetValString();
-
- // retrieve the item "handle"
- pVar = pThis->GetItem("handle");
-
- if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
-
- FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
-
- int res = fputs(param+CBotString("\n"), pFile);
-
- // if an error occurs generate an exception
- if ( res < 0 ) { Exception = CBotErrWrite; return false; }
-
- return true;
-}
-
-// compilation
-CBotTypResult cfwrite (CBotVar* pThis, CBotVar* &pVar)
-{
- // there must be a parameter
- if ( pVar == NULL ) return CBotTypResult( CBotErrLowParam );
-
- // which must be a character string
- if ( pVar->GetType() != CBotTypString ) return CBotTypResult( CBotErrBadString );
-
- // no other parameter
- if ( pVar->GetNext() != NULL ) return CBotTypResult( CBotErrOverParam );
-
- // the function returns a void result
- return CBotTypResult( 0 );
-}
-
-// process FILE :: readln
-
-// execution
-bool rfread (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- // it shouldn't be any parameters
- if ( pVar != NULL ) { Exception = CBotErrOverParam; return false; }
-
- // retrieve the item "handle"
- pVar = pThis->GetItem("handle");
-
- if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
-
- FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
-
- char chaine[2000];
- int i;
- for ( i = 0 ; i < 2000 ; i++ ) chaine[i] = 0;
-
- fgets(chaine, 1999, pFile);
-
- for ( i = 0 ; i < 2000 ; i++ ) if (chaine[i] == '\n') chaine[i] = 0;
-
- // if an error occurs generate an exception
- if ( ferror(pFile) ) { Exception = CBotErrRead; return false; }
-
- pResult->SetValString( chaine );
-
- return true;
-}
-
-// compilation
-CBotTypResult cfread (CBotVar* pThis, CBotVar* &pVar)
-{
- // it should not be any parameter
- if ( pVar != NULL ) return CBotTypResult( CBotErrOverParam );
-
- // function returns a result "string"
- return CBotTypResult( CBotTypString );
-}
-// process FILE :: readln
-
-
-// execution
-bool rfeof (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- // it should not be any parameter
- if ( pVar != NULL ) { Exception = CBotErrOverParam; return false; }
-
- // retrieve the item "handle"
- pVar = pThis->GetItem("handle");
-
- if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
-
- FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
-
- pResult->SetValInt( feof( pFile ) );
-
- return true;
-}
-
-// compilation
-CBotTypResult cfeof (CBotVar* pThis, CBotVar* &pVar)
-{
- // it shouldn't be any parameter
- if ( pVar != NULL ) return CBotTypResult( CBotErrOverParam );
-
- // the function returns a boolean result
- return CBotTypResult( CBotTypBoolean );
-}
-
-
-
-
-
-void InitClassFILE()
-{
-// create a class for file management
-// the use is as follows:
-// file canal( "NomFichier.txt" )
-// canal.open( "r" ); // open for read
-// s = canal.readln( ); // reads a line
-// canal.close(); // close the file
-
- // create the class FILE
- m_pClassFILE = new CBotClass("file", NULL);
- // adds the component ".filename"
- m_pClassFILE->AddItem("filename", CBotTypString);
- // adds the component ".handle"
- m_pClassFILE->AddItem("handle", CBotTypInt, PR_PRIVATE);
-
- // define a constructor and a destructor
- m_pClassFILE->AddFunction("file", rfconstruct, cfconstruct );
- m_pClassFILE->AddFunction("~file", rfdestruct, NULL );
-
- // end of the methods associated
- m_pClassFILE->AddFunction("open", rfopen, cfopen );
- m_pClassFILE->AddFunction("close", rfclose, cfclose );
- m_pClassFILE->AddFunction("writeln", rfwrite, cfwrite );
- m_pClassFILE->AddFunction("readln", rfread, cfread );
- m_pClassFILE->AddFunction("eof", rfeof, cfeof );
-
- //m_pFuncFile = new CBotProgram( );
- //CBotStringArray ListFonctions;
- //m_pFuncFile->Compile( "public file openfile(string name, string mode) {return new file(name, mode);}", ListFonctions);
- //m_pFuncFile->SetIdent(-2); // restoreState in special identifier for this function
-}
-
-
-
-
-
-// Compilation of class "point".
-
-CBotTypResult cPoint(CBotVar* pThis, CBotVar* &var)
-{
- if ( !pThis->IsElemOfClass("point") ) return CBotTypResult(CBotErrBadNum);
-
- if ( var == NULL ) return CBotTypResult(0); // ok if no parameter
-
- // First parameter (x):
- if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
- var = var->GetNext();
-
- // Second parameter (y):
- if ( var == NULL ) return CBotTypResult(CBotErrLowParam);
- if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
- var = var->GetNext();
-
- // Third parameter (z):
- if ( var == NULL ) // only 2 parameters?
- {
- return CBotTypResult(0); // this function returns void
- }
-
- if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
- var = var->GetNext();
- if ( var != NULL ) return CBotTypResult(CBotErrOverParam);
-
- return CBotTypResult(0); // this function returns void
-}
-
-//Execution of the class "point".
-
-bool rPoint(CBotVar* pThis, CBotVar* var, CBotVar* pResult, int& Exception)
-{
- CBotVar *pX, *pY, *pZ;
-
- if ( var == NULL ) return true; // constructor with no parameters is ok
-
- if ( var->GetType() > CBotTypDouble )
- {
- Exception = CBotErrBadNum; return false;
- }
-
- pX = pThis->GetItem("x");
- if ( pX == NULL )
- {
- Exception = CBotErrUndefItem; return false;
- }
- pX->SetValFloat( var->GetValFloat() );
- var = var->GetNext();
-
- if ( var == NULL )
- {
- Exception = CBotErrLowParam; return false;
- }
-
- if ( var->GetType() > CBotTypDouble )
- {
- Exception = CBotErrBadNum; return false;
- }
-
- pY = pThis->GetItem("y");
- if ( pY == NULL )
- {
- Exception = CBotErrUndefItem; return false;
- }
- pY->SetValFloat( var->GetValFloat() );
- var = var->GetNext();
-
- if ( var == NULL )
- {
- return true; // ok with only two parameters
- }
-
- pZ = pThis->GetItem("z");
- if ( pZ == NULL )
- {
- Exception = CBotErrUndefItem; return false;
- }
- pZ->SetValFloat( var->GetValFloat() );
- var = var->GetNext();
-
- if ( var != NULL )
- {
- Exception = CBotErrOverParam; return false;
- }
-
- return true; // no interruption
-}
//! Constructor of robot application
CRobotMain::CRobotMain(CApplication* app, bool loadProfile)
@@ -643,7 +146,6 @@ CRobotMain::CRobotMain(CApplication* app, bool loadProfile)
m_displayInfo = nullptr;
m_engine->SetTerrain(m_terrain);
- m_filesDir = m_dialog->GetFilesDir();
m_time = 0.0f;
m_gameTime = 0.0f;
@@ -774,133 +276,8 @@ CRobotMain::CRobotMain(CApplication* app, bool loadProfile)
m_showLimit[i].total = 0;
m_showLimit[i].link = 0;
}
-
- CBotProgram::SetTimer(100);
- CBotProgram::Init();
-
- for (int i = 0; i < OBJECT_MAX; i++)
- {
- ObjectType type = static_cast<ObjectType>(i);
- const char* token = GetObjectName(type);
- if (token[0] != 0)
- CBotProgram::DefineNum(token, type);
-
- token = GetObjectAlias(type);
- if (token[0] != 0)
- CBotProgram::DefineNum(token, type);
- }
-
- CBotProgram::DefineNum("White", 0);
- CBotProgram::DefineNum("Black", 1);
- CBotProgram::DefineNum("Gray", 2);
- CBotProgram::DefineNum("LightGray", 3);
- CBotProgram::DefineNum("Red", 4);
- CBotProgram::DefineNum("Pink", 5);
- CBotProgram::DefineNum("Purple", 6);
- CBotProgram::DefineNum("Orange", 7);
- CBotProgram::DefineNum("Yellow", 8);
- CBotProgram::DefineNum("Beige", 9);
- CBotProgram::DefineNum("Brown", 10);
- CBotProgram::DefineNum("Skin", 11);
- CBotProgram::DefineNum("Green", 12);
- CBotProgram::DefineNum("LightGreen", 13);
- CBotProgram::DefineNum("Blue", 14);
- CBotProgram::DefineNum("LightBlue", 15);
- CBotProgram::DefineNum("BlackArrow", 16);
- CBotProgram::DefineNum("RedArrow", 17);
-
- CBotProgram::DefineNum("Metal", OM_METAL);
- CBotProgram::DefineNum("Plastic", OM_PLASTIC);
-
- CBotProgram::DefineNum("InFront", TMA_FFRONT);
- CBotProgram::DefineNum("Behind", TMA_FBACK);
- CBotProgram::DefineNum("EnergyCell", TMA_POWER);
-
- CBotProgram::DefineNum("DisplayError", Ui::TT_ERROR);
- CBotProgram::DefineNum("DisplayWarning", Ui::TT_WARNING);
- CBotProgram::DefineNum("DisplayInfo", Ui::TT_INFO);
- CBotProgram::DefineNum("DisplayMessage", Ui::TT_MESSAGE);
-
- CBotProgram::DefineNum("FilterNone", FILTER_NONE);
- CBotProgram::DefineNum("FilterOnlyLanding", FILTER_ONLYLANDING);
- CBotProgram::DefineNum("FilterOnlyFliying", FILTER_ONLYFLYING);
-
- CBotProgram::DefineNum("ExploNone", 0);
- CBotProgram::DefineNum("ExploBoum", EXPLO_BOUM);
- CBotProgram::DefineNum("ExploBurn", EXPLO_BURN);
- CBotProgram::DefineNum("ExploWater", EXPLO_WATER);
-
- CBotProgram::DefineNum("ResultNotEnded", ERR_MISSION_NOTERM);
- CBotProgram::DefineNum("ResultLost", INFO_LOST);
- CBotProgram::DefineNum("ResultLostQuick", INFO_LOSTq);
- CBotProgram::DefineNum("ResultWin", ERR_OK);
-
- CBotProgram::DefineNum("BuildBotFactory", BUILD_FACTORY);
- CBotProgram::DefineNum("BuildDerrick", BUILD_DERRICK);
- CBotProgram::DefineNum("BuildConverter", BUILD_CONVERT);
- CBotProgram::DefineNum("BuildRadarStation", BUILD_RADAR);
- CBotProgram::DefineNum("BuildPowerPlant", BUILD_ENERGY);
- CBotProgram::DefineNum("BuildNuclearPlant", BUILD_NUCLEAR);
- CBotProgram::DefineNum("BuildPowerStation", BUILD_STATION);
- CBotProgram::DefineNum("BuildRepairCenter", BUILD_REPAIR);
- CBotProgram::DefineNum("BuildDefenseTower", BUILD_TOWER);
- CBotProgram::DefineNum("BuildResearchCenter", BUILD_RESEARCH);
- CBotProgram::DefineNum("BuildAutoLab", BUILD_LABO);
- CBotProgram::DefineNum("BuildPowerCaptor", BUILD_PARA);
- CBotProgram::DefineNum("BuildExchangePost", BUILD_INFO);
- CBotProgram::DefineNum("BuildDestroyer", BUILD_DESTROYER);
- CBotProgram::DefineNum("FlatGround", BUILD_GFLAT);
- CBotProgram::DefineNum("UseFlags", BUILD_FLAG);
- CBotProgram::DefineNum("ResearchTracked", RESEARCH_TANK);
- CBotProgram::DefineNum("ResearchWinged", RESEARCH_FLY);
- CBotProgram::DefineNum("ResearchShooter", RESEARCH_CANON);
- CBotProgram::DefineNum("ResearchDefenseTower", RESEARCH_TOWER);
- CBotProgram::DefineNum("ResearchNuclearPlant", RESEARCH_ATOMIC);
- CBotProgram::DefineNum("ResearchThumper", RESEARCH_THUMP);
- CBotProgram::DefineNum("ResearchShielder", RESEARCH_SHIELD);
- CBotProgram::DefineNum("ResearchPhazerShooter", RESEARCH_PHAZER);
- CBotProgram::DefineNum("ResearchLegged", RESEARCH_iPAW);
- CBotProgram::DefineNum("ResearchOrgaShooter", RESEARCH_iGUN);
- CBotProgram::DefineNum("ResearchRecycler", RESEARCH_RECYCLER);
- CBotProgram::DefineNum("ResearchSubber", RESEARCH_SUBM);
- CBotProgram::DefineNum("ResearchSniffer", RESEARCH_SNIFFER);
-
- CBotProgram::DefineNum("PolskiPortalColobota", 1337);
-
- CBotClass* bc;
-
- // Add the class Point.
- bc = new CBotClass("point", NULL, true); // intrinsic class
- bc->AddItem("x", CBotTypFloat);
- bc->AddItem("y", CBotTypFloat);
- bc->AddItem("z", CBotTypFloat);
- bc->AddFunction("point", rPoint, cPoint);
-
- // Adds the class Object.
- bc = new CBotClass("object", NULL);
- bc->AddItem("category", CBotTypResult(CBotTypInt), PR_READ);
- bc->AddItem("position", CBotTypResult(CBotTypClass, "point"), PR_READ);
- bc->AddItem("orientation", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("pitch", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("roll", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("energyLevel", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("shieldLevel", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("temperature", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("altitude", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("lifeTime", CBotTypResult(CBotTypFloat), PR_READ);
- bc->AddItem("material", CBotTypResult(CBotTypInt), PR_READ);
- bc->AddItem("energyCell", CBotTypResult(CBotTypPointer, "object"), PR_READ);
- bc->AddItem("load", CBotTypResult(CBotTypPointer, "object"), PR_READ);
- bc->AddItem("id", CBotTypResult(CBotTypInt), PR_READ);
- bc->AddFunction("busy", CScript::rBusy, CScript::cBusy);
- bc->AddFunction("factory", CScript::rFactory, CScript::cFactory);
- bc->AddFunction("research", CScript::rResearch, CScript::cClassOneFloat);
- bc->AddFunction("takeoff", CScript::rTakeOff, CScript::cClassNull);
- bc->AddFunction("destroy", CScript::rDestroy, CScript::cClassNull);
-
- // Initializes the class FILE.
- InitClassFILE();
-
+
+ CScript::m_filesDir = m_dialog->GetFilesDir();
CScript::InitFonctions();
}
@@ -5465,7 +4842,7 @@ char* CRobotMain::GetNewScriptName(ObjectType type, int rank)
//! Seeks if an object occupies in a spot, to prevent a backup of the game
bool CRobotMain::IsBusy()
{
- if (m_CompteurFileOpen > 0) return true;
+ if (CScript::m_CompteurFileOpen > 0) return true;
CInstanceManager* iMan = CInstanceManager::GetInstancePointer();
diff --git a/src/script/script.cpp b/src/script/script.cpp
index 6f7e6d7..463f940 100644
--- a/src/script/script.cpp
+++ b/src/script/script.cpp
@@ -3479,6 +3479,462 @@ bool CScript::rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void*
return true;
}
+// Static variables
+
+int CScript::m_CompteurFileOpen = 0;
+std::string CScript::m_filesDir;
+
+
+
+// Prepares a file name.
+
+void PrepareFilename(CBotString &filename)
+{
+ int pos = filename.ReverseFind('/');
+ if ( pos > 0 )
+ {
+ filename = filename.Mid(pos+1); // Remove files with
+ }
+
+ pos = filename.ReverseFind('/');
+ if ( pos > 0 )
+ {
+ filename = filename.Mid(pos+1); // also with /
+ }
+
+ pos = filename.ReverseFind(':');
+ if ( pos > 0 )
+ {
+ filename = filename.Mid(pos+1); // also removes the drive letter C:
+ }
+
+ filename = CBotString(CScript::m_filesDir.c_str()) + CBotString("/") + filename;
+}
+
+
+// constructor of the class
+// get the filename as a parameter
+
+// execution
+bool CScript::rfconstruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ CBotString mode;
+
+ // accepts no parameters
+ if ( pVar == NULL ) return true;
+
+ // must be a character string
+ if ( pVar->GetType() != CBotTypString ) { Exception = CBotErrBadString; return false; }
+
+ CBotString filename = pVar->GetValString();
+ PrepareFilename(filename);
+
+ // there may be a second parameter
+ pVar = pVar->GetNext();
+ if ( pVar != NULL )
+ {
+ // recover mode
+ mode = pVar->GetValString();
+ if ( mode != "r" && mode != "w" ) { Exception = CBotErrBadParam; return false; }
+
+ // no third parameter
+ if ( pVar->GetNext() != NULL ) { Exception = CBotErrOverParam; return false; }
+ }
+
+ // saves the file name
+ pVar = pThis->GetItem("filename");
+ pVar->SetValString(filename);
+
+ if ( ! mode.IsEmpty() )
+ {
+ // opens the requested file
+ FILE* pFile = fopen( filename, mode );
+ if ( pFile == NULL ) { Exception = CBotErrFileOpen; return false; }
+
+ m_CompteurFileOpen ++;
+
+ // save the channel file
+ pVar = pThis->GetItem("handle");
+ pVar->SetValInt(reinterpret_cast<long>(pFile));
+ }
+
+ return true;
+}
+
+// compilation
+CBotTypResult CScript::cfconstruct (CBotVar* pThis, CBotVar* &pVar)
+{
+ // accepts no parameters
+ if ( pVar == NULL ) return CBotTypResult( 0 );
+
+ // must be a character string
+ if ( pVar->GetType() != CBotTypString )
+ return CBotTypResult( CBotErrBadString );
+
+ // there may be a second parameter
+ pVar = pVar->GetNext();
+ if ( pVar != NULL )
+ {
+ // which must be a string
+ if ( pVar->GetType() != CBotTypString )
+ return CBotTypResult( CBotErrBadString );
+ // no third parameter
+ if ( pVar->GetNext() != NULL ) return CBotTypResult( CBotErrOverParam );
+ }
+
+ // the result is void (constructor)
+ return CBotTypResult( 0 );
+}
+
+
+// destructor of the class
+
+// execution
+bool CScript::rfdestruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ // retrieve the item "handle"
+ pVar = pThis->GetItem("handle");
+
+ // don't open? no problem :)
+ if ( pVar->GetInit() != IS_DEF) return true;
+
+ FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
+ fclose(pFile);
+ m_CompteurFileOpen --;
+
+ pVar->SetInit(IS_NAN);
+
+ return true;
+}
+
+
+// process FILE :: open
+// get the r/w mode as a parameter
+
+// execution
+bool CScript::rfopen (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ // there must be a parameter
+ if ( pVar == NULL ) { Exception = CBotErrLowParam; return false; }
+
+ // which must be a character string
+ if ( pVar->GetType() != CBotTypString ) { Exception = CBotErrBadString; return false; }
+
+ // There may be a second parameter
+ if ( pVar->GetNext() != NULL )
+ {
+ // if the first parameter is the file name
+ CBotString filename = pVar->GetValString();
+ PrepareFilename(filename);
+
+ // saves the file name
+ CBotVar* pVar2 = pThis->GetItem("filename");
+ pVar2->SetValString(filename);
+
+ // next parameter is the mode
+ pVar = pVar -> GetNext();
+ }
+
+ CBotString mode = pVar->GetValString();
+ if ( mode != "r" && mode != "w" ) { Exception = CBotErrBadParam; return false; }
+
+ // no third parameter
+ if ( pVar->GetNext() != NULL ) { Exception = CBotErrOverParam; return false; }
+
+ // retrieve the item "handle"
+ pVar = pThis->GetItem("handle");
+
+ // which must not be initialized
+ if ( pVar->GetInit() == IS_DEF) { Exception = CBotErrFileOpen; return false; }
+
+ // file contains the name
+ pVar = pThis->GetItem("filename");
+ CBotString filename = pVar->GetValString();
+
+ PrepareFilename(filename); // if the name was h.filename attribute = "...";
+
+ // opens the requested file
+ FILE* pFile = fopen( filename, mode );
+ if ( pFile == NULL )
+ {
+ pResult->SetValInt(false);
+ return true;
+ }
+
+ m_CompteurFileOpen ++;
+
+ // Registered the channel file
+ pVar = pThis->GetItem("handle");
+ pVar->SetValInt(reinterpret_cast<long>(pFile));
+
+ pResult->SetValInt(true);
+ return true;
+}
+
+// compilation
+CBotTypResult CScript::cfopen (CBotVar* pThis, CBotVar* &pVar)
+{
+ // there must be a parameter
+ if ( pVar == NULL ) return CBotTypResult( CBotErrLowParam );
+
+ // which must be a string
+ if ( pVar->GetType() != CBotTypString )
+ return CBotTypResult( CBotErrBadString );
+
+ // there may be a second parameter
+ pVar = pVar->GetNext();
+ if ( pVar != NULL )
+ {
+ // which must be a string
+ if ( pVar->GetType() != CBotTypString )
+ return CBotTypResult( CBotErrBadString );
+
+ // no third parameter
+ if ( pVar->GetNext() != NULL ) return CBotTypResult( CBotErrOverParam );
+ }
+
+ // the result is bool
+ return CBotTypResult(CBotTypBoolean);
+}
+
+
+// process FILE :: close
+
+// execeution
+bool CScript::rfclose (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ // it shouldn't be any parameters
+ if ( pVar != NULL ) return CBotErrOverParam;
+
+ // retrieve the item "handle"
+ pVar = pThis->GetItem("handle");
+
+ if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
+
+ FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
+ fclose(pFile);
+ m_CompteurFileOpen --;
+
+ pVar->SetInit(IS_NAN);
+
+ return true;
+}
+
+// compilation
+CBotTypResult CScript::cfclose (CBotVar* pThis, CBotVar* &pVar)
+{
+ // it shouldn't be any parameters
+ if ( pVar != NULL ) return CBotTypResult( CBotErrOverParam );
+
+ // function returns a result "void"
+ return CBotTypResult( 0 );
+}
+
+// process FILE :: writeln
+
+// execution
+bool CScript::rfwrite (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ // there must be a parameter
+ if ( pVar == NULL ) { Exception = CBotErrLowParam; return false; }
+
+ // which must be a character string
+ if ( pVar->GetType() != CBotTypString ) { Exception = CBotErrBadString; return false; }
+
+ CBotString param = pVar->GetValString();
+
+ // retrieve the item "handle"
+ pVar = pThis->GetItem("handle");
+
+ if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
+
+ FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
+
+ int res = fputs(param+CBotString("\n"), pFile);
+
+ // if an error occurs generate an exception
+ if ( res < 0 ) { Exception = CBotErrWrite; return false; }
+
+ return true;
+}
+
+// compilation
+CBotTypResult CScript::cfwrite (CBotVar* pThis, CBotVar* &pVar)
+{
+ // there must be a parameter
+ if ( pVar == NULL ) return CBotTypResult( CBotErrLowParam );
+
+ // which must be a character string
+ if ( pVar->GetType() != CBotTypString ) return CBotTypResult( CBotErrBadString );
+
+ // no other parameter
+ if ( pVar->GetNext() != NULL ) return CBotTypResult( CBotErrOverParam );
+
+ // the function returns a void result
+ return CBotTypResult( 0 );
+}
+
+// process FILE :: readln
+
+// execution
+bool CScript::rfread (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ // it shouldn't be any parameters
+ if ( pVar != NULL ) { Exception = CBotErrOverParam; return false; }
+
+ // retrieve the item "handle"
+ pVar = pThis->GetItem("handle");
+
+ if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
+
+ FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
+
+ char chaine[2000];
+ int i;
+ for ( i = 0 ; i < 2000 ; i++ ) chaine[i] = 0;
+
+ fgets(chaine, 1999, pFile);
+
+ for ( i = 0 ; i < 2000 ; i++ ) if (chaine[i] == '\n') chaine[i] = 0;
+
+ // if an error occurs generate an exception
+ if ( ferror(pFile) ) { Exception = CBotErrRead; return false; }
+
+ pResult->SetValString( chaine );
+
+ return true;
+}
+
+// compilation
+CBotTypResult CScript::cfread (CBotVar* pThis, CBotVar* &pVar)
+{
+ // it should not be any parameter
+ if ( pVar != NULL ) return CBotTypResult( CBotErrOverParam );
+
+ // function returns a result "string"
+ return CBotTypResult( CBotTypString );
+}
+// process FILE :: readln
+
+
+// execution
+bool CScript::rfeof (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception)
+{
+ // it should not be any parameter
+ if ( pVar != NULL ) { Exception = CBotErrOverParam; return false; }
+
+ // retrieve the item "handle"
+ pVar = pThis->GetItem("handle");
+
+ if ( pVar->GetInit() != IS_DEF) { Exception = CBotErrNotOpen; return false; }
+
+ FILE* pFile= reinterpret_cast<FILE*>(pVar->GetValInt());
+
+ pResult->SetValInt( feof( pFile ) );
+
+ return true;
+}
+
+// compilation
+CBotTypResult CScript::cfeof (CBotVar* pThis, CBotVar* &pVar)
+{
+ // it shouldn't be any parameter
+ if ( pVar != NULL ) return CBotTypResult( CBotErrOverParam );
+
+ // the function returns a boolean result
+ return CBotTypResult( CBotTypBoolean );
+}
+
+// Compilation of class "point".
+
+CBotTypResult CScript::cPointConstructor(CBotVar* pThis, CBotVar* &var)
+{
+ if ( !pThis->IsElemOfClass("point") ) return CBotTypResult(CBotErrBadNum);
+
+ if ( var == NULL ) return CBotTypResult(0); // ok if no parameter
+
+ // First parameter (x):
+ if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
+ var = var->GetNext();
+
+ // Second parameter (y):
+ if ( var == NULL ) return CBotTypResult(CBotErrLowParam);
+ if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
+ var = var->GetNext();
+
+ // Third parameter (z):
+ if ( var == NULL ) // only 2 parameters?
+ {
+ return CBotTypResult(0); // this function returns void
+ }
+
+ if ( var->GetType() > CBotTypDouble ) return CBotTypResult(CBotErrBadNum);
+ var = var->GetNext();
+ if ( var != NULL ) return CBotTypResult(CBotErrOverParam);
+
+ return CBotTypResult(0); // this function returns void
+}
+
+//Execution of the class "point".
+
+bool CScript::rPointConstructor(CBotVar* pThis, CBotVar* var, CBotVar* pResult, int& Exception)
+{
+ CBotVar *pX, *pY, *pZ;
+
+ if ( var == NULL ) return true; // constructor with no parameters is ok
+
+ if ( var->GetType() > CBotTypDouble )
+ {
+ Exception = CBotErrBadNum; return false;
+ }
+
+ pX = pThis->GetItem("x");
+ if ( pX == NULL )
+ {
+ Exception = CBotErrUndefItem; return false;
+ }
+ pX->SetValFloat( var->GetValFloat() );
+ var = var->GetNext();
+
+ if ( var == NULL )
+ {
+ Exception = CBotErrLowParam; return false;
+ }
+
+ if ( var->GetType() > CBotTypDouble )
+ {
+ Exception = CBotErrBadNum; return false;
+ }
+
+ pY = pThis->GetItem("y");
+ if ( pY == NULL )
+ {
+ Exception = CBotErrUndefItem; return false;
+ }
+ pY->SetValFloat( var->GetValFloat() );
+ var = var->GetNext();
+
+ if ( var == NULL )
+ {
+ return true; // ok with only two parameters
+ }
+
+ pZ = pThis->GetItem("z");
+ if ( pZ == NULL )
+ {
+ Exception = CBotErrUndefItem; return false;
+ }
+ pZ->SetValFloat( var->GetValFloat() );
+ var = var->GetNext();
+
+ if ( var != NULL )
+ {
+ Exception = CBotErrOverParam; return false;
+ }
+
+ return true; // no interruption
+}
+
// Object's constructor.
@@ -3515,6 +3971,161 @@ CScript::CScript(CObject* object, CTaskManager** secondaryTask)
void CScript::InitFonctions()
{
+ CBotProgram::SetTimer(100);
+ CBotProgram::Init();
+
+ for (int i = 0; i < OBJECT_MAX; i++)
+ {
+ ObjectType type = static_cast<ObjectType>(i);
+ const char* token = GetObjectName(type);
+ if (token[0] != 0)
+ CBotProgram::DefineNum(token, type);
+
+ token = GetObjectAlias(type);
+ if (token[0] != 0)
+ CBotProgram::DefineNum(token, type);
+ }
+
+ CBotProgram::DefineNum("White", 0);
+ CBotProgram::DefineNum("Black", 1);
+ CBotProgram::DefineNum("Gray", 2);
+ CBotProgram::DefineNum("LightGray", 3);
+ CBotProgram::DefineNum("Red", 4);
+ CBotProgram::DefineNum("Pink", 5);
+ CBotProgram::DefineNum("Purple", 6);
+ CBotProgram::DefineNum("Orange", 7);
+ CBotProgram::DefineNum("Yellow", 8);
+ CBotProgram::DefineNum("Beige", 9);
+ CBotProgram::DefineNum("Brown", 10);
+ CBotProgram::DefineNum("Skin", 11);
+ CBotProgram::DefineNum("Green", 12);
+ CBotProgram::DefineNum("LightGreen", 13);
+ CBotProgram::DefineNum("Blue", 14);
+ CBotProgram::DefineNum("LightBlue", 15);
+ CBotProgram::DefineNum("BlackArrow", 16);
+ CBotProgram::DefineNum("RedArrow", 17);
+
+ CBotProgram::DefineNum("Metal", OM_METAL);
+ CBotProgram::DefineNum("Plastic", OM_PLASTIC);
+
+ CBotProgram::DefineNum("InFront", TMA_FFRONT);
+ CBotProgram::DefineNum("Behind", TMA_FBACK);
+ CBotProgram::DefineNum("EnergyCell", TMA_POWER);
+
+ CBotProgram::DefineNum("DisplayError", Ui::TT_ERROR);
+ CBotProgram::DefineNum("DisplayWarning", Ui::TT_WARNING);
+ CBotProgram::DefineNum("DisplayInfo", Ui::TT_INFO);
+ CBotProgram::DefineNum("DisplayMessage", Ui::TT_MESSAGE);
+
+ CBotProgram::DefineNum("FilterNone", FILTER_NONE);
+ CBotProgram::DefineNum("FilterOnlyLanding", FILTER_ONLYLANDING);
+ CBotProgram::DefineNum("FilterOnlyFliying", FILTER_ONLYFLYING);
+
+ CBotProgram::DefineNum("ExploNone", 0);
+ CBotProgram::DefineNum("ExploBoum", EXPLO_BOUM);
+ CBotProgram::DefineNum("ExploBurn", EXPLO_BURN);
+ CBotProgram::DefineNum("ExploWater", EXPLO_WATER);
+
+ CBotProgram::DefineNum("ResultNotEnded", ERR_MISSION_NOTERM);
+ CBotProgram::DefineNum("ResultLost", INFO_LOST);
+ CBotProgram::DefineNum("ResultLostQuick", INFO_LOSTq);
+ CBotProgram::DefineNum("ResultWin", ERR_OK);
+
+ CBotProgram::DefineNum("BuildBotFactory", BUILD_FACTORY);
+ CBotProgram::DefineNum("BuildDerrick", BUILD_DERRICK);
+ CBotProgram::DefineNum("BuildConverter", BUILD_CONVERT);
+ CBotProgram::DefineNum("BuildRadarStation", BUILD_RADAR);
+ CBotProgram::DefineNum("BuildPowerPlant", BUILD_ENERGY);
+ CBotProgram::DefineNum("BuildNuclearPlant", BUILD_NUCLEAR);
+ CBotProgram::DefineNum("BuildPowerStation", BUILD_STATION);
+ CBotProgram::DefineNum("BuildRepairCenter", BUILD_REPAIR);
+ CBotProgram::DefineNum("BuildDefenseTower", BUILD_TOWER);
+ CBotProgram::DefineNum("BuildResearchCenter", BUILD_RESEARCH);
+ CBotProgram::DefineNum("BuildAutoLab", BUILD_LABO);
+ CBotProgram::DefineNum("BuildPowerCaptor", BUILD_PARA);
+ CBotProgram::DefineNum("BuildExchangePost", BUILD_INFO);
+ CBotProgram::DefineNum("BuildDestroyer", BUILD_DESTROYER);
+ CBotProgram::DefineNum("FlatGround", BUILD_GFLAT);
+ CBotProgram::DefineNum("UseFlags", BUILD_FLAG);
+
+ CBotProgram::DefineNum("ResearchTracked", RESEARCH_TANK);
+ CBotProgram::DefineNum("ResearchWinged", RESEARCH_FLY);
+ CBotProgram::DefineNum("ResearchShooter", RESEARCH_CANON);
+ CBotProgram::DefineNum("ResearchDefenseTower", RESEARCH_TOWER);
+ CBotProgram::DefineNum("ResearchNuclearPlant", RESEARCH_ATOMIC);
+ CBotProgram::DefineNum("ResearchThumper", RESEARCH_THUMP);
+ CBotProgram::DefineNum("ResearchShielder", RESEARCH_SHIELD);
+ CBotProgram::DefineNum("ResearchPhazerShooter", RESEARCH_PHAZER);
+ CBotProgram::DefineNum("ResearchLegged", RESEARCH_iPAW);
+ CBotProgram::DefineNum("ResearchOrgaShooter", RESEARCH_iGUN);
+ CBotProgram::DefineNum("ResearchRecycler", RESEARCH_RECYCLER);
+ CBotProgram::DefineNum("ResearchSubber", RESEARCH_SUBM);
+ CBotProgram::DefineNum("ResearchSniffer", RESEARCH_SNIFFER);
+
+ CBotProgram::DefineNum("PolskiPortalColobota", 1337);
+
+ CBotClass* bc;
+
+ // Add the class Point.
+ bc = new CBotClass("point", NULL, true); // intrinsic class
+ bc->AddItem("x", CBotTypFloat);
+ bc->AddItem("y", CBotTypFloat);
+ bc->AddItem("z", CBotTypFloat);
+ bc->AddFunction("point", CScript::rPointConstructor, CScript::cPointConstructor);
+
+ // Adds the class Object.
+ bc = new CBotClass("object", NULL);
+ bc->AddItem("category", CBotTypResult(CBotTypInt), PR_READ);
+ bc->AddItem("position", CBotTypResult(CBotTypClass, "point"), PR_READ);
+ bc->AddItem("orientation", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("pitch", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("roll", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("energyLevel", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("shieldLevel", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("temperature", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("altitude", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("lifeTime", CBotTypResult(CBotTypFloat), PR_READ);
+ bc->AddItem("material", CBotTypResult(CBotTypInt), PR_READ);
+ bc->AddItem("energyCell", CBotTypResult(CBotTypPointer, "object"), PR_READ);
+ bc->AddItem("load", CBotTypResult(CBotTypPointer, "object"), PR_READ);
+ bc->AddItem("id", CBotTypResult(CBotTypInt), PR_READ);
+ bc->AddFunction("busy", CScript::rBusy, CScript::cBusy);
+ bc->AddFunction("factory", CScript::rFactory, CScript::cFactory);
+ bc->AddFunction("research", CScript::rResearch, CScript::cClassOneFloat);
+ bc->AddFunction("takeoff", CScript::rTakeOff, CScript::cClassNull);
+ bc->AddFunction("destroy", CScript::rDestroy, CScript::cClassNull);
+
+ // InitClassFILE:
+ // create a class for file management
+ // the use is as follows:
+ // file canal( "NomFichier.txt" )
+ // canal.open( "r" ); // open for read
+ // s = canal.readln( ); // reads a line
+ // canal.close(); // close the file
+
+ // create the class FILE
+ bc = new CBotClass("file", NULL);
+ // adds the component ".filename"
+ bc->AddItem("filename", CBotTypString);
+ // adds the component ".handle"
+ bc->AddItem("handle", CBotTypInt, PR_PRIVATE);
+
+ // define a constructor and a destructor
+ bc->AddFunction("file", CScript::rfconstruct, CScript::cfconstruct );
+ bc->AddFunction("~file", CScript::rfdestruct, NULL );
+
+ // end of the methods associated
+ bc->AddFunction("open", CScript::rfopen, CScript::cfopen );
+ bc->AddFunction("close", CScript::rfclose, CScript::cfclose );
+ bc->AddFunction("writeln", CScript::rfwrite, CScript::cfwrite );
+ bc->AddFunction("readln", CScript::rfread, CScript::cfread );
+ bc->AddFunction("eof", CScript::rfeof, CScript::cfeof );
+
+ //m_pFuncFile = new CBotProgram( );
+ //CBotStringArray ListFonctions;
+ //m_pFuncFile->Compile( "public file openfile(string name, string mode) {return new file(name, mode);}", ListFonctions);
+ //m_pFuncFile->SetIdent(-2); // restoreState in special identifier for this function
+
CBotProgram::AddFunction("sin", rSin, CScript::cOneFloat);
CBotProgram::AddFunction("cos", rCos, CScript::cOneFloat);
CBotProgram::AddFunction("tan", rTan, CScript::cOneFloat);
@@ -3585,7 +4196,6 @@ void CScript::InitFonctions()
CBotProgram::AddFunction("canbuild", rCanBuild, CScript::cCanBuild);
CBotProgram::AddFunction("build", rBuild, CScript::cOneFloat);
-
}
// Object's destructor.
diff --git a/src/script/script.h b/src/script/script.h
index 8db7a88..740164b 100644
--- a/src/script/script.h
+++ b/src/script/script.h
@@ -200,7 +200,7 @@ private:
static bool rPenWidth(CBotVar* var, CBotVar* result, int& exception, void* user);
static bool rCameraFocus(CBotVar* var, CBotVar* result, int& exception, void* user);
-public:
+
static CBotTypResult cBusy(CBotVar* thisclass, CBotVar* &var);
static CBotTypResult cFactory(CBotVar* thisclass, CBotVar* &var);
static CBotTypResult cClassNull(CBotVar* thisclass, CBotVar* &var);
@@ -211,6 +211,28 @@ public:
static bool rResearch(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
static bool rTakeOff(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
static bool rDestroy(CBotVar* thisclass, CBotVar* var, CBotVar* result, int& exception);
+
+
+ static CBotTypResult cfconstruct (CBotVar* pThis, CBotVar* &pVar);
+ static CBotTypResult cfopen (CBotVar* pThis, CBotVar* &pVar);
+ static CBotTypResult cfclose (CBotVar* pThis, CBotVar* &pVar);
+ static CBotTypResult cfwrite (CBotVar* pThis, CBotVar* &pVar);
+ static CBotTypResult cfread (CBotVar* pThis, CBotVar* &pVar);
+ static CBotTypResult cfeof (CBotVar* pThis, CBotVar* &pVar);
+ static bool rfconstruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+ static bool rfdestruct (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+ static bool rfopen (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+ static bool rfclose (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+ static bool rfwrite (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+ static bool rfread (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+ static bool rfeof (CBotVar* pThis, CBotVar* pVar, CBotVar* pResult, int& Exception);
+
+ static CBotTypResult cPointConstructor(CBotVar* pThis, CBotVar* &var);
+ static bool rPointConstructor(CBotVar* pThis, CBotVar* var, CBotVar* pResult, int& Exception);
+
+public:
+ static int m_CompteurFileOpen;
+ static std::string m_filesDir;
private:
static bool Process(CScript* script, CBotVar* result, int &exception);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list