| 23 | namespace Star { |
| 24 | |
| 25 | Chat::Chat(UniverseClientPtr client, Json const& baseConfig) : BaseScriptPane(baseConfig, false) { |
| 26 | m_client = client; |
| 27 | m_scripted = baseConfig.get("scripts", Json()).isType(Json::Type::Array); |
| 28 | m_script.setLuaRoot(m_client->luaRoot()); |
| 29 | m_script.addCallbacks("world", LuaBindings::makeWorldCallbacks((World*)m_client->worldClient().get())); |
| 30 | m_chatPrevIndex = 0; |
| 31 | m_historyOffset = 0; |
| 32 | |
| 33 | auto assets = Root::singleton().assets(); |
| 34 | auto config = baseConfig.get("config"); |
| 35 | m_timeChatLastActive = Time::monotonicMilliseconds(); |
| 36 | m_chatTextStyle = config.get("textStyle"); |
| 37 | m_chatTextStyle.lineSpacing = config.get("lineHeight").toFloat(); |
| 38 | m_chatVisTime = config.get("visTime").toFloat(); |
| 39 | m_fadeRate = config.get("fadeRate").toDouble(); |
| 40 | m_chatHistoryLimit = config.get("chatHistoryLimit").toInt(); |
| 41 | m_chatFormatString = config.getString("chatFormatString"); |
| 42 | |
| 43 | m_portraitTextOffset = jsonToVec2I(config.get("portraitTextOffset")); |
| 44 | m_portraitImageOffset = jsonToVec2I(config.get("portraitImageOffset")); |
| 45 | m_portraitScale = config.get("portraitScale").toFloat(); |
| 46 | m_portraitVerticalMargin = config.get("portraitVerticalMargin").toFloat(); |
| 47 | m_portraitBackground = config.get("portraitBackground").toString(); |
| 48 | |
| 49 | m_bodyHeight = config.get("bodyHeight").toInt(); |
| 50 | m_expandedBodyHeight = config.get("expandedBodyHeight").toInt(); |
| 51 | |
| 52 | m_colorCodes[MessageContext::Local] = config.query("colors.local").toString(); |
| 53 | m_colorCodes[MessageContext::Party] = config.query("colors.party").toString(); |
| 54 | m_colorCodes[MessageContext::Broadcast] = config.query("colors.broadcast").toString(); |
| 55 | m_colorCodes[MessageContext::Whisper] = config.query("colors.whisper").toString(); |
| 56 | m_colorCodes[MessageContext::CommandResult] = config.query("colors.commandResult").toString(); |
| 57 | m_colorCodes[MessageContext::RadioMessage] = config.query("colors.radioMessage").toString(); |
| 58 | m_colorCodes[MessageContext::World] = config.query("colors.world").toString(); |
| 59 | if (!m_scripted) { |
| 60 | m_reader->registerCallback("textBox", [=](Widget*) { startChat(); }); |
| 61 | m_reader->registerCallback("upButton", [=](Widget*) { scrollUp(); }); |
| 62 | m_reader->registerCallback("downButton", [=](Widget*) { scrollDown(); }); |
| 63 | m_reader->registerCallback("bottomButton", [=](Widget*) { scrollBottom(); }); |
| 64 | |
| 65 | m_reader->registerCallback("filterGroup", [=](Widget* widget) { |
| 66 | Json data = as<ButtonWidget>(widget)->data(); |
| 67 | auto filter = data.getArray("filter", {}); |
| 68 | m_modeFilter.clear(); |
| 69 | for (auto mode : filter) |
| 70 | m_modeFilter.insert(MessageContextModeNames.getLeft(mode.toString())); |
| 71 | m_sendMode = ChatSendModeNames.getLeft(data.getString("sendMode", "Broadcast")); |
| 72 | m_historyOffset = 0; |
| 73 | }); |
| 74 | } |
| 75 | |
| 76 | construct(baseConfig.get("gui")); |
| 77 | |
| 78 | m_sendMode = ChatSendMode::Broadcast; |
| 79 | m_chatLog = fetchChild<CanvasWidget>("chatLog"); |
| 80 | m_bottomButton = fetchChild<ButtonWidget>("bottomButton"); |
| 81 | m_upButton = fetchChild<ButtonWidget>("upButton"); |
| 82 | m_textBox = fetchChild<TextBoxWidget>("textBox"); |
nothing calls this directly
no test coverage detected