summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2013-03-26 15:33:54 +0100
committerkrzys-h <krzys_h@interia.pl>2013-03-26 15:33:54 +0100
commitdf5edc703c7241279116d2bbfe08351d0c3c2a4b (patch)
tree2afe53e79df351a5e93d4333c4e94bbd2f7e6933
parent43c39f60cd7923e21eb676be3217feb39a4b0496 (diff)
downloadcolobot-df5edc703c7241279116d2bbfe08351d0c3c2a4b.tar.gz
colobot-df5edc703c7241279116d2bbfe08351d0c3c2a4b.tar.bz2
colobot-df5edc703c7241279116d2bbfe08351d0c3c2a4b.zip
Added interface button for AlienSpider explosion
Issue #142
-rw-r--r--src/common/event.h1
-rw-r--r--src/common/restext.cpp1
-rw-r--r--src/object/brain.cpp93
-rw-r--r--src/object/brain.h1
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);