Skip to content

Commit 07eaf52

Browse files
committed
Worked on Button Action Manager
1 parent bbf8334 commit 07eaf52

File tree

5 files changed

+194
-85
lines changed

5 files changed

+194
-85
lines changed

src/ButtonActionManager.hpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#pragma once
2+
#include <Geode/Geode.hpp>
3+
4+
using namespace geode::prelude;
5+
6+
class ButtonActionManager : CCObject {
7+
static ButtonActionManager* instance;
8+
public:
9+
static ButtonActionManager* get() {
10+
if(!instance){
11+
instance = new ButtonActionManager();
12+
instance->retain();
13+
}
14+
return instance;
15+
}
16+
17+
static void set(ButtonActionManager* inst){
18+
if(instance){
19+
instance->release();
20+
}
21+
instance = inst;
22+
inst->retain();
23+
}
24+
25+
ButtonActionManager(){
26+
this->autorelease();
27+
}
28+
29+
virtual void activate(CCMenuItem* sender){
30+
log::debug("activate the main");
31+
sender->activate();
32+
}
33+
34+
virtual void selected(CCMenuItem* sender){
35+
sender->selected();
36+
}
37+
38+
virtual void unselected(CCMenuItem* sender){
39+
sender->unselected();
40+
}
41+
};
42+
ButtonActionManager* ButtonActionManager::instance = nullptr;
43+
44+
class OtherButtonManager : public ButtonActionManager{
45+
void selected(CCMenuItem* sender){
46+
log::debug("now does stuff on select");
47+
sender->selected();
48+
}
49+
};
50+
51+
class $modify(CCMenuItemSpriteExtra){
52+
void selected(){
53+
auto buttonManager = ButtonActionManager::get();
54+
buttonManager->selected(this);
55+
}
56+
void activate(){
57+
auto buttonManager = ButtonActionManager::get();
58+
59+
buttonManager->activate(this);
60+
//auto other = new OtherButtonManager();
61+
//ButtonActionManager::set(other);
62+
}
63+
void unselected(){
64+
auto buttonManager = ButtonActionManager::get();
65+
buttonManager->unselected(this);
66+
}
67+
};

src/HoldButtonManager.cpp

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
#include <Geode/Geode.hpp>
22
#include "HoldButtonManager.hpp"
33

4-
HoldButtonManager* HoldButtonManager::instance = nullptr;
4+
//HoldButtonManager* HoldButtonManager::instance = nullptr;
55

66

7-
void HoldButtonManager::registerWithNode(CCNode* node ,CircleBaseSize size) { //final goal is to make user pass in a basedButtonSprite
7+
HoldButtonManager* HoldButtonManager::get() {
8+
static HoldButtonManager* instance = nullptr;
9+
if(!instance){
10+
instance = new HoldButtonManager();
11+
//log::debug("this should only happen once");
12+
//log::debug("afterafterafter{}", instance->m_animate->retainCount());
13+
}
14+
log::debug("afterafterafter{}", instance->m_animate->retainCount());
15+
return instance;
16+
}
17+
18+
void HoldButtonManager::registerWithNode(CCNode* node) { //final goal is to make user pass in a basedButtonSprite
819
auto button = static_cast<MyCCMenuItemSpriteExtra*>(node);
920
if(!button){
1021
log::error("failed to cast {}", node->getID());
@@ -13,7 +24,7 @@ void HoldButtonManager::registerWithNode(CCNode* node ,CircleBaseSize size) { //
1324
auto gif = CCAnimatedSprite::createWithSpriteFrame(
1425
CCSpriteFrameCache::get()->spriteFrameByName("HoldLoadingA.png"_spr)
1526
);
16-
auto selectSprite = CircleButtonSprite::create(gif, CircleBaseColor::Green, size);
27+
auto selectSprite = CircleButtonSprite::create(gif, CircleBaseColor::Green, CircleBaseSize::Medium);
1728

1829
button->setSelectedImage(selectSprite);
1930
button->m_fields->m_originalCallback = button->m_pfnSelector;
@@ -25,38 +36,26 @@ void HoldButtonManager::registerWithNode(CCNode* node ,CircleBaseSize size) { //
2536
button->m_fields->m_activateCallback = std::bind(&HoldButtonManager::btnActivate, this, std::placeholders::_1);
2637
}
2738

28-
void HoldButtonManager::registerBtn(std::string_view id, CCNode* menu, CircleBaseSize size){
39+
void HoldButtonManager::registerBtn(std::string_view id, CCNode* menu){
2940
auto node = menu->getChildByIDRecursive(id);
3041
if(!node) {
3142
//log::debug("failed to find {}", id);
3243
return;
3344
}
34-
/*auto button = static_cast<MyCCMenuItemSpriteExtra*>(node); // I feel like this should break but it doesn't somehow
35-
if(!button){
36-
log::error("failed to cast {}", id);
37-
return;
38-
}*/
3945
log::debug("Making {} a hold button", id);
40-
registerWithNode(node, size);
46+
registerWithNode(node);
4147
}
4248

4349

4450
void HoldButtonManager::btnUnselect(CCObject* sender) {
4551
auto button = static_cast<CCMenuItemSpriteExtra*>(sender);
4652
CircleButtonSprite* sprite = typeinfo_cast<CircleButtonSprite*>(button->getSelectedImage());
4753
if(sprite) {
48-
//log::debug("{}", m_animate->retainCount());
49-
//auto animate = m_animate;
50-
//CC_SAFE_RETAIN(animate);
51-
5254
auto animSprite = static_cast<CCAnimatedSprite*>(sprite->getTopNode());
5355
if (animSprite) {
5456
log::debug("unselected");
5557
animSprite->stopAction(m_animate);
56-
57-
//animSprite->runAction(m_animate);
5858
}
59-
//CC_SAFE_RELEASE(animate);
6059
}
6160
}
6261

@@ -79,8 +78,6 @@ void HoldButtonManager::btnSelect(CCObject* sender){
7978

8079
CircleButtonSprite* sprite = typeinfo_cast<CircleButtonSprite*>(button->getSelectedImage());
8180
if(sprite) {
82-
log::debug("{}", m_animate->retainCount());
83-
8481
auto animSprite = static_cast<CCAnimatedSprite*>(sprite->getTopNode());
8582
if (animSprite) {
8683
animSprite->stopAllActions();
@@ -89,8 +86,8 @@ void HoldButtonManager::btnSelect(CCObject* sender){
8986
}
9087
}
9188

92-
//https://www.merriam-webster.com/thesaurus/instantiate
93-
void HoldButtonManager::embodyAnimate(){
89+
90+
void HoldButtonManager::loadAnimate(){
9491
auto frames = CCArray::create();
9592

9693
for(int i = 'A'; i<='T'; i++) {
@@ -106,7 +103,6 @@ void HoldButtonManager::embodyAnimate(){
106103
//m_fields->m_animation->addSpriteFrame(CCSpriteFrameCache::get()->spriteFrameByName(ahhh));
107104
}
108105
auto animation = CCAnimation::createWithSpriteFrames(frames, 0.025);
109-
//animation->retain(); //FOR TESTING THIS CAUSES A LEAK
110106
m_animate = CCAnimate::create(animation);
111107

112108
CC_SAFE_RETAIN(m_animate);

src/HoldButtonManager.hpp

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,28 @@
1-
1+
#pragma once
22
#include <Geode/Geode.hpp>
33

44
using namespace geode::prelude;
55

6-
class HoldButtonManager : CCNode {
7-
static HoldButtonManager* instance;
6+
class HoldButtonManager : CCObject {
7+
//static HoldButtonManager* instance;
88
public:
99
utils::Timer<std::chrono::high_resolution_clock> m_timer;
1010
CCAnimate* m_animate;
1111
HoldButtonManager(){
12-
embodyAnimate();
13-
12+
loadAnimate();
1413
m_timer = utils::Timer();
15-
1614
}
1715
~HoldButtonManager(){
1816
//log::debug("deleting");
1917
m_animate->release();
2018
}
2119

2220

23-
static HoldButtonManager* get() {
24-
if(!instance){
25-
instance = new HoldButtonManager();
26-
//log::debug("this should only happen once");
27-
//log::debug("afterafterafter{}", instance->m_animate->retainCount());
28-
}
29-
log::debug("afterafterafter{}", instance->m_animate->retainCount());
30-
return instance;
31-
}
32-
33-
void registerWithNode(CCNode* node ,CircleBaseSize size);
21+
static HoldButtonManager* get() ;
3422

35-
void registerBtn(std::string_view id, CCNode* menu, CircleBaseSize size);
23+
void registerWithNode(CCNode* node);
3624

37-
void registerBtn(std::string_view id, CCNode* menu) {
38-
registerBtn(id, menu, CircleBaseSize::Medium);
39-
}
25+
void registerBtn(std::string_view id, CCNode* menu);
4026

4127
void btnUnselect(CCObject* sender);
4228

@@ -45,8 +31,7 @@ class HoldButtonManager : CCNode {
4531
void btnSelect(CCObject* sender);
4632

4733
private:
48-
//https://www.merriam-webster.com/thesaurus/instantiate
49-
void embodyAnimate();
34+
void loadAnimate();
5035
};
5136

5237

@@ -72,11 +57,9 @@ class $modify(MyCCMenuItemSpriteExtra, CCMenuItemSpriteExtra) {
7257

7358
void activate() {
7459
//log::debug("{}",rect().size);
75-
7660
if(m_fields->m_activateCallback){
7761
m_fields->m_activateCallback(this);
7862
}
79-
8063
CCMenuItemSpriteExtra::activate();
8164
}
8265

src/ToggleButton.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#pragma once
2+

0 commit comments

Comments
 (0)