aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/savefile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/bladerunner/savefile.cpp')
-rw-r--r--engines/bladerunner/savefile.cpp148
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