More work on PhysFS support

* added output stream
* fixed music loading
dev-mp
Krzysztof Dermont 2014-06-22 15:01:06 +02:00
parent 1630cf0ed2
commit 754154341d
8 changed files with 103 additions and 17 deletions

View File

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

View File

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

View File

@ -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();
}

View File

@ -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();
};

View File

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

View File

@ -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();

View File

@ -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);
}

View File

@ -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 )
{