atrooney-online-2/src/aoscene.cpp
Crystalwarrior 3b415f5a70 Expand get_image_suffix to fall back on .png last
Reorganize the file_exists checks to be an array iterator instead for much less code duplication and easier ordering of priority
Reorganize desk and set_image loading on AOScene class, resolve issues with last_image setting to prevent animations from being restarted when characters talk on the same pos in succession
Apply get_image_suffix for seancestand and jurystand searches
TODO: At the moment, if you feed a .png shout, it will send the "Done" signal on the first frame (frame 0), not showing you the .png image at all. The shout code should be reorganized to allow static images to be displayed for exactly 720ms - the standard AA objection length. Usage of the timer similarly to the realizationflash.png might be possible.
2019-09-12 15:40:19 +03:00

86 lines
2.0 KiB
C++

#include "aoscene.h"
#include "courtroom.h"
#include "file_functions.h"
AOScene::AOScene(QWidget *parent, AOApplication *p_ao_app) : QLabel(parent)
{
m_parent = parent;
ao_app = p_ao_app;
m_movie = new QMovie(this);
last_image = "";
}
void AOScene::set_image(QString p_image)
{
QString background_path = ao_app->get_image_suffix(ao_app->get_background_path(p_image));
if (!file_exists(background_path))
background_path = ao_app->get_image_suffix(ao_app->get_default_background_path(p_image)); //Default path
if (file_exists(background_path) && background_path == last_image)
return;
int w = this->width();
int h = this->height();
this->clear();
this->setMovie(nullptr);
m_movie->stop();
m_movie->setFileName(background_path);
m_movie->setScaledSize(QSize(w, h));
if (m_movie->isValid())
{
this->setMovie(m_movie);
m_movie->start();
}
else
{
QPixmap background(background_path);
this->setPixmap(background.scaled(w, h));
}
last_image = background_path;
}
void AOScene::set_legacy_desk(QString p_image)
{
QString desk_path = ao_app->get_image_suffix(ao_app->get_background_path(p_image));
if (!file_exists(desk_path))
desk_path = ao_app->get_image_suffix(ao_app->get_default_background_path(p_image)); //Default path
if (file_exists(desk_path) && desk_path == last_image)
return;
QPixmap f_desk(desk_path);
//vanilla desks vary in both width and height. in order to make that work with viewport rescaling,
//some INTENSE math is needed.
int vp_width = m_parent->width();
int vp_height = m_parent->height();
double h_modifier = vp_height / 192;
int final_h = static_cast<int>(h_modifier * f_desk.height());
this->clear();
this->setMovie(nullptr);
m_movie->stop();
m_movie->setFileName(desk_path);
m_movie->setScaledSize(QSize(vp_width, final_h));
if (m_movie->isValid())
{
this->setMovie(m_movie);
m_movie->start();
}
else
{
this->resize(vp_width, final_h);
this->setPixmap(f_desk.scaled(vp_width, final_h));
}
last_image = desk_path;
}