BLADERUNNER: Savagame names fixes

It was not possible to change the name of exisitng savegame
Saves were read too ofter just for over-drawing the thumbnail
This commit is contained in:
Peter Kohaut 2019-03-09 21:03:43 +01:00
parent 09dbe7686b
commit acb51d0e72
5 changed files with 18 additions and 7 deletions

View file

@ -241,9 +241,10 @@ bool SaveFileReadStream::readBool() {
} }
Common::String SaveFileReadStream::readStringSz(uint sz) { Common::String SaveFileReadStream::readStringSz(uint sz) {
char *buf = new char[sz]; char *buf = new char[sz + 1];
read(buf, sz); read(buf, sz);
Common::String result(buf, sz); buf[sz] = 0;
Common::String result(buf);
delete[] buf; delete[] buf;
return result; return result;
} }

View file

@ -47,6 +47,7 @@ KIASectionLoad::KIASectionLoad(BladeRunnerEngine *vm) : KIASectionBase(vm) {
_timeLeft = 0; _timeLeft = 0;
_hoveredLineId = -1; _hoveredLineId = -1;
_displayingLineId = -1;
_newGameEasyLineId = -1; _newGameEasyLineId = -1;
_newGameMediumLineId = -1; _newGameMediumLineId = -1;
_newGameHardLineId = -1; _newGameHardLineId = -1;
@ -102,23 +103,25 @@ void KIASectionLoad::draw(Graphics::Surface &surface){
int selectedLineId = _scrollBox->getSelectedLineData(); int selectedLineId = _scrollBox->getSelectedLineData();
if (_hoveredLineId != selectedLineId) { if (_hoveredLineId != selectedLineId) {
if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size()) { if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size() && _displayingLineId != selectedLineId) {
if (_timeLeft == 0) { if (_timeLeft == 0) {
SaveStateDescriptor desc = SaveFileManager::queryMetaInfos(_vm->getTargetName(), selectedLineId); SaveStateDescriptor desc = SaveFileManager::queryMetaInfos(_vm->getTargetName(), selectedLineId);
const Graphics::Surface *thumbnail = desc.getThumbnail(); const Graphics::Surface *thumbnail = desc.getThumbnail();
if (thumbnail != nullptr) { if (thumbnail != nullptr) {
_vm->_kia->playImage(*thumbnail); _vm->_kia->playImage(*thumbnail);
_displayingLineId = selectedLineId;
} }
} }
} else { } else {
_vm->_kia->playerReset(); _vm->_kia->playerReset();
_timeLeft = 800; _timeLeft = 800;
_displayingLineId = -1;
} }
_hoveredLineId = selectedLineId; _hoveredLineId = selectedLineId;
} }
uint32 now = _vm->_time->currentSystem(); uint32 now = _vm->_time->currentSystem();
if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size()) { if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size() && _displayingLineId != selectedLineId) {
if (_timeLeft) { if (_timeLeft) {
uint32 timeDiff = now - _timeLast; uint32 timeDiff = now - _timeLast;
if (timeDiff >= _timeLeft) { if (timeDiff >= _timeLeft) {
@ -126,6 +129,7 @@ void KIASectionLoad::draw(Graphics::Surface &surface){
const Graphics::Surface *thumbnail = desc.getThumbnail(); const Graphics::Surface *thumbnail = desc.getThumbnail();
if (thumbnail != nullptr) { if (thumbnail != nullptr) {
_vm->_kia->playImage(*thumbnail); _vm->_kia->playImage(*thumbnail);
_displayingLineId = selectedLineId;
} }
} else { } else {
_timeLeft -= timeDiff; _timeLeft -= timeDiff;

View file

@ -49,6 +49,7 @@ class KIASectionLoad : public KIASectionBase {
SaveStateList _saveList; SaveStateList _saveList;
int _hoveredLineId; int _hoveredLineId;
int _displayingLineId;
int _newGameEasyLineId; int _newGameEasyLineId;
int _newGameMediumLineId; int _newGameMediumLineId;
int _newGameHardLineId; int _newGameHardLineId;

View file

@ -62,8 +62,9 @@ KIASectionSave::KIASectionSave(BladeRunnerEngine *vm) : KIASectionBase(vm) {
_mouseX = 0; _mouseX = 0;
_mouseY = 0; _mouseY = 0;
_selectedLineId = -1;
_hoveredLineId = -1; _hoveredLineId = -1;
_displayingLineId = -1;
_selectedLineId = -1;
_newSaveLineId = -1; _newSaveLineId = -1;
} }
@ -182,23 +183,25 @@ void KIASectionSave::draw(Graphics::Surface &surface){
int selectedLineId = _scrollBox->getSelectedLineData(); int selectedLineId = _scrollBox->getSelectedLineData();
if (selectedLineId != _hoveredLineId) { if (selectedLineId != _hoveredLineId) {
if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size()) { if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size() && _displayingLineId != selectedLineId) {
if (_timeLeft == 0) { if (_timeLeft == 0) {
SaveStateDescriptor desc = SaveFileManager::queryMetaInfos(_vm->getTargetName(), selectedLineId); SaveStateDescriptor desc = SaveFileManager::queryMetaInfos(_vm->getTargetName(), selectedLineId);
const Graphics::Surface *thumbnail = desc.getThumbnail(); const Graphics::Surface *thumbnail = desc.getThumbnail();
if (thumbnail != nullptr) { if (thumbnail != nullptr) {
_vm->_kia->playImage(*thumbnail); _vm->_kia->playImage(*thumbnail);
_displayingLineId = selectedLineId;
} }
} }
} else { } else {
_vm->_kia->playerReset(); _vm->_kia->playerReset();
_timeLeft = 800; _timeLeft = 800;
_displayingLineId = -1;
} }
_hoveredLineId = selectedLineId; _hoveredLineId = selectedLineId;
} }
uint32 now = _vm->_time->currentSystem(); uint32 now = _vm->_time->currentSystem();
if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size()) { if (selectedLineId >= 0 && selectedLineId < (int)_saveList.size() && _displayingLineId != selectedLineId) {
if (_timeLeft) { if (_timeLeft) {
uint32 timeDiff = now - _timeLast; uint32 timeDiff = now - _timeLast;
if (timeDiff >= _timeLeft) { if (timeDiff >= _timeLeft) {
@ -206,6 +209,7 @@ void KIASectionSave::draw(Graphics::Surface &surface){
const Graphics::Surface *thumbnail = desc.getThumbnail(); const Graphics::Surface *thumbnail = desc.getThumbnail();
if (thumbnail != nullptr) { if (thumbnail != nullptr) {
_vm->_kia->playImage(*thumbnail); _vm->_kia->playImage(*thumbnail);
_displayingLineId = selectedLineId;
} }
} else { } else {
_timeLeft -= timeDiff; _timeLeft -= timeDiff;

View file

@ -64,6 +64,7 @@ class KIASectionSave : public KIASectionBase {
int _mouseY; int _mouseY;
int _hoveredLineId; int _hoveredLineId;
int _displayingLineId;
int _selectedLineId; int _selectedLineId;
int _newSaveLineId; int _newSaveLineId;