aboutsummaryrefslogtreecommitdiff
path: root/include/courtroom.h
AgeCommit message (Collapse)Author
2022-07-18Add effect layering under the character, flippable effects and more (#701)Crystalwarrior
* Fix effect offsets only applying after the effect already plays Add "_layer" property which can be "behind", "character" or default "chat". This deprecates the "under_chatbox" property * Add a "sticky" effect property which is the same as "stickyeffects" setting being enabled but just for that 1 effect * Clang is tidy, clang is caring * make character layer actually stack over the character but under the desk add new "over" layer which is over everything in the viewport but under the chat box * Switch "ignore_offset" to "respect_offset" so effects only respect character offsets if explicitly told to * Appease clang tidy... mostly. I don't understand the last thing it's talking about. * Appease clang tidy further * Remove "effect_done" due to it overwriting the AOLayers behavior Add "loop" effect property so you set up in the ini if the effect should loop rather than it using the file's loop settings Add "max_duration" effect property Add "cull" effect property which decides whether to clear the effect or not when it's done (if loop is false) * Fix effects not allowed to have underscores (_) in them without breaking * Change the way effects.ini looks and is parsed to be more sane and doable. However, since order may or may not matter, you can optionally include index:name and it orders it properly. * Appeal to clang * Fix a dumb way I created QSettings in get_effects * Fix effect properties being broken due to optional index * Fix get_effect_property not getting the current theme properties if a misc theme exists * If sound list has a sound effect selected, if pre is not checked, don't play effect sound and prefer the sfx we chose instead. * Fix \f not using the theme's realization effect * Add missing curly bracket * Yolo Co-authored-by: Salanto <62221668+Salanto@users.noreply.github.com> Co-authored-by: stonedDiscord <Tukz@gmx.de>
2022-07-16Add "chatbox_always_show" courtroom_config.ini option (#725)Crystalwarrior
* Add "chatbox_always_show" courtroom_config.ini option Remove copy-pasted code from set_widgets for initializing chatbox * make chatbox_always_show work with misc folders * Fix sticker disappearing despite chatbox_always_show setting Co-authored-by: stonedDiscord <Tukz@gmx.de>
2022-07-07Added Play SFX context menu action (#791)Leifa♥
* Added Play SFX context menu action Resolve #746 * The SFX context menu now allows the user to preview the sound selected by playing it. * Changed declarations for methods.
2022-05-21Feature: Clicking the evidence icon when it's presented by a player will ↵Rosemary Witchaven
show the details of that evidence (#760) * Add click-to-view evidence icons * Fix the clicky icon not being functional if the presented evidence comes from a different page from the first Co-authored-by: in1tiate <radwoodward@vikings.grayson.edu> Co-authored-by: Alex Noir <Varsash@gmail.com>
2022-03-29Add two ways of controlling judge buttons that aren't hardcoded nonsense ↵Rosemary Witchaven
(networked and local) (#537) * add both network and local ways to show judge buttons on pos other than jud * hide judge buttons when pos_removing to a non-judge position * alter packet header * Only use pos jud hardcoding if no design.ini if design.ini does not define judges= then we fall back to pos jud garbage * Fix judge buttons being disabled if default_side pos is judge (logic poopy) Fix positions.isEmpty() returning False cuz a split of an empty string returns the list with an empty string by default * Expand JD packet to be able to send -1, 0 and 1. If -1 is received, fall back on client-sided judge button behavior. If 0 or 1 is received, treat it as "absolute override" and adhere to that packet. * alter check for empty qstringlist to support old qt versions * heehoo * trigger client side behavior when jd -1 is sent * less confusing variable names * remove useless code, trim some fat Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> * use an enum dammit! & warn on malformed auth * use an enum dammit! pt. 2 * appease clang, rewrite ugly judge controls function * please squash this its so bad Co-authored-by: Crystalwarrior <Varsash@Gmail.com> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2022-03-19Add showname and selfname colors to courtroom_fonts.ini (#672)Crystalwarrior
Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-03-13Allow character select list to refresh even if client is already loaded in ↵Crystalwarrior
(#655) * Allow "SC" packet to be used to refresh the character list even if the client is loaded in Fix tree list of characters not being cleared properly between "SC" packets Fix client theme breaking when joining a server with empty character select list * Do my review suggestions on CW's behalf Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2022-02-20Merge pull request #660 from AttorneyOnline/fix-evidenceoldmud0
Fix evidence system, improve evidence user experience
2022-02-20Effects follow offset, add ini option to disable offset for effect (#663)Salanto
* Effects follow offset, add ini option to disable offset for effect This is pretty hacky, but the offset data is necessary to move the effect layer in relation to the character.
2022-02-19Polish up the evidence system so it's a single-click editingAlex Noir
Fix evidence editing regressions caused by #587 Fix issues with "ok" button detecting itself as "changes from the server" Fix "ok" button remaining after you press it once, allowing you to spam evidence update packets by spamclicking it
2021-12-25Merge pull request #623 from AttorneyOnline/feature/debug-logoldmud0
Remove MS chat and add debug log
2021-12-25Change master chat in courtroom to debug logoldmud0
Since the MS chat has been disabled for quite some time now (and we aren't planning on bringing it back since Discord, Guilded etc. have better chat features), I decided to go ahead and change the pane into a debug log to keep it useful and avoid creating a gaping hole in themes. Though, maybe it is worth removing the whole switcher and keeping the debug log hidden away where it can't scare people.
2021-12-24Fix animation freeze when loading music files (#609)Salanto
* Implement async music loading * Simplify music filename parsing and fix "missing" on streams Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2021-09-22Allow user to configure log timestamp format (#590)Rosemary Witchaven
* user configurable timestamp format * fix label making the entire settings window move jankily * add a dropdown for sane timestamp formats * streamline adding options to log timestamp format
2021-08-30Use event filters instead of subclassing QLineEdit and QPlainTextEdit (#587)Rosemary Witchaven
* replace aolineedit and aotextedit with event filters * use a button to make evidence editable instead of double click
2021-06-06remember past search term when switching between area and music listin1tiate
2021-04-21Fix log_chatmessage referring to the global m_chatmessage instead of the ↵Crystalwarrior
local variables that should be sent to it at the point of the func being called. (#530)
2021-03-24Remove useless code for extra ui_selector that is not usedCrystalwarrior
2021-03-22Fix chat messages being lost to the Ether if instant objection was used, or ↵Crystalwarrior
you switched an area during queue being parsed. (Your IC logs will be caught up to speed instead)
2021-03-20Add timer packets to demo playback (#494)Crystalwarrior
When the demo skips by some number of seconds, the timer will also skip forward by that duration. Co-authored-by: in1tiate <32779090+in1tiate@users.noreply.github.com> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2021-03-15Deprecate hardcoded string-based authentication, add AUTH packet (#489)in1tiate
Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2021-02-24Make "stop music on objection" work in tandem with the server by calling ↵Crystalwarrior
"music_stop()" instead of only working on the client-side
2021-02-21Remove background-color stylesheet from the set_qfont (allowing stylesheets ↵Crystalwarrior
to properly initialize custom backgrounds for labels w/ transparent ones) rename "set_dropdown_ to "set_stylesheet" cuz that's what it is
2021-02-19Overhaul pos dropdown and pos remove system to work well with custom pos, ↵Crystalwarrior
char pos etc. Remove accidental duplicate code Fix some genius using & instead of && (SMH) Block pos_dropdown signals better
2021-02-17Adopt better method for setting custom pos using the pos dropdownCrystalwarrior
Make it actually work properly
2021-02-17Revert bad "fix" of the sound names for WTCE courtroom_sounds.iniCrystalwarrior
Make pos dropdown ui editable for a custom pos Keep track of the custom pos index On switching from the custom pos, remove the entry at that index Fix regression causing the "sort by name" lobby server list header disappearing Expose column 0 for the # in the lobby server list header ("too ugly" just use lobby_stylesheets.css and pretty it up)
2021-02-16Patch a segfault by play_frame_effect being wackyCrystalwarrior
Split behavior for courtroom resizing into its own function Use that function to optimize character changing screen Fix reload theme breaking the background positioning Fix changing character breaking the background positioning Fix excessive set_widgets() calls that caused unnecessary lag Fix unnecessary set_size_and_pos calls that didn't need to be there Only call size_and_pos on the chatbox in the initialize_chatbox func Remove checks for a boolean that will always be true Simplify two functions that copy-paste code called set_size_and_pos into a single one Fix "disable custom chat" setting not being used when setting chat sizes and pos
2021-02-13Animated Themes. Subthemes. Custom default_theme. Overhaul asset paths. Fix ↵Crystalwarrior
a ton of asset resolution bugs. (#466) * Remove get_static_image_suffix (webp, gif etc. can be non-animated) Replace QList<QString> with QStringList * forgot to remove static image from aoimage * Simplify get_theme_path, get_custom_theme_path and get_default_theme_path all into a single get_theme_path func Add a default_theme variable which defines the currently recognized default theme Add a new "get_asset_path" that will be used to simplify asset resolution considerably * Simplify AOImage set_image function to use get_asset_path Begin working on the subtheme system * Add p_default_theme for get_asset_path Implement get_asset_path for AOButton * Condense aolayer path lookups into the get_asset_path function * Get rid of get_font_name due to underuse (and it just does the same thing as get_design_element anyway) Get rid of get_char_shouts (use chat= instead) Use get_subtheme() instead of subtheme (because get_subtheme() can perform overrides based on the user's settings) Make get_color() use get_asset_path() Make get_design_element() use get_asset_path() * Adapt a whole bunch of text_file_functions to the get_asset_path method, fixing an enormous amount of invalid path resolutions Unfortunately I have to keep backwards compatibility for the backwards ass config.ini method for the chat markup (new way is chat_config.ini) Get rid of get_theme_effects and implement the stacking behavior into get_effects instead * Program doesn't run, color lists stop generating for some reason Also implement safety checks for the asset path generator * Fix a really tricky issue that popped up regarding char_color_rgb_list not being generated, causing segfaults * Address the sfx player path resolution being really, really stupid and resolve major inconsistencies (such as the bug where objection sfx wouldn't be playing despite the default theme or default misc folder having them) * Fix sfx path resolution being funky (apparently D:/Qt/Projects/AO2-Client/bin/base/themes/default//objection.wav is a valid qt5 path...) * Implement: get_asset_paths - Return an untested list of universal paths from the provided args get_asset_path - Loop through the list of provided asset paths and return the first valid file get_image_path - Loop through the list of provided asset paths, apply get_image_suffix and return the first valid image file get_sfx_path - Loop through the list of provided asset paths, apply get_sfx_suffix and return the first valid sound file get_asset - return an asset (must contain file extension) from the get_asset_path() applied on the get_asset_paths() get_image - return an image with get_image_suffix() applied on the get_image_path() for the get_asset_paths() get_sfx - return a sfx from provided args with the uniquely constructed asset path list for sounds Rename old get_sfx to get_court_sfx for better clarity of its function This replaces previous asset stuff I implemented, as I think this is a better solution lol * Add a new get_config_value that obtains a value from the config that matches identifier Adjust all calls to get_asset() to actually look for a config identifier value instead, so even if a config.ini is found if it doesn't contain the identifier we want we keep looking * Fix effects.ini sounds not working Remove debug text * Make it so even if you miss the required asset, and don't have a missingno, the viewport still doesn't freeze up due to waiting on Objections etc. due to signals. * Implement default_theme option for courtroom_design.ini, allowing you to make themes that inherit from other themes that are not default. * move sounds folder lower in sfx pathlist * fix realization sfx not being fetched from config * Make aosfxplayer actually use get_sfx I made Move sounds folder path check last in get_sfx * I thought this would fix QSettings::value: Empty key passed but I guess not, that annoying error will keep pestering us :((( * Remove silly .png exception for SplashLayer Fix static image Objections freezing the viewport due to done(); signal that never arrives * Make WTCE cooler by including a stop method for witness testimony indicator, and add support for custom WTCE * Reduce code duplication for get_sfx * Fix the program hanging/entering an infinite loop/segfaults/a number of nasty issues due to done(); signal being sent as soon as playback begins if the image is invalid. This is done by removing the file_exists check, and letting the rest of the functionality handle this case - the system is robust enough and treats an invalid image as a static image. * Fix segfaults with AOLayers by sanity checking using max_frames Fix "Pixmap is null" console spam * You'll hate me for this. Make it possible to have fully animated AOButton and AOImage * Add a settings option to toggle animated themes on or off * Add a setting for animated theme elements Add a "static image" toggle for get_image_suffix * Fix custom chat and generally the chat boxes not having consistent behaivor with subthemes Add a settings option for subthemes Have AOImage keep track of its last valid path * Add SubTheme (ST) packet. Pass subtheme as arg0, and "1" if you want the client's theme to be reloaded. ST packet sets ao_app->subtheme no matter what. It will not reload theme unless the user has their subtheme set to "server". Fix showname widths by rearranging font metrics to do its calculations *after* the showname font is set, and not before (making it lag behind the correct display size by 1 msg) Co-authored-by: in1tiate <radwoodward@vikings.grayson.edu>
2021-02-11Update the Settings screen - reload theme, restore defaults (#463)Crystalwarrior
* Add a Reload Theme button to the settings screen (works with both lobby and courtroom) * Move all value updates on elements to "update_values" func in the settings screen Add a "restore to defaults" option that allows you to restore all the configuration to its default values. Set up a .temp settings file that allows you to undo the effects of restoring default options. * wtf why didn't this error
2021-02-09make instant text instant againCrystalwarrior
2021-01-29Fix music_display not stretching properly, reconsolidate ForegroundLayer ↵in1tiate
into InterjectionLayer, rename InterjectionLayer to SplashLayer (#436) * more intelligent separation * separation 2 electric boogaloo * rename InterjectionLayer to SplashLayer * remove redundant layer type * comments and cleanup * fix incorrect use of continuous * remove nonfunctional check * fix additive not coloring correctly Co-authored-by: Crystalwarrior <varsash@gmail.com>
2021-01-28Improvements to the way the position dropdown is handled (#428)in1tiate
* it works * woops * oops 2 electric boogaloo * fix "SP" packet not working properly
2021-01-27Refactor "text scrawl" to "text crawl" (sounds more simple to understand ↵Crystalwarrior
than scrawl tbh)
2021-01-27Add the setting for the text scrawlCrystalwarrior
2021-01-27Redesign the text display speed delay to be more modular by introducing a ↵Crystalwarrior
"base display speed" variable
2021-01-22Allow effects to decide whether they go over or under the chatbox (#424)in1tiate
Also re-adds pair ordering following viewport refactor.
2021-01-19Merge branch 'master' into feature/timerclockCrystalwarrior
# Conflicts: # include/courtroom.h
2021-01-19Implement sticker logic with animated image support (#414)Crystalwarrior
* Implement sticker logic with animated image support (will probably be remade in a much better way for AOLayers) * port to aolayer Co-authored-by: in1tiate <radwoodward@vikings.grayson.edu>
2021-01-19Consolidate AOScene, AOMovie, and AOCharMovie into one class, add support ↵in1tiate
for (c) animations, implement emote continuity, add scaling overrides to all layer types, allow for stretch-to-fill images, allow for additional effect configuration (#302) * Rewrite AOScene and remove the need for AOMovie and AOCharMovie by consolidation * Rename AOScene to AOLayer, apply suggestions to improve functionality * Implement suggested change to allocation * Switch from pointer to field, fix ui_vp_player_char not resetting play_once * Use the variable gif_name instead of the string "gif_name" Oops. * Total rewrite of AOLayer (again) * Add support for (c) animations, do some housekeeping * allow themes to override misc chatboxes * add support for pulling InterfaceLayer elements from theme/misc * mistakes were made * move all frame fx functionality to CharLayer subclass * virtual functions are cool mkay * remove evidence of my incompetence * allow themes to override font design inis under theme/misc * Proper support for theme/misc chatbox, fixes * Fix chatbox dimensions not updating and inline color causing missingnos * rename chat markdown to chat markup * add missing misc overrides * quick hotfix for chatblank and misc overrides * Fix oversight with backgrounds causing them to be culled * Same as last commit but for FG layer * amend comment to explain impossible shenanigans * Adjust ForegroundLayer to take charname rather than miscname, allow for checking in char folder * fix an incredibly embarrassing pathing bug * add scaling overrides for all layer types, parent orphaned viewport elements to the viewport * stupid fix because themes use "custom.png" as a button * switch to .append() * Revert "Merge branch 'aoscene_rewrite' of https://github.com/AttorneyOnline/AO2-Client into aoscene_rewrite" This reverts commit bdeb1bff7639d522031aab3c133a83b0e2a291df, reversing changes made to 125ee63b97a6f6c156e69525d88fddc625e7a978. * switch to .append() (again) * move function call to fix showname length calculation error * fix nonlooping character animations being broken Again * unparent elements from the viewport and do fancy masking arithmetic instead * use override keyword * move scaling override to char.ini, allow stretching, restructure effect property loading * fix some redundancy * unparent chat_arrow from chatbox to prevent accidental masking * at no point do we want a frozen gif to display * overhaul how wtce is handled * oops * also let sounds be pulled from theme miscs * i should probably compile before i push * actually make it work * don't check a default bg * readd 1x1 stretch thing * actually the 1x1 thing was a bad idea * Add missing parenthesis * Use load_image instead of play play is a nonexistent method now * Remote shout_message and usages because it does nothing * Remove multiple redefinitions * Add in missing brackets and indent to fix build I have know idea what this does but it brings fear * fix build error * fix chat arrow and remove duped code * remove more duped code and fix misc themes * only update chat_arrow when needed * consolidate log_chatmessage and display_log_chatmessage Co-authored-by: scatterflower <marisaposs@gameboyprinter.moe> Co-authored-by: Skye Deving <76892045+skyedeving@users.noreply.github.com> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2021-01-18Add a new "char_list" QTreeWidget that allows for categorizing characters (#399)in1tiate
* initial commit * use a "category" value instead * add filtering and taken indicator * hide serverlist header * set the items to disabled in place of the [X] text Co-authored-by: stonedDiscord <10584181+stonedDiscord@users.noreply.github.com>
2021-01-18Merge pull request #400 from AttorneyOnline/bugfix/blanklogsoldmud0
Fix blankposts not showing up in logs
2021-01-18Simplify the logic behind last message = blankpost detectionCrystalwarrior
I need to stop overcomplicating things.
2021-01-18Attempt a theoretically safer method of tracking last displayed messageCrystalwarrior
2021-01-13Overhaul sound lists to introduce aliases, rethink editing behavior (#389)Crystalwarrior
* Resolve https://github.com/AttorneyOnline/AO2-Client/issues/275 by adding a "Nothing" option to play no SFX even when playing a preanimation that behaves similar to the Default option * Overhaul sound list: * Allow aliases. .ini file syntax is "filename = alias". * Do not allow editing the .ini files from the client anymore. * The sound list dropdown is still editable, but all it does is play your custom sfx without adding it to any files. * Overhaul get_char_sfx * Fix aliases not working properly with a rather tricky solution * save character soundlist in base and drop the character_ from the filename Co-authored-by: stonedDiscord <10584181+stonedDiscord@users.noreply.github.com>
2021-01-12Make sure blankposts are properly displayed unless repeats, playing nice ↵Crystalwarrior
with view desync
2021-01-12Didn't notice I removed this from the mergening when I resolved merge ↵Crystalwarrior
conflicts, oops
2021-01-12Merge branch 'master' into feature/timerclockCrystalwarrior
# Conflicts: # include/courtroom.h
2021-01-12Desynchronize viewport from the IC chat log so that users have a smooth ↵Crystalwarrior
viewing experience as an option (#385) * Begin trying to understand handle_chatmessage monstrosity Rearrange some functionality to be more consistent with what the particular handle_chatmessage is *supposed* to be responsible for Single responsibility principle doesn't apply not just to script files but even functions in this goddamned program apparently. * Fix some oversights relating to "has presented evidence" logs * Fix an edge case crash with negative evidence, idk why this didn't happen before. * Completely refactor handle_chatmessage hell and split it up into single-responsibility-principle functions like a sane and organized coder would. This will break any PRs that touch handle_chatmessage and will have to conform to the new standard, but it's very good in the long run. Functions have also been meticulously commentated to make sure that everyone can understand at a glance what everything does. This refactor is done to pave way for smooth viewport, making characters no longer randomly interrupt each other when speaking. * Rename confusingly named "handle_chatbox" to "handle_ic_speaking" Add a new function "handle_callwords" * Parse blankposts in the packet unpacking phase log_chatmessage is now an argument-based funciton instead of using m_chatmessage monstrosity Commentate the heck out of log_chatmessage Fix showname displaying logic being bonkers for log entries Fix -1 char_id most likely crashing client, even tho they're supposed to be system messages Fix [CHARID] being referenced instead of [OTHER_CHARID] in the pair display func Fix chat message color being used for "has played a song" even though it shouldn't * Move setting emote_mod from the objection thing to the packet unpacking thing handle_emote_mod has become argumented * Make display_pair_character take in only vars it needs * Add functionality for message stacks (does not handle logging separately yet) Currently segfaults at line 1823 if stacking behavior actually occurs. Plz help I'm poopie brain at this * Make sense of pointers and dereference some pointers to prevent wacky errors Replace _stack with _queue, and turn it into a QQueue * Implement a minimum text delay queue timer so that each msg must stay on screen for a specified amount of time Chat_arrow only shows up when the minimum text delay has expired Check if target is muted in the enqueueing, as well as the validity of the character id, so we don't even bother adding it to the queue Add a settings option to set text stay time (minimum amount of time to pass before displaying the next message). TODO: Handle queued interjections in a cooler way * Adjust default option for stay_time to be 200ms Make the stay_time setting of 0 disable the queue system entirely * Make interjections force-clear the message queue Use interjections to instantly process those messages - objections are usually extremely important and must have everyone's immediate attention. TODO: Add a settings option for interjection behavior * Clear message queue when bg display packet is received * Add an instant objection setting which, when enabled, will interrupt and skip the message queue on objections (effectively bypassing text_delay system) * Stop using AOPacket for the queue and use QStringList instead (packet contents, we don't care for the header) Implement objection threshold which works in a queue if instant objections are disabled (not exposed to the settings yet) Modify packet contents directly instead of waiting for m_chatmessage shenanigans (we should deprecate this soon) Rename isinstant_objection_enabled options check to be more consistent * Make it so objections display as soon as the message is over if instant_objection is disabled * Remove emote_mod = "1" thing that had no real purpose Implement desynchronized logs settings option, which is false by default, meaning users' messages and display IC logs are going to be in sync. Split up display and logging behavior, meaning IC logs will be saved with accurate timings on the .logs file, while display can be slower. Remove dumb "System" showname thing cuz it was dumb * Bring back minimum packet size safety check * Make sure shouts are properly logged. I am very sorry for this horrible amount of code duplication though. * fix compile errors * fix html parsing error * Rearrange the order of logging so IC messages go like this: * shouts go first * evidence goes second * chat message goes last * Fix No Interrupt coming back, go away you foolish beast * fix borked options dialog * Crank down "press enter delay" from 600ms to 200ms so it's not as harsh Co-authored-by: in1tiate <radwoodward@vikings.grayson.edu> Co-authored-by: oldmud0 <oldmud0@users.noreply.github.com>
2021-01-11Add "id" variable to the clock functions and properly parse the IDCrystalwarrior
Implement scalable maximum clock count, right now it's at 5 clocks a theme can have max Theme "clock_" starts from 1 instead of 0 since users don't know when stuff starts at index 0 TODO: testing lol
2021-01-10Trivial comment changeoldmud0