diff options
Diffstat (limited to 'engines/bladerunner/savefile.cpp')
-rw-r--r-- | engines/bladerunner/savefile.cpp | 148 |
1 files changed, 97 insertions, 51 deletions
diff --git a/engines/bladerunner/savefile.cpp b/engines/bladerunner/savefile.cpp index ff1ff75165..3528a6bb82 100644 --- a/engines/bladerunner/savefile.cpp +++ b/engines/bladerunner/savefile.cpp @@ -30,91 +30,137 @@ namespace BladeRunner { -SaveFile::SaveFile(Common::OutSaveFile *saveFile) - : _saveFile(saveFile), - _stream(DisposeAfterUse::YES) -{ +SaveFileWriteStream::SaveFileWriteStream() + : MemoryWriteStreamDynamic(DisposeAfterUse::YES) { } -void SaveFile::finalize() { - _saveFile->writeUint32LE(_stream.size() + 4); - _saveFile->write(_stream.getData(), _stream.size()); - _saveFile->finalize(); +void SaveFileWriteStream::debug(char *p) { + write(p, strlen(p) + 1); } -void SaveFile::padBytes(int count) { +void SaveFileWriteStream::padBytes(int count) { for (int i = 0; i < count; ++i) { - _stream.writeByte(0); + writeByte(0); } } -void SaveFile::write(bool v) { - _stream.writeUint32LE(v); +void SaveFileWriteStream::writeInt(int v) { + writeUint32LE(v); } -void SaveFile::write(int v) { - _stream.writeUint32LE(v); +void SaveFileWriteStream::writeFloat(int v) { + writeFloatLE(v); } -void SaveFile::write(uint32 v) { - _stream.writeUint32LE(v); +void SaveFileWriteStream::writeBool(bool v) { + writeUint32LE(v); } -void SaveFile::write(byte v) { - _stream.writeByte(v); +void SaveFileWriteStream::writeStringSz(const Common::String &s, int sz) { + assert(s.size() < (uint)sz); + write(s.begin(), s.size()); + padBytes((uint)sz - s.size()); } -void SaveFile::write(float v) { - _stream.writeFloatLE(v); +void SaveFileWriteStream::writeVector2(const Vector2 &v) { + writeFloatLE(v.x); + writeFloatLE(v.y); } -void SaveFile::debug(char *p) { - _stream.write(p, strlen(p) + 1); +void SaveFileWriteStream::writeVector3(const Vector3 &v) { + writeFloatLE(v.x); + writeFloatLE(v.y); + writeFloatLE(v.z); } -void SaveFile::write(char *p, int sz) { - _stream.write(p, sz); +void SaveFileWriteStream::writeRect(const Common::Rect &v) { + writeUint32LE(v.left); + writeUint32LE(v.top); + writeUint32LE(v.right); + writeUint32LE(v.bottom); } -void SaveFile::write(Common::String &s, int sz) { - assert(s.size() < (uint)sz); - _stream.write(s.begin(), s.size()); - padBytes((uint)sz - s.size()); +void SaveFileWriteStream::writeBoundingBox(const BoundingBox &v) { + float x0, y0, z0, x1, y1, z1; + + v.getXYZ(&x0, &y0, &z0, &x1, &y1, &z1); + writeFloatLE(x0); + writeFloatLE(y0); + writeFloatLE(z0); + writeFloatLE(x1); + writeFloatLE(y1); + writeFloatLE(z1); + + // Bounding boxes have a lot of extra data that's never actually used + for (int i = 0; i != 96; ++i) { + writeFloatLE(0.0f); + } } -void SaveFile::write(const Vector2 &v) { - _stream.writeFloatLE(v.x); - _stream.writeFloatLE(v.y); +SaveFileReadStream::SaveFileReadStream(const byte *dataPtr, uint32 dataSize) + : MemoryReadStream(dataPtr, dataSize, DisposeAfterUse::YES) { } -void SaveFile::write(const Vector3 &v) { - _stream.writeFloatLE(v.x); - _stream.writeFloatLE(v.y); - _stream.writeFloatLE(v.z); +int SaveFileReadStream::readInt() { + return readUint32LE(); } -void SaveFile::write(const Common::Rect &v) { - _stream.writeUint32LE(v.left); - _stream.writeUint32LE(v.top); - _stream.writeUint32LE(v.right); - _stream.writeUint32LE(v.bottom); +float SaveFileReadStream::readFloat() { + return readFloatLE(); } -void SaveFile::write(const BoundingBox &v) { +bool SaveFileReadStream::readBool() { + return readUint32LE(); +} + +Common::String SaveFileReadStream::readStringSz(int sz) { + char *buf = (char *)malloc(sz); + read(buf, sz); + Common::String result = buf; + free(buf); + return result; +} + +Vector2 SaveFileReadStream::readVector2() { + Vector2 result; + result.x = readFloatLE(); + result.y = readFloatLE(); + return result; +} + +Vector3 SaveFileReadStream::readVector3() { + Vector3 result; + result.x = readFloatLE(); + result.y = readFloatLE(); + result.z = readFloatLE(); + return result; +} + +Common::Rect SaveFileReadStream::readRect() { + Common::Rect result; + result.left = readUint32LE(); + result.top = readUint32LE(); + result.right = readUint32LE(); + result.bottom = readUint32LE(); + return result; +} + +BoundingBox SaveFileReadStream::readBoundingBox() { float x0, y0, z0, x1, y1, z1; - v.getXYZ(&x0, &y0, &z0, &x1, &y1, &z1); - _stream.writeFloatLE(x0); - _stream.writeFloatLE(y0); - _stream.writeFloatLE(z0); - _stream.writeFloatLE(x1); - _stream.writeFloatLE(y1); - _stream.writeFloatLE(z1); + x0 = readFloatLE(); + y0 = readFloatLE(); + z0 = readFloatLE(); + x1 = readFloatLE(); + y1 = readFloatLE(); + z1 = readFloatLE(); // Bounding boxes have a lot of extra data that's never actually used - for (int i = 0; i != 96; ++i) { - _stream.writeFloatLE(0.0f); - } + skip(384); + + return BoundingBox(x0, y0, z0, x1, y1, z1); } + + } // End of namespace BladeRunner |