Move functions from agi.cpp to more appropriate files.

svn-id: r42662
This commit is contained in:
Eugene Sandulenko 2009-07-22 15:55:33 +00:00
parent 9bd355acf8
commit 483a4c0eeb
5 changed files with 153 additions and 151 deletions

View file

@ -271,19 +271,6 @@ void AgiEngine::processEvents() {
}
}
void AgiEngine::checkQuickLoad() {
if (ConfMan.hasKey("save_slot")) {
char saveNameBuffer[256];
snprintf (saveNameBuffer, 256, "%s.%03d", _targetName.c_str(), ConfMan.getInt("save_slot"));
if (loadGame(saveNameBuffer, false) == errOK) { // Do not check game id
_game.exitAllLogics = 1;
_menu->enableAll();
}
}
}
void AgiEngine::pollTimer(void) {
static uint32 m = 0;
uint32 dm;
@ -301,40 +288,10 @@ void AgiEngine::pollTimer(void) {
m = g_tickTimer;
}
bool AgiEngine::isKeypress(void) {
processEvents();
return _keyQueueStart != _keyQueueEnd;
}
int AgiEngine::getKeypress(void) {
int k;
while (_keyQueueStart == _keyQueueEnd) // block
pollTimer();
keyDequeue(k);
return k;
}
void AgiEngine::clearKeyQueue(void) {
while (isKeypress()) {
getKeypress();
}
}
void AgiEngine::agiTimerFunctionLow(void *refCon) {
g_tickTimer++;
}
void AgiEngine::clearImageStack(void) {
_imageStack.clear();
}
void AgiEngine::releaseImageStack(void) {
_imageStack.clear();
}
void AgiEngine::pause(uint32 msec) {
uint32 endTime = _system->getMillis() + msec;
@ -348,38 +305,6 @@ void AgiEngine::pause(uint32 msec) {
_gfx->setCursor(_renderMode == Common::kRenderAmiga);
}
void AgiEngine::recordImageStackCall(uint8 type, int16 p1, int16 p2, int16 p3,
int16 p4, int16 p5, int16 p6, int16 p7) {
ImageStackElement pnew;
pnew.type = type;
pnew.pad = 0;
pnew.parm1 = p1;
pnew.parm2 = p2;
pnew.parm3 = p3;
pnew.parm4 = p4;
pnew.parm5 = p5;
pnew.parm6 = p6;
pnew.parm7 = p7;
_imageStack.push(pnew);
}
void AgiEngine::replayImageStackCall(uint8 type, int16 p1, int16 p2, int16 p3,
int16 p4, int16 p5, int16 p6, int16 p7) {
switch (type) {
case ADD_PIC:
debugC(8, kDebugLevelMain, "--- decoding picture %d ---", p1);
agiLoadResource(rPICTURE, p1);
_picture->decodePicture(p1, p2, p3 != 0);
break;
case ADD_VIEW:
agiLoadResource(rVIEW, p1);
_sprites->addToPic(p1, p2, p3, p4, p5, p6, p7);
break;
}
}
void AgiEngine::initPriTable() {
int i, p, y = 0;
@ -525,21 +450,6 @@ int AgiEngine::agiDeinit() {
return ec;
}
int AgiEngine::agiDetectGame() {
int ec = errOK;
assert(_gameDescription != NULL);
if (getVersion() <= 0x2999) {
_loader = new AgiLoader_v2(this);
} else {
_loader = new AgiLoader_v3(this);
}
ec = _loader->detectGame();
return ec;
}
int AgiEngine::agiLoadResource(int r, int n) {
int i;
@ -582,67 +492,6 @@ static const GameSettings agiSettings[] = {
{NULL, NULL, 0, 0, NULL}
};
AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, bool positive) const {
if (_amigaStyle) {
if (positive) {
if (pressed) { // Positive pressed Amiga-style button
if (_olderAgi) {
return AgiTextColor(amigaBlack, amigaOrange);
} else {
return AgiTextColor(amigaBlack, amigaPurple);
}
} else { // Positive unpressed Amiga-style button
return AgiTextColor(amigaWhite, amigaGreen);
}
} else { // _amigaStyle && !positive
if (pressed) { // Negative pressed Amiga-style button
return AgiTextColor(amigaBlack, amigaCyan);
} else { // Negative unpressed Amiga-style button
return AgiTextColor(amigaWhite, amigaRed);
}
}
} else { // PC-style button
if (hasFocus || pressed) { // A pressed or in focus PC-style button
return AgiTextColor(pcWhite, pcBlack);
} else { // An unpressed PC-style button without focus
return AgiTextColor(pcBlack, pcWhite);
}
}
}
AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, int baseFgColor, int baseBgColor) const {
return getColor(hasFocus, pressed, AgiTextColor(baseFgColor, baseBgColor));
}
AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, const AgiTextColor &baseColor) const {
if (hasFocus || pressed)
return baseColor.swap();
else
return baseColor;
}
int AgiButtonStyle::getTextOffset(bool hasFocus, bool pressed) const {
return (pressed && !_amigaStyle) ? 1 : 0;
}
bool AgiButtonStyle::getBorder(bool hasFocus, bool pressed) const {
return _amigaStyle && !_authenticAmiga && (hasFocus || pressed);
}
void AgiButtonStyle::setAmigaStyle(bool amigaStyle, bool olderAgi, bool authenticAmiga) {
_amigaStyle = amigaStyle;
_olderAgi = olderAgi;
_authenticAmiga = authenticAmiga;
}
void AgiButtonStyle::setPcStyle(bool pcStyle) {
setAmigaStyle(!pcStyle);
}
AgiButtonStyle::AgiButtonStyle(Common::RenderMode renderMode) {
setAmigaStyle(renderMode == Common::kRenderAmiga);
}
AgiBase::AgiBase(OSystem *syst, const AGIGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
_noSaveLoadAllowed = false;

View file

@ -1312,4 +1312,19 @@ bool AgiBase::canSaveGameStateCurrently() {
return (!(getGameType() == GType_PreAGI) && getflag(fMenusWork) && !_noSaveLoadAllowed && _game.inputEnabled);
}
int AgiEngine::agiDetectGame() {
int ec = errOK;
assert(_gameDescription != NULL);
if (getVersion() <= 0x2999) {
_loader = new AgiLoader_v2(this);
} else {
_loader = new AgiLoader_v3(this);
}
ec = _loader->detectGame();
return ec;
}
} // End of namespace Agi

View file

@ -421,4 +421,26 @@ int AgiEngine::waitAnyKey() {
return key;
}
bool AgiEngine::isKeypress(void) {
processEvents();
return _keyQueueStart != _keyQueueEnd;
}
int AgiEngine::getKeypress(void) {
int k;
while (_keyQueueStart == _keyQueueEnd) // block
pollTimer();
keyDequeue(k);
return k;
}
void AgiEngine::clearKeyQueue(void) {
while (isKeypress()) {
getKeypress();
}
}
} // End of namespace Agi

View file

@ -493,4 +493,66 @@ void Menu::enableAll() {
}
}
AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, bool positive) const {
if (_amigaStyle) {
if (positive) {
if (pressed) { // Positive pressed Amiga-style button
if (_olderAgi) {
return AgiTextColor(amigaBlack, amigaOrange);
} else {
return AgiTextColor(amigaBlack, amigaPurple);
}
} else { // Positive unpressed Amiga-style button
return AgiTextColor(amigaWhite, amigaGreen);
}
} else { // _amigaStyle && !positive
if (pressed) { // Negative pressed Amiga-style button
return AgiTextColor(amigaBlack, amigaCyan);
} else { // Negative unpressed Amiga-style button
return AgiTextColor(amigaWhite, amigaRed);
}
}
} else { // PC-style button
if (hasFocus || pressed) { // A pressed or in focus PC-style button
return AgiTextColor(pcWhite, pcBlack);
} else { // An unpressed PC-style button without focus
return AgiTextColor(pcBlack, pcWhite);
}
}
}
AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, int baseFgColor, int baseBgColor) const {
return getColor(hasFocus, pressed, AgiTextColor(baseFgColor, baseBgColor));
}
AgiTextColor AgiButtonStyle::getColor(bool hasFocus, bool pressed, const AgiTextColor &baseColor) const {
if (hasFocus || pressed)
return baseColor.swap();
else
return baseColor;
}
int AgiButtonStyle::getTextOffset(bool hasFocus, bool pressed) const {
return (pressed && !_amigaStyle) ? 1 : 0;
}
bool AgiButtonStyle::getBorder(bool hasFocus, bool pressed) const {
return _amigaStyle && !_authenticAmiga && (hasFocus || pressed);
}
void AgiButtonStyle::setAmigaStyle(bool amigaStyle, bool olderAgi, bool authenticAmiga) {
_amigaStyle = amigaStyle;
_olderAgi = olderAgi;
_authenticAmiga = authenticAmiga;
}
void AgiButtonStyle::setPcStyle(bool pcStyle) {
setAmigaStyle(!pcStyle);
}
AgiButtonStyle::AgiButtonStyle(Common::RenderMode renderMode) {
setAmigaStyle(renderMode == Common::kRenderAmiga);
}
} // End of namespace Agi

View file

@ -32,6 +32,7 @@
#include "common/file.h"
#include "graphics/thumbnail.h"
#include "common/config-manager.h"
#include "agi/agi.h"
#include "agi/graphics.h"
@ -925,4 +926,57 @@ int AgiEngine::loadGameSimple() {
return rc;
}
void AgiEngine::recordImageStackCall(uint8 type, int16 p1, int16 p2, int16 p3,
int16 p4, int16 p5, int16 p6, int16 p7) {
ImageStackElement pnew;
pnew.type = type;
pnew.pad = 0;
pnew.parm1 = p1;
pnew.parm2 = p2;
pnew.parm3 = p3;
pnew.parm4 = p4;
pnew.parm5 = p5;
pnew.parm6 = p6;
pnew.parm7 = p7;
_imageStack.push(pnew);
}
void AgiEngine::replayImageStackCall(uint8 type, int16 p1, int16 p2, int16 p3,
int16 p4, int16 p5, int16 p6, int16 p7) {
switch (type) {
case ADD_PIC:
debugC(8, kDebugLevelMain, "--- decoding picture %d ---", p1);
agiLoadResource(rPICTURE, p1);
_picture->decodePicture(p1, p2, p3 != 0);
break;
case ADD_VIEW:
agiLoadResource(rVIEW, p1);
_sprites->addToPic(p1, p2, p3, p4, p5, p6, p7);
break;
}
}
void AgiEngine::clearImageStack(void) {
_imageStack.clear();
}
void AgiEngine::releaseImageStack(void) {
_imageStack.clear();
}
void AgiEngine::checkQuickLoad() {
if (ConfMan.hasKey("save_slot")) {
char saveNameBuffer[256];
snprintf (saveNameBuffer, 256, "%s.%03d", _targetName.c_str(), ConfMan.getInt("save_slot"));
if (loadGame(saveNameBuffer, false) == errOK) { // Do not check game id
_game.exitAllLogics = 1;
_menu->enableAll();
}
}
}
} // End of namespace Agi