33#include < Geode/Geode.hpp>
44#include " CCMenuItemSpriteExtra.hpp"
55#include " ../UIModding.hpp"
6- #include " ../Utils.hpp"
76#include " ../Macros.hpp"
87#include < alphalaneous.alphas_geode_utils/include/NodeModding.h>
98
@@ -52,15 +51,16 @@ class $nodeModify(MyCCMenu, cocos2d::CCMenu) {
5251 }
5352
5453
55- bool isHoverable (CCNode* node, CCPoint point ) {
54+ bool isHoverable (CCNode* node) {
5655 if (!CCScene::get () || !node || isLastAlert (node)) return false ;
56+ auto worldPos = node->convertToWorldSpaceAR (CCPointZero);
5757
5858 auto sceneChild = getSceneChildContainingNode (node);
5959 if (!sceneChild) return false ;
6060
61- for (auto child : CCArrayExt<CCNode*>( CCScene::get ()->getChildren () )) {
61+ for (auto child : CCScene::get ()->getChildrenExt ( )) {
6262 if (child->getZOrder () <= sceneChild->getZOrder ()) continue ;
63- if (child->boundingBox ().containsPoint (point ) && nodeIsVisible (child)) {
63+ if (child->boundingBox ().containsPoint (worldPos ) && nodeIsVisible (child)) {
6464 return false ;
6565 }
6666 }
@@ -72,11 +72,16 @@ class $nodeModify(MyCCMenu, cocos2d::CCMenu) {
7272
7373 auto mousePos = getMousePos ();
7474 for (auto child : CCArrayExt<CCNode*>(getChildren ())) {
75+ if (!nodeIsVisible (child)) continue ;
7576 auto realItem = typeinfo_cast<CCMenuItemSpriteExtra*>(child);
7677 if (!realItem) continue ;
78+
7779 if (EventCCMenuItemSpriteExtra* button = static_cast <EventCCMenuItemSpriteExtra*>(realItem)) {
78- auto worldPos = button->convertToWorldSpaceAR (CCPointZero);
79- bool isValid = nodeIsVisible (button) && button->boundingBox ().containsPoint (mousePos) && isHoverable (button, worldPos);
80+ auto worldPos = button->convertToWorldSpace (CCPointZero);
81+
82+ auto nodeMouse = convertToNodeSpace (mousePos);
83+
84+ bool isValid = button->boundingBox ().containsPoint (nodeMouse) && isHoverable (button);
8085 button->checkTouch (!isValid);
8186 }
8287 }
0 commit comments