Add flag() and deflag() CBOT functions
parent
56c99e741e
commit
4c1d3eecd1
|
@ -27,21 +27,22 @@ std::string TraceColorName(TraceColor color)
|
|||
{
|
||||
switch(color)
|
||||
{
|
||||
case TraceColor::Blue: return "Blue";
|
||||
case TraceColor::Red: return "Red";
|
||||
case TraceColor::Green: return "Green";
|
||||
case TraceColor::Yellow: return "Yellow";
|
||||
case TraceColor::Violet: return "Violet";
|
||||
case TraceColor::White: return "White";
|
||||
case TraceColor::Black: return "Black";
|
||||
case TraceColor::Gray: return "Gray";
|
||||
case TraceColor::LightGray: return "LightGray";
|
||||
case TraceColor::Red: return "Red";
|
||||
case TraceColor::Pink: return "Pink";
|
||||
case TraceColor::Purple: return "Purple";
|
||||
case TraceColor::Orange: return "Orange";
|
||||
case TraceColor::Yellow: return "Yellow";
|
||||
case TraceColor::Beige: return "Beige";
|
||||
case TraceColor::Brown: return "Brown";
|
||||
case TraceColor::Skin: return "Skin";
|
||||
case TraceColor::Green: return "Green";
|
||||
case TraceColor::LightGreen: return "LightGreen";
|
||||
case TraceColor::Blue: return "Blue";
|
||||
case TraceColor::LightBlue: return "LightBlue";
|
||||
case TraceColor::RedArrow: return "RedArrow";
|
||||
case TraceColor::BlackArrow: return "BlackArrow";
|
||||
|
@ -55,21 +56,22 @@ Gfx::Color TraceColorColor(TraceColor color)
|
|||
{
|
||||
switch(color)
|
||||
{
|
||||
case TraceColor::Blue: return Gfx::Color(0.000f, 0.000f, 0.753f, 1.0f);
|
||||
case TraceColor::Red: return Gfx::Color(1.000f, 0.000f, 0.000f, 1.0f);
|
||||
case TraceColor::Green: return Gfx::Color(0.000f, 0.627f, 0.000f, 1.0f);
|
||||
case TraceColor::Yellow: return Gfx::Color(1.000f, 1.000f, 0.000f, 1.0f);
|
||||
case TraceColor::Violet: return Gfx::Color(0.820f, 0.000f, 0.997f, 1.0f);
|
||||
case TraceColor::White: return Gfx::Color(1.000f, 1.000f, 1.000f, 1.0f);
|
||||
case TraceColor::Black: return Gfx::Color(0.000f, 0.000f, 0.000f, 1.0f);
|
||||
case TraceColor::Gray: return Gfx::Color(0.549f, 0.549f, 0.549f, 1.0f);
|
||||
case TraceColor::LightGray: return Gfx::Color(0.753f, 0.753f, 0.753f, 1.0f);
|
||||
case TraceColor::Red: return Gfx::Color(1.000f, 0.000f, 0.000f, 1.0f);
|
||||
case TraceColor::Pink: return Gfx::Color(1.000f, 0.627f, 0.753f, 1.0f);
|
||||
case TraceColor::Purple: return Gfx::Color(0.878f, 0.000f, 0.753f, 1.0f);
|
||||
case TraceColor::Orange: return Gfx::Color(1.000f, 0.627f, 0.000f, 1.0f);
|
||||
case TraceColor::Yellow: return Gfx::Color(1.000f, 1.000f, 0.000f, 1.0f);
|
||||
case TraceColor::Beige: return Gfx::Color(0.878f, 0.753f, 0.000f, 1.0f);
|
||||
case TraceColor::Brown: return Gfx::Color(0.627f, 0.361f, 0.000f, 1.0f);
|
||||
case TraceColor::Skin: return Gfx::Color(0.961f, 0.839f, 0.714f, 1.0f);
|
||||
case TraceColor::Green: return Gfx::Color(0.000f, 0.627f, 0.000f, 1.0f);
|
||||
case TraceColor::LightGreen: return Gfx::Color(0.000f, 1.000f, 0.000f, 1.0f);
|
||||
case TraceColor::Blue: return Gfx::Color(0.000f, 0.000f, 0.753f, 1.0f);
|
||||
case TraceColor::LightBlue: return Gfx::Color(0.000f, 0.871f, 1.000f, 1.0f);
|
||||
case TraceColor::BlackArrow: return TraceColorColor(TraceColor::Black);
|
||||
case TraceColor::RedArrow: return TraceColorColor(TraceColor::Red); //TODO: We could probably have all the colors available as arrows now
|
||||
|
|
|
@ -32,24 +32,25 @@ enum class TraceColor
|
|||
{
|
||||
Default = -1,
|
||||
|
||||
White = 0,
|
||||
Black = 1,
|
||||
Gray = 2,
|
||||
LightGray = 3,
|
||||
Red = 4,
|
||||
Pink = 5,
|
||||
Purple = 6,
|
||||
Orange = 7,
|
||||
Yellow = 8,
|
||||
Beige = 9,
|
||||
Brown = 10,
|
||||
Skin = 11,
|
||||
Green = 12,
|
||||
LightGreen = 13,
|
||||
Blue = 14,
|
||||
LightBlue = 15,
|
||||
BlackArrow = 16,
|
||||
RedArrow = 17,
|
||||
Blue = 0,
|
||||
Red = 1,
|
||||
Green = 2,
|
||||
Yellow = 3,
|
||||
Violet = 4,
|
||||
White = 5,
|
||||
Black = 6,
|
||||
Gray = 7,
|
||||
LightGray = 8,
|
||||
Pink = 9,
|
||||
Purple = 10,
|
||||
Orange = 11,
|
||||
Beige = 12,
|
||||
Brown = 13,
|
||||
Skin = 14,
|
||||
LightGreen = 15,
|
||||
LightBlue = 16,
|
||||
BlackArrow = 17,
|
||||
RedArrow = 18,
|
||||
Max,
|
||||
};
|
||||
//! Convert TraceColor to a std::string
|
||||
|
|
|
@ -322,6 +322,8 @@ std::string GetHelpFilename(const char *token)
|
|||
if ( strcmp(token, "researched" ) == 0 ) helpfile = "cbot/researched";
|
||||
if ( strcmp(token, "buildingenabled") == 0 ) helpfile = "cbot/buildingenabled";
|
||||
if ( strcmp(token, "build" ) == 0 ) helpfile = "cbot/build";
|
||||
if ( strcmp(token, "flag" ) == 0 ) helpfile = "cbot/flag";
|
||||
if ( strcmp(token, "deflag" ) == 0 ) helpfile = "cbot/deflag";
|
||||
if ( strcmp(token, "wait" ) == 0 ) helpfile = "cbot/wait";
|
||||
if ( strcmp(token, "move" ) == 0 ) helpfile = "cbot/move";
|
||||
if ( strcmp(token, "turn" ) == 0 ) helpfile = "cbot/turn";
|
||||
|
@ -344,23 +346,24 @@ std::string GetHelpFilename(const char *token)
|
|||
if ( strcmp(token, "topo" ) == 0 ) helpfile = "cbot/topo";
|
||||
if ( strcmp(token, "message" ) == 0 ) helpfile = "cbot/message";
|
||||
if ( strcmp(token, "abstime" ) == 0 ) helpfile = "cbot/abstime";
|
||||
if ( strcmp(token, "Blue" ) == 0 ) helpfile = "cbot/flag";
|
||||
if ( strcmp(token, "Red" ) == 0 ) helpfile = "cbot/flag";
|
||||
if ( strcmp(token, "Green" ) == 0 ) helpfile = "cbot/flag";
|
||||
if ( strcmp(token, "Yellow" ) == 0 ) helpfile = "cbot/flag";
|
||||
if ( strcmp(token, "Violet" ) == 0 ) helpfile = "cbot/flag";
|
||||
if ( strcmp(token, "BlackArrow" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "RedArrow" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "White" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Black" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Gray" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "LightGray" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Red" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Pink" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Purple" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Orange" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Yellow" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Beige" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Brown" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Skin" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Green" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "LightGreen" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "Blue" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "LightBlue" ) == 0 ) helpfile = "cbot/pendown";
|
||||
if ( strcmp(token, "InFront" ) == 0 ) helpfile = "cbot/grab";
|
||||
if ( strcmp(token, "Behind" ) == 0 ) helpfile = "cbot/grab";
|
||||
|
@ -482,6 +485,8 @@ bool IsFunction(const char *token)
|
|||
if ( strcmp(token, "researched" ) == 0 ) return true;
|
||||
if ( strcmp(token, "buildingenabled") == 0 ) return true;
|
||||
if ( strcmp(token, "build" ) == 0 ) return true;
|
||||
if ( strcmp(token, "flag" ) == 0 ) return true;
|
||||
if ( strcmp(token, "deflag" ) == 0 ) return true;
|
||||
if ( strcmp(token, "wait" ) == 0 ) return true;
|
||||
if ( strcmp(token, "move" ) == 0 ) return true;
|
||||
if ( strcmp(token, "turn" ) == 0 ) return true;
|
||||
|
@ -588,6 +593,8 @@ const char* GetHelpText(const char *token)
|
|||
if ( strcmp(token, "researched" ) == 0 ) return "researched ( research );";
|
||||
if ( strcmp(token, "buildingenabled") == 0 ) return "buildingenabled ( category );";
|
||||
if ( strcmp(token, "build" ) == 0 ) return "build ( category );";
|
||||
if ( strcmp(token, "flag" ) == 0 ) return "flag ( color );";
|
||||
if ( strcmp(token, "deflag" ) == 0 ) return "deflag ( );";
|
||||
if ( strcmp(token, "wait" ) == 0 ) return "wait ( time );";
|
||||
if ( strcmp(token, "move" ) == 0 ) return "move ( distance );";
|
||||
if ( strcmp(token, "turn" ) == 0 ) return "turn ( angle );";
|
||||
|
|
|
@ -1439,6 +1439,102 @@ bool CScriptFunctions::rBuild(CBotVar* var, CBotVar* result, int& exception, voi
|
|||
|
||||
}
|
||||
|
||||
// Instruction "flag(color)"
|
||||
|
||||
bool CScriptFunctions::rFlag(CBotVar* var, CBotVar* result, int& exception, void* user)
|
||||
{
|
||||
CScript* script = static_cast<CScript*>(user);
|
||||
CObject* pThis = script->m_object;
|
||||
ObjectType oType;
|
||||
int color;
|
||||
Error err;
|
||||
|
||||
exception = 0;
|
||||
|
||||
if ( !script->m_taskExecutor->IsForegroundTask() )
|
||||
{
|
||||
oType = pThis->GetType();
|
||||
if ( oType != OBJECT_MOBILEfs && // allowed only for sniffer bots && humans
|
||||
oType != OBJECT_MOBILEts &&
|
||||
oType != OBJECT_MOBILEws &&
|
||||
oType != OBJECT_MOBILEis &&
|
||||
oType != OBJECT_HUMAN &&
|
||||
oType != OBJECT_TECH )
|
||||
{
|
||||
err = ERR_WRONG_BOT; // Wrong object
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( var == nullptr )
|
||||
{
|
||||
color = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
color = var->GetValInt();
|
||||
if ( color < 0 || color > static_cast<int>(TraceColor::Violet) ) color = 0;
|
||||
}
|
||||
err = script->m_taskExecutor->StartTaskFlag(TFL_CREATE, color);
|
||||
}
|
||||
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
script->m_taskExecutor->StopForegroundTask();
|
||||
result->SetValInt(err); // shows the error
|
||||
if ( script->m_errMode == ERM_STOP )
|
||||
{
|
||||
exception = err;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return WaitForForegroundTask(script, result, exception);
|
||||
}
|
||||
|
||||
// Instruction "deflag()"
|
||||
|
||||
bool CScriptFunctions::rDeflag(CBotVar* var, CBotVar* result, int& exception, void* user)
|
||||
{
|
||||
CScript* script = static_cast<CScript*>(user);
|
||||
CObject* pThis = script->m_object;
|
||||
ObjectType oType;
|
||||
Error err;
|
||||
|
||||
exception = 0;
|
||||
|
||||
if ( !script->m_taskExecutor->IsForegroundTask() )
|
||||
{
|
||||
oType = pThis->GetType();
|
||||
if ( oType != OBJECT_MOBILEfs && // allowed only for sniffer bots && humans
|
||||
oType != OBJECT_MOBILEts &&
|
||||
oType != OBJECT_MOBILEws &&
|
||||
oType != OBJECT_MOBILEis &&
|
||||
oType != OBJECT_HUMAN &&
|
||||
oType != OBJECT_TECH )
|
||||
{
|
||||
err = ERR_WRONG_BOT; // Wrong object
|
||||
}
|
||||
else
|
||||
{
|
||||
err = script->m_taskExecutor->StartTaskFlag(TFL_DELETE, 0);
|
||||
}
|
||||
|
||||
if ( err != ERR_OK )
|
||||
{
|
||||
script->m_taskExecutor->StopForegroundTask();
|
||||
result->SetValInt(err); // shows the error
|
||||
if ( script->m_errMode == ERM_STOP )
|
||||
{
|
||||
exception = err;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return WaitForForegroundTask(script, result, exception);
|
||||
}
|
||||
|
||||
// Compilation of the instruction "produce(pos, angle, type[, scriptName[, power]])"
|
||||
// or "produce(type[, power])".
|
||||
|
||||
|
@ -3437,6 +3533,8 @@ void CScriptFunctions::Init()
|
|||
CBotProgram::AddFunction("buildingenabled", rBuildingEnabled, cOneIntReturnBool);
|
||||
|
||||
CBotProgram::AddFunction("build", rBuild, cOneInt);
|
||||
CBotProgram::AddFunction("flag", rFlag, cGrabDrop);
|
||||
CBotProgram::AddFunction("deflag", rDeflag, cNull);
|
||||
|
||||
CBotProgram::AddFunction("retobject", rGetObject, cGetObject);
|
||||
CBotProgram::AddFunction("retobjectbyid", rGetObjectById, cGetObject);
|
||||
|
|
|
@ -110,6 +110,8 @@ private:
|
|||
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);
|
||||
|
|
Loading…
Reference in New Issue