summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKrzysztof Dermont <erihel@gmail.com>2014-06-22 15:01:06 +0200
committerKrzysztof Dermont <erihel@gmail.com>2014-06-22 15:01:06 +0200
commit754154341dba420e5bfc3190c81deb2859d751ba (patch)
tree2fae97b49724edfc2e889f4ca9720af74737db26 /src
parent1630cf0ed20ea8df879327af1275ff281a9bc7e0 (diff)
downloadcolobot-754154341dba420e5bfc3190c81deb2859d751ba.tar.gz
colobot-754154341dba420e5bfc3190c81deb2859d751ba.tar.bz2
colobot-754154341dba420e5bfc3190c81deb2859d751ba.zip
More work on PhysFS support
* added output stream * fixed music loading
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/app/app.cpp4
-rw-r--r--src/common/resources/outputstream.cpp53
-rw-r--r--src/common/resources/outputstream.h33
-rw-r--r--src/graphics/engine/engine.cpp2
-rw-r--r--src/graphics/engine/particle.cpp2
-rw-r--r--src/sound/oalsound/alsound.cpp2
-rw-r--r--src/ui/edit.cpp23
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 )
{