added aoevidencedisplay class. almost done with evidence

This commit is contained in:
OmniTroid 2017-05-23 13:20:46 +02:00
parent f5e8465311
commit a310728a26
8 changed files with 167 additions and 4 deletions

View File

@ -46,7 +46,8 @@ SOURCES += main.cpp\
charselect.cpp \
aotextarea.cpp \
aolineedit.cpp \
aotextedit.cpp
aotextedit.cpp \
aoevidencedisplay.cpp
HEADERS += lobby.h \
aoimage.h \
@ -74,7 +75,8 @@ HEADERS += lobby.h \
aoevidencebutton.h \
aotextarea.h \
aolineedit.h \
aotextedit.h
aotextedit.h \
aoevidencedisplay.h
unix:LIBS += -L$$PWD -lbass
win32:LIBS += "$$PWD/bass.dll"

100
aoevidencedisplay.cpp Normal file
View File

@ -0,0 +1,100 @@
#include <QDebug>
#include "aoevidencedisplay.h"
#include "file_functions.h"
#include "datatypes.h"
#include "misc_functions.h"
AOEvidenceDisplay::AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app) : QLabel(p_parent)
{
ao_app = p_ao_app;
evidence_movie = new QMovie(this);
evidence_icon = new QLabel(this);
sfx_player = new AOSfxPlayer(this, ao_app);
connect(evidence_movie, SIGNAL(frameChanged(int)), this, SLOT(frame_change(int)));
}
void AOEvidenceDisplay::show_evidence(QString p_evidence_image, bool is_left_side, int p_volume)
{
this->reset();
sfx_player->set_volume(p_volume);
QString f_evidence_path = ao_app->get_evidence_path() + p_evidence_image;
QPixmap f_pixmap(f_evidence_path);
QString final_gif_path;
QString gif_name;
QString icon_identifier;
if (is_left_side)
{
icon_identifier = "left_evidence_icon";
gif_name = "evidence_appear_left.gif";
}
else
{
icon_identifier = "right_evidence_icon";
gif_name = "evidence_appear_right.gif";
}
pos_size_type icon_dimensions = ao_app->get_element_dimensions(icon_identifier, "courtroom_design.ini");
evidence_icon->move(icon_dimensions.x, icon_dimensions.y);
evidence_icon->resize(icon_dimensions.width, icon_dimensions.height);
evidence_icon->setPixmap(f_pixmap.scaled(evidence_icon->width(), evidence_icon->height(), Qt::IgnoreAspectRatio));
QString f_default_gif_path = ao_app->get_default_theme_path() + gif_name;
QString f_gif_path = ao_app->get_theme_path() + gif_name;
if (file_exists(f_gif_path))
final_gif_path = f_gif_path;
else
final_gif_path = f_default_gif_path;
evidence_movie->setFileName(final_gif_path);
if(evidence_movie->frameCount() < 1)
return;
this->setMovie(evidence_movie);
evidence_movie->start();
sfx_player->play(ao_app->get_sfx("evidence_present", "courtroom_sounds.ini"));
}
void AOEvidenceDisplay::frame_change(int p_frame)
{
qDebug() << "total evi frames: " << evidence_movie->frameCount();
qDebug() << "evi_frame: " << p_frame;
if (p_frame == (evidence_movie->frameCount() - 1))
{
//we need this or else the last frame wont show
delay(evidence_movie->nextFrameDelay());
evidence_movie->stop();
this->clear();
evidence_icon->show();
}
}
void AOEvidenceDisplay::reset()
{
sfx_player->stop();
evidence_movie->stop();
evidence_icon->hide();
this->clear();
}
QLabel* AOEvidenceDisplay::get_evidence_icon()
{
return evidence_icon;
}

31
aoevidencedisplay.h Normal file
View File

@ -0,0 +1,31 @@
#ifndef AOEVIDENCEDISPLAY_H
#define AOEVIDENCEDISPLAY_H
#include <QLabel>
#include <QMovie>
#include "aoapplication.h"
#include "aosfxplayer.h"
class AOEvidenceDisplay : public QLabel
{
Q_OBJECT
public:
AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app);
void show_evidence(QString p_evidence_image, bool is_left_side, int p_volume);
QLabel* get_evidence_icon();
void reset();
private:
AOApplication *ao_app;
QMovie *evidence_movie;
QLabel *evidence_icon;
AOSfxPlayer *sfx_player;
private slots:
void frame_change(int p_frame);
};
#endif // AOEVIDENCEDISPLAY_H

View File

@ -30,6 +30,11 @@ void AOSfxPlayer::play(QString p_sfx, QString p_char)
BASS_ChannelPlay(m_stream, false);
}
void AOSfxPlayer::stop()
{
BASS_ChannelStop(m_stream);
}
void AOSfxPlayer::set_volume(int p_value)
{
m_volume = p_value;

View File

@ -12,6 +12,7 @@ public:
AOSfxPlayer(QWidget *parent, AOApplication *p_ao_app);
void play(QString p_sfx, QString p_char = "");
void stop();
void set_volume(int p_volume);
private:

View File

@ -63,6 +63,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_vp_desk = new AOScene(ui_viewport, ao_app);
ui_vp_legacy_desk = new AOScene(ui_viewport, ao_app);
ui_vp_evidence_display = new AOEvidenceDisplay(this, ao_app);
ui_vp_chatbox = new AOImage(this, ao_app);
ui_vp_showname = new QLabel(ui_vp_chatbox);
ui_vp_message = new QTextEdit(ui_vp_chatbox);
@ -329,6 +331,9 @@ void Courtroom::set_widgets()
ui_vp_legacy_desk->move(0, final_y);
ui_vp_legacy_desk->hide();
ui_vp_evidence_display->move(0, 0);
ui_vp_evidence_display->resize(ui_viewport->width(), ui_viewport->height());
set_size_and_pos(ui_vp_showname, "showname");
set_size_and_pos(ui_vp_message, "message");
@ -856,8 +861,12 @@ void Courtroom::on_chat_return_pressed()
packet_contents.append(f_obj_state);
//evidence. 0 for now
packet_contents.append("0");
if (is_presenting_evidence)
//the evidence index is shifted by 1 because 0 is no evidence per legacy standards
//besides, older clients crash if we pass -1
packet_contents.append(QString::number(current_evidence + 1));
else
packet_contents.append("0");
QString f_flip;
@ -1035,6 +1044,18 @@ void Courtroom::handle_chatmessage_3()
{
start_chat_ticking();
int f_evi_id = m_chatmessage[EVIDENCE_ID].toInt();
QString f_side = m_chatmessage[SIDE];
if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size())
{
//shifted by 1 because 0 is no evidence per legacy standards
QString f_image = local_evidence_list.at(f_evi_id - 1).image;
//def jud and hlp should display the evidence icon on the RIGHT side
bool is_left_side = !(f_side == "def" || f_side == "hlp" || "jud");
ui_vp_evidence_display->show_evidence(f_image, is_left_side, ui_sfx_slider->value());
}
int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
if (emote_mod == 5 ||

View File

@ -16,6 +16,7 @@
#include "aotextarea.h"
#include "aolineedit.h"
#include "aotextedit.h"
#include "aoevidencedisplay.h"
#include "datatypes.h"
#include <QMainWindow>
@ -220,6 +221,7 @@ private:
AOCharMovie *ui_vp_player_char;
AOScene *ui_vp_desk;
AOScene *ui_vp_legacy_desk;
AOEvidenceDisplay *ui_vp_evidence_display;
AOImage *ui_vp_chatbox;
QLabel *ui_vp_showname;
QTextEdit *ui_vp_message;

View File

@ -239,6 +239,7 @@ void Courtroom::on_evidence_double_clicked(int p_id)
void Courtroom::on_evidence_hover(int p_id, bool p_state)
{
ui_evidence_name->setReadOnly(true);
int final_id = p_id + max_evidence_on_page * current_evidence_page;
if (p_state)