void cMouse::updateState() {
	x = mouse_x;
	y = mouse_y;
	z = mouse_z;

	// check if leftButtonIsPressed=true (which is the previous frame)
	leftButtonPressedInPreviousFrame = leftButtonPressed;
	rightButtonPressedInPreviousFrame = rightButtonPressed;

	leftButtonPressed = mouse_b & 1;
	rightButtonPressed = mouse_b & 2;

	// now check if the leftButtonPressed == false, but the previous frame was true (if so, it is
	// counted as a click)
	leftButtonClicked = (leftButtonPressedInPreviousFrame == true && leftButtonPressed == false);
	rightButtonClicked = (rightButtonPressedInPreviousFrame == true && rightButtonPressed == false);

	mouseScrolledUp = mouseScrolledDown = false;

	if (z > zValuePreviousFrame) {
		mouseScrolledUp = true;
	}

	if (z < zValuePreviousFrame) {
		mouseScrolledDown = true;
	}

	zValuePreviousFrame = z;

	// cap mouse z
	if (z > 10 || z < -10) {
		z = 0;
		position_mouse_z(0);
	}
}
int DoMouseLevel()
{
 if (mouse_z>last_scroll_mouse_for_chan )
 {

 simulate_keypress(KEY_UP << 8); last_scroll_mouse_for_chan= mouse_z;
 }
 else if (mouse_z<last_scroll_mouse_for_chan )
 {

  simulate_keypress(KEY_DOWN << 8);  last_scroll_mouse_for_chan= mouse_z;
 }

 if (window_focus_id==W_BANGER &&  mouse_x>=X_banger && mouse_x<=X_banger+480 && mouse_y>=Y_banger && mouse_y<=Y_banger+300  )//banger
 {
 switch(over_family)
 {
 case 0:
 if(editing_banger_family ==1 &&  over_banger_event>0)
 {
 if(mouse_z>mouse_level_for_event)
 {
 bangers_type[index_banger_selected][ over_banger_event-1]++;
 reset_banger_event(index_banger_selected, over_banger_event-1);
 constrain_banger_type( over_banger_event-1);
 position_mouse_z(0);  //reset
 mouse_level_for_event=mouse_z;
 mouse_level_for_banger=mouse_z;
 editing_banger_family=0;editing_banger_action=0;
 }
 if(mouse_z<mouse_level_for_event)
 {
 bangers_type[index_banger_selected][ over_banger_event-1]--;
 if(bangers_type[index_banger_selected][ over_banger_event-1]<0){bangers_type[index_banger_selected][ over_banger_event-1]=0;};
 reset_banger_event(index_banger_selected, over_banger_event-1);
 position_mouse_z(0);  //reset
 mouse_level_for_event=mouse_z;
 mouse_level_for_banger=mouse_z;
 editing_banger_family=0;editing_banger_action=0;
 }
 }
 break;
 case 1:
 if(editing_banger_action==1 && over_banger_action>0)
 {
 if(mouse_z>mouse_level_for_banger)
 {
 position_mouse_z(0);//reset
 mouse_level_for_banger=mouse_z;
 mouse_level_for_event=mouse_z;
 editing_banger_family=0;editing_banger_action=0;
 bangers_action[index_banger_selected][over_banger_action-1]++;
 reset_banger_params(index_banger_selected,over_banger_action-1);
 constrain_banger_param(over_banger_action-1);
 }
 if(mouse_z<mouse_level_for_banger)
 {
 position_mouse_z(0);//reset
 mouse_level_for_banger=mouse_z;
 mouse_level_for_event=mouse_z;
 bangers_action[index_banger_selected][over_banger_action-1]--;
 if(bangers_action[index_banger_selected][over_banger_action]<0){bangers_action[index_banger_selected][over_banger_action-1]=0;}
 reset_banger_params(index_banger_selected,over_banger_action-1);
 }
 }
 break;
 default:
 break;
 }
 }
 else
 {
 mouse_level_for_event=mouse_z;
 mouse_level_for_banger=mouse_z;
 editing_banger_family=0;editing_banger_action=0;
 }
 return(0);
}