Skip to content

Commit 8093ff5

Browse files
committed
A little progress
1 parent 2bc4bdd commit 8093ff5

File tree

6 files changed

+32
-10
lines changed

6 files changed

+32
-10
lines changed

Source/Entities/SLTerrain.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,12 @@ int SLTerrain::SaveData(const std::string& pathBase, bool doAsyncSaves) {
308308
return 0;
309309
}
310310

311+
void SLTerrain::CopyBitmapData(std::vector<SceneLayerInfo>& layerInfos) const {
312+
layerInfos.emplace_back(std::string("Mat"), SceneLayer::CopyBitmap());
313+
layerInfos.emplace_back(std::string("FG"), m_FGColorLayer->CopyBitmap());
314+
layerInfos.emplace_back(std::string("BG"), m_BGColorLayer->CopyBitmap());
315+
}
316+
311317
int SLTerrain::ClearData() {
312318
RTEAssert(SceneLayer::ClearData() == 0, "Failed to clear material bitmap data of an SLTerrain!");
313319
RTEAssert(m_FGColorLayer && m_FGColorLayer->ClearData() == 0, "Failed to clear the foreground color bitmap data of an SLTerrain!");

Source/Entities/SLTerrain.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ namespace RTE {
6868
/// @return An error return value signaling success or any particular failure. Anything below 0 is an error signal.
6969
int SaveData(const std::string& pathBase, bool doAsyncSaves = true) override;
7070

71+
/// Copies bitmap data into layerInfos.
72+
/// @param layerInfos List of SceneLayerInfo to emplace our copied data into.
73+
void CopyBitmapData(std::vector<SceneLayerInfo>& layerInfos) const;
74+
7175
/// Clears out any previously loaded bitmap data from memory.
7276
/// @return An error return value signaling success or any particular failure. Anything below 0 is an error signal.
7377
int ClearData() override;

Source/Entities/Scene.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -850,11 +850,8 @@ int Scene::SaveData(std::string pathBase, bool doAsyncSaves) {
850850
std::vector<SceneLayerInfo> Scene::GetCopiedSceneLayerBitmaps() {
851851
std::vector<SceneLayerInfo> layerInfos;
852852

853-
// TODO- implement this. Basically just copy each scene layer to the vector
854-
// This is for saving- we block to copy these layers, but it means the actual saving (compression, write to disk etc) can be done async
855-
/*
856853
// Save Terrain's data
857-
m_pTerrain
854+
m_pTerrain->CopyBitmapData(layerInfos);
858855

859856
// Don't bother saving background layers to disk, as they are never altered
860857

@@ -864,10 +861,10 @@ std::vector<SceneLayerInfo> Scene::GetCopiedSceneLayerBitmaps() {
864861
{
865862
if (m_apUnseenLayer[team])
866863
{
867-
m_apUnseenLayer[team]
864+
std::snprintf(str, sizeof(str), "US T%d", team);
865+
layerInfos.emplace_back(std::string(str), m_apUnseenLayer[team]->CopyBitmap());
868866
}
869867
}
870-
*/
871868

872869
return layerInfos;
873870
}

Source/Entities/SceneLayer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ int SceneLayerImpl<TRACK_DRAWINGS, STATIC_TEXTURE>::SaveData(const std::string&
246246
}
247247

248248
template <bool TRACK_DRAWINGS, bool STATIC_TEXTURE>
249-
std::unique_ptr<BITMAP> SceneLayerImpl<TRACK_DRAWINGS, STATIC_TEXTURE>::CopyBitmap() {
249+
std::unique_ptr<BITMAP> SceneLayerImpl<TRACK_DRAWINGS, STATIC_TEXTURE>::CopyBitmap() const {
250250
BITMAP* outputBitmap = create_bitmap_ex(bitmap_color_depth(m_MainBitmap), m_MainBitmap->w, m_MainBitmap->h);
251251
if (m_MainBitmap) {
252252
outputBitmap = create_bitmap_ex(bitmap_color_depth(m_MainBitmap), m_MainBitmap->w, m_MainBitmap->h);

Source/Entities/SceneLayer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ namespace RTE {
9292

9393
/// Copies the bitmap.
9494
/// @return The copied bitmap.
95-
std::unique_ptr<BITMAP> CopyBitmap();
95+
std::unique_ptr<BITMAP> CopyBitmap() const;
9696
#pragma endregion
9797

9898
#pragma region Getters and Setters

Source/Managers/ActivityMan.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,10 @@ bool ActivityMan::SaveCurrentGame(const std::string& fileName) {
136136
writer->NewPropertyWithValue("PlaceUnitsIfSceneIsRestarted", g_SceneMan.GetPlaceUnitsOnLoad());
137137
writer->NewPropertyWithValue("Scene", modifiableScene.get());
138138

139-
auto saveWriterData = [&](Writer* writerToSave) {
139+
// Get BITMAPS so save into our zip
140+
std::vector<SceneLayerInfo> sceneLayerInfos = scene->GetCopiedSceneLayerBitmaps();
141+
142+
auto saveWriterData = [&](Writer* writerToSave, std::vector<SceneLayerInfo>&& sceneLayerInfos) {
140143
std::stringstream* stream = static_cast<std::stringstream*>(writerToSave->GetStream());
141144
stream->flush();
142145

@@ -150,13 +153,25 @@ bool ActivityMan::SaveCurrentGame(const std::string& fileName) {
150153
zipWriteInFileInZip(zippedSaveFile, streamAsString.data(), streamAsString.size());
151154
zipCloseFileInZip(zippedSaveFile);
152155

156+
PALETTE palette;
157+
get_palette(palette);
158+
159+
for (const SceneLayerInfo& layerInfo : sceneLayerInfos)
160+
{
161+
// Allego lacks the fucking ability to save/load png from a byte stream
162+
// AAAAAAAAAAAAAAAAAAAAAAAAAAA
163+
//zipOpenNewFileInZip(zippedSaveFile, (fileName + " " + layerInfo.name + ".png").c_str(), &zfi, nullptr, 0, nullptr, 0, nullptr, Z_DEFLATED, defaultCompression);
164+
//zipWriteInFileInZip(zippedSaveFile, streamAsString.data(), streamAsString.size());
165+
//zipCloseFileInZip(zippedSaveFile);
166+
}
167+
153168
zipClose(zippedSaveFile, fileName.c_str());
154169

155170
delete writerToSave;
156171
};
157172

158173
// For some reason I can't std::move a unique ptr in, so just releasing and deleting manually...
159-
m_SaveGameTask.push_back(g_ThreadMan.GetBackgroundThreadPool().submit(saveWriterData, writer.release()));
174+
m_SaveGameTask.push_back(g_ThreadMan.GetBackgroundThreadPool().submit(saveWriterData, writer.release(), std::move(sceneLayerInfos)));
160175

161176
// We didn't transfer ownership, so we must be very careful that sceneAltered's deletion doesn't touch the stuff we got from MovableMan.
162177
modifiableScene->ClearPlacedObjectSet(Scene::PlacedObjectSets::PLACEONLOAD, false);

0 commit comments

Comments
 (0)