[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