highly experimental and complex preanim algorithm testing in progress
This commit is contained in:
		
							parent
							
								
									d328838288
								
							
						
					
					
						commit
						00e491bb26
					
				@ -37,11 +37,10 @@ void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix)
 | 
			
		||||
    gif_path = placeholder_default_path;
 | 
			
		||||
 | 
			
		||||
  m_movie->stop();
 | 
			
		||||
  this->clear();
 | 
			
		||||
 | 
			
		||||
  qDebug() << "gif_path: " << gif_path;
 | 
			
		||||
  m_movie->setFileName(gif_path);
 | 
			
		||||
 | 
			
		||||
  qDebug() << "framecount: " << m_movie->frameCount();
 | 
			
		||||
 | 
			
		||||
  if (m_flipped)
 | 
			
		||||
  {
 | 
			
		||||
    QImageReader *reader = new QImageReader(gif_path);
 | 
			
		||||
@ -67,26 +66,61 @@ void AOCharMovie::play(QString p_char, QString p_emote, QString emote_prefix)
 | 
			
		||||
 | 
			
		||||
void AOCharMovie::play_pre(QString p_char, QString p_emote, int duration)
 | 
			
		||||
{
 | 
			
		||||
  if (duration == 0)
 | 
			
		||||
    play_once = true;
 | 
			
		||||
  QString gif_path = ao_app->get_character_path(p_char) + p_emote.toLower();
 | 
			
		||||
 | 
			
		||||
  else
 | 
			
		||||
  m_movie->stop();
 | 
			
		||||
  this->clear();
 | 
			
		||||
  m_movie->setFileName(gif_path);
 | 
			
		||||
 | 
			
		||||
  int real_duration = 0;
 | 
			
		||||
 | 
			
		||||
  play_once = false;
 | 
			
		||||
 | 
			
		||||
  for (int n_frame = 0 ; n_frame < m_movie->frameCount() ; ++n_frame)
 | 
			
		||||
  {
 | 
			
		||||
    play_once = false;
 | 
			
		||||
    preanim_timer->start(duration);
 | 
			
		||||
 | 
			
		||||
    real_duration += m_movie->nextFrameDelay();
 | 
			
		||||
    m_movie->jumpToFrame(n_frame);
 | 
			
		||||
  }
 | 
			
		||||
  qDebug() << "real_duration: " << real_duration;
 | 
			
		||||
  qDebug() << "duration: " << duration;
 | 
			
		||||
 | 
			
		||||
  double percentage_modifier = 100.0;
 | 
			
		||||
 | 
			
		||||
  if (real_duration != 0 && duration != 0)
 | 
			
		||||
  {
 | 
			
		||||
    percentage_modifier = (duration / static_cast<double>(real_duration)) * 100.0;
 | 
			
		||||
  }
 | 
			
		||||
  qDebug() << "% mod: " << percentage_modifier;
 | 
			
		||||
  play_once = true;
 | 
			
		||||
  //m_movie->jumpToFrame(m_movie->frameCount() - 1);
 | 
			
		||||
  m_movie->setSpeed(static_cast<int>(percentage_modifier));
 | 
			
		||||
  play(p_char, p_emote, "");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOCharMovie::play_talking(QString p_char, QString p_emote)
 | 
			
		||||
{
 | 
			
		||||
  QString gif_path = ao_app->get_character_path(p_char) + "(b)" + p_emote.toLower();
 | 
			
		||||
 | 
			
		||||
  m_movie->stop();
 | 
			
		||||
  this->clear();
 | 
			
		||||
  m_movie->setFileName(gif_path);
 | 
			
		||||
 | 
			
		||||
  play_once = false;
 | 
			
		||||
  m_movie->setSpeed(100);
 | 
			
		||||
  play(p_char, p_emote, "(b)");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOCharMovie::play_idle(QString p_char, QString p_emote)
 | 
			
		||||
{
 | 
			
		||||
  QString gif_path = ao_app->get_character_path(p_char) + "(a)" + p_emote.toLower();
 | 
			
		||||
 | 
			
		||||
  m_movie->stop();
 | 
			
		||||
  this->clear();
 | 
			
		||||
  m_movie->setFileName(gif_path);
 | 
			
		||||
 | 
			
		||||
  play_once = false;
 | 
			
		||||
  m_movie->setSpeed(100);
 | 
			
		||||
  play(p_char, p_emote, "(a)");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -112,11 +146,12 @@ void AOCharMovie::frame_change(int n_frame)
 | 
			
		||||
  if (m_movie->frameCount() - 1 == n_frame && play_once)
 | 
			
		||||
  {
 | 
			
		||||
    preanim_timer->start(m_movie->nextFrameDelay());
 | 
			
		||||
    done();
 | 
			
		||||
    //done();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOCharMovie::timer_done()
 | 
			
		||||
{
 | 
			
		||||
  qDebug() << "timer done called";
 | 
			
		||||
  done();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -343,7 +343,6 @@ void Courtroom::set_widgets()
 | 
			
		||||
  m_courtroom_height = f_courtroom.height;
 | 
			
		||||
 | 
			
		||||
  this->resize(m_courtroom_width, m_courtroom_height);
 | 
			
		||||
  this->setFixedSize(m_courtroom_width, m_courtroom_height);
 | 
			
		||||
 | 
			
		||||
  ui_background->move(0, 0);
 | 
			
		||||
  ui_background->resize(m_courtroom_width, m_courtroom_height);
 | 
			
		||||
@ -648,7 +647,6 @@ void Courtroom::set_char_select()
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  this->resize(f_charselect.width, f_charselect.height);
 | 
			
		||||
  this->setFixedSize(f_charselect.width, f_charselect.height);
 | 
			
		||||
 | 
			
		||||
  ui_char_select_background->resize(f_charselect.width, f_charselect.height);
 | 
			
		||||
 | 
			
		||||
@ -1205,13 +1203,14 @@ void Courtroom::play_preanim()
 | 
			
		||||
  QString f_preanim = m_chatmessage[PRE_EMOTE];
 | 
			
		||||
 | 
			
		||||
  //all time values in char.inis are multiplied by a constant(time_mod) to get the actual time
 | 
			
		||||
  int preanim_duration = ao_app->get_ao2_preanim_duration(f_char, f_preanim) * time_mod;
 | 
			
		||||
  int preanim_duration = ao_app->get_preanim_duration(f_char, f_preanim) * time_mod;
 | 
			
		||||
  int text_delay = ao_app->get_text_delay(f_char, f_preanim) * time_mod;
 | 
			
		||||
  int sfx_delay = m_chatmessage[SFX_DELAY].toInt() * time_mod;
 | 
			
		||||
 | 
			
		||||
  sfx_delay_timer->start(sfx_delay);
 | 
			
		||||
 | 
			
		||||
  if (!file_exists(ao_app->get_character_path(f_char) + f_preanim.toLower() + ".gif"))
 | 
			
		||||
  if (!file_exists(ao_app->get_character_path(f_char) + f_preanim.toLower() + ".gif") ||
 | 
			
		||||
      preanim_duration < 0)
 | 
			
		||||
  {
 | 
			
		||||
    anim_state = 1;
 | 
			
		||||
    preanim_done();
 | 
			
		||||
 | 
			
		||||
@ -108,13 +108,19 @@ void Courtroom::on_emote_clicked(int p_id)
 | 
			
		||||
  if (current_emote >= min && current_emote <= max)
 | 
			
		||||
    ui_emote_list.at(current_emote % max_emotes_on_page)->set_image(current_char, current_emote, "_off.png");
 | 
			
		||||
 | 
			
		||||
  int old_emote = current_emote;
 | 
			
		||||
 | 
			
		||||
  current_emote = p_id + max_emotes_on_page * current_emote_page;
 | 
			
		||||
 | 
			
		||||
  ui_emote_list.at(current_emote % max_emotes_on_page)->set_image(current_char, current_emote, "_on.png");
 | 
			
		||||
 | 
			
		||||
  int emote_mod = ao_app->get_emote_mod(current_char, current_emote);
 | 
			
		||||
 | 
			
		||||
  if (emote_mod == 1)
 | 
			
		||||
  if (old_emote == current_emote)
 | 
			
		||||
  {
 | 
			
		||||
    ui_pre->setChecked(!ui_pre->isChecked());
 | 
			
		||||
  }
 | 
			
		||||
  else if (emote_mod == 1)
 | 
			
		||||
    ui_pre->setChecked(true);
 | 
			
		||||
  else
 | 
			
		||||
    ui_pre->setChecked(false);
 | 
			
		||||
 | 
			
		||||
@ -233,7 +233,7 @@ QString AOApplication::get_chat(QString p_char)
 | 
			
		||||
  QString f_result = read_char_ini(p_char, "chat", "[Options]", "[Time]");
 | 
			
		||||
 | 
			
		||||
  //handling the correct order of chat is a bit complicated, we let the caller do it
 | 
			
		||||
  return f_result;
 | 
			
		||||
  return f_result.toLower();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
 | 
			
		||||
@ -241,7 +241,7 @@ int AOApplication::get_preanim_duration(QString p_char, QString p_emote)
 | 
			
		||||
  QString f_result = read_char_ini(p_char, p_emote, "[Time]", "[Emotions]");
 | 
			
		||||
 | 
			
		||||
  if (f_result == "")
 | 
			
		||||
    return 0;
 | 
			
		||||
    return -1;
 | 
			
		||||
  else return f_result.toInt();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -250,7 +250,7 @@ int AOApplication::get_ao2_preanim_duration(QString p_char, QString p_emote)
 | 
			
		||||
  QString f_result = read_char_ini(p_char, "%" + p_emote, "[Time]", "[Emotions]");
 | 
			
		||||
 | 
			
		||||
  if (f_result == "")
 | 
			
		||||
    return 0;
 | 
			
		||||
    return -1;
 | 
			
		||||
  else return f_result.toInt();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user