From 754154341dba420e5bfc3190c81deb2859d751ba Mon Sep 17 00:00:00 2001 From: Krzysztof Dermont Date: Sun, 22 Jun 2014 15:01:06 +0200 Subject: 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(-) create mode 100644 src/common/resources/outputstream.cpp create mode 100644 src/common/resources/outputstream.h (limited to 'src') 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(rdbuf())->open(filename); +} + + +void COutputStream::close() +{ + static_cast(rdbuf())->close(); +} + + +bool COutputStream::is_open() +{ + return static_cast(rdbuf())->is_open(); +} + + +size_t COutputStream::size() +{ + return static_cast(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 +#include + + +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 @@ -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 ) { -- cgit v1.2.3-1-g7c22