1+ #include " pch-il2cpp.h"
2+ #include " aum-chat.hpp"
3+ #include " imgui/imgui.h"
4+ #include " gui-helpers.hpp"
5+ #include " state.hpp"
6+ #include " logger.h"
7+
8+ namespace ChatGui
9+ {
10+ char inputBuffer[250 ]{ " " };
11+
12+ void SendChatMessage (std::string message) {
13+ if (message.length () == 0 ) return ;
14+
15+ auto gPlayerInfo = GetPlayerDataById ((*Game::pLocalPlayer)->fields .PlayerId );
16+ auto outfit = GetPlayerOutfit (gPlayerInfo );
17+ auto name = convert_from_string (GameData_PlayerOutfit_get_PlayerName (outfit, nullptr ));
18+ State.chatMessages .emplace_back (std::make_unique<RpcChatMessage>(name, message, (uint32_t )outfit->fields .ColorId , std::chrono::system_clock::now ()));
19+ if (IsInGame ()) State.rpcQueue .push (new RpcChatMessage (name, message, (uint32_t )outfit->fields .ColorId , std::chrono::system_clock::now ()));
20+ else if (IsInLobby ()) State.lobbyRpcQueue .push (new RpcChatMessage (name, message, (uint32_t )outfit->fields .ColorId , std::chrono::system_clock::now ()));
21+ State.newChatMessage = true ;
22+
23+ for (int i = 0 ; i < sizeof (inputBuffer); i++) {
24+ inputBuffer[i] = (char )0 ;
25+ }
26+ }
27+
28+ void Init () {
29+ ImGui::SetNextWindowSize (ImVec2 (520 , 320 ) * State.dpiScale , ImGuiCond_None);
30+ ImGui::SetNextWindowBgAlpha (1 .F );
31+ }
32+
33+ void Render () {
34+ ChatGui::Init ();
35+
36+ ImGui::Begin (" Chat" , &State.ShowChat , ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar);
37+ ImGui::BeginChild (" chat#scroll" , ImVec2 (511 , 270 ) * State.dpiScale , true , ImGuiWindowFlags_AlwaysVerticalScrollbar);
38+
39+ size_t i = 0 ;
40+ for (auto it = State.chatMessages .begin (); it != State.chatMessages .end (); ++it, ++i) {
41+ RpcChatMessage* cMsg = (*it).get ();
42+ if (cMsg == NULL )
43+ {
44+ STREAM_ERROR (" State.chatMessages[" << i << " ] was NULL (chatMessages.size(): " << State.chatMessages .size () << " )" );
45+ continue ;
46+ }
47+
48+ cMsg->PrintUser ();
49+ ImGui::SameLine ();
50+ cMsg->PrintMessage ();
51+ }
52+ if (State.newChatMessage ) {
53+ State.newChatMessage = false ;
54+ ImGui::SetScrollY (ImGui::GetScrollMaxY () + 50 );
55+ }
56+ ImGui::EndChild ();
57+
58+ ImGui::Separator ();
59+
60+ ImGui::Dummy (ImVec2 (1 .0f , 2 .0f ) * State.dpiScale );
61+
62+ ImGui::BeginChild (" chat#input" , ImVec2 (520 , 20 )* State.dpiScale , true );
63+
64+ if (ImGui::InputText (" " , inputBuffer, IM_ARRAYSIZE (inputBuffer), ImGuiInputTextFlags_EnterReturnsTrue)) {
65+ SendChatMessage (std::string (inputBuffer));
66+ }
67+
68+ ImGui::SameLine (340 .f * State.dpiScale );
69+
70+ if (ImGui::Button (" Send" )) {
71+ SendChatMessage (std::string (inputBuffer));
72+ }
73+
74+ ImGui::EndChild ();
75+ ImGui::End ();
76+ }
77+ }
0 commit comments