fix ambient heat not loading in ctrl+c paste, fix pressure resetting to 0 when loading saves without pressure

This commit is contained in:
jacob1 2017-11-23 22:09:33 -05:00
parent 78fb27b354
commit 3529f6f468
3 changed files with 26 additions and 17 deletions

View File

@ -16,22 +16,24 @@ extern "C"
#include "hmap.h" #include "hmap.h"
} }
GameSave::GameSave(GameSave & save) : GameSave::GameSave(GameSave & save):
waterEEnabled(save.waterEEnabled), waterEEnabled(save.waterEEnabled),
legacyEnable(save.legacyEnable), legacyEnable(save.legacyEnable),
gravityEnable(save.gravityEnable), gravityEnable(save.gravityEnable),
aheatEnable(save.aheatEnable), aheatEnable(save.aheatEnable),
paused(save.paused), paused(save.paused),
gravityMode(save.gravityMode), gravityMode(save.gravityMode),
airMode(save.airMode), airMode(save.airMode),
edgeMode(save.edgeMode), edgeMode(save.edgeMode),
signs(save.signs), signs(save.signs),
palette(save.palette), palette(save.palette),
expanded(save.expanded), expanded(save.expanded),
hasOriginalData(save.hasOriginalData), hasOriginalData(save.hasOriginalData),
originalData(save.originalData) originalData(save.originalData)
{ {
InitData(); InitData();
hasPressure = save.hasPressure;
hasAmbientHeat = save.hasAmbientHeat;
if (save.expanded) if (save.expanded)
{ {
setSize(save.blockWidth, save.blockHeight); setSize(save.blockWidth, save.blockHeight);
@ -149,6 +151,7 @@ void GameSave::InitData()
velocityY = NULL; velocityY = NULL;
ambientHeat = NULL; ambientHeat = NULL;
fromNewerVersion = false; fromNewerVersion = false;
hasPressure = false;
hasAmbientHeat = false; hasAmbientHeat = false;
authors.clear(); authors.clear();
} }
@ -843,6 +846,7 @@ void GameSave::readOPS(char * data, int dataLength)
pressure[blockY+y][blockX+x] = ((i+(i2<<8))/128.0f)-256; pressure[blockY+y][blockX+x] = ((i+(i2<<8))/128.0f)-256;
} }
} }
hasPressure = true;
} }
//Read vx data //Read vx data

View File

@ -32,6 +32,7 @@ public:
int blockWidth, blockHeight; int blockWidth, blockHeight;
bool fromNewerVersion; bool fromNewerVersion;
bool hasPressure;
bool hasAmbientHeat; bool hasAmbientHeat;
//Simulation data //Simulation data

View File

@ -244,10 +244,13 @@ int Simulation::Load(int fullX, int fullY, GameSave * save, bool includePressure
fvy[saveBlockY+blockY][saveBlockX+blockX] = save->fanVelY[saveBlockY][saveBlockX]; fvy[saveBlockY+blockY][saveBlockX+blockX] = save->fanVelY[saveBlockY][saveBlockX];
} }
if (includePressure) if (includePressure)
{
if (save->hasPressure)
{ {
pv[saveBlockY+blockY][saveBlockX+blockX] = save->pressure[saveBlockY][saveBlockX]; pv[saveBlockY+blockY][saveBlockX+blockX] = save->pressure[saveBlockY][saveBlockX];
vx[saveBlockY+blockY][saveBlockX+blockX] = save->velocityX[saveBlockY][saveBlockX]; vx[saveBlockY+blockY][saveBlockX+blockX] = save->velocityX[saveBlockY][saveBlockX];
vy[saveBlockY+blockY][saveBlockX+blockX] = save->velocityY[saveBlockY][saveBlockX]; vy[saveBlockY+blockY][saveBlockX+blockX] = save->velocityY[saveBlockY][saveBlockX];
}
if (save->hasAmbientHeat) if (save->hasAmbientHeat)
hv[saveBlockY+blockY][saveBlockX+blockX] = save->ambientHeat[saveBlockY][saveBlockX]; hv[saveBlockY+blockY][saveBlockX+blockX] = save->ambientHeat[saveBlockY][saveBlockX];
} }
@ -387,6 +390,7 @@ GameSave * Simulation::Save(int fullX, int fullY, int fullX2, int fullY2, bool i
newSave->velocityX[saveBlockY][saveBlockX] = vx[saveBlockY+blockY][saveBlockX+blockX]; newSave->velocityX[saveBlockY][saveBlockX] = vx[saveBlockY+blockY][saveBlockX+blockX];
newSave->velocityY[saveBlockY][saveBlockX] = vy[saveBlockY+blockY][saveBlockX+blockX]; newSave->velocityY[saveBlockY][saveBlockX] = vy[saveBlockY+blockY][saveBlockX+blockX];
newSave->ambientHeat[saveBlockY][saveBlockX] = hv[saveBlockY+blockY][saveBlockX+blockX]; newSave->ambientHeat[saveBlockY][saveBlockX] = hv[saveBlockY+blockY][saveBlockX+blockX];
newSave->hasPressure = true;
newSave->hasAmbientHeat = true; newSave->hasAmbientHeat = true;
} }
} }