00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "Dialog.h"
00010
00011 #include "Log.h"
00012 #include "SoundAgent.h"
00013 #include "ResSoundPack.h"
00014 #include "Path.h"
00015 #include "minmax.h"
00016
00017 const std::string Dialog::DEFAULT_LANG = "en";
00018
00019
00020
00021
00022
00023 Dialog::Dialog(const std::string &lang,
00024 const std::string &soundfile, const std::string &subtitle)
00025 : m_soundfile(soundfile), m_lang(lang), m_subtitle(subtitle)
00026 {
00027 m_sound = NULL;
00028 }
00029
00030 Dialog::~Dialog()
00031 {
00032 if (m_sound) {
00033 Mix_FreeChunk(m_sound);
00034 }
00035 }
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 int
00046 Dialog::talk(int volume, int loops) const
00047 {
00048 if (NULL == m_sound && !m_soundfile.empty()) {
00049 Path soundPath = Path::dataReadPath(m_soundfile);
00050 m_sound = ResSoundPack::loadSound(soundPath);
00051 }
00052
00053 int channel = SoundAgent::agent()->playSound(m_sound, volume, loops);
00054 return channel;
00055 }
00056
00057
00058
00059
00060 void
00061 Dialog::runSubtitle(const StringTool::t_args &args) const
00062 {
00063 LOG_INFO(ExInfo("subtitle")
00064 .addInfo("content", getFormatedSubtitle(args)));
00065 }
00066
00067
00068
00069
00070
00071 std::string
00072 Dialog::getFormatedSubtitle(const StringTool::t_args &args) const
00073 {
00074 std::string buffer = m_subtitle;
00075 for (unsigned int i = 1; i < args.size(); ++i) {
00076 StringTool::replace(buffer,
00077 "%" + StringTool::toString(i), args[i]);
00078 }
00079 return buffer;
00080 }
00081
00082
00083
00084
00085
00086 int
00087 Dialog::getMinTime() const
00088 {
00089 return min(180, m_subtitle.size());
00090 }
00091
00092