Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .github/workflows/CI-Dedicated-Server.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,17 @@ jobs:
submodules: recursive

- name: Install dependencies
run: sudo apt update && sudo apt install -y libsdl2-dev
run: |
sudo apt update
sudo apt install -y \
build-essential \
mesa-utils \
libsdl2-dev \
autoconf \
automake \
autoconf-archive \
libtool \
python3-jinja2

- name: Build
uses: ashutoshvarma/action-cmake-build@master
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/CI-Game.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,17 @@ jobs:
submodules: recursive

- name: Install dependencies
run: sudo apt update && sudo apt install -y libsdl2-dev
run: |
sudo apt update
sudo apt install -y \
build-essential \
mesa-utils \
libsdl2-dev \
autoconf \
automake \
autoconf-archive \
libtool \
python3-jinja2

- name: Build
uses: ashutoshvarma/action-cmake-build@master
Expand Down
2 changes: 1 addition & 1 deletion game/content-hash.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
master-8c32ce3998a72bac6a3ccd7097ce3958af7524b6
master-ce858bc87812b4d7b5e905da455f2cd80d5249db
2 changes: 2 additions & 0 deletions game/game_libs/ui_new/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ set(SOURCES_UI
src/menus/PauseMenu.cpp
src/menus/ServerConnectionScreen.h
src/menus/ServerConnectionScreen.cpp
src/menus/StyleGuide.h
src/menus/StyleGuide.cpp
src/models/CreateMultiplayerGamePageModel.h
src/models/CreateMultiplayerGamePageModel.cpp
src/models/CvarModel.h
Expand Down
124 changes: 103 additions & 21 deletions game/game_libs/ui_new/src/framework/MenuDirectory.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "framework/MenuDirectory.h"
#include "framework/BaseMenu.h"
#include <RmlUi/Core/Context.h>
#include <RmlUi/Core/ElementDocument.h>
#include "UIDebug.h"

#include "menus/MainMenu.h"
Expand All @@ -9,13 +10,22 @@
#include "menus/CreditsMenu.h"
#include "menus/ServerConnectionScreen.h"
#include "menus/CreateMultiplayerGameMenu.h"
#include "menus/StyleGuide.h"
#include "menus/options/KeysOptionsMenu.h"
#include "menus/options/MouseOptionsMenu.h"
#include "menus/options/AvOptionsMenu.h"
#include "menus/options/GameplayOptionsMenu.h"

void MenuDirectory::Populate()
{
ASSERT(!m_Context);

// We cannot already be set up.
if ( m_Context )
{
return;
}

m_MenuMap.clear();

AddToMap<MainMenu>();
Expand All @@ -28,25 +38,41 @@ void MenuDirectory::Populate()
AddToMap<GameplayOptionsMenu>();
AddToMap<PauseMenu>();
AddToMap<CreateMultiplayerGameMenu>();
AddToMap<StyleGuide>();
}

void MenuDirectory::Clear()
void MenuDirectory::AcquireContext(Rml::Context* context)
{
m_MenuMap.clear();
}
ReleaseContext();

m_Context = context;

if ( !m_Context )
{
ASSERT(false);
return;
}

void MenuDirectory::LoadAllMenus(Rml::Context& context)
{
// Do two passes, one for each operation, to make the logic clear.
for ( MenuMap::iterator it = m_MenuMap.begin(); it != m_MenuMap.end(); ++it )
{
SetUpDataBindings(it->second, context);
SetUpDataBindings(it->second);
}

for ( MenuMap::iterator it = m_MenuMap.begin(); it != m_MenuMap.end(); ++it )
{
LoadMenuRml(it->second, context);
LoadMenuRml(it->second);
}
}

void MenuDirectory::ReleaseContext()
{
if ( !m_Context )
{
return;
}

UnloadAllMenus();
m_Context = nullptr;
}

const MenuDirectoryEntry* MenuDirectory::GetMenuEntry(const Rml::String& name) const
Expand All @@ -55,16 +81,50 @@ const MenuDirectoryEntry* MenuDirectory::GetMenuEntry(const Rml::String& name) c
return it != m_MenuMap.end() ? &it->second.menuEntry : nullptr;
}

void MenuDirectory::ReloadMenu(const Rml::String& name, bool reloadModel)
{
ASSERT(m_Context);

if ( !m_Context )
{
return;
}

MenuMap::iterator it = m_MenuMap.find(name);

if ( it == m_MenuMap.end() )
{
return;
}

MapEntry& entry = it->second;
const bool wasVisible = entry.menuEntry.document && entry.menuEntry.document->IsVisible();

UnloadMenu(entry, reloadModel);

if ( reloadModel )
{
SetUpDataBindings(entry);
}

LoadMenuRml(entry);

if ( wasVisible && entry.menuEntry.document )
{
entry.menuEntry.document->Show();
}
}

void MenuDirectory::AddToMap(BaseMenu* newMenu)
{
m_MenuMap.insert({Rml::String(newMenu->Name()), MapEntry {MenuDirectoryEntry(std::unique_ptr<BaseMenu>(newMenu))}});
}

void MenuDirectory::SetUpDataBindings(MapEntry& entry, Rml::Context& context)
void MenuDirectory::SetUpDataBindings(MapEntry& entry)
{
Rml::String dataModelName = entry.menuEntry.menuPtr->Name() + Rml::String("_model");
ASSERT(m_Context);

Rml::DataModelConstructor constructor = context.CreateDataModel(dataModelName);
Rml::DataModelConstructor constructor = m_Context->CreateDataModel(entry.menuEntry.dataModelName);
bool success = false;

if ( constructor )
Expand All @@ -87,18 +147,18 @@ void MenuDirectory::SetUpDataBindings(MapEntry& entry, Rml::Context& context)
Rml::Log::Message(
Rml::Log::Type::LT_ERROR,
"Failed to construct data model \"%s\" for menu %s",
dataModelName.c_str(),
entry.menuEntry.dataModelName.c_str(),
entry.menuEntry.menuPtr->Name()
);
}

if ( !success )
{
context.RemoveDataModel(dataModelName);
m_Context->RemoveDataModel(entry.menuEntry.dataModelName);
}
}

void MenuDirectory::LoadMenuRml(MapEntry& entry, Rml::Context& context)
void MenuDirectory::LoadMenuRml(MapEntry& entry)
{
static const char* FALLBACK_RML =
"<rml>\n"
Expand All @@ -119,8 +179,10 @@ void MenuDirectory::LoadMenuRml(MapEntry& entry, Rml::Context& context)
"</body>\n"
"</rml>\n";

ASSERT(m_Context);

entry.loadedDocument = false;
entry.menuEntry.document = context.LoadDocument(entry.menuEntry.menuPtr->RmlFilePath());
entry.menuEntry.document = m_Context->LoadDocument(entry.menuEntry.menuPtr->RmlFilePath());

if ( entry.menuEntry.document )
{
Expand All @@ -136,17 +198,37 @@ void MenuDirectory::LoadMenuRml(MapEntry& entry, Rml::Context& context)
entry.menuEntry.menuPtr->Name()
);

entry.menuEntry.document = context.LoadDocumentFromMemory(FALLBACK_RML);
entry.menuEntry.document = m_Context->LoadDocumentFromMemory(FALLBACK_RML);
ASSERT(entry.menuEntry.document);
}

void MenuDirectory::UnloadAllDocuments()
void MenuDirectory::UnloadMenu(MapEntry& entry, bool unloadModel)
{
ASSERT(m_Context);

if ( entry.loadedDocument )
{
ASSERT(entry.menuEntry.document);

entry.menuEntry.menuPtr->DocumentUnloaded();
m_Context->UnloadDocument(entry.menuEntry.document);

entry.menuEntry.document = nullptr;
entry.loadedDocument = false;
}

if ( unloadModel )
{
m_Context->RemoveDataModel(entry.menuEntry.dataModelName);
}
}

void MenuDirectory::UnloadAllMenus()
{
ASSERT(m_Context);

for ( MenuMap::iterator it = m_MenuMap.begin(); it != m_MenuMap.end(); ++it )
{
if ( it->second.loadedDocument )
{
it->second.menuEntry.menuPtr->DocumentUnloaded();
}
UnloadMenu(it->second, true);
}
}
17 changes: 11 additions & 6 deletions game/game_libs/ui_new/src/framework/MenuDirectory.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ struct MenuDirectoryEntry
{
std::unique_ptr<BaseMenu> menuPtr;
Rml::ElementDocument* document = nullptr;
Rml::String dataModelName;

template<typename T>
T* MenuDynamicCast(bool assertSuccessInDebug = true) const
Expand All @@ -38,7 +39,8 @@ struct MenuDirectoryEntry
friend class MenuDirectory;

explicit MenuDirectoryEntry(std::unique_ptr<BaseMenu>&& ptr) :
menuPtr(std::move(ptr))
menuPtr(std::move(ptr)),
dataModelName(menuPtr->Name() + Rml::String("_model"))
{
}
};
Expand All @@ -47,11 +49,12 @@ class MenuDirectory
{
public:
void Populate();
void Clear();

void LoadAllMenus(Rml::Context& context);
void AcquireContext(Rml::Context* context);
void ReleaseContext();

const MenuDirectoryEntry* GetMenuEntry(const Rml::String& name) const;
void ReloadMenu(const Rml::String& name, bool reloadModel = false);

template<typename T>
T* GetMenu(const Rml::String& name, bool assertSuccessInDebug = true) const
Expand Down Expand Up @@ -89,9 +92,11 @@ class MenuDirectory
}

void AddToMap(BaseMenu* newMenu);
void SetUpDataBindings(MapEntry& entry, Rml::Context& context);
void LoadMenuRml(MapEntry& entry, Rml::Context& context);
void UnloadAllDocuments();
void SetUpDataBindings(MapEntry& entry);
void LoadMenuRml(MapEntry& entry);
void UnloadMenu(MapEntry& entry, bool unloadModel);
void UnloadAllMenus();

MenuMap m_MenuMap;
Rml::Context* m_Context = nullptr;
};
2 changes: 1 addition & 1 deletion game/game_libs/ui_new/src/game/Utils.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "game/Utils.h"
#include <RmlUi/Core/Log.h>
#include "Utils/InFilePtr.h"
#include "utils/InFilePtr.h"
#include "udll_int.h"

Rml::String EscapeStringForConsoleCommand(Rml::String input)
Expand Down
36 changes: 36 additions & 0 deletions game/game_libs/ui_new/src/menus/StyleGuide.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include "menus/StyleGuide.h"
#include "framework/ElementFinder.h"
#include <RmlUi/Core/ElementDocument.h>
#include <RmlUi/Core/StringUtilities.h>

StyleGuide::StyleGuide() :
MenuPage("style_guide", "resource/rml/style_guide.rml"),
m_MenuFrameDataBinding(this)
{
}

void StyleGuide::OnDocumentLoaded()
{
m_MenuFrameDataBinding.SetDefaultTooltipText("None");
m_MenuFrameDataBinding.SetTooltipInnerRml("Colour constant: {{footerTooltip}}");
m_MenuFrameDataBinding.SetTitle("Style Guide");

ElementFinder finder;

Rml::Element* table = Document()->GetElementById("colours_table");
Rml::ElementList swatches;
finder.AddMulti(&table, ".palette-swatch", &swatches);
finder.FindAll();

for ( Rml::Element* swatch : swatches )
{
const Rml::Property* bgProp = swatch->GetProperty(Rml::PropertyId::BackgroundColor);

if ( !bgProp )
{
continue;
}

swatch->SetInnerRML(Rml::StringUtilities::EncodeRml(bgProp->ToString()));
}
}
17 changes: 17 additions & 0 deletions game/game_libs/ui_new/src/menus/StyleGuide.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include "framework/MenuPage.h"
#include "framework/MenuEventListenerObject.h"
#include "templatebindings/MenuFrameDataBinding.h"

class StyleGuide : public MenuPage
{
public:
StyleGuide();

protected:
void OnDocumentLoaded() override;

private:
MenuFrameDataBinding m_MenuFrameDataBinding;
};
Loading
Loading