1+ #include < Geode/loader/SettingV3.hpp>
2+ #include < Geode/loader/Mod.hpp>
3+
4+ using namespace geode ::prelude;
5+
6+ class ButtonSettingV3 : public SettingV3 {
7+ public:
8+ static Result<std::shared_ptr<SettingV3>> parse (std::string const & key, std::string const & modID, matjson::Value const & json) {
9+ auto res = std::make_shared<ButtonSettingV3>();
10+ auto root = checkJson (json, " ButtonSettingV3" );
11+
12+ res->init (key, modID, root);
13+ res->parseNameAndDescription (root);
14+ res->parseEnableIf (root);
15+
16+ root.checkUnknownKeys ();
17+ return root.ok (std::static_pointer_cast<SettingV3>(res));
18+ }
19+
20+ bool load (matjson::Value const & json) override {
21+ return true ;
22+ }
23+ bool save (matjson::Value& json) const override {
24+ return true ;
25+ }
26+
27+ bool isDefaultValue () const override {
28+ return true ;
29+ }
30+ void reset () override {}
31+
32+ SettingNodeV3* createNode (float width) override ;
33+ };
34+
35+ class ButtonSettingNodeV3 : public SettingNodeV3 {
36+ protected:
37+ ButtonSprite* m_buttonSprite;
38+ CCMenuItemSpriteExtra* m_button;
39+
40+ bool init (std::shared_ptr<ButtonSettingV3> setting, float width) {
41+ if (!SettingNodeV3::init (setting, width))
42+ return false ;
43+
44+ m_buttonSprite = ButtonSprite::create (" Reset" , " goldFont.fnt" , " GJ_button_01.png" , .8f );
45+ m_buttonSprite->setScale (.5f );
46+ m_button = CCMenuItemSpriteExtra::create (
47+ m_buttonSprite, this , menu_selector (ButtonSettingNodeV3::onButton)
48+ );
49+ this ->getButtonMenu ()->addChildAtPosition (m_button, Anchor::Center);
50+ this ->getButtonMenu ()->setContentWidth (60 );
51+ this ->getButtonMenu ()->updateLayout ();
52+
53+ this ->updateState (nullptr );
54+
55+ return true ;
56+ }
57+
58+ void updateState (CCNode* invoker) override {
59+ SettingNodeV3::updateState (invoker);
60+
61+ auto shouldEnable = this ->getSetting ()->shouldEnable ();
62+ m_button->setEnabled (shouldEnable);
63+ m_buttonSprite->setCascadeColorEnabled (true );
64+ m_buttonSprite->setCascadeOpacityEnabled (true );
65+ m_buttonSprite->setOpacity (shouldEnable ? 255 : 155 );
66+ m_buttonSprite->setColor (shouldEnable ? ccWHITE : ccGRAY);
67+ }
68+ void onButton (CCObject*) {
69+ Mod::get ()->setSavedValue <std::string>(" panorama-0" , " panorama_0.png" _spr);
70+ Mod::get ()->setSavedValue <std::string>(" panorama-1" , " panorama_1.png" _spr);
71+ Mod::get ()->setSavedValue <std::string>(" panorama-2" , " panorama_2.png" _spr);
72+ Mod::get ()->setSavedValue <std::string>(" panorama-3" , " panorama_3.png" _spr);
73+ Mod::get ()->setSavedValue <std::string>(" panorama-4" , " panorama_4.png" _spr);
74+ Mod::get ()->setSavedValue <std::string>(" panorama-5" , " panorama_5.png" _spr);
75+ Mod::get ()->setSavedValue <bool >(" changed" , true );
76+ }
77+
78+ void onCommit () override {}
79+ void onResetToDefault () override {}
80+
81+ public:
82+ static ButtonSettingNodeV3* create (std::shared_ptr<ButtonSettingV3> setting, float width) {
83+ auto ret = new ButtonSettingNodeV3 ();
84+ if (ret && ret->init (setting, width)) {
85+ ret->autorelease ();
86+ return ret;
87+ }
88+ CC_SAFE_DELETE (ret);
89+ return nullptr ;
90+ }
91+
92+ bool hasUncommittedChanges () const override {
93+ return false ;
94+ }
95+ bool hasNonDefaultValue () const override {
96+ return false ;
97+ }
98+
99+ std::shared_ptr<ButtonSettingV3> getSetting () const {
100+ return std::static_pointer_cast<ButtonSettingV3>(SettingNodeV3::getSetting ());
101+ }
102+ };
103+
104+ SettingNodeV3* ButtonSettingV3::createNode (float width) {
105+ return ButtonSettingNodeV3::create (
106+ std::static_pointer_cast<ButtonSettingV3>(shared_from_this ()),
107+ width
108+ );
109+ }
110+
111+ $execute {
112+ (void )Mod::get ()->registerCustomSettingType (" button" , &ButtonSettingV3::parse);
113+ }
0 commit comments