aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSalanto <62221668+Salanto@users.noreply.github.com>2022-02-21 01:56:10 +0100
committerGitHub <noreply@github.com>2022-02-20 18:56:10 -0600
commite4779f09eb880e899d3ac4f0cf12386a7a434745 (patch)
tree3bfc76b702adc4891744cb58b5ab8082ea67646e /src
parentdd53b01ffde959e808e7974cdc302f12e0ba5820 (diff)
Effects follow offset, add ini option to disable offset for effect (#663)
* 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.
Diffstat (limited to 'src')
-rw-r--r--src/courtroom.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 34a596da..bb8f9c0a 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -2404,7 +2404,7 @@ void Courtroom::display_character()
else
ui_vp_player_char->set_flipped(false);
// Move the character on the viewport according to the offsets
- set_self_offset(m_chatmessage[SELF_OFFSET]);
+ set_self_offset(m_chatmessage[SELF_OFFSET], m_chatmessage[EFFECTS]);
}
void Courtroom::display_pair_character(QString other_charid, QString other_offset)
@@ -3321,7 +3321,7 @@ void Courtroom::start_chat_ticking()
// handle expanded desk mods
switch(m_chatmessage[DESK_MOD].toInt()) {
case 4:
- set_self_offset(m_chatmessage[SELF_OFFSET]);
+ set_self_offset(m_chatmessage[SELF_OFFSET], QString("||"));
[[fallthrough]];
case 2:
set_scene("1", m_chatmessage[SIDE]);
@@ -3762,8 +3762,9 @@ void Courtroom::set_scene(QString f_desk_mod, QString f_side)
}
}
-void Courtroom::set_self_offset(QString p_list) {
+void Courtroom::set_self_offset(QString p_list, QString p_effect) {
QStringList self_offsets = p_list.split("&");
+ QStringList play_effect = p_effect.split("|");
int self_offset = self_offsets[0].toInt();
int self_offset_v;
if (self_offsets.length() <= 1)
@@ -3771,6 +3772,18 @@ void Courtroom::set_self_offset(QString p_list) {
else
self_offset_v = self_offsets[1].toInt();
ui_vp_player_char->move(ui_viewport->width() * self_offset / 100, ui_viewport->height() * self_offset_v / 100);
+
+ //If an effect is ignoring the users offset, we force it to the default position of the viewport.
+ if (ao_app->get_effect_property(play_effect[0], current_char, "ignore_offset") == "true") {
+ ui_vp_effect->move(ui_viewport->x(), ui_viewport->y());
+ return;
+ }
+
+ //Offset is not disabled, we move the effects layer to match the position of our character
+ //We need to add the viewport as an offset as effects are not bound to it.
+ int effect_x = (ui_viewport->width() * self_offset / 100) + ui_viewport->x();
+ int effect_y = (ui_viewport->height() * self_offset_v / 100) + ui_viewport->y();
+ ui_vp_effect->move(effect_x, effect_y);
}
void Courtroom::set_ip_list(QString p_list)