[colobot] 63/100: Add Barricade objects

Didier Raboud odyx at moszumanska.debian.org
Thu Jun 1 18:10:19 UTC 2017


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch debian/master
in repository colobot.

commit 8948da0612766234c673a3585325de3ef80b44f6
Author: krzys-h <krzys_h at interia.pl>
Date:   Fri May 19 15:33:44 2017 +0200

    Add Barricade objects
---
 data                             |  2 +-
 src/level/parser/parserparam.cpp |  4 ++++
 src/object/object_factory.cpp    | 44 ++++++++++++++++++++++++++++++++++++++++
 src/object/object_manager.cpp    |  4 +++-
 src/object/object_type.h         |  2 ++
 src/object/old_object.cpp        | 12 ++++++++++-
 src/object/old_object.h          |  6 ++++++
 7 files changed, 71 insertions(+), 3 deletions(-)

diff --git a/data b/data
index 3b99a62..41c03fd 160000
--- a/data
+++ b/data
@@ -1 +1 @@
-Subproject commit 3b99a62185c4aba3c6c7507dfbbbcf5bcbce3ba2
+Subproject commit 41c03fda84e6eab6cd105fffd77a26cde4c1fe12
diff --git a/src/level/parser/parserparam.cpp b/src/level/parser/parserparam.cpp
index fb3c82f..37773ef 100644
--- a/src/level/parser/parserparam.cpp
+++ b/src/level/parser/parserparam.cpp
@@ -467,6 +467,8 @@ ObjectType CLevelParserParam::ToObjectType(std::string value)
     if (value == "Barrier1"          ) return OBJECT_BARRIER1;
     if (value == "Barrier2"          ) return OBJECT_BARRIER2;
     if (value == "Barrier3"          ) return OBJECT_BARRIER3;
+    if (value == "Barricade0"        ) return OBJECT_BARRICADE0;
+    if (value == "Barricade1"        ) return OBJECT_BARRICADE1;
     if (value == "Teen0"             ) return OBJECT_TEEN0;
     if (value == "Teen1"             ) return OBJECT_TEEN1;
     if (value == "Teen2"             ) return OBJECT_TEEN2;
@@ -662,6 +664,8 @@ const std::string CLevelParserParam::FromObjectType(ObjectType value)
     if (value == OBJECT_BARRIER1    ) return "Barrier1";
     if (value == OBJECT_BARRIER2    ) return "Barrier2";
     if (value == OBJECT_BARRIER3    ) return "Barrier3";
+    if (value == OBJECT_BARRICADE0  ) return "Barricade0";
+    if (value == OBJECT_BARRICADE1  ) return "Barricade1";
     if (value == OBJECT_TEEN0       ) return "Teen0";
     if (value == OBJECT_TEEN1       ) return "Teen1";
     if (value == OBJECT_TEEN2       ) return "Teen2";
diff --git a/src/object/object_factory.cpp b/src/object/object_factory.cpp
index 76e9d59..0b16e17 100644
--- a/src/object/object_factory.cpp
+++ b/src/object/object_factory.cpp
@@ -149,6 +149,8 @@ CObjectUPtr CObjectFactory::CreateObject(const ObjectCreateParams& params)
         case OBJECT_BARRIER1:
         case OBJECT_BARRIER2:
         case OBJECT_BARRIER3:
+        case OBJECT_BARRICADE0:
+        case OBJECT_BARRICADE1:
             return CreateBarrier(params);
 
         case OBJECT_PLANT0:
@@ -579,6 +581,48 @@ CObjectUPtr CObjectFactory::CreateBarrier(const ObjectCreateParams& params)
         obj->CreateShadowCircle(10.0f, 0.5f, Gfx::ENG_SHADOW_WORM);
     }
 
+    if ( type == OBJECT_BARRICADE0 )
+    {
+        int rank = m_engine->CreateObject();
+        m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+        obj->SetObjectRank(0, rank);
+        m_oldModelManager->AddModelReference("barricade0.mod", false, rank, obj->GetTeam());
+        obj->SetPosition(pos);
+        obj->SetRotationY(angle);
+
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+
+        obj->CreateShadowCircle(6.0f, 0.5f, Gfx::ENG_SHADOW_WORM);
+    }
+
+    if ( type == OBJECT_BARRICADE1 )
+    {
+        int rank = m_engine->CreateObject();
+        m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_FIX);
+        obj->SetObjectRank(0, rank);
+        m_oldModelManager->AddModelReference("barricade1.mod", false, rank, obj->GetTeam());
+        obj->SetPosition(pos);
+        obj->SetRotationY(angle);
+
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 8.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector(-8.5f, 3.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 8.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector( 0.0f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector(-3.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+        obj->AddCrashSphere(CrashSphere(Math::Vector(-8.5f, 6.0f, 0.0f), 0.7f, SOUND_BOUMm, 0.45f));
+
+        obj->CreateShadowCircle(12.0f, 0.5f, Gfx::ENG_SHADOW_WORM);
+    }
+
     pos = obj->GetPosition();
     obj->SetPosition(pos);  // to display the shadows immediately
 
diff --git a/src/object/object_manager.cpp b/src/object/object_manager.cpp
index 9483936..a33a89f 100644
--- a/src/object/object_manager.cpp
+++ b/src/object/object_manager.cpp
@@ -311,7 +311,9 @@ std::vector<CObject*> CObjectManager::RadarAll(CObject* pThis, Math::Vector this
             }
 
             if ( oType == OBJECT_BARRIER2 ||
-                oType == OBJECT_BARRIER3 )  // barriers?
+                 oType == OBJECT_BARRIER3 ||
+                 oType == OBJECT_BARRICADE0 ||
+                 oType == OBJECT_BARRICADE1 )  // barriers?
             {
                 oType = OBJECT_BARRIER1;  // any barrier
             }
diff --git a/src/object/object_type.h b/src/object/object_type.h
index 11d5763..88c9587 100644
--- a/src/object/object_type.h
+++ b/src/object/object_type.h
@@ -146,6 +146,8 @@ enum ObjectType
     OBJECT_BARRIER1         = 401,  //!< Barrier1
     OBJECT_BARRIER2         = 402,  //!< Barrier2
     OBJECT_BARRIER3         = 403,  //!< Barrier3
+    OBJECT_BARRICADE0       = 410,  //!< Barricade0
+    OBJECT_BARRICADE1       = 411,  //!< Barricade1
     OBJECT_MOTHER           = 500,  //!< AlienQueen
     OBJECT_EGG              = 501,  //!< AlienEgg
     OBJECT_ANT              = 502,  //!< AlienAnt
diff --git a/src/object/old_object.cpp b/src/object/old_object.cpp
index fb510d8..0930f02 100644
--- a/src/object/old_object.cpp
+++ b/src/object/old_object.cpp
@@ -1047,7 +1047,7 @@ void COldObject::Read(CLevelParserLine* line)
     if (line->GetParam("pyro")->IsDefined())
         m_engine->GetPyroManager()->Create(line->GetParam("pyro")->AsPyroType(), this);
 
-    SetBulletWall(line->GetParam("bulletWall")->AsBool(false));
+    SetBulletWall(line->GetParam("bulletWall")->AsBool(IsBulletWallByDefault(m_type)));
 
     SetProxyActivate(line->GetParam("proxyActivate")->AsBool(false));
     SetProxyDistance(line->GetParam("proxyDistance")->AsFloat(15.0f)*g_unit);
@@ -3212,3 +3212,13 @@ bool COldObject::IsBulletWall()
 {
     return m_bulletWall;
 }
+
+bool COldObject::IsBulletWallByDefault(ObjectType type)
+{
+    if ( type == OBJECT_BARRICADE0 ||
+         type == OBJECT_BARRICADE1 )
+    {
+        return true;
+    }
+    return false;
+}
diff --git a/src/object/old_object.h b/src/object/old_object.h
index bc2d0b0..697e05d 100644
--- a/src/object/old_object.h
+++ b/src/object/old_object.h
@@ -311,6 +311,12 @@ protected:
      */
     static bool IsSelectableByDefault(ObjectType type);
 
+    /**
+     * \brief Check if given object type should have bulletWall enabled by default
+     * \note This is a default value for the bulletWall= parameter and can still be overriden in the scene file
+     */
+    static bool IsBulletWallByDefault(ObjectType type);
+
 protected:
     Gfx::CEngine*       m_engine;
     Gfx::CLightManager* m_lightMan;

-- 
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