mirror of
https://github.com/geode-sdk/geode.git
synced 2024-11-14 11:05:08 -05:00
Compare commits
24 commits
2057da10f2
...
a395fbf125
Author | SHA1 | Date | |
---|---|---|---|
|
a395fbf125 | ||
|
24294c7361 | ||
|
74a70112a4 | ||
|
05fe8d22b5 | ||
|
69a480b341 | ||
|
a68a631a4d | ||
|
95d750606a | ||
|
a4bd588d4a | ||
|
0597416d48 | ||
|
93e463bf19 | ||
|
b5b845ebb1 | ||
|
c6c9af6867 | ||
|
f79da023cf | ||
|
3222c12e90 | ||
|
f45b8b7128 | ||
|
0da9cef29f | ||
|
9a46231420 | ||
|
cded0523a5 | ||
|
2e039a9cea | ||
|
ae24abbcec | ||
|
9c9c75d46b | ||
|
d117d50fb0 | ||
|
b80efe0517 | ||
|
7d40c8188f |
4 changed files with 128 additions and 4 deletions
|
@ -1,15 +1,15 @@
|
|||
!insertmacro LANGFILE_EXT SpanishInternational
|
||||
|
||||
!pragma warning disable 6030
|
||||
${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la instalación de $(^NameDA) en su computadora.$\r$\n$\r$\nAntes de iniciar la instalación, asegúrese de que Geometry Dash no se está ejecutando$\r$\n$\r$\n$_CLICK"
|
||||
${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la desinstalación de $(^NameDA).$\r$\n$\r$\nAntes de iniciar la desinstalación, asegúrese de que Geometry Dash no se está ejecutando.$\r$\n$\r$\n$_CLICK"
|
||||
${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la instalación de Geode en su computadora.$\r$\n$\r$\nAntes de iniciar la instalación, asegúrese de que Geometry Dash no se está ejecutando$\r$\n$\r$\n$_CLICK"
|
||||
${LangFileString} MUI_UNTEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la desinstalación de Geode.$\r$\n$\r$\nAntes de iniciar la desinstalación, asegúrese de que Geometry Dash no se está ejecutando.$\r$\n$\r$\n$_CLICK"
|
||||
!pragma warning default 6030
|
||||
|
||||
; installer
|
||||
|
||||
${LangFileString} GEODE_TEXT_GD_MISSING "$\r$\n$\r$\n¡Geometry Dash no está instalado en esta ruta!"
|
||||
${LangFileString} GEODE_TEXT_GD_OLD "$\r$\n$\r$\nYour version of Geometry Dash is too old for this version of Geode!"
|
||||
${LangFileString} GEODE_TEXT_MOD_LOADER_ALREADY_INSTALLED "This path has other mods installed!$\r$\nThey will be overwritten by Geode. (the dll trademark)"
|
||||
${LangFileString} GEODE_TEXT_GD_OLD "$\r$\n$\r$\n¡Su versión de Geometry Dash es demasiado antigua para esta versión de Geode!"
|
||||
${LangFileString} GEODE_TEXT_MOD_LOADER_ALREADY_INSTALLED "¡Esta ruta ya tiene otros mods instalados!$\r$\nVan a ser sobreescritos por Geode. (the dll trademark)"
|
||||
|
||||
; uninstaller
|
||||
|
||||
|
|
|
@ -85,6 +85,10 @@
|
|||
"name": "Enable Geode-Themed Colors",
|
||||
"description": "When enabled, the Geode menu has a <ca>Geode-themed color scheme</c>. <cy>This does not affect any other menus!</c>"
|
||||
},
|
||||
"copy-mods": {
|
||||
"type": "custom:copy-mods",
|
||||
"name": ""
|
||||
},
|
||||
"developer-title": {
|
||||
"type": "title",
|
||||
"name": "Developer Settings"
|
||||
|
|
44
loader/src/loader/CopyButtonSetting.cpp
Normal file
44
loader/src/loader/CopyButtonSetting.cpp
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include "CopyButtonSetting.hpp"
|
||||
#include <Geode/loader/Mod.hpp>
|
||||
|
||||
$on_mod(Loaded) {
|
||||
(void)Mod::get()->registerCustomSettingType("copy-mods", &CopyButtonSetting::parse);
|
||||
}
|
||||
|
||||
SettingNodeV3* CopyButtonSetting::createNode(float width) {
|
||||
return CopyButtonSettingNode::create(std::static_pointer_cast<CopyButtonSetting>(shared_from_this()), width);
|
||||
}
|
||||
|
||||
void CopyButtonSettingNode::onCopy(CCObject*) {
|
||||
auto mods = Loader::get()->getAllMods();
|
||||
if (mods.empty()) {
|
||||
Notification::create("No mods installed", NotificationIcon::Info, 0.5f)->show();
|
||||
return;
|
||||
}
|
||||
|
||||
std::sort(mods.begin(), mods.end(), [](Mod* a, Mod* b) {
|
||||
auto const s1 = a->getID();
|
||||
auto const s2 = b->getID();
|
||||
return std::lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(), [](auto a, auto b) {
|
||||
return std::tolower(a) < std::tolower(b);
|
||||
});
|
||||
});
|
||||
|
||||
std::stringstream ss;
|
||||
using namespace std::string_view_literals;
|
||||
for (int i = 0; i < mods.size(); i++) {
|
||||
auto& mod = mods[i];
|
||||
ss << fmt::format("{} | [{}] {}",
|
||||
mod->isEnabled() ? "x"sv :
|
||||
mod->hasProblems() ? "!"sv :
|
||||
" "sv,
|
||||
mod->getVersion().toVString(), mod->getID()
|
||||
);
|
||||
if (i != mods.size() - 1) {
|
||||
ss << "\n";
|
||||
}
|
||||
}
|
||||
clipboard::write(ss.str());
|
||||
|
||||
Notification::create("Mods list copied to clipboard", NotificationIcon::Info, 0.5f)->show();
|
||||
}
|
76
loader/src/loader/CopyButtonSetting.hpp
Normal file
76
loader/src/loader/CopyButtonSetting.hpp
Normal file
|
@ -0,0 +1,76 @@
|
|||
#include <Geode/loader/SettingV3.hpp>
|
||||
#include <ui/mods/GeodeStyle.hpp>
|
||||
|
||||
using namespace geode::prelude;
|
||||
|
||||
class CopyButtonSetting : public SettingV3 {
|
||||
public:
|
||||
static Result<std::shared_ptr<CopyButtonSetting>> parse(std::string const& key, std::string const& modID, matjson::Value const& json) {
|
||||
auto res = std::make_shared<CopyButtonSetting>();
|
||||
auto root = checkJson(json, "CopyButtonSetting");
|
||||
|
||||
res->init(key, modID, root);
|
||||
res->parseNameAndDescription(root);
|
||||
|
||||
return root.ok(res);
|
||||
}
|
||||
|
||||
bool load(matjson::Value const& json) override {
|
||||
return true;
|
||||
}
|
||||
bool save(matjson::Value& json) const override {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isDefaultValue() const override {
|
||||
return true;
|
||||
}
|
||||
void reset() override {}
|
||||
|
||||
SettingNodeV3* createNode(float width) override;
|
||||
};
|
||||
|
||||
class CopyButtonSettingNode : public SettingNodeV3 {
|
||||
protected:
|
||||
bool init(std::shared_ptr<CopyButtonSetting> setting, float width) {
|
||||
if (!SettingNodeV3::init(setting, width))
|
||||
return false;
|
||||
|
||||
auto buttonSprite = createGeodeButton("Copy Mods");
|
||||
buttonSprite->setScale(.5f);
|
||||
auto button = CCMenuItemSpriteExtra::create(
|
||||
buttonSprite, this, menu_selector(CopyButtonSettingNode::onCopy)
|
||||
);
|
||||
this->getButtonMenu()->addChildAtPosition(button, Anchor::Center);
|
||||
this->getButtonMenu()->setPosition(getContentSize() / 2);
|
||||
this->getButtonMenu()->setAnchorPoint({ .5f, .5f });
|
||||
this->getButtonMenu()->updateLayout();
|
||||
|
||||
this->updateState(nullptr);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void onCopy(CCObject*);
|
||||
|
||||
void onCommit() override {}
|
||||
void onResetToDefault() override {}
|
||||
|
||||
public:
|
||||
static CopyButtonSettingNode* create(std::shared_ptr<CopyButtonSetting> setting, float width) {
|
||||
auto ret = new CopyButtonSettingNode();
|
||||
if (ret && ret->init(setting, width)) {
|
||||
ret->autorelease();
|
||||
return ret;
|
||||
}
|
||||
CC_SAFE_DELETE(ret);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool hasUncommittedChanges() const override {
|
||||
return false;
|
||||
}
|
||||
bool hasNonDefaultValue() const override {
|
||||
return false;
|
||||
}
|
||||
};
|
Loading…
Reference in a new issue