Skip to content

Commit

Permalink
add save loading + break ui
Browse files Browse the repository at this point in the history
  • Loading branch information
anatom3000 committed Oct 22, 2024
1 parent d5284b4 commit db41753
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 75 deletions.
90 changes: 90 additions & 0 deletions src/config.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
struct ToolConfig {
std::string name;

std::string x;
std::string y;
std::string rotation;

std::string n;
std::string start;
std::string end;

bool abs_scaling;
bool abs_rotation;
bool use_robtop_units;
bool use_radians;
bool delete_original;

std::string scale_x;
std::string scale_y;

std::string base_hue;
std::string base_saturation;
std::string base_value;
std::string detail_hue;
std::string detail_saturation;
std::string detail_value;
};

template<>
struct matjson::Serialize<ToolConfig> {
static ToolConfig from_json(matjson::Value const& value) {
return {
.name = value["name"].as_string(),
.x = value["x"].as_string(),
.y = value["y"].as_string(),
.rotation = value["rotation"].as_string(),

.n = value["n"].as_string(),
.start = value["start"].as_string(),
.end = value["end"].as_string(),

.abs_scaling = value["abs_scaling"].as_bool(),
.abs_rotation = value["abs_rotation"].as_bool(),
.use_robtop_units = value["use_robtop_units"].as_bool(),
.use_radians = value["use_radians"].as_bool(),
.delete_original = value["delete_original"].as_bool(),

.scale_x = value["scale_x"].as_string(),
.scale_y = value["scale_y"].as_string(),

.base_hue = value["base_hue"].as_string(),
.base_saturation = value["base_saturation"].as_string(),
.base_value = value["base_value"].as_string(),
.detail_hue = value["detail_hue"].as_string(),
.detail_saturation = value["detail_saturation"].as_string(),
.detail_value = value["detail_value"].as_string()
};
}

static matjson::Value to_json(ToolConfig const& config) {
auto value = matjson::Object();

value["name"] = config.name;
value["x"] = config.x;
value["y"] = config.y;
value["rotation"] = config.rotation;

value["n"] = config.n;
value["start"] = config.start;
value["end"] = config.end;

value["abs_scaling"] = config.abs_scaling;
value["abs_rotation"] = config.abs_rotation;
value["use_robtop_units"] = config.use_robtop_units;
value["use_radians"] = config.use_radians;
value["delete_original"] = config.delete_original;

value["scale_x"] = config.scale_x;
value["scale_y"] = config.scale_y;

value["base_hue"] = config.base_hue;
value["base_saturation"] = config.base_saturation;
value["base_value"] = config.base_value;
value["detail_hue"] = config.detail_hue;
value["detail_saturation"] = config.detail_saturation;
value["detail_value"] = config.detail_value;

return value;
}
};
30 changes: 1 addition & 29 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,35 +7,7 @@ using namespace geode;
using namespace cocos2d;
using geode::cocos::CCArrayExt;

struct ToolConfig {
std::string name;

std::string x;
std::string y;
std::string rotation;

std::string n;
std::string start;
std::string end;

bool abs_scaling;
bool abs_rotation;
bool use_robtop_units;
bool use_radians;
bool delete_original;

std::string scale_x;
std::string scale_y;

std::string base_hue;
std::string base_saturation;
std::string base_value;
std::string detail_hue;
std::string detail_saturation;
std::string detail_value;

};

#include "config.cpp"

class FunctionToolPopup : public geode::Popup<> {
public:
Expand Down
120 changes: 74 additions & 46 deletions src/popups/history.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
class HistoryPopup : public geode::Popup<> {
public:
FunctionToolPopup* m_functool;
std::vector<ToolConfig> m_presets;
geode::ScrollLayer* m_scrollLayer;

static auto* create(FunctionToolPopup* functool) {
auto* node = new (std::nothrow) HistoryPopup();
Expand All @@ -23,46 +25,33 @@ class HistoryPopup : public geode::Popup<> {

auto const center2 = CCSize(440, 280) / 2;

auto entries = CCArray::create();
entries->retain();
for (int i = 0; i < 5; i++) {
entries->addObject(ConfigCell::create({
.name = "uwu rawr",
.x = "42.0",
.y = "t",
.n = "15",
.start = "0.0",
.end = "5.0",
.abs_scaling = true,
.abs_rotation = false,
.use_robtop_units = true,
.use_radians = false,
.delete_original = true,
.scale_x = "2.0",
.scale_y = "0.5",
.base_hue = "t",
}, m_functool));
entries->addObject(ConfigCell::create({
.name = "aaa :x",
.x = "42.0",
.y = "t",
.n = "15",
.start = "0.0",
.end = "5.0",
.abs_scaling = true,
.abs_rotation = false,
.use_robtop_units = true,
.use_radians = false,
.delete_original = true,
.scale_x = "2.0",
.scale_y = "0.5",
.base_hue = "t",
}, m_functool));
}

auto listView = geode::ListView::create(entries, 60, 400, 190);
listView->setPosition(center2 - ccp(200, 85));
m_buttonMenu->addChild(listView);
m_presets = Mod::get()->getSavedValue<std::vector<ToolConfig>>(
"presets", std::vector<ToolConfig> {
ToolConfig {
.name = "Circle",
.x = "4*sin(t)",
.y = "4*cos(t)",
.rotation = "t",
.n = "16",
.start = "0",
.end = "360",
.delete_original = true
}
});

//m_listView = geode::ListView::create(m_entries, 60, 400, 190);
m_scrollLayer = ScrollLayer::create({ 400.0f, 190.0f });
m_scrollLayer->setPosition(center2 - ccp(200, 85));
m_scrollLayer->m_contentLayer->setLayout(
ColumnLayout::create()
->setAxisReverse(true)
->setAxisAlignment(AxisAlignment::End)
->setAutoGrowAxis(190.0f)
->setGap(0.0f)
);
m_mainLayer->addChild(m_scrollLayer);

//this->refreshEntries();

auto okSprite = ButtonSprite::create("OK", "bigFont.fnt", "GJ_button_01.png", .60f);
okSprite->setScale(0.85f);
Expand All @@ -78,17 +67,38 @@ class HistoryPopup : public geode::Popup<> {
return true;
}

void refreshEntries() {
m_scrollLayer->m_contentLayer->removeAllChildren();

int i = 0;
for (auto pre : m_presets) {
auto cell = ConfigCell::create(pre, m_functool);

cell->setPosition(ccp(0, 0));

cell->m_history = this;
cell->m_index = i;
m_scrollLayer->m_contentLayer->addChild(cell);
i++;
}

m_scrollLayer->m_contentLayer->updateLayout();
}

void onClose(CCObject* obj) override {
// save stuff
Mod::get()->setSavedValue<std::vector<ToolConfig>>("presets", m_presets);

Popup::onClose(obj);
}
};


class ConfigCell : public cocos2d::CCLayer {
class ConfigCell : public cocos2d::CCNode {
public:
ToolConfig m_config;
FunctionToolPopup* m_functool;
HistoryPopup* m_history;
int m_index;

static ConfigCell* create(ToolConfig c, FunctionToolPopup* functool) {
ConfigCell* node = new ConfigCell();
Expand All @@ -102,13 +112,15 @@ class ConfigCell : public cocos2d::CCLayer {
}

bool init(ToolConfig c, FunctionToolPopup* functool) {
if (!CCLayer::init()) return false;
if (!CCNode::init()) return false;

this->setContentSize({400.f, 60.f});

m_functool = functool;
m_config = c;

auto center = ccp(400, 60) / 2.f;

m_config = c;
auto name = CCLabelBMFont::create(c.name.c_str(), "bigFont.fnt");
name->setScale(0.5f);
name->setPosition(center + ccp(-195+name->getScaledContentSize().width/2.0, 22));
Expand Down Expand Up @@ -159,22 +171,33 @@ class ConfigCell : public cocos2d::CCLayer {
);
auto infos = CCLabelBMFont::create(infos_content.c_str(), "chatFont.fnt");
infos->setScale(0.6f);
infos->setPosition(center + ccp(-194+infos->getScaledContentSize().width/2.0, -6));
infos->setPosition(center + ccp(-193+infos->getScaledContentSize().width/2.0, -6));
this->addChild(infos);

auto button_menu = CCMenu::create();

auto useSprite = CCSprite::createWithSpriteFrameName("GJ_selectSongBtn_001.png");
auto deleteSprite = CCSprite::createWithSpriteFrameName("GJ_trashBtn_001.png");
useSprite->setScale(0.7f);
deleteSprite->setScale(0.7f);

auto useBtn = CCMenuItemSpriteExtra::create(
useSprite,
this,
menu_selector(ConfigCell::onUse)
);

useBtn->setPosition(center + ccp(180, 0));
auto deleteBtn = CCMenuItemSpriteExtra::create(
deleteSprite,
this,
menu_selector(ConfigCell::onDelete)
);


useBtn->setPosition(center + ccp(180, 15));
deleteBtn->setPosition(center + ccp(180, -15));
button_menu->addChild(useBtn);
button_menu->addChild(deleteBtn);

button_menu->setPosition(ccp(0, 0));
this->addChild(button_menu);
Expand All @@ -185,4 +208,9 @@ class ConfigCell : public cocos2d::CCLayer {
void onUse(CCObject*) {
m_functool->loadConfig(m_config);
}

void onDelete(CCObject*) {
m_history->m_presets.erase(m_history->m_presets.begin() + m_index);
m_history->refreshEntries();
}
};

0 comments on commit db41753

Please sign in to comment.