Skip to content

Commit 01ee436

Browse files
committed
use ColorProvider for swelvybg colors
1 parent ae90fc9 commit 01ee436

File tree

7 files changed

+92
-32
lines changed

7 files changed

+92
-32
lines changed
46.3 KB
Loading

loader/src/ui/GeodeUI.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,12 @@ class ModLogoSprite : public CCNodeRGBA {
229229
if (!mod->isInternal()) {
230230
m_sprite->loadFromFile(dirs::getModRuntimeDir() / mod->getID() / "logo.png");
231231
} else {
232-
m_sprite->initWithSpriteFrameName("geode-logo.png"_spr);
232+
if (Mod::get()->getSavedValue("alternate-geode-style", false)) {
233+
m_sprite->initWithSpriteFrameName("geode-logo-alternate.png"_spr);
234+
}
235+
else {
236+
m_sprite->initWithSpriteFrameName("geode-logo.png"_spr);
237+
}
233238
}
234239
},
235240
[this](std::string const& id) {

loader/src/ui/mods/GeodeStyle.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,22 @@
3636
// Only used when GD theme is active
3737
ColorProvider::get()->define("mods-layer-gd-bg"_spr, { 0, 102, 255, 255 });
3838

39+
ColorProvider::get()->define("swelvy-bg-0"_spr, { 244, 212, 142, 255 });
40+
ColorProvider::get()->define("swelvy-bg-1"_spr, { 245, 174, 125, 255 });
41+
ColorProvider::get()->define("swelvy-bg-2"_spr, { 236, 137, 124, 255 });
42+
ColorProvider::get()->define("swelvy-bg-3"_spr, { 213, 105, 133, 255 });
43+
ColorProvider::get()->define("swelvy-bg-4"_spr, { 173, 84, 146, 255 });
44+
ColorProvider::get()->define("swelvy-bg-5"_spr, { 113, 74, 154, 255 });
45+
46+
if (Mod::get()->getSavedValue("alternate-geode-style", false)) {
47+
ColorProvider::get()->override("swelvy-bg-0"_spr, { 216, 132, 132, 255 });
48+
ColorProvider::get()->override("swelvy-bg-1"_spr, { 210, 189, 119, 255 });
49+
ColorProvider::get()->override("swelvy-bg-2"_spr, { 195, 212, 136, 255 });
50+
ColorProvider::get()->override("swelvy-bg-3"_spr, { 95, 184, 134, 255 });
51+
ColorProvider::get()->override("swelvy-bg-4"_spr, { 100, 174, 189, 255 });
52+
ColorProvider::get()->override("swelvy-bg-5"_spr, { 118, 90, 148, 255 });
53+
}
54+
3955
auto updateColors = +[](bool enabled) {
4056
if (enabled) {
4157
ColorProvider::get()->reset("mod-list-bg"_spr);

loader/src/ui/mods/SwelvyBG.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,42 @@ bool SwelvyBG::init() {
1919

2020
float y = m_obContentSize.height + 5;
2121
int idx = 0;
22-
for (auto layer : std::initializer_list<std::pair<ccColor3B, const char*>> {
23-
{ ccc3(244, 212, 142), "swelve-layer3.png"_spr },
24-
{ ccc3(245, 174, 125), "swelve-layer0.png"_spr },
25-
{ ccc3(236, 137, 124), "swelve-layer1.png"_spr },
26-
{ ccc3(213, 105, 133), "swelve-layer2.png"_spr },
27-
{ ccc3(173, 84, 146), "swelve-layer1.png"_spr },
28-
{ ccc3(113, 74, 154), "swelve-layer0.png"_spr },
22+
for (auto layer : std::initializer_list<const char*> {
23+
"swelve-layer3.png"_spr,
24+
"swelve-layer0.png"_spr,
25+
"swelve-layer1.png"_spr,
26+
"swelve-layer2.png"_spr,
27+
"swelve-layer1.png"_spr,
28+
"swelve-layer0.png"_spr
2929
}) {
3030
float speed = dis(gen);
3131
if (sign(gen) == 0) {
3232
speed = -speed;
3333
}
3434
ccTexParams params = {GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_CLAMP_TO_EDGE};
3535

36-
auto sprite = CCSprite::create(layer.second);
36+
auto sprite = CCSprite::create(layer);
3737
auto rect = sprite->getTextureRect();
3838
sprite->setUserObject("width", CCFloat::create(rect.size.width));
3939
rect.size = CCSize{winSize.width, rect.size.height};
4040

4141
std::string layerID = fmt::format("layer-{}", idx);
42+
auto colorID = fmt::format("swelvy-bg-{}"_spr, idx);
4243
sprite->setID(layerID);
4344
sprite->getTexture()->setTexParameters(&params);
4445
sprite->setTextureRect(rect);
4546
sprite->setAnchorPoint({ 0, 1 });
4647
sprite->setContentSize({winSize.width, sprite->getContentSize().height});
47-
sprite->setColor(layer.first);
48+
sprite->setColor(ColorProvider::get()->color3b(colorID));
4849
sprite->setPosition({0, y});
4950
sprite->schedule(schedule_selector(SwelvyBG::updateSpritePosition));
5051
sprite->setUserObject("speed", CCFloat::create(speed));
5152
this->addChild(sprite);
5253

54+
m_colorListeners.emplace_back([=](ColorProvidedEvent* event) {
55+
sprite->setColor(to3B(event->color));
56+
}, ColorProvidedFilter(colorID));
57+
5358
y -= m_obContentSize.height / 6;
5459
idx += 1;
5560
}

loader/src/ui/mods/SwelvyBG.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <Geode/ui/General.hpp>
4+
#include <Geode/utils/ColorProvider.hpp>
45

56
using namespace geode::prelude;
67

@@ -10,6 +11,8 @@ class SwelvyBG : public CCNode {
1011

1112
void updateSpritePosition(float dt);
1213

14+
std::vector<EventListener<ColorProvidedFilter>> m_colorListeners;
15+
1316
public:
1417
static SwelvyBG* create();
1518
};

loader/src/ui/mods/popups/ModPopup.cpp

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -110,36 +110,66 @@ bool ModPopup::setup(ModSource&& src) {
110110
auto leftColumn = CCNode::create();
111111
leftColumn->setContentSize({ 145, mainContainer->getContentHeight() });
112112

113-
auto titleContainer = CCNode::create();
114-
titleContainer->setContentSize({ leftColumn->getContentWidth(), 25 });
115-
titleContainer->setAnchorPoint({ .5f, .5f });
116-
117-
auto logo = m_source.createModLogo();
118-
logo->setID("mod-logo");
119-
limitNodeSize(
120-
logo,
121-
ccp(titleContainer->getContentHeight(), titleContainer->getContentHeight()),
122-
5.f, .1f
123-
);
124-
titleContainer->addChildAtPosition(
125-
logo, Anchor::Left, ccp(titleContainer->getContentHeight() / 2, 0)
126-
);
113+
m_titleContainer = CCMenu::create();
114+
m_titleContainer->setContentSize({ leftColumn->getContentWidth(), 25 });
115+
m_titleContainer->setAnchorPoint({ .5f, .5f });
116+
117+
auto getLogo = [this]() {
118+
auto logo = m_source.createModLogo();
119+
logo->setID("mod-logo");
120+
limitNodeSize(
121+
logo,
122+
ccp(m_titleContainer->getContentHeight(), m_titleContainer->getContentHeight()),
123+
5.f, .1f
124+
);
125+
return logo;
126+
};
127+
128+
if (isGeode) {
129+
auto counter = Mod::get()->getSavedValue("alternate-geode-style", false) ? 3 : 0;
130+
auto* logoButton = CCMenuItemExt::createSpriteExtra(getLogo(), [this, counter, getLogo](auto* item) mutable {
131+
counter++;
132+
if (counter % 6 == 3) {
133+
Mod::get()->setSavedValue("alternate-geode-style", true);
134+
ColorProvider::get()->override("swelvy-bg-0"_spr, { 216, 132, 132, 255 });
135+
ColorProvider::get()->override("swelvy-bg-1"_spr, { 210, 189, 119, 255 });
136+
ColorProvider::get()->override("swelvy-bg-2"_spr, { 195, 212, 136, 255 });
137+
ColorProvider::get()->override("swelvy-bg-3"_spr, { 95, 184, 134, 255 });
138+
ColorProvider::get()->override("swelvy-bg-4"_spr, { 100, 174, 189, 255 });
139+
ColorProvider::get()->override("swelvy-bg-5"_spr, { 118, 90, 148, 255 });
140+
}
141+
else if (counter % 6 == 0) {
142+
Mod::get()->getSaveContainer().erase("alternate-geode-style");
143+
for (int i = 0; i < 6; i++) {
144+
ColorProvider::get()->reset(fmt::format("swelvy-bg-{}"_spr, i));
145+
}
146+
}
147+
});
148+
m_titleContainer->addChildAtPosition(
149+
logoButton, Anchor::Left, ccp(m_titleContainer->getContentHeight() / 2, 0)
150+
);
151+
}
152+
else {
153+
m_titleContainer->addChildAtPosition(
154+
getLogo(), Anchor::Left, ccp(m_titleContainer->getContentHeight() / 2, 0)
155+
);
156+
}
127157

128158
// Lil padding
129-
auto devAndTitlePos = titleContainer->getContentHeight() + 5;
159+
auto devAndTitlePos = m_titleContainer->getContentHeight() + 5;
130160

131161
auto title = CCLabelBMFont::create(m_source.getMetadata().getName().c_str(), "bigFont.fnt");
132-
title->limitLabelWidth(titleContainer->getContentWidth() - devAndTitlePos, .45f, .1f);
162+
title->limitLabelWidth(m_titleContainer->getContentWidth() - devAndTitlePos, .45f, .1f);
133163
title->setAnchorPoint({ .0f, .5f });
134164
title->setID("mod-name-label");
135-
titleContainer->addChildAtPosition(title, Anchor::TopLeft, ccp(devAndTitlePos, -titleContainer->getContentHeight() * .25f));
165+
m_titleContainer->addChildAtPosition(title, Anchor::TopLeft, ccp(devAndTitlePos, -m_titleContainer->getContentHeight() * .25f));
136166

137167
auto by = "By " + m_source.formatDevelopers();
138168
auto dev = CCLabelBMFont::create(by.c_str(), "goldFont.fnt");
139-
dev->limitLabelWidth(titleContainer->getContentWidth() - devAndTitlePos, .35f, .05f);
169+
dev->limitLabelWidth(m_titleContainer->getContentWidth() - devAndTitlePos, .35f, .05f);
140170
dev->setAnchorPoint({ .0f, .5f });
141171
dev->setID("mod-developer-label");
142-
titleContainer->addChildAtPosition(dev, Anchor::BottomLeft, ccp(devAndTitlePos, titleContainer->getContentHeight() * .25f));
172+
m_titleContainer->addChildAtPosition(dev, Anchor::BottomLeft, ccp(devAndTitlePos, m_titleContainer->getContentHeight() * .25f));
143173

144174
// Suggestions
145175
if (!Loader::get()->isModInstalled(m_source.getMetadata().getID())) {
@@ -157,7 +187,7 @@ bool ModPopup::setup(ModSource&& src) {
157187
dev->updateAnchoredPosition(Anchor::Left, ccp(devAndTitlePos, 0));
158188

159189
auto recommendedBy = CCNode::create();
160-
recommendedBy->setContentWidth(titleContainer->getContentWidth() - devAndTitlePos);
190+
recommendedBy->setContentWidth(m_titleContainer->getContentWidth() - devAndTitlePos);
161191
recommendedBy->setAnchorPoint({ .0f, .5f });
162192

163193
auto byLabel = CCLabelBMFont::create("Recommended by ", "bigFont.fnt");
@@ -180,11 +210,11 @@ bool ModPopup::setup(ModSource&& src) {
180210
->setDefaultScaleLimits(.1f, 1.f)
181211
->setAxisAlignment(AxisAlignment::Start)
182212
);
183-
titleContainer->addChildAtPosition(recommendedBy, Anchor::BottomLeft, ccp(devAndTitlePos, 4));
213+
m_titleContainer->addChildAtPosition(recommendedBy, Anchor::BottomLeft, ccp(devAndTitlePos, 4));
184214
}
185215
}
186216

187-
leftColumn->addChild(titleContainer);
217+
leftColumn->addChild(m_titleContainer);
188218

189219
auto idStr = "(ID: " + m_source.getMetadata().getID() + ")";
190220
auto idLabel = CCLabelBMFont::create(idStr.c_str(), "bigFont.fnt");

loader/src/ui/mods/popups/ModPopup.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class ModPopup : public GeodePopup<ModSource&&> {
3737
CCNode* m_rightColumn;
3838
CCNode* m_currentTabPage = nullptr;
3939
CCNode* m_modtoberBanner = nullptr;
40+
CCMenu* m_titleContainer = nullptr;
4041
std::unordered_map<Tab, std::pair<GeodeTabSprite*, Ref<CCNode>>> m_tabs;
4142
EventListener<server::ServerRequest<server::ServerModMetadata>> m_statsListener;
4243
EventListener<server::ServerRequest<std::vector<server::ServerTag>>> m_tagsListener;

0 commit comments

Comments
 (0)