mirror of
https://github.com/libretro/scummvm.git
synced 2025-05-13 17:46:22 +00:00
STARK: Add state serializers for a number of entities
This commit is contained in:
parent
0ee5d78473
commit
2e8766fbbf
@ -972,6 +972,14 @@ Anim *ModelItem::getIdleActionAnim() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ModelItem::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
FloorPositionedItem::saveLoadCurrent(serializer);
|
||||
|
||||
serializer->syncAsSint32LE(_meshIndex);
|
||||
serializer->syncAsSint32LE(_textureNormalIndex);
|
||||
serializer->syncAsSint32LE(_textureFaceIndex);
|
||||
}
|
||||
|
||||
void ModelItem::printData() {
|
||||
FloorPositionedItem::printData();
|
||||
|
||||
|
@ -412,6 +412,7 @@ public:
|
||||
void onAllLoaded() override;
|
||||
void onEnterLocation() override;
|
||||
void onExitLocation() override;
|
||||
void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
|
||||
// Item API
|
||||
Gfx::RenderEntry *getRenderEntry(const Common::Point &positionOffset) override;
|
||||
|
@ -28,6 +28,8 @@
|
||||
#include "engines/stark/resources/item.h"
|
||||
#include "engines/stark/resources/light.h"
|
||||
|
||||
#include "engines/stark/services/stateprovider.h"
|
||||
|
||||
#include "common/debug.h"
|
||||
|
||||
namespace Stark {
|
||||
@ -98,6 +100,15 @@ Gfx::LightEntryArray Layer::listLightEntries() {
|
||||
return lightEntries;
|
||||
}
|
||||
|
||||
void Layer::saveLoad(ResourceSerializer *serializer) {
|
||||
serializer->syncAsSint32LE(_enabled);
|
||||
}
|
||||
|
||||
void Layer::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
serializer->syncAsSint32LE(_scroll.x);
|
||||
serializer->syncAsSint32LE(_scroll.y);
|
||||
}
|
||||
|
||||
Layer2D::~Layer2D() {
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,8 @@ public:
|
||||
|
||||
// Resource API
|
||||
virtual void readData(Formats::XRCReadStream *stream) override;
|
||||
virtual void saveLoad(ResourceSerializer *serializer) override;
|
||||
virtual void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
|
||||
/** Obtain the render entry for the background item */
|
||||
virtual Gfx::RenderEntry *getBackgroundRenderEntry() = 0;
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "engines/stark/scene.h"
|
||||
#include "engines/stark/services/global.h"
|
||||
#include "engines/stark/services/services.h"
|
||||
#include "engines/stark/services/stateprovider.h"
|
||||
|
||||
#include "common/random.h"
|
||||
|
||||
@ -492,5 +493,31 @@ void Location::floatScene(int32 periodMs, float amplitude, float offset) {
|
||||
_floatPosition = offset;
|
||||
}
|
||||
|
||||
void Location::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
serializer->syncAsSint32LE(_scroll.x);
|
||||
serializer->syncAsSint32LE(_scroll.y);
|
||||
|
||||
if (serializer->isLoading()) {
|
||||
setScrollPosition(_scroll);
|
||||
}
|
||||
|
||||
serializer->syncAsResourceReference(&_currentLayer);
|
||||
|
||||
serializer->syncAsSint32LE(_floatPeriodMs);
|
||||
serializer->syncAsFloat(_floatAmplitude);
|
||||
serializer->syncAsFloat(_floatPosition);
|
||||
|
||||
serializer->syncAsSint32LE(_swayPeriodMs);
|
||||
serializer->syncAsFloat(_swayAmplitude);
|
||||
serializer->syncAsFloat(_swayOffset);
|
||||
serializer->syncAsFloat(_swayPosition);
|
||||
|
||||
float swayAngle = _swayAngle.getDegrees();
|
||||
serializer->syncAsFloat(swayAngle);
|
||||
if (serializer->isLoading()) {
|
||||
_swayAngle = swayAngle;
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Resources
|
||||
} // End of namespace Stark
|
||||
|
@ -59,6 +59,7 @@ public:
|
||||
// Resource API
|
||||
void onAllLoaded() override;
|
||||
void onGameLoop() override;
|
||||
void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
|
||||
/** Does the location have a 3D layer ? */
|
||||
bool has3DLayer();
|
||||
|
@ -414,5 +414,27 @@ void Script::saveLoad(ResourceSerializer *serializer) {
|
||||
serializer->syncAsSint32LE(_enabled);
|
||||
}
|
||||
|
||||
void Script::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
bool isStarted = !isOnBegin();
|
||||
serializer->syncAsUint32LE(isStarted);
|
||||
|
||||
if (isStarted) {
|
||||
serializer->syncAsResourceReference(&_nextCommand);
|
||||
|
||||
uint32 returnObjectCount = _returnObjects.size();
|
||||
serializer->syncAsUint32LE(returnObjectCount);
|
||||
if (serializer->isLoading()) {
|
||||
_returnObjects.resize(returnObjectCount);
|
||||
}
|
||||
for (uint i = 0; i < _returnObjects.size(); i++) {
|
||||
serializer->syncAsResourceReference(&_returnObjects[i]);
|
||||
}
|
||||
|
||||
serializer->syncAsSint32LE(_pauseTimeLeft);
|
||||
serializer->syncAsResourceReference(&_suspendingResource);
|
||||
serializer->syncAsSint32LE(_resumeStatus);
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Resources
|
||||
} // End of namespace Stark
|
||||
|
@ -95,6 +95,7 @@ public:
|
||||
// Resource API
|
||||
void readData(Formats::XRCReadStream *stream) override;
|
||||
void saveLoad(ResourceSerializer *serializer) override;
|
||||
void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
void onAllLoaded() override;
|
||||
void onGameLoop() override;
|
||||
|
||||
|
@ -23,8 +23,8 @@
|
||||
#include "engines/stark/resources/scroll.h"
|
||||
|
||||
#include "engines/stark/formats/xrc.h"
|
||||
|
||||
#include "engines/stark/resources/location.h"
|
||||
#include "engines/stark/services/stateprovider.h"
|
||||
|
||||
namespace Stark {
|
||||
namespace Resources {
|
||||
@ -76,12 +76,19 @@ void Scroll::onGameLoop() {
|
||||
}
|
||||
|
||||
void Scroll::readData(Formats::XRCReadStream *stream) {
|
||||
_coordinate = stream->readUint32LE();
|
||||
_field_30 = stream->readUint32LE();
|
||||
_field_34 = stream->readUint32LE();
|
||||
_bookmarkIndex = stream->readUint32LE();
|
||||
_coordinate = stream->readUint32LE();
|
||||
_field_30 = stream->readUint32LE();
|
||||
_field_34 = stream->readUint32LE();
|
||||
_bookmarkIndex = stream->readUint32LE();
|
||||
}
|
||||
|
||||
void Scroll::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
serializer->syncAsUint32LE(_active);
|
||||
|
||||
if (serializer->isLoading() && _active) {
|
||||
start();
|
||||
}
|
||||
}
|
||||
|
||||
void Scroll::printData() {
|
||||
debug("coordinate: %d", _coordinate);
|
||||
|
@ -48,6 +48,7 @@ public:
|
||||
// Resource API
|
||||
void readData(Formats::XRCReadStream *stream) override;
|
||||
void onGameLoop() override;
|
||||
void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
|
||||
/** Start scrolling the location to this position */
|
||||
void start();
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "engines/stark/services/archiveloader.h"
|
||||
#include "engines/stark/services/global.h"
|
||||
#include "engines/stark/services/services.h"
|
||||
#include "engines/stark/services/stateprovider.h"
|
||||
|
||||
namespace Stark {
|
||||
namespace Resources {
|
||||
@ -230,5 +231,25 @@ void Sound::changeVolumePan(int32 volume, int32 pan, int32 duration) {
|
||||
}
|
||||
}
|
||||
|
||||
void Sound::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
bool playing = isPlaying();
|
||||
serializer->syncAsUint32LE(playing);
|
||||
|
||||
if (_subType != kSoundSub3 && playing) {
|
||||
uint32 elapsed = g_system->getMixer()->getSoundElapsedTime(_handle);
|
||||
serializer->syncAsUint32LE(elapsed);
|
||||
serializer->syncAsFloat(_volume);
|
||||
serializer->syncAsFloat(_pan);
|
||||
serializer->syncAsUint32LE(_fadeDurationRemaining);
|
||||
serializer->syncAsFloat(_fadeTargetVolume);
|
||||
serializer->syncAsFloat(_fadeTargetPan);
|
||||
|
||||
if (serializer->isLoading()) {
|
||||
play();
|
||||
// TODO: Seek to the "elapsed" position
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Resources
|
||||
} // End of namespace Stark
|
||||
|
@ -49,6 +49,7 @@ public:
|
||||
static const Type::ResourceType TYPE = Type::kSoundItem;
|
||||
|
||||
enum SubType {
|
||||
kSoundSub3 = 3,
|
||||
kSoundStock = 5
|
||||
};
|
||||
|
||||
@ -65,6 +66,7 @@ public:
|
||||
void readData(Formats::XRCReadStream *stream) override;
|
||||
void onPreDestroy() override;
|
||||
void onGameLoop() override;
|
||||
void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
|
||||
/** Start playing the sound */
|
||||
void play();
|
||||
|
@ -25,7 +25,9 @@
|
||||
#include "engines/stark/formats/xrc.h"
|
||||
|
||||
#include "engines/stark/services/services.h"
|
||||
#include "engines/stark/services/dialogplayer.h"
|
||||
#include "engines/stark/services/global.h"
|
||||
#include "engines/stark/services/stateprovider.h"
|
||||
|
||||
#include "engines/stark/resources/anim.h"
|
||||
#include "engines/stark/resources/item.h"
|
||||
@ -186,5 +188,20 @@ void Speech::stopOtherSpeechesFromSameCharacter() {
|
||||
}
|
||||
}
|
||||
|
||||
void Speech::saveLoadCurrent(ResourceSerializer *serializer) {
|
||||
bool playing = isPlaying();
|
||||
serializer->syncAsUint32LE(playing);
|
||||
|
||||
if (playing) {
|
||||
serializer->syncAsUint32LE(_removeTalkAnimWhenComplete);
|
||||
serializer->syncAsResourceReference(&_soundResource);
|
||||
serializer->syncAsResourceReference(&_lipSync);
|
||||
|
||||
if (serializer->isLoading()) {
|
||||
StarkDialogPlayer->playSingle(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace Resources
|
||||
} // End of namespace Stark
|
||||
|
@ -58,6 +58,7 @@ public:
|
||||
void onGameLoop() override;
|
||||
void onExitLocation() override;
|
||||
void onPreDestroy() override;
|
||||
void saveLoadCurrent(ResourceSerializer *serializer) override;
|
||||
|
||||
/** Obtain the text associated to the speech line */
|
||||
Common::String getPhrase() const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user