From df5edc703c7241279116d2bbfe08351d0c3c2a4b Mon Sep 17 00:00:00 2001 From: krzys-h Date: Tue, 26 Mar 2013 15:33:54 +0100 Subject: Added interface button for AlienSpider explosion Issue #142 --- src/common/event.h | 1 + src/common/restext.cpp | 1 + src/object/brain.cpp | 93 ++++++++++++++++++++++++++++++++++---------------- src/object/brain.h | 1 + 4 files changed, 66 insertions(+), 30 deletions(-) diff --git a/src/common/event.h b/src/common/event.h index ad493e7..153b732 100644 --- a/src/common/event.h +++ b/src/common/event.h @@ -444,6 +444,7 @@ enum EventType EVENT_OBJECT_TERRAFORM = 1201, EVENT_OBJECT_FIRE = 1202, EVENT_OBJECT_FIREANT = 1203, + EVENT_OBJECT_SPIDEREXPLO= 1204, EVENT_OBJECT_RECOVER = 1220, EVENT_OBJECT_BEGSHIELD = 1221, EVENT_OBJECT_ENDSHIELD = 1222, diff --git a/src/common/restext.cpp b/src/common/restext.cpp index a6c33a3..729a883 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -352,6 +352,7 @@ void InitializeRestext() stringsEvent[EVENT_OBJECT_SEARCH] = "Sniff (\\key action;)"; stringsEvent[EVENT_OBJECT_TERRAFORM] = "Thump (\\key action;)"; stringsEvent[EVENT_OBJECT_FIRE] = "Shoot (\\key action;)"; + stringsEvent[EVENT_OBJECT_SPIDEREXPLO] = "Explode (\\key action;)"; stringsEvent[EVENT_OBJECT_RECOVER] = "Recycle (\\key action;)"; stringsEvent[EVENT_OBJECT_BEGSHIELD] = "Extend shield (\\key action;)"; stringsEvent[EVENT_OBJECT_ENDSHIELD] = "Withdraw shield (\\key action;)"; diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 53f77cf..2cd7170 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -602,6 +602,11 @@ bool CBrain::EventProcess(const Event &event) //? err = StartTaskFireAnt(); } + if ( action == EVENT_OBJECT_SPIDEREXPLO && m_primaryTask == 0 ) + { + err = StartTaskSpiderExplo(); + } + if ( action == EVENT_OBJECT_PEN0 ) // up { err = StartTaskPen(false, m_object->GetTraceColor()); @@ -1077,6 +1082,24 @@ Error CBrain::StartTaskFire(float delay) return err; } +// Explodes spider. + +Error CBrain::StartTaskSpiderExplo() +{ + Error err; + + if ( m_primaryTask != 0 ) + { + delete m_primaryTask; // stops the current task + m_primaryTask = 0; + } + + m_primaryTask = new CTaskManager(m_object); + err = m_primaryTask->StartTaskSpiderExplo(); + UpdateInterface(); + return err; +} + // Shoots to the ant. Error CBrain::StartTaskFireAnt(Math::Vector impact) @@ -1580,6 +1603,15 @@ bool CBrain::CreateInterface(bool bSelect) //? pw->CreateButton(pos, dim, 41, EVENT_OBJECT_LIMIT); } + if ( type == OBJECT_SPIDER ) + { + pos.x = ox+sx*7.7f; + pos.y = oy+sy*0.5f; + pb = pw->CreateButton(pos, dim, 42, EVENT_OBJECT_SPIDEREXPLO); + pb->SetImmediat(true); + DefaultEnter(pw, EVENT_OBJECT_SPIDEREXPLO); + } + if ( type == OBJECT_MOBILEdr && m_object->GetManual() ) // scribbler in manual mode? { @@ -2136,37 +2168,38 @@ void CBrain::UpdateInterface() bEnable = ( m_primaryTask == 0 && m_program == -1 ); - EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord)); - EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord); - EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable); - EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable); - EnableInterface(pw, EVENT_OBJECT_UP, bEnable); - EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable); - EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable); - EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable); - EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable); - EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable); - EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable); - EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable); - EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable); - EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable); - EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable); - EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable); - EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable); - EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable); - EnableInterface(pw, EVENT_OBJECT_RESET, bEnable); + EnableInterface(pw, EVENT_OBJECT_PROGEDIT, (m_primaryTask == 0 && !m_bTraceRecord)); + EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord); + EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable); + EnableInterface(pw, EVENT_OBJECT_RIGHT, bEnable); + EnableInterface(pw, EVENT_OBJECT_UP, bEnable); + EnableInterface(pw, EVENT_OBJECT_DOWN, bEnable); + EnableInterface(pw, EVENT_OBJECT_HTAKE, bEnable); + EnableInterface(pw, EVENT_OBJECT_MTAKE, bEnable); + EnableInterface(pw, EVENT_OBJECT_MBACK, bEnable); + EnableInterface(pw, EVENT_OBJECT_MPOWER, bEnable); + EnableInterface(pw, EVENT_OBJECT_MFRONT, bEnable); + EnableInterface(pw, EVENT_OBJECT_GFLAT, bEnable); + EnableInterface(pw, EVENT_OBJECT_FCREATE, bEnable); + EnableInterface(pw, EVENT_OBJECT_FDELETE, bEnable); + EnableInterface(pw, EVENT_OBJECT_SEARCH, bEnable); + EnableInterface(pw, EVENT_OBJECT_TERRAFORM, bEnable); + EnableInterface(pw, EVENT_OBJECT_RECOVER, bEnable); + EnableInterface(pw, EVENT_OBJECT_FIRE, bEnable); + EnableInterface(pw, EVENT_OBJECT_SPIDEREXPLO, bEnable); + EnableInterface(pw, EVENT_OBJECT_RESET, bEnable); #if _TEEN - EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable); - EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable); - EnableInterface(pw, EVENT_OBJECT_REC, bEnable); - EnableInterface(pw, EVENT_OBJECT_STOP, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN0, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN1, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN2, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN3, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN4, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN5, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN6, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN7, bEnable); + EnableInterface(pw, EVENT_OBJECT_PEN8, bEnable); + EnableInterface(pw, EVENT_OBJECT_REC, bEnable); + EnableInterface(pw, EVENT_OBJECT_STOP, bEnable); #endif if ( type == OBJECT_HUMAN ) // builder? diff --git a/src/object/brain.h b/src/object/brain.h index 5656f62..eba8004 100644 --- a/src/object/brain.h +++ b/src/object/brain.h @@ -133,6 +133,7 @@ public: Error StartTaskShield(TaskShieldMode mode); Error StartTaskFire(float delay); Error StartTaskFireAnt(Math::Vector impact); + Error StartTaskSpiderExplo(); Error StartTaskGunGoal(float dirV, float dirH); Error StartTaskReset(Math::Vector goal, Math::Vector angle); -- cgit v1.2.3-1-g7c22