[colobot] 174/377: CBotClass usage examples
Didier Raboud
odyx at moszumanska.debian.org
Wed Mar 30 13:34:12 UTC 2016
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit 45a433525f35b7eaba5ffeed5c64e26548706b4d
Author: krzys-h <krzys_h at interia.pl>
Date: Tue Dec 22 16:32:51 2015 +0100
CBotClass usage examples
---
src/CBot/CBotClass.h | 207 ++++++++++++++++-----------------------------------
1 file changed, 64 insertions(+), 143 deletions(-)
diff --git a/src/CBot/CBotClass.h b/src/CBot/CBotClass.h
index b3f1f87..5e3410e 100644
--- a/src/CBot/CBotClass.h
+++ b/src/CBot/CBotClass.h
@@ -19,18 +19,12 @@
#pragma once
-// Modules inlcude
#include "CBot/CBotDefines.h"
#include "CBot/CBotTypResult.h"
#include "CBot/CBotVar/CBotVar.h"
-// Local include
-
-// Global include
#include <string>
-// Forward declaration
-class CBotClass;
class CBotCallMethode;
class CBotFunction;
class CBotProgram;
@@ -39,10 +33,69 @@ class CBotDefParam;
class CBotToken;
class CBotCStack;
-/*!
- * \brief The CBotClass class Class to define new classes in the language CBOT
- * For example to define the class CPoint (x, y) see comments at end of this
- * file.
+/**
+ * \brief A CBot class definition
+ *
+ * \section Examples Usage examples
+ *
+ * Define class "point":
+ *
+ * \code
+ * CBotClass* classPoint = new CBotClass("CPoint", nullptr);
+ * classPoint->AddItem("x", CBotTypResult(CBotTypFloat)); // add ".x"
+ * classPoint->AddItem("y", CBotTypResult(CBotTypFloat)); // add ".y"
+ *
+ * // This class can be used in CBot like so:
+ * // point position;
+ * // position.x = 12;
+ * // position.y = -13.6
+ * \endcode
+ *
+ * Define readonly class "object" with members of type "point" and some methods:
+ * \code
+ * CBotClass* classObject = new CBotClass("object", nullptr);
+ * classObject->AddItem("category", CBotTypResult(CBotTypInt), CBotVar::ProtectionType::ReadOnly);
+ * classObject->AddItem("position", CBotTypResult(CBotTypClass, classPoint), CBotVar::ProtectionType::ReadOnly);
+ * classObject->AddFunction("func", rFunc, cFunc); // TODO: Document function format for class methods (different from standard CBotProgram::AddFunction()!)
+ *
+ * // This class can be used in CBot like so:
+ * // object item = radar(Me);
+ * // goto(item.position);
+ * // item.func();
+ * \endcode
+ *
+ * Define class "robot" derrived from "object":
+ * \code
+ * CBotClass* classRobot = new CBotClass("object", classObject);
+ * classRobot->AddItem("velocity", CBotTypResult(CBotTypClass, classPoint), CBotVar::ProtectionType::ReadOnly);
+ * classRobot->AddFunction("func2", rFunc2, cFunc2);
+ *
+ * // This class can be used in CBot like so:
+ * // robot item = something();
+ * // goto(item.position); // can still access base class
+ * // item.func(); // can still call base class
+ * // item.func2(); // but also the derrived class
+ * \endcode
+ *
+ * Create instance of the "robot" class:
+ * \code
+ * CBotVar* var = new CBotVar("variableName", classRobot);
+ * \endcode
+ *
+ * Access members of the "point" class:
+ * \code
+ * CBotVar* varX = classInstance->GetItem("x");
+ * float x = varX->GetValFloat();
+ * CBotVar* varY = classInstance->GetItem("y");
+ * float y = varX->GetValFloat();
+ *
+ * // OR
+ *
+ * CBotVar* var = classInstance->GetItemList();
+ * float x = var->GetValFloat();
+ * var->GetNext();
+ * float y = var->GetValFloat();
+ * \endcode
*/
class CBotClass
{
@@ -341,136 +394,4 @@ private:
int m_cptOne;
//! Processes waiting for sync.
CBotProgram* m_ProgInLock[5];
-};
-
-/*
-(**) Note:
-
- To define an external function, proceed as follows:
-
- a) define a routine for compilation this routine receive list of parameters
- (no values) and either returns a result type (CBotTyp... or 0 = void)
- or an error number.
-
- b) define a routine for the execution this routine receive list of
- parameters (with valeurs), a variable to store the result
- (according to the given type at compile time)
-
- For example, a routine which calculates the mean of a parameter list
-
-int cMean(CBotVar* &pVar, std::string& ClassName)
-{
- if ( pVar == nullptr ) return 6001; // there is no parameter!
- while ( pVar != nullptr )
- {
- if ( pVar->GetType() > CBotTypDouble ) return 6002; // this is not a number
- pVar = pVar -> GetNext();
- }
- return CBotTypFloat; // the type of the result may depend on the parameters!
-}
-
-
-bool rMean(CBotVar* pVar, CBotVar* pResult, int& Exception)
-{
- float total = 0;
- int nb = 0;
- while (pVar != nullptr)
- {
- total += pVar->GetValFloat();
- pVar = pVar->GetNext();
- nb++;
- }
- pResult->SetValFloat(total/nb); // returns the mean value
- return true; // operation fully completed
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// Examples of use
-// Definition classes and functions
-
-
-// define the global class CPoint
-// --------------------------------
- m_pClassPoint = new CBotClass("CPoint", nullptr);
- // adds the component ".x"
- m_pClassPoint->AddItem("x", CBotTypResult(CBotTypFloat));
- // adds the component ".y"
- m_pClassPoint->AddItem("y", CBotTypResult(CBotTypFloat));
- // the player can then use the instructions
- // CPoint position; position.x = 12; position.y = -13.6
-
-// define class CColobotObject
-// --------------------------------
- // This class manages all the objects in the world of COLOBOT
- // the "main" user program belongs to this class
- m_pClassObject = new CBotClass("CColobotObject", m_pClassBase);
- // adds the component ".position"
- m_pClassObject->AddItem("position", m_pClassPoint);
- // adds the component ".type"
- m_pClassObject->AddItem("type", CBotTypResult(CBotTypShort));
- // adds a definition of constant
- m_pClassObject->AddConst("ROBOT", CBotTypShort, 1); // ROBOT equivalent to the value 1
- // adds the FIND routine
- m_pClassObject->AddFunction( rCompFind, rDoFind );
- // the player can now use the instructions
- // CColobotObject chose; chose = FIND( ROBOT )
-
-// define class CColobotRobot derived from CColobotObject
-// ---------------------------------------------------------
- // programs "main" associated with robots as a part of this class
- m_pClassRobot = new CBotClass("CColobotRobot", m_pClassObject);
- // add routine GOTO
- m_pClassRobot->AddFunction( rCompGoto, rDoGoto );
- // the player can now use
- // GOTO( FIND ( ROBOT ) );
-
-
-// creates an instance of the class Robot
-// ------------------------------------
- // for example a new robot which has just been manufactured
- CBotVar* m_pMonRobot = new CBotVar("MonRobot", m_pClassRobot);
-
-
-// compiles the program by hand for this robot
-// ------------------------------------------
- CString LeProgramme( "void main() {GOTO(0, 0); return 0;}" );
- if ( !m_pMonRobot->Compile( LeProgramme ) ) {error handling ...};
-
-// build a stack for interpreter
-// --------------------------------------
- CBotStack* pStack = new CBotStack(nullptr);
-
-// executes the main program
-// -------------------------
- while( false = m_pMonRobot->Execute( "main", pStack ))
- {
- // program suspended
- // could be pass a handle to another (safeguarding pstack for the robot one)
- };
- // programme "main" finished !
-
-// routine that implements the GOTO (CPoint pos)
-bool rDoGoto( CBotVar* pVar, CBotVar* pResult, int& exception )
-{
- if (pVar->GetType() != CBotTypeClass ||
- pVar->IsElemOfClas("CPoint") ) { exception = 6522; return false; )
- // the parameter is not the right class?
- // in fact the control is done to the routine of compilation
-
- m_PosToGo.Copy( pVar ); // keeps the target position (object type CBotVar)
-
- // or so
- CBotVar* temp;
- temp = pVar->GetItem("x"); // is necessary for the object of type CPoint
- ASSERT (temp != nullptr && temp->GetType() == CBotTypFloat);
- m_PosToGo.x = temp->GetValFloat();
-
- temp = pVar->GetItem("y"); // is necessary for the object of type CPoint
- ASSERT (temp != nullptr && temp->GetType() == CBotTypFloat);
- m_PosToGo.y = temp->GetValFloat();
-
- return (m_CurentPos == m_PosToGo); // makes true if the position is reached
- // returns false if one had wait yet
-}
-
-*/
+};
\ No newline at end of file
--
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