This is my working code atm:

		if Input.is_action_just_released("scrollwheel_dn"):
			scrollwheel = true
			g.IN.get_node("InvBG/IconRack").call("_on_ScrollUp_mouse_entered")

(ignore the up/dn mismatch above)
However, at some point after a few scrolls up and down), it stops responding. Even a breakpoint at 'scrollwheel=true' stops working! If I float the mouse though on the clickable controls for scrolling (GUI buttons) it seems to unhang until I repeat the original actions that hang again.

    Shadowphile where is this running?

    Oh its gd3.

    If you catch the if statement in _process function then it will trigger if you happen to be in line with the game tick/cycle.

    Does this happen when you run this statement in _input function?

    Also how can wheel (wheel scroll up down) have pressed/released action? its like a toggle, either it triggers or not 😃

      kuligs2
      It's in the Main node _process() where I poll all of my inputs (polling is easier for now, will move more to event-driven when performance is an issue.
      I have avoided the less trivial _input functions since the Input mapping is so easy but I may be forced to try things like that.
      There is some know bugginess with mouse wheel inputs since they register as both just_pressed and released and the latter has been working for other people.

      Update: I think there was some cross-clobbering between input events and signals from the GUI buttons because I was trying to reuse the same code, or something. Anyway, doesn't seem to be a problem now. I've also noticed that BT mice can be a problem with godot because they expect action to wake up from low power. Moving one pixel is enough but a single click is often missed. It's possible that had something to do with it but I've already posted about that some time back.

        Shadowphile As for mouse wheel:

        Recently ive used this:

        func _input(event:InputEvent) -> void:
        	if event is InputEventMouseMotion:
        		on_mouse_drag()
        	if event is InputEventMouseButton:
        		match event.button_index: 
        			MOUSE_BUTTON_LEFT:
        				if event.pressed and is_mouse_over:
        					is_mouse_down = true
        
        				else:
        					is_mouse_down = false
        
        			MOUSE_BUTTON_RIGHT:
        				if event.pressed and is_mouse_over:
        				    pass
        			MOUSE_BUTTON_WHEEL_UP:
        				# Zoom in
        				#if is_mouse_over:
        					
        				pass
        			MOUSE_BUTTON_WHEEL_DOWN:
        				# Zoom out
        				#if is_mouse_over:
        					
        				pass

        As you can see its not inside the _process() function, so its not missing any events becasue its not waiting on process frame to be processed

          kuligs2
          That looks useful, thanks. I will put this in my reference folder.
          I'm not missing scroll clicks btw but the problem went away when I made a separate (but identical function) instead of levering existing signal function.