[colobot] 03/390: More work on PhysFS support

Didier Raboud odyx at moszumanska.debian.org
Fri Jun 12 14:21:21 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 754154341dba420e5bfc3190c81deb2859d751ba
Author: Krzysztof Dermont <erihel at gmail.com>
Date:   Sun Jun 22 15:01:06 2014 +0200

    More work on PhysFS support
    
    * added output stream
    * fixed music loading
---
 src/CMakeLists.txt                    |  1 +
 src/app/app.cpp                       |  4 ---
 src/common/resources/outputstream.cpp | 53 +++++++++++++++++++++++++++++++++++
 src/common/resources/outputstream.h   | 33 ++++++++++++++++++++++
 src/graphics/engine/engine.cpp        |  2 +-
 src/graphics/engine/particle.cpp      |  2 +-
 src/sound/oalsound/alsound.cpp        |  2 +-
 src/ui/edit.cpp                       | 23 ++++++++-------
 8 files changed, 103 insertions(+), 17 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index db53398..62bad96 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -77,6 +77,7 @@ common/stringutils.cpp
 common/resources/resourcemanager.cpp
 common/resources/resourcestreambuffer.cpp
 common/resources/inputstream.cpp
+common/resources/outputstream.cpp
 common/resources/sndfile.cpp
 graphics/core/color.cpp
 graphics/engine/camera.cpp
diff --git a/src/app/app.cpp b/src/app/app.cpp
index 5b495c3..c245838 100644
--- a/src/app/app.cpp
+++ b/src/app/app.cpp
@@ -207,8 +207,6 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
         OPT_SCENETEST,
         OPT_LOGLEVEL,
         OPT_LANGUAGE,
-        OPT_DATADIR,
-        OPT_MOD,
         OPT_LANGDIR,
         OPT_VBO
     };
@@ -221,8 +219,6 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[])
         { "scenetest", no_argument, nullptr, OPT_SCENETEST },
         { "loglevel", required_argument, nullptr, OPT_LOGLEVEL },
         { "language", required_argument, nullptr, OPT_LANGUAGE },
-        { "datadir", required_argument, nullptr, OPT_DATADIR },
-        { "mod", required_argument, nullptr, OPT_MOD },
         { "langdir", required_argument, nullptr, OPT_LANGDIR },
         { "vbo", required_argument, nullptr, OPT_VBO },
         { nullptr, 0, nullptr, 0}
diff --git a/src/common/resources/outputstream.cpp b/src/common/resources/outputstream.cpp
new file mode 100644
index 0000000..c4fd973
--- /dev/null
+++ b/src/common/resources/outputstream.cpp
@@ -0,0 +1,53 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2014 Polish Portal of Colobot (PPC)
+// *
+// * This program is free software: you can redistribute it and/or modify
+// * it under the terms of the GNU General Public License as published by
+// * the Free Software Foundation, either version 3 of the License, or
+// * (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have received a copy of the GNU General Public License
+// * along with this program. If not, see  http://www.gnu.org/licenses/.
+
+#include "common/resources/outputstream.h"
+#include "common/resources/resourcestreambuffer.h"
+
+
+COutputStream::COutputStream() : std::ostream(new CResourceStreamBuffer())
+{
+}
+
+
+COutputStream::~COutputStream()
+{
+    delete rdbuf();
+}
+
+
+void COutputStream::open(const std::string& filename)
+{
+    static_cast<CResourceStreamBuffer *>(rdbuf())->open(filename);
+}
+
+
+void COutputStream::close()
+{
+    static_cast<CResourceStreamBuffer *>(rdbuf())->close();
+}
+
+
+bool COutputStream::is_open()
+{
+    return static_cast<CResourceStreamBuffer *>(rdbuf())->is_open();
+}
+
+
+size_t COutputStream::size()
+{
+    return static_cast<CResourceStreamBuffer *>(rdbuf())->size();
+}
diff --git a/src/common/resources/outputstream.h b/src/common/resources/outputstream.h
new file mode 100644
index 0000000..bbd921f
--- /dev/null
+++ b/src/common/resources/outputstream.h
@@ -0,0 +1,33 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2014 Polish Portal of Colobot (PPC)
+// *
+// * This program is free software: you can redistribute it and/or modify
+// * it under the terms of the GNU General Public License as published by
+// * the Free Software Foundation, either version 3 of the License, or
+// * (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have received a copy of the GNU General Public License
+// * along with this program. If not, see  http://www.gnu.org/licenses/.
+
+#pragma once
+
+#include <ostream>
+#include <string>
+
+
+class COutputStream : public std::ostream
+{
+public:
+    COutputStream();
+    virtual ~COutputStream();
+    
+    void open(const std::string &filename);
+    void close();
+    bool is_open();    
+    size_t size();
+};
diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp
index 072261b..6f6141b 100644
--- a/src/graphics/engine/engine.cpp
+++ b/src/graphics/engine/engine.cpp
@@ -3773,7 +3773,7 @@ void CEngine::DrawShadow()
     SetMaterial(material);
 
     // TODO: create a separate texture
-    SetTexture("text.png");
+    SetTexture("textures/interface/text.png");
 
     Math::Point ts, ti;
 
diff --git a/src/graphics/engine/particle.cpp b/src/graphics/engine/particle.cpp
index ead2387..9e36153 100644
--- a/src/graphics/engine/particle.cpp
+++ b/src/graphics/engine/particle.cpp
@@ -3551,7 +3551,7 @@ void CParticle::DrawParticle(int sheet)
     // Draw tire marks.
     if (m_wheelTraceTotal > 0 && sheet == SH_WORLD)
     {
-        m_engine->SetTexture("text.png");
+        m_engine->SetTexture("textures/interface/text.png");
         m_engine->SetState(ENG_RSTATE_TTEXTURE_WHITE);
         Math::Matrix matrix;
         matrix.LoadIdentity();
diff --git a/src/sound/oalsound/alsound.cpp b/src/sound/oalsound/alsound.cpp
index 4d40c3b..e9bc116 100644
--- a/src/sound/oalsound/alsound.cpp
+++ b/src/sound/oalsound/alsound.cpp
@@ -609,7 +609,7 @@ void ALSound::SetListener(const Math::Vector &eye, const Math::Vector &lookat)
 bool ALSound::PlayMusic(int rank, bool bRepeat, float fadeTime)
 {
     std::stringstream filename;
-    filename << "music" << std::setfill('0') << std::setw(3) << rank << ".ogg";
+    filename << "music/music" << std::setfill('0') << std::setw(3) << rank << ".ogg";
     return PlayMusic(filename.str(), bRepeat, fadeTime);
 }
 
diff --git a/src/ui/edit.cpp b/src/ui/edit.cpp
index 287d0f3..e645063 100644
--- a/src/ui/edit.cpp
+++ b/src/ui/edit.cpp
@@ -23,6 +23,7 @@
 #include "clipboard/clipboard.h"
 
 #include "common/resources/inputstream.h"
+#include "common/resources/outputstream.h"
 
 #include <string.h>
 
@@ -1453,12 +1454,9 @@ bool CEdit::ReadText(std::string filename, int addSize)
     bool        bInSoluce, bBOL;
 
     if ( filename[0] == 0 )  return false;
-
-    boost::replace_all(filename, "\\", "/");
-    std::string path = filename;
     
     CInputStream stream;
-    stream.open(fs::path(path).make_preferred().string());  
+    stream.open(filename);  
     
     if (!stream.is_open())
     {
@@ -1886,14 +1884,19 @@ bool CEdit::ReadText(std::string filename, int addSize)
 
 bool CEdit::WriteText(std::string filename)
 {
-    FILE*       file;
     char        buffer[1000+20];
     int         i, j, k, n;
     float       iDim = 0.0f;
 
     if ( filename[0] == 0 )  return false;
-    file = fopen(filename.c_str(), "wb");
-    if ( file == NULL )  return false;
+    
+    COutputStream stream;
+    stream.open(filename);
+    
+    if (!stream.is_open())
+    {
+        return false;
+    }
 
     if ( m_bAutoIndent )
     {
@@ -1924,7 +1927,7 @@ bool CEdit::WriteText(std::string filename)
 
         if ( j >= 1000-1 )
         {
-            fwrite(buffer, 1, j, file);
+            stream.write(buffer, j);
             j = 0;
         }
 
@@ -1932,10 +1935,10 @@ bool CEdit::WriteText(std::string filename)
     }
     if ( j > 0 )
     {
-        fwrite(buffer, 1, j, file);
+        stream.write(buffer, j);
     }
 
-    fclose(file);
+    stream.close();
 
     if ( m_bAutoIndent )
     {

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