[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