mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-10 11:51:52 +00:00
AVALANCHE: Add some more graphic functions
This commit is contained in:
parent
ef8b661c3d
commit
1af03774cc
@ -861,17 +861,9 @@ void Animation::callSpecial(uint16 which) {
|
||||
}
|
||||
|
||||
void Animation::updateSpeed() {
|
||||
// Given that you've just changed the speed in triptype._speedX, this adjusts _moveX.
|
||||
|
||||
// Given that you've just changed the speed in _speedX, this adjusts _moveX.
|
||||
_sprites[0]._moveX = (_sprites[0]._moveX / 3) * _sprites[0]._speedX;
|
||||
|
||||
if (_sprites[0]._speedX == _vm->kRun) {
|
||||
_vm->_graphics->_surface.drawLine(336, 199, 338, 199, kColorLightblue);
|
||||
_vm->_graphics->_surface.drawLine(371, 199, 373, 199, kColorYellow);
|
||||
} else {
|
||||
_vm->_graphics->_surface.drawLine(371, 199, 373, 199, kColorLightblue);
|
||||
_vm->_graphics->_surface.drawLine(336, 199, 338, 199, kColorYellow);
|
||||
}
|
||||
_vm->_graphics->drawSpeedBar(_sprites[0]._speedX);
|
||||
}
|
||||
|
||||
void Animation::setMoveSpeed(byte t, Direction dir) {
|
||||
|
@ -48,6 +48,7 @@ Graphics::~Graphics() {
|
||||
_background.free();
|
||||
_screen.free();
|
||||
_scrolls.free();
|
||||
_backup.free();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
_digits[i].free();
|
||||
@ -363,6 +364,15 @@ void Graphics::drawShadowBox(int16 x1, int16 y1, int16 x2, int16 y2, Common::Str
|
||||
CursorMan.showMouse(true);
|
||||
}
|
||||
|
||||
void Graphics::drawSpeedBar(int speed) {
|
||||
if (speed == _vm->kRun) {
|
||||
_surface.drawLine(336, 199, 338, 199, kColorLightblue);
|
||||
_surface.drawLine(371, 199, 373, 199, kColorYellow);
|
||||
} else {
|
||||
_surface.drawLine(371, 199, 373, 199, kColorLightblue);
|
||||
_surface.drawLine(336, 199, 338, 199, kColorYellow);
|
||||
}
|
||||
}
|
||||
void Graphics::drawScroll(int mx, int lx, int my, int ly) {
|
||||
_scrolls.copyFrom(_surface);
|
||||
|
||||
@ -390,7 +400,6 @@ void Graphics::drawScroll(int mx, int lx, int my, int ly) {
|
||||
_scrolls.fillRect(Common::Rect(mx - lx - 30, my + ly + 6, mx + lx, my + ly + 7), kColorRed);
|
||||
_scrolls.fillRect(Common::Rect(mx - lx - 15, my - ly, mx - lx - 14, my + ly), kColorRed);
|
||||
_scrolls.fillRect(Common::Rect(mx + lx + 15, my - ly, mx + lx + 16, my + ly), kColorRed);
|
||||
|
||||
}
|
||||
|
||||
::Graphics::Surface Graphics::loadPictureGraphic(Common::File &file) {
|
||||
@ -523,9 +532,7 @@ void Graphics::refreshBackground() {
|
||||
void Graphics::zoomOut(int16 x, int16 y) {
|
||||
//setlinestyle(dottedln, 0, 1); TODO: Implement it with a dotted line style!!!
|
||||
|
||||
::Graphics::Surface backup;
|
||||
backup.copyFrom(_surface);
|
||||
|
||||
saveScreen();
|
||||
for (byte i = 1; i <= 20; i ++) {
|
||||
int16 x1 = x - (x / 20) * i;
|
||||
int16 y1 = y - ((y - 10) / 20) * i;
|
||||
@ -535,11 +542,10 @@ void Graphics::zoomOut(int16 x, int16 y) {
|
||||
_surface.frameRect(Common::Rect(x1, y1, x2, y2), kColorWhite);
|
||||
refreshScreen();
|
||||
_vm->_system->delayMillis(17);
|
||||
_surface.copyFrom(backup);
|
||||
refreshScreen();
|
||||
}
|
||||
|
||||
backup.free();
|
||||
restoreScreen();
|
||||
}
|
||||
removeBackup();
|
||||
}
|
||||
|
||||
// Original name background()
|
||||
@ -547,4 +553,16 @@ void Graphics::setBackgroundColor(Color x) {
|
||||
warning("STUB: setBackgroundColor(%d)", x);
|
||||
}
|
||||
|
||||
void Graphics::saveScreen() {
|
||||
_backup.copyFrom(_surface);
|
||||
}
|
||||
|
||||
void Graphics::removeBackup() {
|
||||
_backup.free();
|
||||
}
|
||||
|
||||
void Graphics::restoreScreen() {
|
||||
_surface.copyFrom(_backup);
|
||||
refreshScreen();
|
||||
}
|
||||
} // End of namespace Avalanche
|
||||
|
@ -82,6 +82,8 @@ public:
|
||||
void drawScrollShadow(int16 x1, int16 y1, int16 x2, int16 y2);
|
||||
void drawShadowBox(int16 x1, int16 y1, int16 x2, int16 y2, Common::String text);
|
||||
void drawScroll(int mx, int lx, int my, int ly);
|
||||
void drawSpeedBar(int speed);
|
||||
|
||||
void clearAlso();
|
||||
void clearTextBar();
|
||||
void setAlsoLine(int x1, int y1, int x2, int y2, Color color);
|
||||
@ -104,6 +106,9 @@ public:
|
||||
|
||||
void zoomOut(int16 x, int16 y); // Only used when entering the map.
|
||||
|
||||
void saveScreen();
|
||||
void removeBackup();
|
||||
void restoreScreen();
|
||||
private:
|
||||
static const uint16 kBackgroundWidth = kScreenWidth;
|
||||
static const byte kBackgroundHeight = 8 * 12080 / kScreenWidth; // With 640 width it's 151.
|
||||
@ -114,6 +119,7 @@ private:
|
||||
::Graphics::Surface _digits[10]; // digitsize and rwlitesize are defined in loadDigits() !!!
|
||||
::Graphics::Surface _directions[9]; // Maybe it will be needed to move them to the class itself instead.
|
||||
::Graphics::Surface _screen; // Only used in refreshScreen() to make it more optimized. (No recreation of it at every call of the function.)
|
||||
::Graphics::Surface _backup;
|
||||
byte _egaPalette[64][3];
|
||||
|
||||
AvalancheEngine *_vm;
|
||||
|
@ -683,10 +683,9 @@ void Menu::setup() {
|
||||
}
|
||||
|
||||
void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
|
||||
Common::Point cursorPos = _vm->getMousePos();
|
||||
::Graphics::Surface backup;
|
||||
backup.copyFrom(_vm->_graphics->_surface);
|
||||
_vm->_graphics->saveScreen();
|
||||
|
||||
Common::Point cursorPos = _vm->getMousePos();
|
||||
while (!_activeMenuItem._activeNow && (cursorPos.y <= 21) && _vm->_holdLeftMouse) {
|
||||
_menuBar.chooseMenuItem(cursorPos.x);
|
||||
do
|
||||
@ -723,7 +722,7 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
|
||||
if (_activeMenuItem._activeNow) {
|
||||
_activeMenuItem.wipe();
|
||||
_vm->_holdLeftMouse = false;
|
||||
backup.free();
|
||||
_vm->_graphics->removeBackup();
|
||||
return;
|
||||
} // No "else"- clicking on menu has no effect (only releasing).
|
||||
}
|
||||
@ -731,13 +730,12 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
|
||||
// Clicked on menu bar.
|
||||
if (_activeMenuItem._activeNow) {
|
||||
_activeMenuItem.wipe();
|
||||
_vm->_graphics->_surface.copyFrom(backup);
|
||||
_vm->_graphics->refreshScreen();
|
||||
_vm->_graphics->restoreScreen();
|
||||
|
||||
if (((_activeMenuItem._left * 8) <= cursorPos.x) && (cursorPos.x <= (_activeMenuItem._left * 8 + 80))) { // 80: the width of one menu item on the bar in pixels.
|
||||
// If we clicked on the same menu item (the one that is already active) on the bar...
|
||||
_vm->_holdLeftMouse = false;
|
||||
backup.free();
|
||||
_vm->_graphics->removeBackup();
|
||||
return;
|
||||
} else {
|
||||
_vm->_holdLeftMouse = true;
|
||||
@ -764,7 +762,7 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
|
||||
uint16 which = (cursorPos.y - 26) / 20;
|
||||
_activeMenuItem.select(which);
|
||||
if (_activeMenuItem._options[which]._valid) { // If the menu item wasn't active, we do nothing.
|
||||
backup.free();
|
||||
_vm->_graphics->removeBackup();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -772,7 +770,7 @@ void Menu::update() { // TODO: Optimize it ASAP!!! It really needs it...
|
||||
}
|
||||
}
|
||||
|
||||
backup.free();
|
||||
_vm->_graphics->removeBackup();
|
||||
}
|
||||
|
||||
bool Menu::isActive() {
|
||||
|
@ -481,7 +481,7 @@ void Parser::wipeText() {
|
||||
CursorMan.showMouse(false);
|
||||
cursorOff();
|
||||
|
||||
_vm->_graphics->_surface.fillRect(Common::Rect(24, 161, 640, 169), kColorBlack); // Black out the line of the text.
|
||||
_vm->_graphics->clearTextBar();
|
||||
|
||||
_quote = true;
|
||||
_inputTextPos = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user