Skip to content

Commit 0b5adc1

Browse files
committed
Fixes
1 parent 37eef69 commit 0b5adc1

File tree

5 files changed

+149
-33
lines changed

5 files changed

+149
-33
lines changed

changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.9.8
2+
- Add basic support for SimpleAxisLayout
3+
- Fix setDisplayFrame not using changed textures
4+
15
## 1.9.7
26
- Fix 2
37

mod.json

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,19 @@
66
"mac": "2.2074",
77
"ios": "2.2074"
88
},
9-
"version": "v1.9.7",
9+
"version": "v1.9.8",
1010
"id": "alphalaneous.happy_textures",
1111
"name": "Happy Textures :3",
1212
"developer": "Alphalaneous",
1313
"description": "Texture Packs on a whole new level!",
1414
"early-load": true,
15-
"dependencies": [
16-
{
17-
"id": "geode.node-ids",
18-
"version": ">=v1.15.0",
19-
"importance": "required"
20-
},
21-
{
22-
"id": "geode.texture-loader",
23-
"version": ">=v1.7.0",
24-
"importance": "suggested"
15+
"dependencies": {
16+
"geode.node-ids": ">=v1.15.0",
17+
"geode.texture-loader": {
18+
"importance": "suggested",
19+
"version": ">=v1.7.0"
2520
}
26-
],
21+
},
2722
"resources": {
2823
"files": [
2924
"resources/*"

src/UIModding.cpp

Lines changed: 124 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -361,106 +361,173 @@ void UIModding::setLayout(CCNode* node, matjson::Value attributes) {
361361

362362
matjson::Value layoutValue = attributes["layout"];
363363
if (layoutValue.isObject()) {
364-
AxisLayout* layout;
364+
Layout* layout;
365365

366366
if (node->getLayout()) {
367-
layout = typeinfo_cast<AxisLayout*>(node->getLayout());
368-
if (layoutValue.contains("remove")) {
369-
matjson::Value removeValue = layoutValue["remove"];
370-
if (removeValue.isBool()) {
371-
node->setLayout(nullptr);
367+
if (auto layout = typeinfo_cast<AxisLayout*>(node->getLayout())) {
368+
if (layoutValue.contains("remove")) {
369+
matjson::Value removeValue = layoutValue["remove"];
370+
if (removeValue.isBool()) {
371+
node->setLayout(nullptr);
372+
}
373+
}
374+
}
375+
if (auto layout = typeinfo_cast<SimpleAxisLayout*>(node->getLayout())) {
376+
if (layoutValue.contains("remove")) {
377+
matjson::Value removeValue = layoutValue["remove"];
378+
if (removeValue.isBool()) {
379+
node->setLayout(nullptr);
380+
}
372381
}
373382
}
374383
}
375384
else {
376-
layout = AxisLayout::create();
385+
layout = SimpleAxisLayout::create(Axis::Row);
377386
node->setLayout(layout);
378387
}
379-
if (layout) {
388+
if (auto simpleAxisLayout = typeinfo_cast<SimpleAxisLayout*>(layout)) {
389+
if (layoutValue.contains("axis")) {
390+
matjson::Value axisValue = layoutValue["axis"];
391+
if (axisValue.isString()) {
392+
std::string axis = axisValue.asString().unwrapOr("");
393+
if (axis == "row") {
394+
simpleAxisLayout->setAxis(Axis::Row);
395+
}
396+
else if (axis == "column") {
397+
simpleAxisLayout->setAxis(Axis::Column);
398+
}
399+
}
400+
}
401+
if (layoutValue.contains("flip-axis")) {
402+
matjson::Value flipAxisValue = layoutValue["flip-axis"];
403+
if (flipAxisValue.isBool()) {
404+
bool flipAxis = flipAxisValue.asBool().unwrapOr(false);
405+
simpleAxisLayout->setMainAxisDirection(AxisDirection::RightToLeft);
406+
}
407+
}
408+
if (layoutValue.contains("ignore-invisible")) {
409+
matjson::Value ignoreInvisibleValue = layoutValue["ignore-invisible"];
410+
if (ignoreInvisibleValue.isBool()) {
411+
bool ignoreInvisible = ignoreInvisibleValue.asBool().unwrapOr(false);
412+
simpleAxisLayout->ignoreInvisibleChildren(ignoreInvisible);
413+
}
414+
}
415+
if (layoutValue.contains("flip-cross-axis")) {
416+
matjson::Value flipCrossAxisValue = layoutValue["flip-cross-axis"];
417+
if (flipCrossAxisValue.isBool()) {
418+
bool flipCrossAxis = flipCrossAxisValue.asBool().unwrapOr(false);
419+
simpleAxisLayout->setCrossAxisDirection(AxisDirection::RightToLeft);
420+
}
421+
}
422+
if (layoutValue.contains("gap")) {
423+
matjson::Value gapValue = layoutValue["gap"];
424+
if (gapValue.isNumber()) {
425+
float gap = gapValue.asDouble().unwrapOr(0);
426+
simpleAxisLayout->setGap(gap);
427+
}
428+
}
429+
if (layoutValue.contains("axis-alignment")) {
430+
matjson::Value axisAlignmentValue = layoutValue["axis-alignment"];
431+
if (axisAlignmentValue.isString()) {
432+
std::string axisAlignmentStr = axisAlignmentValue.asString().unwrapOr("");
433+
MainAxisAlignment axisAlignment = getSimpleMainAxisAlignment(axisAlignmentStr);
434+
simpleAxisLayout->setMainAxisAlignment(axisAlignment);
435+
}
436+
}
437+
if (layoutValue.contains("cross-axis-alignment")) {
438+
matjson::Value crossAxisAlignmentValue = layoutValue["cross-axis-alignment"];
439+
if (crossAxisAlignmentValue.isString()) {
440+
std::string crossAxisAlignmentStr = crossAxisAlignmentValue.asString().unwrapOr("");
441+
CrossAxisAlignment axisAlignment = getSimpleCrossAxisAlignment(crossAxisAlignmentStr);
442+
simpleAxisLayout->setCrossAxisAlignment(axisAlignment);
443+
}
444+
}
445+
}
446+
if (auto axisLayout = typeinfo_cast<AxisLayout*>(layout)) {
380447

381448
if (layoutValue.contains("axis")) {
382449
matjson::Value axisValue = layoutValue["axis"];
383450
if (axisValue.isString()) {
384451
std::string axis = axisValue.asString().unwrapOr("");
385452
if (axis == "row") {
386-
layout->setAxis(Axis::Row);
453+
axisLayout->setAxis(Axis::Row);
387454
}
388455
else if (axis == "column") {
389-
layout->setAxis(Axis::Column);
456+
axisLayout->setAxis(Axis::Column);
390457
}
391458
}
392459
}
393460
if (layoutValue.contains("flip-axis")) {
394461
matjson::Value flipAxisValue = layoutValue["flip-axis"];
395462
if (flipAxisValue.isBool()) {
396463
bool flipAxis = flipAxisValue.asBool().unwrapOr(false);
397-
layout->setAxisReverse(flipAxis);
464+
axisLayout->setAxisReverse(flipAxis);
398465
}
399466
}
400467
if (layoutValue.contains("ignore-invisible")) {
401468
matjson::Value ignoreInvisibleValue = layoutValue["ignore-invisible"];
402469
if (ignoreInvisibleValue.isBool()) {
403470
bool ignoreInvisible = ignoreInvisibleValue.asBool().unwrapOr(false);
404-
layout->ignoreInvisibleChildren(ignoreInvisible);
471+
axisLayout->ignoreInvisibleChildren(ignoreInvisible);
405472
}
406473
}
407474
if (layoutValue.contains("flip-cross-axis")) {
408475
matjson::Value flipCrossAxisValue = layoutValue["flip-cross-axis"];
409476
if (flipCrossAxisValue.isBool()) {
410477
bool flipCrossAxis = flipCrossAxisValue.asBool().unwrapOr(false);
411-
layout->setCrossAxisReverse(flipCrossAxis);
478+
axisLayout->setCrossAxisReverse(flipCrossAxis);
412479
}
413480
}
414481
if (layoutValue.contains("auto-scale")) {
415482
matjson::Value autoScaleValue = layoutValue["auto-scale"];
416483
if (autoScaleValue.isBool()) {
417484
bool autoScale = autoScaleValue.asBool().unwrapOr(false);
418-
layout->setAutoScale(autoScale);
485+
axisLayout->setAutoScale(autoScale);
419486
}
420487
}
421488
if (layoutValue.contains("grow-cross-axis")) {
422489
matjson::Value growCrossAxisValue = layoutValue["grow-cross-axis"];
423490
if (growCrossAxisValue.isBool()) {
424491
bool growCrossAxis = growCrossAxisValue.asBool().unwrapOr(false);
425-
layout->setGrowCrossAxis(growCrossAxis);
492+
axisLayout->setGrowCrossAxis(growCrossAxis);
426493
}
427494
}
428495
if (layoutValue.contains("allow-cross-axis-overflow")) {
429496
matjson::Value allowCrossAxisOverflowValue = layoutValue["allow-cross-axis-overflow"];
430497
if (allowCrossAxisOverflowValue.isBool()) {
431498
bool allowCrossAxisOverflow = allowCrossAxisOverflowValue.asBool().unwrapOr(false);
432-
layout->setCrossAxisOverflow(allowCrossAxisOverflow);
499+
axisLayout->setCrossAxisOverflow(allowCrossAxisOverflow);
433500
}
434501
}
435502
if (layoutValue.contains("gap")) {
436503
matjson::Value gapValue = layoutValue["gap"];
437504
if (gapValue.isNumber()) {
438505
float gap = gapValue.asDouble().unwrapOr(0);
439-
layout->setGap(gap);
506+
axisLayout->setGap(gap);
440507
}
441508
}
442509
if (layoutValue.contains("axis-alignment")) {
443510
matjson::Value axisAlignmentValue = layoutValue["axis-alignment"];
444511
if (axisAlignmentValue.isString()) {
445512
std::string axisAlignmentStr = axisAlignmentValue.asString().unwrapOr("");
446513
AxisAlignment axisAlignment = getAxisAlignment(axisAlignmentStr);
447-
layout->setAxisAlignment(axisAlignment);
514+
axisLayout->setAxisAlignment(axisAlignment);
448515
}
449516
}
450517
if (layoutValue.contains("cross-axis-alignment")) {
451518
matjson::Value crossAxisAlignmentValue = layoutValue["cross-axis-alignment"];
452519
if (crossAxisAlignmentValue.isString()) {
453520
std::string crossAxisAlignmentStr = crossAxisAlignmentValue.asString().unwrapOr("");
454521
AxisAlignment axisAlignment = getAxisAlignment(crossAxisAlignmentStr);
455-
layout->setCrossAxisAlignment(axisAlignment);
522+
axisLayout->setCrossAxisAlignment(axisAlignment);
456523
}
457524
}
458525
if (layoutValue.contains("cross-axis-line-alignment")) {
459526
matjson::Value crossAxisLineAlignmentValue = layoutValue["cross-axis-line-alignment"];
460527
if (crossAxisLineAlignmentValue.isString()) {
461528
std::string crossAxisLineAlignmentStr = crossAxisLineAlignmentValue.asString().unwrapOr("");
462529
AxisAlignment axisAlignment = getAxisAlignment(crossAxisLineAlignmentStr);
463-
layout->setCrossAxisLineAlignment(axisAlignment);
530+
axisLayout->setCrossAxisLineAlignment(axisAlignment);
464531
}
465532
}
466533
}
@@ -1675,6 +1742,43 @@ AxisAlignment UIModding::getAxisAlignment(std::string name) {
16751742
return axisAlignment;
16761743
}
16771744

1745+
MainAxisAlignment UIModding::getSimpleMainAxisAlignment(std::string name) {
1746+
MainAxisAlignment axisAlignment = MainAxisAlignment::Start;
1747+
if (name == "start") {
1748+
axisAlignment = MainAxisAlignment::Start;
1749+
}
1750+
if (name == "center") {
1751+
axisAlignment = MainAxisAlignment::Center;
1752+
}
1753+
if (name == "end") {
1754+
axisAlignment = MainAxisAlignment::End;
1755+
}
1756+
if (name == "even") {
1757+
axisAlignment = MainAxisAlignment::Even;
1758+
}
1759+
if (name == "between") {
1760+
axisAlignment = MainAxisAlignment::Between;
1761+
}
1762+
if (name == "around") {
1763+
axisAlignment = MainAxisAlignment::Around;
1764+
}
1765+
return axisAlignment;
1766+
}
1767+
1768+
CrossAxisAlignment UIModding::getSimpleCrossAxisAlignment(std::string name) {
1769+
CrossAxisAlignment axisAlignment = CrossAxisAlignment::Start;
1770+
if (name == "start") {
1771+
axisAlignment = CrossAxisAlignment::Start;
1772+
}
1773+
if (name == "center") {
1774+
axisAlignment = CrossAxisAlignment::Center;
1775+
}
1776+
if (name == "end") {
1777+
axisAlignment = CrossAxisAlignment::End;
1778+
}
1779+
return axisAlignment;
1780+
}
1781+
16781782
void UIModding::loadNodeFiles() {
16791783
std::vector<std::filesystem::path> packs = Utils::getActivePacks();
16801784
for (std::filesystem::path path : packs) {

src/UIModding.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class UIModding {
7171
std::vector<std::filesystem::path> getActivePacks();
7272
void startFileListeners();
7373
AxisAlignment getAxisAlignment(std::string name);
74+
MainAxisAlignment getSimpleMainAxisAlignment(std::string name);
75+
CrossAxisAlignment getSimpleCrossAxisAlignment(std::string name);
7476
std::optional<ColorData> getColors(std::string name);
7577
void updateColors(CCNode* node, std::string name);
7678
void evaluateIf(CCNode* node, matjson::Value ifArray);

src/nodes/CCSprite.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,20 @@ class $modify(MyCCSprite, CCSprite) {
3030
static void onModify(auto& self) {
3131
(void) self.setHookPriority("cocos2d::CCSprite::initWithSpriteFrameName", Priority::VeryEarly);
3232
(void) self.setHookPriority("cocos2d::CCSprite::createWithSpriteFrameName", Priority::VeryEarly);
33+
(void) self.setHookPriority("cocos2d::CCSprite::setDisplayFrame", Priority::VeryEarly);
3334
}
3435

36+
void setDisplayFrame(CCSpriteFrame *pNewFrame) {
37+
std::string frameName = Utils::getSpriteName(pNewFrame);
38+
if (Utils::spriteExistsInPacks(frameName)) {
39+
CCSprite* spr = CCSprite::create(frameName.c_str());
40+
auto spriteFrame = CCSpriteFrame::createWithTexture(spr->getTexture(), spr->getTextureRect());
41+
CCSpriteFrameCache::get()->addSpriteFrame(spriteFrame, frameName.c_str());
42+
return CCSprite::setDisplayFrame(spriteFrame);
43+
}
44+
CCSprite::setDisplayFrame(pNewFrame);
45+
}
46+
3547
bool initWithSpriteFrameName(const char *pszSpriteFrameName) {
3648
std::string copy = pszSpriteFrameName;
3749

@@ -44,7 +56,6 @@ class $modify(MyCCSprite, CCSprite) {
4456
return CCSprite::initWithSpriteFrameName(copy.c_str());
4557
}
4658

47-
4859
static CCSprite* createWithSpriteFrameName(const char *pszSpriteFrameName) {
4960
std::string copy = pszSpriteFrameName;
5061

0 commit comments

Comments
 (0)