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_FACTORYrs] = "EVENT_OBJECT_FACTORYrs";
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_TERRAFORM] = "EVENT_OBJECT_TERRAFORM";
EVENT_TYPE_TEXT[EVENT_OBJECT_FIRE] = "EVENT_OBJECT_FIRE";
@ -527,8 +528,9 @@ void InitializeEventTypeTexts()
EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_START] = "EVENT_CODE_BATTLE_START";
EVENT_TYPE_TEXT[EVENT_CODE_BATTLE_SPECTATOR] = "EVENT_CODE_BATTLE_SPECTATOR";
EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER";
EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD";
EVENT_TYPE_TEXT[EVENT_OBJECT_RBUILDER] = "EVENT_OBJECT_RBUILDER";
EVENT_TYPE_TEXT[EVENT_OBJECT_BUILD] = "EVENT_OBJECT_BUILD";
EVENT_TYPE_TEXT[EVENT_OBJECT_RTARGET] = "EVENT_OBJECT_RTARGET";
}
std::string ParseEventType(EventType eventType)

View File

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

View File

@ -366,6 +366,7 @@ void InitializeRestext()
stringsEvent[EVENT_OBJECT_FACTORYrr] = TR("Build a recycler");
stringsEvent[EVENT_OBJECT_FACTORYrs] = TR("Build a shielder");
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_RFLY] = TR("Run research program for winged bots");
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_RiGUN] = TR("Run research program for orga shooter");
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_SEARCH] = TR("Sniff (\\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_DHUMAN] = TR("You must get on the spaceship to take off");
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_NUCLEAR_EMPTY] = TR("No uranium to transform");
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 == "SNIFFER" ) return RESEARCH_SNIFFER;
if (value == "BUILDER" ) return RESEARCH_BUILDER;
if (value == "TARGET" ) return RESEARCH_TARGET;
return Cast<int>(value, "researchflag");
}

View File

@ -39,5 +39,6 @@ enum ResearchType
RESEARCH_RECYCLER = (1<<10), //! < recycler
RESEARCH_SUBM = (1<<11), //! < submarine
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_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_MOBILEtg && !IsResearchDone(RESEARCH_TARGET, team)) return ERR_BUILD_RESEARCH;
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_FACTORYrs ) return OBJECT_MOBILErs;
if ( eventType == EVENT_OBJECT_FACTORYsa ) return OBJECT_MOBILEsa;
if ( eventType == EVENT_OBJECT_FACTORYtg ) return OBJECT_MOBILEtg;
return OBJECT_NULL;
}
@ -798,6 +799,8 @@ bool CAutoFactory::CreateInterface(bool bSelect)
pos.x = ox+sx*0.0f;
pos.y = oy+sy*2.7f;
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;
@ -847,6 +850,7 @@ void CAutoFactory::UpdateInterface()
UpdateButton(pw, EVENT_OBJECT_FACTORYrr, m_bBusy);
UpdateButton(pw, EVENT_OBJECT_FACTORYrs, m_bBusy);
UpdateButton(pw, EVENT_OBJECT_FACTORYsa, m_bBusy);
UpdateButton(pw, EVENT_OBJECT_FACTORYtg, m_bBusy);
}
// Updates the status of one interface button.

View File

@ -136,7 +136,11 @@ Error CAutoLabo::StartAction(int param)
{
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;
}
@ -177,6 +181,7 @@ bool CAutoLabo::EventProcess(const Event &event)
if ( m_object->GetSelect() ) // center selected?
{
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_RiGUN ) err = StartAction(RESEARCH_iGUN);
@ -455,7 +460,7 @@ Error CAutoLabo::GetError()
CObject* obj = m_object->GetPower();
if (obj == nullptr) return ERR_LABO_NULL;
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;
}
@ -484,6 +489,10 @@ bool CAutoLabo::CreateInterface(bool bSelect)
sy = 33.0f/480.0f;
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.y = oy+sy*0.5f;
pw->CreateButton(pos, dim, 64+45, EVENT_OBJECT_RiPAW);
@ -517,14 +526,17 @@ void CAutoLabo::UpdateInterface()
pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
if ( pw == nullptr ) return;
DeadInterface(pw, EVENT_OBJECT_RiPAW, m_main->IsResearchEnabled(RESEARCH_iPAW));
DeadInterface(pw, EVENT_OBJECT_RiGUN, m_main->IsResearchEnabled(RESEARCH_iGUN));
DeadInterface(pw, EVENT_OBJECT_RTARGET, m_main->IsResearchEnabled(RESEARCH_TARGET));
DeadInterface(pw, EVENT_OBJECT_RiPAW, m_main->IsResearchEnabled(RESEARCH_iPAW));
DeadInterface(pw, EVENT_OBJECT_RiGUN, m_main->IsResearchEnabled(RESEARCH_iGUN));
OkayButton(pw, EVENT_OBJECT_RTARGET);
OkayButton(pw, EVENT_OBJECT_RiPAW);
OkayButton(pw, EVENT_OBJECT_RiGUN);
VisibleInterface(pw, EVENT_OBJECT_RiPAW, !m_bBusy);
VisibleInterface(pw, EVENT_OBJECT_RiGUN, !m_bBusy);
VisibleInterface(pw, EVENT_OBJECT_RTARGET, !m_bBusy);
VisibleInterface(pw, EVENT_OBJECT_RiPAW, !m_bBusy);
VisibleInterface(pw, EVENT_OBJECT_RiGUN, !m_bBusy);
}
// Indicates the research conducted for a button.
@ -544,8 +556,9 @@ void CAutoLabo::OkayButton(Ui::CWindow *pw, EventType event)
bool CAutoLabo::TestResearch(EventType event)
{
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_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_RiGUN ) return m_main->IsResearchDone(RESEARCH_iGUN, m_object->GetTeam());
return m_main;
}

View File

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

View File

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

View File

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

View File

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

View File

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