mirror of
https://github.com/scummvm/scummvm.git
synced 2026-06-20 05:45:29 +00:00
MADS: Beginnings of resource loading in AnimView
This commit is contained in:
@@ -799,10 +799,18 @@ AnimationView::AnimationView(MADSEngine *vm) : MenuView(vm) {
|
||||
_showWhiteBars = true;
|
||||
_resetPalette = false;
|
||||
_resyncMode = NEVER;
|
||||
_v1 = 0;
|
||||
_v2 = -1;
|
||||
_resourceIndex = -1;
|
||||
_currentAnimation = nullptr;
|
||||
|
||||
load();
|
||||
}
|
||||
|
||||
AnimationView::~AnimationView() {
|
||||
delete _currentAnimation;
|
||||
}
|
||||
|
||||
void AnimationView::load() {
|
||||
Common::String resName(_resourceName);
|
||||
if (!resName.hasSuffix("."))
|
||||
@@ -814,6 +822,17 @@ void AnimationView::load() {
|
||||
processLines();
|
||||
}
|
||||
|
||||
void AnimationView::display() {
|
||||
_vm->_palette->initPalette();
|
||||
Common::fill(&_vm->_palette->_cyclingPalette[0], &_vm->_palette->_cyclingPalette[PALETTE_SIZE], 0);
|
||||
|
||||
_vm->_palette->resetGamePalette(1, 8);
|
||||
_vm->_game->_scene._spriteSlots.reset();
|
||||
_vm->_game->_scene._paletteCycles.clear();
|
||||
|
||||
MenuView::display();
|
||||
}
|
||||
|
||||
bool AnimationView::onEvent(Common::Event &event) {
|
||||
// Wait for the Escape key or a mouse press
|
||||
if (((event.type == Common::EVENT_KEYDOWN) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) ||
|
||||
@@ -826,36 +845,45 @@ bool AnimationView::onEvent(Common::Event &event) {
|
||||
}
|
||||
|
||||
void AnimationView::doFrame() {
|
||||
// Only update state if wait period has expired
|
||||
if (_previousUpdate > 0) {
|
||||
if (g_system->getMillis() - _previousUpdate < 3000) {
|
||||
return;
|
||||
} else {
|
||||
// time for an update
|
||||
_previousUpdate = g_system->getMillis();
|
||||
}
|
||||
} else {
|
||||
_previousUpdate = g_system->getMillis();
|
||||
return;
|
||||
// Scene &scene = _vm->_game->_scene;
|
||||
|
||||
// TODO: Or when current animation is finished
|
||||
if (_resourceIndex == -1) {
|
||||
if (++_resourceIndex == (int)_resources.size())
|
||||
scriptDone();
|
||||
else
|
||||
loadNextResource();
|
||||
}
|
||||
/*
|
||||
char bgFile[10];
|
||||
strncpy(bgFile, _currentFile, 5);
|
||||
bgFile[0] = bgFile[2];
|
||||
bgFile[1] = bgFile[3];
|
||||
bgFile[2] = bgFile[4];
|
||||
bgFile[3] = '\0';
|
||||
bgNumber = atoi(bgFile);
|
||||
sprintf(bgFile, "rm%i.art", bgNumber);
|
||||
}
|
||||
|
||||
// Not all scenes have a background. If there is one, refresh it
|
||||
if (Common::File::exists(bgFile)) {
|
||||
_vm->_palette->resetGamePalette(4, 8);
|
||||
SceneInfo *sceneInfo = SceneInfo::init(_vm);
|
||||
sceneInfo->load(bgNumber, 0, Common::String(), 0, scene._depthSurface,
|
||||
scene._backgroundSurface);
|
||||
void AnimationView::loadNextResource() {
|
||||
Scene &scene = _vm->_game->_scene;
|
||||
ResourceEntry &resEntry = _resources[_resourceIndex];
|
||||
|
||||
if (resEntry._bgFlag)
|
||||
_vm->_palette->resetGamePalette(1, 8);
|
||||
|
||||
delete _currentAnimation;
|
||||
_currentAnimation = Animation::init(_vm, &scene);
|
||||
_currentAnimation->load(scene._userInterface, scene._depthSurface,
|
||||
resEntry._resourceName, 0, nullptr, scene._sceneInfo);
|
||||
|
||||
// If a sound driver has been specified, then load the correct one
|
||||
if (!_currentAnimation->_header._soundName.empty()) {
|
||||
const char *chP = strchr(_currentAnimation->_header._soundName.c_str(), '.');
|
||||
assert(chP);
|
||||
|
||||
int driverNum = atoi(chP + 1);
|
||||
_vm->_sound->init(driverNum);
|
||||
}
|
||||
|
||||
// Set the enabled state for this animation
|
||||
_vm->_sound->setEnabled(resEntry._soundFlag);
|
||||
|
||||
// Check for background loading
|
||||
if (resEntry._bgFlag) {
|
||||
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void AnimationView::scriptDone() {
|
||||
@@ -893,7 +921,7 @@ void AnimationView::processLines() {
|
||||
resName += c;
|
||||
}
|
||||
|
||||
_resources.push_back(ResourceEntry(resName, _sfx));
|
||||
_resources.push_back(ResourceEntry(resName, _sfx, false, false));
|
||||
_sfx = 0;
|
||||
}
|
||||
|
||||
@@ -977,6 +1005,42 @@ int AnimationView::getParameter() {
|
||||
return result;
|
||||
}
|
||||
|
||||
void AnimationView::checkResource(const Common::String &resourceName) {
|
||||
//bool hasSuffix = false;
|
||||
|
||||
}
|
||||
|
||||
int AnimationView::scanResourceIndex(const Common::String &resourceName) {
|
||||
int foundIndex = -1;
|
||||
|
||||
if (_v1) {
|
||||
const char *chP = strchr(resourceName.c_str(), '\\');
|
||||
if (!chP) {
|
||||
chP = strchr(resourceName.c_str(), '*');
|
||||
}
|
||||
|
||||
Common::String resName = chP ? Common::String(chP + 1) : resourceName;
|
||||
|
||||
if (_v2 != 3) {
|
||||
assert(_resIndex.size() == 0);
|
||||
}
|
||||
|
||||
// Scan for the resource name
|
||||
for (uint resIndex = 0; resIndex < _resIndex.size(); ++resIndex) {
|
||||
ResIndexEntry &resEntry = _resIndex[resIndex];
|
||||
if (resEntry._resourceName.compareToIgnoreCase(resourceName)) {
|
||||
foundIndex = resIndex;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (foundIndex >= 0) {
|
||||
// TODO
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
} // End of namespace Nebular
|
||||
|
||||
|
||||
@@ -230,15 +230,27 @@ enum ResyncMode { NEVER, ALWAYS, BEGINNING };
|
||||
|
||||
struct ResourceEntry {
|
||||
Common::String _resourceName;
|
||||
int _sfx;
|
||||
int _fx;
|
||||
bool _soundFlag;
|
||||
bool _bgFlag;
|
||||
|
||||
ResourceEntry() {}
|
||||
ResourceEntry(const Common::String &resName, int sfx) {
|
||||
ResourceEntry(const Common::String &resName, int fx, bool soundFlag, bool bgFlag) {
|
||||
_resourceName = resName;
|
||||
_sfx = sfx;
|
||||
_fx = fx;
|
||||
_soundFlag = soundFlag;
|
||||
_bgFlag = bgFlag;
|
||||
}
|
||||
};
|
||||
|
||||
struct ResIndexEntry {
|
||||
int _id;
|
||||
int _v;
|
||||
Common::String _resourceName;
|
||||
|
||||
ResIndexEntry() {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Animation cutscene view
|
||||
*/
|
||||
@@ -255,7 +267,16 @@ private:
|
||||
ResyncMode _resyncMode;
|
||||
int _sfx;
|
||||
Common::Array<ResourceEntry> _resources;
|
||||
Common::Array<ResIndexEntry> _resIndex;
|
||||
int _v1;
|
||||
int _v2;
|
||||
int _resourceIndex;
|
||||
Animation *_currentAnimation;
|
||||
private:
|
||||
void checkResource(const Common::String &resourceName);
|
||||
|
||||
int scanResourceIndex(const Common::String &resourceName);
|
||||
|
||||
void load();
|
||||
|
||||
void processLines();
|
||||
@@ -265,7 +286,11 @@ private:
|
||||
int getParameter();
|
||||
|
||||
void scriptDone();
|
||||
|
||||
void loadNextResource();
|
||||
protected:
|
||||
virtual void display();
|
||||
|
||||
virtual void doFrame();
|
||||
|
||||
virtual bool onEvent(Common::Event &event);
|
||||
@@ -277,7 +302,7 @@ public:
|
||||
|
||||
AnimationView(MADSEngine *vm);
|
||||
|
||||
virtual ~AnimationView() {}
|
||||
virtual ~AnimationView();
|
||||
};
|
||||
|
||||
} // End of namespace Nebular
|
||||
|
||||
Reference in New Issue
Block a user