Add TargetBot research; make it fully operational
parent
5b2f3111b6
commit
5b2b632de3
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue