10#include <glm/vec4.hpp>
30 EditorMessage(std::string message, Type type)
31 : message(message), type(type) { }
33 inline glm::vec4 GetColor()
39 return { 166, 25, 46, 255 };
41 return { 255, 153, 0, 255 };
43 return { 255, 255, 255, 255 };
45 return { 4, 179, 9, 255 };
47 return { 0, 87, 184, 255 };
49 return { 0, 87, 184, 255 };
54 class WwiseBrowserWidget :
public EditorWidget
57 char m_searchBuffer[128];
58 std::set<WwiseItemPtr> m_selectedItems;
61 WwiseBrowserWidget() =
default;
62 virtual ~WwiseBrowserWidget() =
default;
64 virtual void OnImGuiRender()
override
67 WwiseSoundEngine* wwiseEngine = WwiseSoundEngine::Get();
73 ImGui::Begin(
"Wwise Browser");
76 ImGui::Text(WAAPIClient::IsConnected() ?
"Conntected to WAAPI." :
"Not Connected to WAAPI");
80 if (ImGui::Button(
"Expand All"))
84 if (ImGui::Button(
"Collapse All"))
88 ImGui::InputText(
"##", m_searchBuffer,
sizeof(m_searchBuffer) /
sizeof(
char));
90 if (ImGui::Button(
"Refresh"))
92 wwiseEngine->GetDataSource()->RefreshSource();
96 ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
97 if (ImGui::Button(
"Generate SoundBanks"))
102 if (ImGui::BeginTable(
"WwiseBrowserTreeView", 3, ImGuiTableFlags_Resizable))
104 ImGui::TableSetupColumn(
"Wwise Item");
105 ImGui::TableSetupColumn(
"State on Disk");
106 ImGui::TableSetupColumn(
"State in SoundBanks");
107 ImGui::TableHeadersRow();
109 DrawTreeView(wwiseEngine->GetDataSource()->GetItems().lock());
118 void DrawTreeView(WwiseItemPtr root)
120 for (
const auto& child : root->Children)
122 DrawItemsRecursive(child);
126 void DrawItemsRecursive(WwiseItemPtr item)
128 ImGui::TableNextRow();
129 ImGui::TableSetColumnIndex(0);
131 ImGuiTreeNodeFlags nodeFlags = ImGuiTreeNodeFlags_FramePadding | ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_OpenOnArrow;
132 if (!item->HasChildren())
134 nodeFlags |= ImGuiTreeNodeFlags_Leaf;
137 if (m_selectedItems.contains(item))
139 nodeFlags |= ImGuiTreeNodeFlags_Selected;
146 open = ImGui::TreeNodeEx((item->Name +
"##" + item->GUID).c_str(), nodeFlags);
148 if (ImGui::BeginPopupContextItem())
150 ImGui::SeparatorText(
"Playback");
151 ImGui::BeginDisabled(item->ShortID == 0 || !item->IsEvent());
152 if (ImGui::MenuItem(
"Play Event"))
154 SoundEngine::PostEvent(item->ShortID);
156 ImGui::EndDisabled();
160 if (ImGui::IsItemClicked() && !ImGui::IsItemToggledOpen())
162 if (!ImGui::IsKeyDown(ImGuiKey::ImGuiKey_LeftCtrl))
164 m_selectedItems.clear();
166 m_selectedItems.insert(item);
171 for (
const auto& child : item->Children)
173 DrawItemsRecursive(child);
179 if (!item->IsDirectory())
181 ImGui::TableSetColumnIndex(1);
182 EditorMessage msg = GetDiskStatusText(item);
183 glm::vec4 color = msg.GetColor();
184 ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(color.r, color.g, color.b, color.a));
185 ImGui::Text(
"%s", msg.message.c_str());
186 ImGui::PopStyleColor();
188 ImGui::TableSetColumnIndex(2);
189 msg = GetSoundBanksStatusText(item);
190 color = msg.GetColor();
191 ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(color.r, color.g, color.b, color.a));
192 ImGui::Text(
"%s", msg.message.c_str());
193 ImGui::PopStyleColor();
197 EditorMessage GetDiskStatusText(WwiseItemPtr item)
201 return EditorMessage(
"On Disk", EditorMessage::Type::Message);
205 return EditorMessage(
"Not on Disk", EditorMessage::Type::Warning);
209 EditorMessage GetSoundBanksStatusText(WwiseItemPtr item)
213 return EditorMessage(
"SoundBank up to date", EditorMessage::Type::Message);
217 return EditorMessage(
"Missing in SoundBank", EditorMessage::Type::Warning);