This repository has been archived by the owner on Jun 10, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
courtroom.h
505 lines (365 loc) · 12.3 KB
/
courtroom.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
//////////////////////////////////////////////////
//
// This work is licensed under the MIT license.
//
// You are free to copy, modify and distribute
// this work freely given that proper attribution
// is supplied and the author is not held liable.
// See LICENSE for details.
//
// Copyright (c) 2016-2018 David "OmniTroid" Skoland
//
//////////////////////////////////////////////////
#ifndef COURTROOM_H
#define COURTROOM_H
#include "aoimage.h"
#include "aobutton.h"
#include "aocharbutton.h"
#include "aoemotebutton.h"
#include "aopacket.h"
#include "aoscene.h"
#include "aomovie.h"
#include "aocharmovie.h"
#include "aomusicplayer.h"
#include "aosfxplayer.h"
#include "aoblipplayer.h"
#include "aoevidencebutton.h"
#include "aotextarea.h"
#include "aolineedit.h"
#include "aotextedit.h"
#include "aoevidencedisplay.h"
#include "datatypes.h"
#include <QMainWindow>
#include <QLineEdit>
#include <QPlainTextEdit>
#include <QListWidget>
#include <QCheckBox>
#include <QComboBox>
#include <QSlider>
#include <QVector>
#include <QCloseEvent>
#include <QSignalMapper>
#include <QMap>
#include <QTextBrowser>
class AOApplication;
class Courtroom : public QMainWindow
{
Q_OBJECT
public:
explicit Courtroom(AOApplication *p_ao_app);
void append_char(char_type p_char){char_list.append(p_char);}
void append_evidence(evi_type p_evi){evidence_list.append(p_evi);}
void append_music(QString f_music){music_list.append(f_music);}
//sets position of widgets based on theme ini files
void set_widgets();
//sets font size based on theme ini files
void set_font(QWidget *widget, QString p_identifier);
//helper function that calls above function on the relevant widgets
void set_fonts();
//sets the window's title
void set_window_title(QString p_title);
//reads theme inis and sets size and pos based on the identifier
void set_size_and_pos(QWidget *p_widget, QString p_identifier);
//sets status as taken on character with cid n_char and places proper shading on charselect
void set_taken(int n_char, bool p_taken);
//sets the current background to argument. also does some checks to see if it's a legacy bg
void set_background(QString p_background);
//sets the evidence list member variable to argument
void set_evidence_list(QVector<evi_type> &p_evi_list);
//called when a DONE#% from the server was received
void done_received();
//sets the local mute list based on characters available on the server
void set_mute_list();
//sets desk and bg based on pos in chatmessage
void set_scene();
//sets text color based on text color in chatmessage
void set_text_color();
//takes in serverD-formatted IP list as prints a converted version to server OOC
//misleading name
void set_ip_list(QString p_list);
//disables chat if current cid matches second argument
//enables if p_muted is false
void set_mute(bool p_muted, int p_cid);
//send a message that the player is banned and quits the server
void set_ban(int p_cid);
//implementations in path_functions.cpp
QString get_background_path();
QString get_default_background_path();
//cid = character id, returns the cid of the currently selected character
int get_cid() {return m_cid;}
//returns the char currently in use
QString get_current_char() {return current_char;}
//properly sets up some variables: resets user state
void enter_courtroom(int p_cid);
//helper function that populates ui_music_list with the contents of music_list
void list_music();
//these are for OOC chat
void append_ms_chatmessage(QString f_name, QString f_message);
void append_server_chatmessage(QString p_name, QString p_message);
//these functions handle chatmessages sequentially.
//The process itself is very convoluted and merits separate documentation
//But the general idea is objection animation->pre animation->talking->idle
void handle_chatmessage(QStringList *p_contents);
void handle_chatmessage_2();
void handle_chatmessage_3();
//adds text to the IC chatlog. p_name first as bold then p_text then a newline
void append_ic_text(QString p_text, QString p_name);
//prints who played the song to IC chat and plays said song(if found on local filesystem)
//takes in a list where the first element is the song name and the second is the char id of who played it
void handle_song(QStringList *p_contents);
//plays the preanimation of the character currently speaking
void play_preanim();
//plays the witness testimony or cross examination animation based on argument
void handle_wtce(QString p_wtce);
//sets the hp bar of defense(p_bar 1) or pro(p_bar 2)
//state is an number between 0 and 10 inclusive
void set_hp_bar(int p_bar, int p_state);
//called when CHECK#% is received from the server
void check_connection_received();
~Courtroom();
private:
AOApplication *ao_app;
int m_courtroom_width = 714;
int m_courtroom_height = 668;
int m_viewport_x = 0;
int m_viewport_y = 0;
int m_viewport_width = 256;
int m_viewport_height = 192;
QVector<char_type> char_list;
QVector<evi_type> evidence_list;
QVector<QString> music_list;
QSignalMapper *char_button_mapper;
//triggers ping_server() every 60 seconds
QTimer *keepalive_timer;
//determines how fast messages tick onto screen
QTimer *chat_tick_timer;
int chat_tick_interval = 60;
//which tick position(character in chat message) we are at
int tick_pos = 0;
//used to determine how often blips sound
int blip_pos = 0;
int blip_rate = 1;
int rainbow_counter = 0;
bool rainbow_appended = false;
bool blank_blip = false;
//delay before chat messages starts ticking
QTimer *text_delay_timer;
//delay before sfx plays
QTimer *sfx_delay_timer;
//times how long the realization flash should show
QTimer *realization_timer;
//these determine the rate of which the blinking "testimony" shows up
QTimer *testimony_show_timer;
QTimer *testimony_hide_timer;
//every time point in char.inis times this equals the final time
const int time_mod = 40;
static const int chatmessage_size = 15;
QString m_chatmessage[chatmessage_size];
bool chatmessage_is_empty = false;
QString previous_ic_message = "";
bool testimony_in_progress = false;
//in milliseconds
const int testimony_show_time = 1500;
//in milliseconds
const int testimony_hide_time = 500;
//char id, muted or not
QMap<int, bool> mute_map;
//QVector<int> muted_cids;
bool is_muted = false;
//state of animation, 0 = objecting, 1 = preanim, 2 = talking, 3 = idle
int anim_state = 3;
//state of text ticking, 0 = not yet ticking, 1 = ticking in progress, 2 = ticking done
int text_state = 2;
//character id, which index of the char_list the player is
int m_cid = -1;
//cid and this may differ in cases of ini-editing
QString current_char = "";
int objection_state = 0;
int realization_state = 0;
int text_color = 0;
bool is_presenting_evidence = false;
int defense_bar_state = 0;
int prosecution_bar_state = 0;
int current_char_page = 0;
int char_columns = 10;
int char_rows = 9;
int max_chars_on_page = 90;
int current_emote_page = 0;
int current_emote = 0;
int emote_columns = 5;
int emote_rows = 2;
int max_emotes_on_page = 10;
QVector<evi_type> local_evidence_list;
int current_evidence_page = 0;
int current_evidence = 0;
int evidence_columns = 6;
int evidence_rows = 3;
int max_evidence_on_page = 18;
//is set to true if the bg folder contains defensedesk.png, prosecutiondesk.png and stand.png
bool is_ao2_bg = false;
//whether the ooc chat is server or master chat, true is server
bool server_ooc = true;
QString current_background = "gs4";
AOMusicPlayer *music_player;
AOSfxPlayer *sfx_player;
AOSfxPlayer *objection_player;
AOBlipPlayer *blip_player;
AOSfxPlayer *modcall_player;
AOImage *ui_background;
QWidget *ui_viewport;
AOScene *ui_vp_background;
AOMovie *ui_vp_speedlines;
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;
AOImage *ui_vp_testimony;
AOImage *ui_vp_realization;
AOMovie *ui_vp_wtce;
AOMovie *ui_vp_objection;
QTextEdit *ui_ic_chatlog;
AOTextArea *ui_ms_chatlog;
AOTextArea *ui_server_chatlog;
QListWidget *ui_mute_list;
QListWidget *ui_area_list;
QListWidget *ui_music_list;
QLineEdit *ui_ic_chat_message;
QLineEdit *ui_ooc_chat_message;
QLineEdit *ui_ooc_chat_name;
//QLineEdit *ui_area_password;
QLineEdit *ui_music_search;
QWidget *ui_emotes;
QVector<AOEmoteButton*> ui_emote_list;
AOButton *ui_emote_left;
AOButton *ui_emote_right;
QComboBox *ui_emote_dropdown;
QComboBox *ui_pos_dropdown;
AOImage *ui_defense_bar;
AOImage *ui_prosecution_bar;
QLabel *ui_music_label;
QLabel *ui_sfx_label;
QLabel *ui_blip_label;
AOButton *ui_hold_it;
AOButton *ui_objection;
AOButton *ui_take_that;
AOButton *ui_ooc_toggle;
AOButton *ui_witness_testimony;
AOButton *ui_cross_examination;
AOButton *ui_change_character;
AOButton *ui_reload_theme;
AOButton *ui_call_mod;
QCheckBox *ui_pre;
QCheckBox *ui_flip;
QCheckBox *ui_guard;
AOButton *ui_custom_objection;
AOButton *ui_realization;
AOButton *ui_mute;
AOButton *ui_defense_plus;
AOButton *ui_defense_minus;
AOButton *ui_prosecution_plus;
AOButton *ui_prosecution_minus;
QComboBox *ui_text_color;
QSlider *ui_music_slider;
QSlider *ui_sfx_slider;
QSlider *ui_blip_slider;
AOImage *ui_muted;
AOButton *ui_evidence_button;
AOImage *ui_evidence;
AOLineEdit *ui_evidence_name;
QWidget *ui_evidence_buttons;
QVector<AOEvidenceButton*> ui_evidence_list;
AOButton *ui_evidence_left;
AOButton *ui_evidence_right;
AOButton *ui_evidence_present;
AOImage *ui_evidence_overlay;
AOButton *ui_evidence_delete;
AOLineEdit *ui_evidence_image_name;
AOButton *ui_evidence_image_button;
AOButton *ui_evidence_x;
AOTextEdit *ui_evidence_description;
AOImage *ui_char_select_background;
//abstract widget to hold char buttons
QWidget *ui_char_buttons;
QVector<AOCharButton*> ui_char_button_list;
AOImage *ui_selector;
AOButton *ui_back_to_lobby;
QLineEdit *ui_char_password;
AOButton *ui_char_select_left;
AOButton *ui_char_select_right;
AOButton *ui_spectator;
void construct_char_select();
void set_char_select();
void set_char_select_page();
void construct_emotes();
void set_emote_page();
void set_emote_dropdown();
void construct_evidence();
void set_evidence_page();
public slots:
void objection_done();
void preanim_done();
void realization_done();
void show_testimony();
void hide_testimony();
void mod_called(QString p_ip);
private slots:
void start_chat_ticking();
void play_sfx();
void chat_tick();
void on_mute_list_clicked(QModelIndex p_index);
void on_chat_return_pressed();
void on_ooc_return_pressed();
void on_music_search_edited(QString p_text);
void on_music_list_double_clicked(QModelIndex p_model);
void select_emote(int p_id);
void on_emote_clicked(int p_id);
void on_emote_left_clicked();
void on_emote_right_clicked();
void on_emote_dropdown_changed(int p_index);
void on_pos_dropdown_changed(int p_index);
void on_evidence_name_edited();
void on_evidence_image_name_edited();
void on_evidence_image_button_clicked();
void on_evidence_clicked(int p_id);
void on_evidence_double_clicked(int p_id);
void on_evidence_hover(int p_id, bool p_state);
void on_evidence_left_clicked();
void on_evidence_right_clicked();
void on_evidence_present_clicked();
void on_hold_it_clicked();
void on_objection_clicked();
void on_take_that_clicked();
void on_custom_objection_clicked();
void on_realization_clicked();
void on_mute_clicked();
void on_defense_minus_clicked();
void on_defense_plus_clicked();
void on_prosecution_minus_clicked();
void on_prosecution_plus_clicked();
void on_text_color_changed(int p_color);
void on_music_slider_moved(int p_value);
void on_sfx_slider_moved(int p_value);
void on_blip_slider_moved(int p_value);
void on_ooc_toggle_clicked();
void on_witness_testimony_clicked();
void on_cross_examination_clicked();
void on_change_character_clicked();
void on_reload_theme_clicked();
void on_call_mod_clicked();
void on_pre_clicked();
void on_flip_clicked();
void on_guard_clicked();
void on_evidence_button_clicked();
void on_evidence_delete_clicked();
void on_evidence_x_clicked();
void on_back_to_lobby_clicked();
void on_char_select_left_clicked();
void on_char_select_right_clicked();
void on_spectator_clicked();
void char_clicked(int n_char);
void ping_server();
};
#endif // COURTROOM_H