mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-10 03:40:25 +00:00
TSAGE: Initial implementation of Scene #3700 - Remote Viewer
This commit is contained in:
parent
51602483a4
commit
08918b512e
@ -102,6 +102,8 @@ Scene *SceneFactory::createScene(int sceneNumber) {
|
||||
/* Scene group 4 */
|
||||
// Ringworld Scan
|
||||
case 3500: return new Scene3500();
|
||||
// Remote Viewer
|
||||
case 3700: return new Scene3700();
|
||||
|
||||
/* Scene group 5 */
|
||||
|
||||
|
@ -90,4 +90,125 @@ void Scene3500::postInit(SceneObjectList *OwnerList) {
|
||||
setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* Scene 3700 - Remote Viewer
|
||||
*
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
Scene3700::Viewer::Viewer() {
|
||||
_imgList[0] = surfaceFromRes(3705, 1, 1);
|
||||
for (int idx = 1; idx <= 3; ++idx)
|
||||
_imgList[idx] = surfaceFromRes(3705, 2, _globals->_randomSource.getRandomNumber(4) + 1);
|
||||
|
||||
_field88 = 1;
|
||||
_percent = 120;
|
||||
_field94 = 50;
|
||||
_field96 = 75;
|
||||
_field98 = 114;
|
||||
}
|
||||
|
||||
void Scene3700::Viewer::reposition() {
|
||||
_bounds = Rect(123, 40, 285, 123);
|
||||
}
|
||||
|
||||
void Scene3700::Viewer::draw() {
|
||||
for (int idx = 0; idx < 4; ++idx) {
|
||||
Rect destRect = _imgList[idx].getBounds();
|
||||
destRect.resize(_imgList[idx], (_position.x - _globals->_sceneOffset.x),
|
||||
(_position.y - _globals->_sceneOffset.y - _yDiff), _percent);
|
||||
|
||||
destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left,
|
||||
-_globals->_sceneManager._scene->_sceneBounds.top);
|
||||
|
||||
Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1);
|
||||
_globals->gfxManager().copyFrom(_imgList[idx], destRect, priorityRegion);
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void Scene3700::Action1::signal() {
|
||||
Scene3700 *scene = (Scene3700 *)_globals->_sceneManager._scene;
|
||||
|
||||
switch (_actionIndex++) {
|
||||
case 0:
|
||||
setDelay(10);
|
||||
break;
|
||||
case 1:
|
||||
scene->_stripManager.start(2162, this);
|
||||
break;
|
||||
case 2:
|
||||
scene->_viewer._field88 = 0;
|
||||
setDelay(90);
|
||||
break;
|
||||
case 3:
|
||||
scene->_soundHandler.startSound(196);
|
||||
scene->_viewer.flag100();
|
||||
|
||||
scene->_hotspot1.postInit();
|
||||
scene->_hotspot1.setVisage(3710);
|
||||
scene->_hotspot1.setStrip(1);
|
||||
scene->_hotspot1.setFrame(1);
|
||||
scene->_hotspot1.setPosition(Common::Point(204, 120));
|
||||
|
||||
setDelay(90);
|
||||
break;
|
||||
case 4:
|
||||
scene->_soundHandler.startSound(197);
|
||||
scene->_hotspot1.flag100();
|
||||
|
||||
scene->_hotspot2.postInit();
|
||||
scene->_hotspot2.setVisage(3710);
|
||||
scene->_hotspot2.setStrip(2);
|
||||
scene->_hotspot2.setFrame(1);
|
||||
scene->_hotspot2.setPosition(Common::Point(204, 120));
|
||||
|
||||
setDelay(30);
|
||||
break;
|
||||
case 5:
|
||||
scene->_soundHandler.startSound(198);
|
||||
scene->_hotspot2.flag100();
|
||||
scene->_hotspot1.unflag100();
|
||||
setDelay(90);
|
||||
break;
|
||||
case 6:
|
||||
scene->_stripManager.start(2166, this);
|
||||
break;
|
||||
case 7:
|
||||
setDelay(60);
|
||||
break;
|
||||
case 8:
|
||||
scene->_hotspot1.remove();
|
||||
scene->_hotspot2.unflag100();
|
||||
_globals->setFlag(59);
|
||||
setDelay(30);
|
||||
break;
|
||||
case 9:
|
||||
_globals->_sceneManager.changeScene(2100);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void Scene3700::postInit(tSage::SceneObjectList *OwnerList) {
|
||||
Scene::postInit();
|
||||
loadScene(3700);
|
||||
|
||||
_stripManager.addSpeaker(&_speakerSText);
|
||||
_stripManager.addSpeaker(&_speakerMText);
|
||||
_stripManager.addSpeaker(&_speakerMR);
|
||||
_speakerSText.setTextPos(Common::Point(20, 15));
|
||||
_speakerMText.setTextPos(Common::Point(20, 15));
|
||||
|
||||
_viewer.postInit();
|
||||
_viewer.setVisage(3705);
|
||||
_viewer.setStrip(1);
|
||||
_viewer.setFrame(2);
|
||||
_viewer.setPosition(Common::Point(195, 83));
|
||||
|
||||
setAction(&_action1);
|
||||
_globals->_soundHandler.startSound(195);
|
||||
}
|
||||
|
||||
} // End of namespace tSage
|
||||
|
@ -53,6 +53,39 @@ public:
|
||||
virtual void postInit(SceneObjectList *OwnerList = NULL);
|
||||
};
|
||||
|
||||
class Scene3700: public Scene {
|
||||
/* Custom classes */
|
||||
class Viewer: public SceneObject {
|
||||
public:
|
||||
GfxSurface _imgList[4];
|
||||
int _field88;
|
||||
int _percent;
|
||||
int _field94;
|
||||
int _field96;
|
||||
int _field98;
|
||||
|
||||
Viewer();
|
||||
virtual void reposition();
|
||||
virtual void draw();
|
||||
};
|
||||
|
||||
/* Actions */
|
||||
class Action1: public Action {
|
||||
public:
|
||||
virtual void signal();
|
||||
};
|
||||
public:
|
||||
Viewer _viewer;
|
||||
Action _action1;
|
||||
SceneObject _hotspot1, _hotspot2;
|
||||
SpeakerSText _speakerSText;
|
||||
SpeakerMText _speakerMText;
|
||||
SpeakerMR _speakerMR;
|
||||
SoundHandler _soundHandler;
|
||||
|
||||
virtual void postInit(SceneObjectList *OwnerList = NULL);
|
||||
};
|
||||
|
||||
} // End of namespace tSage
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user