Add TargetBot research; make it fully operational

modernize-cmake-1
Fiftytwo 2018-07-13 00:03:20 +02:00
parent 5b2f3111b6
commit 5b2b632de3
13 changed files with 45 additions and 14 deletions

View File

@ -432,6 +432,7 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrr] = "EVENT_OBJECT_FACTORYrr"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrr] = "EVENT_OBJECT_FACTORYrr";
EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrs] = "EVENT_OBJECT_FACTORYrs"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYrs] = "EVENT_OBJECT_FACTORYrs";
EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYsa] = "EVENT_OBJECT_FACTORYsa"; EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYsa] = "EVENT_OBJECT_FACTORYsa";
EVENT_TYPE_TEXT[EVENT_OBJECT_FACTORYtg] = "EVENT_OBJECT_FACTORYtg";
EVENT_TYPE_TEXT[EVENT_OBJECT_SEARCH] = "EVENT_OBJECT_SEARCH"; EVENT_TYPE_TEXT[EVENT_OBJECT_SEARCH] = "EVENT_OBJECT_SEARCH";
EVENT_TYPE_TEXT[EVENT_OBJECT_TERRAFORM] = "EVENT_OBJECT_TERRAFORM"; EVENT_TYPE_TEXT[EVENT_OBJECT_TERRAFORM] = "EVENT_OBJECT_TERRAFORM";
EVENT_TYPE_TEXT[EVENT_OBJECT_FIRE] = "EVENT_OBJECT_FIRE"; EVENT_TYPE_TEXT[EVENT_OBJECT_FIRE] = "EVENT_OBJECT_FIRE";
@ -529,6 +530,7 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER"; EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER";
EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD"; EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD";
EVENT_TYPE_TEXT[EVENT_OBJECT_RTARGET] = "EVENT_OBJECT_RTARGET";
} }
std::string ParseEventType(EventType eventType) std::string ParseEventType(EventType eventType)

View File

@ -496,6 +496,7 @@ enum EventType
EVENT_OBJECT_FACTORYtb = 1102, EVENT_OBJECT_FACTORYtb = 1102,
EVENT_OBJECT_FACTORYfb = 1103, EVENT_OBJECT_FACTORYfb = 1103,
EVENT_OBJECT_FACTORYib = 1104, EVENT_OBJECT_FACTORYib = 1104,
EVENT_OBJECT_FACTORYtg = 1105,
EVENT_OBJECT_SEARCH = 1200, EVENT_OBJECT_SEARCH = 1200,
EVENT_OBJECT_TERRAFORM = 1201, EVENT_OBJECT_TERRAFORM = 1201,
EVENT_OBJECT_FIRE = 1202, EVENT_OBJECT_FIRE = 1202,
@ -600,6 +601,7 @@ enum EventType
EVENT_OBJECT_RBUILDER = 2300, EVENT_OBJECT_RBUILDER = 2300,
EVENT_OBJECT_BUILD = 2301, EVENT_OBJECT_BUILD = 2301,
EVENT_OBJECT_RTARGET = 2302,
//! Maximum value of standard events //! Maximum value of standard events
EVENT_STD_MAX, EVENT_STD_MAX,

View File

@ -366,6 +366,7 @@ void InitializeRestext()
stringsEvent[EVENT_OBJECT_FACTORYrr] = TR("Build a recycler"); stringsEvent[EVENT_OBJECT_FACTORYrr] = TR("Build a recycler");
stringsEvent[EVENT_OBJECT_FACTORYrs] = TR("Build a shielder"); stringsEvent[EVENT_OBJECT_FACTORYrs] = TR("Build a shielder");
stringsEvent[EVENT_OBJECT_FACTORYsa] = TR("Build a subber"); stringsEvent[EVENT_OBJECT_FACTORYsa] = TR("Build a subber");
stringsEvent[EVENT_OBJECT_FACTORYtg] = TR("Build a target bot");
stringsEvent[EVENT_OBJECT_RTANK] = TR("Run research program for tracked bots"); stringsEvent[EVENT_OBJECT_RTANK] = TR("Run research program for tracked bots");
stringsEvent[EVENT_OBJECT_RFLY] = TR("Run research program for winged bots"); stringsEvent[EVENT_OBJECT_RFLY] = TR("Run research program for winged bots");
stringsEvent[EVENT_OBJECT_RTHUMP] = TR("Run research program for thumper"); stringsEvent[EVENT_OBJECT_RTHUMP] = TR("Run research program for thumper");
@ -377,6 +378,7 @@ void InitializeRestext()
stringsEvent[EVENT_OBJECT_RiPAW] = TR("Run research program for legged bots"); stringsEvent[EVENT_OBJECT_RiPAW] = TR("Run research program for legged bots");
stringsEvent[EVENT_OBJECT_RiGUN] = TR("Run research program for orga shooter"); stringsEvent[EVENT_OBJECT_RiGUN] = TR("Run research program for orga shooter");
stringsEvent[EVENT_OBJECT_RBUILDER] = TR("Run research program for builder"); stringsEvent[EVENT_OBJECT_RBUILDER] = TR("Run research program for builder");
stringsEvent[EVENT_OBJECT_RTARGET] = TR("Run research program for target bot");
stringsEvent[EVENT_OBJECT_RESET] = TR("Return to start"); stringsEvent[EVENT_OBJECT_RESET] = TR("Return to start");
stringsEvent[EVENT_OBJECT_SEARCH] = TR("Sniff (\\key action;)"); stringsEvent[EVENT_OBJECT_SEARCH] = TR("Sniff (\\key action;)");
stringsEvent[EVENT_OBJECT_TERRAFORM] = TR("Thump (\\key action;)"); stringsEvent[EVENT_OBJECT_TERRAFORM] = TR("Thump (\\key action;)");
@ -626,7 +628,7 @@ void InitializeRestext()
stringsErr[ERR_BASE_DLOCK] = TR("Doors blocked by a robot or another object"); stringsErr[ERR_BASE_DLOCK] = TR("Doors blocked by a robot or another object");
stringsErr[ERR_BASE_DHUMAN] = TR("You must get on the spaceship to take off"); stringsErr[ERR_BASE_DHUMAN] = TR("You must get on the spaceship to take off");
stringsErr[ERR_LABO_NULL] = TR("Nothing to analyze"); stringsErr[ERR_LABO_NULL] = TR("Nothing to analyze");
stringsErr[ERR_LABO_BAD] = TR("Analyzes only organic matter"); stringsErr[ERR_LABO_BAD] = TR("Inappropriate sample");
stringsErr[ERR_LABO_ALREADY] = TR("Analysis already performed"); stringsErr[ERR_LABO_ALREADY] = TR("Analysis already performed");
stringsErr[ERR_NUCLEAR_EMPTY] = TR("No uranium to transform"); stringsErr[ERR_NUCLEAR_EMPTY] = TR("No uranium to transform");
stringsErr[ERR_NUCLEAR_BAD] = TR("Transforms only uranium"); stringsErr[ERR_NUCLEAR_BAD] = TR("Transforms only uranium");

View File

@ -916,6 +916,7 @@ int CLevelParserParam::ToResearchFlag(std::string value)
if (value == "SUBBER" ) return RESEARCH_SUBM; if (value == "SUBBER" ) return RESEARCH_SUBM;
if (value == "SNIFFER" ) return RESEARCH_SNIFFER; if (value == "SNIFFER" ) return RESEARCH_SNIFFER;
if (value == "BUILDER" ) return RESEARCH_BUILDER; if (value == "BUILDER" ) return RESEARCH_BUILDER;
if (value == "TARGET" ) return RESEARCH_TARGET;
return Cast<int>(value, "researchflag"); return Cast<int>(value, "researchflag");
} }

View File

@ -39,5 +39,6 @@ enum ResearchType
RESEARCH_RECYCLER = (1<<10), //! < recycler RESEARCH_RECYCLER = (1<<10), //! < recycler
RESEARCH_SUBM = (1<<11), //! < submarine RESEARCH_SUBM = (1<<11), //! < submarine
RESEARCH_SNIFFER = (1<<12), //! < sniffer RESEARCH_SNIFFER = (1<<12), //! < sniffer
RESEARCH_BUILDER = (1<<13) //! < builder RESEARCH_BUILDER = (1<<13), //! < builder
RESEARCH_TARGET = (1<<14) //! < target bot
}; };

View File

@ -5741,6 +5741,7 @@ Error CRobotMain::CanFactoryError(ObjectType type, int team)
if (type == OBJECT_MOBILErr && !IsResearchDone(RESEARCH_RECYCLER, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErr && !IsResearchDone(RESEARCH_RECYCLER, team)) return ERR_BUILD_RESEARCH;
if (type == OBJECT_MOBILErs && !IsResearchDone(RESEARCH_SHIELD, team)) return ERR_BUILD_RESEARCH; if (type == OBJECT_MOBILErs && !IsResearchDone(RESEARCH_SHIELD, team)) return ERR_BUILD_RESEARCH;
if (type == OBJECT_MOBILEsa && !IsResearchDone(RESEARCH_SUBM, team)) return ERR_BUILD_DISABLED; // Can be only researched manually in Scene file if (type == OBJECT_MOBILEsa && !IsResearchDone(RESEARCH_SUBM, team)) return ERR_BUILD_DISABLED; // Can be only researched manually in Scene file
if (type == OBJECT_MOBILEtg && !IsResearchDone(RESEARCH_TARGET, team)) return ERR_BUILD_RESEARCH;
return ERR_OK; return ERR_OK;
} }

View File

@ -195,6 +195,7 @@ ObjectType ObjectTypeFromFactoryButton(EventType eventType)
if ( eventType == EVENT_OBJECT_FACTORYrr ) return OBJECT_MOBILErr; if ( eventType == EVENT_OBJECT_FACTORYrr ) return OBJECT_MOBILErr;
if ( eventType == EVENT_OBJECT_FACTORYrs ) return OBJECT_MOBILErs; if ( eventType == EVENT_OBJECT_FACTORYrs ) return OBJECT_MOBILErs;
if ( eventType == EVENT_OBJECT_FACTORYsa ) return OBJECT_MOBILEsa; if ( eventType == EVENT_OBJECT_FACTORYsa ) return OBJECT_MOBILEsa;
if ( eventType == EVENT_OBJECT_FACTORYtg ) return OBJECT_MOBILEtg;
return OBJECT_NULL; return OBJECT_NULL;
} }
@ -798,6 +799,8 @@ bool CAutoFactory::CreateInterface(bool bSelect)
pos.x = ox+sx*0.0f; pos.x = ox+sx*0.0f;
pos.y = oy+sy*2.7f; pos.y = oy+sy*2.7f;
pw->CreateButton(pos, dim, 128+21, EVENT_OBJECT_FACTORYsa); pw->CreateButton(pos, dim, 128+21, EVENT_OBJECT_FACTORYsa);
pos.x += dim.x;
pw->CreateButton(pos, dim, 128+45, EVENT_OBJECT_FACTORYtg);
} }
pos.x = ox+sx*0.0f; pos.x = ox+sx*0.0f;
@ -847,6 +850,7 @@ void CAutoFactory::UpdateInterface()
UpdateButton(pw, EVENT_OBJECT_FACTORYrr, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYrr, m_bBusy);
UpdateButton(pw, EVENT_OBJECT_FACTORYrs, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYrs, m_bBusy);
UpdateButton(pw, EVENT_OBJECT_FACTORYsa, m_bBusy); UpdateButton(pw, EVENT_OBJECT_FACTORYsa, m_bBusy);
UpdateButton(pw, EVENT_OBJECT_FACTORYtg, m_bBusy);
} }
// Updates the status of one interface button. // Updates the status of one interface button.

View File

@ -136,7 +136,11 @@ Error CAutoLabo::StartAction(int param)
{ {
return ERR_LABO_NULL; return ERR_LABO_NULL;
} }
if ( power->GetType() != OBJECT_BULLET ) if ( m_research != RESEARCH_TARGET && power->GetType() != OBJECT_BULLET )
{
return ERR_LABO_BAD;
}
if ( m_research == RESEARCH_TARGET && power->GetType() != OBJECT_TNT )
{ {
return ERR_LABO_BAD; return ERR_LABO_BAD;
} }
@ -177,6 +181,7 @@ bool CAutoLabo::EventProcess(const Event &event)
if ( m_object->GetSelect() ) // center selected? if ( m_object->GetSelect() ) // center selected?
{ {
Error err = ERR_UNKNOWN; Error err = ERR_UNKNOWN;
if ( event.type == EVENT_OBJECT_RTARGET ) err = StartAction(RESEARCH_TARGET);
if ( event.type == EVENT_OBJECT_RiPAW ) err = StartAction(RESEARCH_iPAW); if ( event.type == EVENT_OBJECT_RiPAW ) err = StartAction(RESEARCH_iPAW);
if ( event.type == EVENT_OBJECT_RiGUN ) err = StartAction(RESEARCH_iGUN); if ( event.type == EVENT_OBJECT_RiGUN ) err = StartAction(RESEARCH_iGUN);
@ -455,7 +460,7 @@ Error CAutoLabo::GetError()
CObject* obj = m_object->GetPower(); CObject* obj = m_object->GetPower();
if (obj == nullptr) return ERR_LABO_NULL; if (obj == nullptr) return ERR_LABO_NULL;
ObjectType type = obj->GetType(); ObjectType type = obj->GetType();
if ( type != OBJECT_BULLET ) return ERR_LABO_BAD; if ( type != OBJECT_BULLET && type != OBJECT_TNT ) return ERR_LABO_BAD;
return ERR_OK; return ERR_OK;
} }
@ -484,6 +489,10 @@ bool CAutoLabo::CreateInterface(bool bSelect)
sy = 33.0f/480.0f; sy = 33.0f/480.0f;
if( !m_object->GetTrainer() ) if( !m_object->GetTrainer() )
{ {
pos.x = ox+sx*6.0f;
pos.y = oy+sy*0.5f;
pw->CreateButton(pos, dim, 192+8, EVENT_OBJECT_RTARGET);
pos.x = ox+sx*7.0f; pos.x = ox+sx*7.0f;
pos.y = oy+sy*0.5f; pos.y = oy+sy*0.5f;
pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW); pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW);
@ -517,12 +526,15 @@ void CAutoLabo::UpdateInterface()
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0)); pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
if ( pw == nullptr ) return; if ( pw == nullptr ) return;
DeadInterface(pw, EVENT_OBJECT_RTARGET, m_main->IsResearchEnabled(RESEARCH_TARGET));
DeadInterface(pw, EVENT_OBJECT_RiPAW, m_main->IsResearchEnabled(RESEARCH_iPAW)); DeadInterface(pw, EVENT_OBJECT_RiPAW, m_main->IsResearchEnabled(RESEARCH_iPAW));
DeadInterface(pw, EVENT_OBJECT_RiGUN, m_main->IsResearchEnabled(RESEARCH_iGUN)); DeadInterface(pw, EVENT_OBJECT_RiGUN, m_main->IsResearchEnabled(RESEARCH_iGUN));
OkayButton(pw, EVENT_OBJECT_RTARGET);
OkayButton(pw, EVENT_OBJECT_RiPAW); OkayButton(pw, EVENT_OBJECT_RiPAW);
OkayButton(pw, EVENT_OBJECT_RiGUN); OkayButton(pw, EVENT_OBJECT_RiGUN);
VisibleInterface(pw, EVENT_OBJECT_RTARGET, !m_bBusy);
VisibleInterface(pw, EVENT_OBJECT_RiPAW, !m_bBusy); VisibleInterface(pw, EVENT_OBJECT_RiPAW, !m_bBusy);
VisibleInterface(pw, EVENT_OBJECT_RiGUN, !m_bBusy); VisibleInterface(pw, EVENT_OBJECT_RiGUN, !m_bBusy);
} }
@ -544,6 +556,7 @@ void CAutoLabo::OkayButton(Ui::CWindow *pw, EventType event)
bool CAutoLabo::TestResearch(EventType event) bool CAutoLabo::TestResearch(EventType event)
{ {
if ( event == EVENT_OBJECT_RTARGET ) return m_main->IsResearchDone(RESEARCH_TARGET, m_object->GetTeam());
if ( event == EVENT_OBJECT_RiPAW ) return m_main->IsResearchDone(RESEARCH_iPAW, m_object->GetTeam()); if ( event == EVENT_OBJECT_RiPAW ) return m_main->IsResearchDone(RESEARCH_iPAW, m_object->GetTeam());
if ( event == EVENT_OBJECT_RiGUN ) return m_main->IsResearchDone(RESEARCH_iGUN, m_object->GetTeam()); if ( event == EVENT_OBJECT_RiGUN ) return m_main->IsResearchDone(RESEARCH_iGUN, m_object->GetTeam());

View File

@ -278,6 +278,7 @@ CObject* CAutoPowerStation::SearchVehicle()
type != OBJECT_MOBILEtt && type != OBJECT_MOBILEtt &&
type != OBJECT_MOBILEwt && type != OBJECT_MOBILEwt &&
type != OBJECT_MOBILEit && type != OBJECT_MOBILEit &&
type != OBJECT_MOBILEtg &&
type != OBJECT_MOBILEdr ) continue; type != OBJECT_MOBILEdr ) continue;
Math::Vector oPos = obj->GetPosition(); Math::Vector oPos = obj->GetPosition();

View File

@ -360,6 +360,7 @@ bool CMotionToto::EventFrame(const Event &event)
type == OBJECT_MOBILEtt || type == OBJECT_MOBILEtt ||
type == OBJECT_MOBILEft || type == OBJECT_MOBILEft ||
type == OBJECT_MOBILEit || type == OBJECT_MOBILEit ||
type == OBJECT_MOBILEtg ||
type == OBJECT_MOBILEdr ) ) // vehicle? type == OBJECT_MOBILEdr ) ) // vehicle?
{ {
m_clownTime += event.rTime; m_clownTime += event.rTime;

View File

@ -890,6 +890,7 @@ void COldObject::SetType(ObjectType type)
m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEtt ||
m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEwt ||
m_type == OBJECT_MOBILEit || m_type == OBJECT_MOBILEit ||
m_type == OBJECT_MOBILEtg ||
m_type == OBJECT_MOBILEdr || m_type == OBJECT_MOBILEdr ||
m_type == OBJECT_APOLLO2 || m_type == OBJECT_APOLLO2 ||
m_type == OBJECT_BASE || m_type == OBJECT_BASE ||
@ -3254,6 +3255,7 @@ float COldObject::GetLightningHitProbability()
m_type == OBJECT_MOBILEtt || m_type == OBJECT_MOBILEtt ||
m_type == OBJECT_MOBILEwt || m_type == OBJECT_MOBILEwt ||
m_type == OBJECT_MOBILEit || m_type == OBJECT_MOBILEit ||
m_type == OBJECT_MOBILEtg ||
m_type == OBJECT_MOBILEdr ) // robot? m_type == OBJECT_MOBILEdr ) // robot?
{ {
return 0.5f; return 0.5f;
@ -3267,8 +3269,7 @@ bool COldObject::IsSelectableByDefault(ObjectType type)
type == OBJECT_ANT || type == OBJECT_ANT ||
type == OBJECT_SPIDER || type == OBJECT_SPIDER ||
type == OBJECT_BEE || type == OBJECT_BEE ||
type == OBJECT_WORM || type == OBJECT_WORM )
type == OBJECT_MOBILEtg )
{ {
return false; return false;
} }

View File

@ -3311,6 +3311,7 @@ void CScriptFunctions::Init()
CBotProgram::DefineNum("ResearchSubber", RESEARCH_SUBM); CBotProgram::DefineNum("ResearchSubber", RESEARCH_SUBM);
CBotProgram::DefineNum("ResearchSniffer", RESEARCH_SNIFFER); CBotProgram::DefineNum("ResearchSniffer", RESEARCH_SNIFFER);
CBotProgram::DefineNum("ResearchBuilder", RESEARCH_BUILDER); CBotProgram::DefineNum("ResearchBuilder", RESEARCH_BUILDER);
CBotProgram::DefineNum("ResearchTarget", RESEARCH_TARGET);
CBotProgram::DefineNum("PolskiPortalColobota", 1337); CBotProgram::DefineNum("PolskiPortalColobota", 1337);

View File

@ -238,6 +238,7 @@ int CMainShort::GetShortcutIcon(ObjectType type)
case OBJECT_MOBILEtt: icon = 5; break; case OBJECT_MOBILEtt: icon = 5; break;
case OBJECT_MOBILEwt: icon = 30; break; case OBJECT_MOBILEwt: icon = 30; break;
case OBJECT_MOBILEit: icon = 7; break; case OBJECT_MOBILEit: icon = 7; break;
case OBJECT_MOBILEtg: icon = 45; break;
case OBJECT_MOBILEdr: icon = 48; break; case OBJECT_MOBILEdr: icon = 48; break;
case OBJECT_APOLLO2: icon = 49; break; case OBJECT_APOLLO2: icon = 49; break;
default: return -1; default: return -1;