[colobot] 199/390: Fixed saving Shielder's shield (#365)
Didier Raboud
odyx at moszumanska.debian.org
Fri Jun 12 14:21:45 UTC 2015
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch upstream/latest
in repository colobot.
commit b698c40abff328f30f8bf044d3c0e96cec679507
Author: krzys-h <krzys_h at interia.pl>
Date: Mon Nov 10 21:26:02 2014 +0100
Fixed saving Shielder's shield (#365)
---
src/object/brain.cpp | 13 ++++++++++++-
src/object/task/taskmanager.cpp | 8 ++------
src/object/task/taskshield.cpp | 36 ++++++++++++++++++++++++++++++++++++
src/object/task/taskshield.h | 1 +
4 files changed, 51 insertions(+), 7 deletions(-)
diff --git a/src/object/brain.cpp b/src/object/brain.cpp
index 0a723b0..7d51f1f 100644
--- a/src/object/brain.cpp
+++ b/src/object/brain.cpp
@@ -174,6 +174,11 @@ void CBrain::SetMotion(CMotion* motion)
bool CBrain::Write(CLevelParserLine* line)
{
line->AddParam("bVirusActive", new CLevelParserParam(m_bActiveVirus));
+
+ if ( m_object->GetType() == OBJECT_MOBILErs )
+ {
+ line->AddParam("bShieldActive", new CLevelParserParam(m_secondaryTask != nullptr));
+ }
return true;
}
@@ -183,7 +188,13 @@ bool CBrain::Write(CLevelParserLine* line)
bool CBrain::Read(CLevelParserLine* line)
{
m_bActiveVirus = line->GetParam("bVirusActive")->AsBool(false);
-
+ if ( m_object->GetType() == OBJECT_MOBILErs )
+ {
+ if( line->GetParam("bShieldActive")->AsBool(false) )
+ {
+ StartTaskShield(TSM_START);
+ }
+ }
return true;
}
diff --git a/src/object/task/taskmanager.cpp b/src/object/task/taskmanager.cpp
index f34b464..5270925 100644
--- a/src/object/task/taskmanager.cpp
+++ b/src/object/task/taskmanager.cpp
@@ -169,16 +169,12 @@ Error CTaskManager::StartTaskRecover()
Error CTaskManager::StartTaskShield(TaskShieldMode mode, float delay)
{
- if ( mode == TSM_UP )
+ if ( mode == TSM_UP || mode == TSM_START )
{
m_task = new CTaskShield(m_object);
return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
}
- if ( mode == TSM_DOWN && m_task != 0 )
- {
- return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
- }
- if ( mode == TSM_UPDATE && m_task != 0 )
+ else if ( m_task != 0 )
{
return (static_cast<CTaskShield*>(m_task))->Start(mode, delay);
}
diff --git a/src/object/task/taskshield.cpp b/src/object/task/taskshield.cpp
index bd74a4a..254591c 100644
--- a/src/object/task/taskshield.cpp
+++ b/src/object/task/taskshield.cpp
@@ -252,6 +252,42 @@ Error CTaskShield::Start(TaskShieldMode mode, float delay)
return ERR_OK;
}
+ if ( mode == TSM_START )
+ {
+ Math::Point dim;
+
+ m_object->SetShieldRadius(GetRadius());
+
+ mat = m_object->GetWorldMatrix(0);
+ pos = Math::Vector(7.0f, 15.0f, 0.0f);
+ pos = Transform(*mat, pos); // sphere position
+ m_shieldPos = pos;
+
+ pos = m_shieldPos;
+ speed = Math::Vector(0.0f, 0.0f, 0.0f);
+ dim.x = GetRadius();
+ dim.y = dim.x;
+ m_rankSphere = m_particle->CreateParticle(pos, speed, dim, Gfx::PARTISPHERE3, 2.0f, 0.0f, 0.0f);
+
+ m_phase = TS_SHIELD;
+ m_progress = 0.0f;
+ m_speed = 1.0f/999.9f;
+ m_time = 0.0f;
+ m_delay = delay;
+ m_lastParticle = 0.0f;
+ m_lastRay = 0.0f;
+ m_lastIncrease = 0.0f;
+ m_energyUsed = 0.0f;
+
+ m_bError = false; // ok
+
+ if ( m_object->GetSelect() )
+ {
+ m_brain->UpdateInterface();
+ }
+ return ERR_OK;
+ }
+
type = m_object->GetType();
if ( type != OBJECT_MOBILErs ) return ERR_SHIELD_VEH;
diff --git a/src/object/task/taskshield.h b/src/object/task/taskshield.h
index beb7b56..00706e1 100644
--- a/src/object/task/taskshield.h
+++ b/src/object/task/taskshield.h
@@ -46,6 +46,7 @@ enum TaskShieldMode
TSM_UP = 1, // deploys shield
TSM_DOWN = 2, // returns the shield
TSM_UPDATE = 3, // radius change
+ TSM_START = 4, // start with shield up
};
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list