- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_GAME_BUTTON(mx,my) || GAME_BUTTON(mx)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawGameButton(game_state[choice] | BUTTON_RELEASED);
- }
- else if (ON_GAME_BUTTON(mx,my) && GAME_BUTTON(mx)==choice && !pressed)
- {
- pressed = TRUE;
- DrawGameButton(game_state[choice] | BUTTON_PRESSED);
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_GAME_BUTTON(mx,my) && GAME_BUTTON(mx)==choice && pressed)
- {
- DrawGameButton(game_state[choice] | BUTTON_RELEASED);
- return_code = 1<<choice;
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-int CheckYesNoButtons(int mx, int my, int button)
-{
- int return_code = 0;
- static int choice = -1;
- static boolean pressed = FALSE;
- static int yesno_button[5] =
- {
- BUTTON_OK,
- BUTTON_NO
- };
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_YESNO_BUTTON(mx,my))
- {
- choice = YESNO_BUTTON(mx);
- pressed = TRUE;
- DrawYesNoButton(yesno_button[choice] | BUTTON_PRESSED, DB_NORMAL);
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_YESNO_BUTTON(mx,my) || YESNO_BUTTON(mx)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawYesNoButton(yesno_button[choice] | BUTTON_RELEASED, DB_NORMAL);
- }
- else if (ON_YESNO_BUTTON(mx,my) && YESNO_BUTTON(mx)==choice && !pressed)
- {
- pressed = TRUE;
- DrawYesNoButton(yesno_button[choice] | BUTTON_PRESSED, DB_NORMAL);
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_YESNO_BUTTON(mx,my) && YESNO_BUTTON(mx)==choice && pressed)
- {
- DrawYesNoButton(yesno_button[choice] | BUTTON_RELEASED, DB_NORMAL);
- return_code = choice+1;
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-int CheckConfirmButton(int mx, int my, int button)
-{
- int return_code = 0;
- static int choice = -1;
- static boolean pressed = FALSE;
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_CONFIRM_BUTTON(mx,my))
- {
- choice = 0;
- pressed = TRUE;
- DrawConfirmButton(BUTTON_PRESSED, DB_NORMAL);
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if (!ON_CONFIRM_BUTTON(mx,my) && choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawConfirmButton(BUTTON_RELEASED, DB_NORMAL);
- }
- else if (ON_CONFIRM_BUTTON(mx,my) && !pressed)
- {
- pressed = TRUE;
- DrawConfirmButton(BUTTON_PRESSED, DB_NORMAL);
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_CONFIRM_BUTTON(mx,my) && pressed)
- {
- DrawConfirmButton(BUTTON_RELEASED, DB_NORMAL);
- return_code = BUTTON_CONFIRM;
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-int CheckPlayerButtons(int mx, int my, int button)
-{
- int return_code = 0;
- static int choice = -1;
- static boolean pressed = FALSE;
- int player_state[4] =
- {
- BUTTON_PLAYER_1,
- BUTTON_PLAYER_2,
- BUTTON_PLAYER_3,
- BUTTON_PLAYER_4
- };
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_PLAYER_BUTTON(mx,my))
- {
- choice = PLAYER_BUTTON(mx,my);
- pressed = TRUE;
- DrawPlayerButton(player_state[choice] | BUTTON_PRESSED, DB_NORMAL);
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_PLAYER_BUTTON(mx,my) || PLAYER_BUTTON(mx,my)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawPlayerButton(player_state[choice] | BUTTON_RELEASED, DB_NORMAL);
- }
- else if (ON_PLAYER_BUTTON(mx,my) && PLAYER_BUTTON(mx,my)==choice && !pressed)
- {
- pressed = TRUE;
- DrawPlayerButton(player_state[choice] | BUTTON_PRESSED, DB_NORMAL);
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_PLAYER_BUTTON(mx,my) && PLAYER_BUTTON(mx,my)==choice && pressed)
- {
- DrawPlayerButton(player_state[choice] | BUTTON_RELEASED, DB_NORMAL);
- return_code = player_state[choice];
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-/* several buttons in the level editor */
-
-int CheckEditButtons(int mx, int my, int button)
-{
- int return_code = 0;
- static int choice = -1;
- static boolean pressed = FALSE;
- static int edit_button[6] =
- {
- ED_BUTTON_CTRL,
- ED_BUTTON_FILL,
- ED_BUTTON_LEFT,
- ED_BUTTON_UP,
- ED_BUTTON_DOWN,
- ED_BUTTON_RIGHT
- };
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_EDIT_BUTTON(mx,my))
- {
- choice = EDIT_BUTTON(mx,my);
- pressed = TRUE;
- DrawEditButton(edit_button[choice] | ED_BUTTON_PRESSED);
- if (edit_button[choice]!=ED_BUTTON_CTRL &&
- edit_button[choice]!=ED_BUTTON_FILL)
- return_code = 1<<choice;
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_EDIT_BUTTON(mx,my) || EDIT_BUTTON(mx,my)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawEditButton(edit_button[choice] | ED_BUTTON_RELEASED);
- }
- else if (ON_EDIT_BUTTON(mx,my) && EDIT_BUTTON(mx,my)==choice)
- {
- if (!pressed)
- DrawEditButton(edit_button[choice] | ED_BUTTON_PRESSED);
- pressed = TRUE;
- if (edit_button[choice]!=ED_BUTTON_CTRL &&
- edit_button[choice]!=ED_BUTTON_FILL)
- return_code = 1<<choice;
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_EDIT_BUTTON(mx,my) && EDIT_BUTTON(mx,my)==choice && pressed)
- {
- DrawEditButton(edit_button[choice] | ED_BUTTON_RELEASED);
- if (edit_button[choice]==ED_BUTTON_CTRL ||
- edit_button[choice]==ED_BUTTON_FILL)
- return_code = 1<<choice;
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-int CheckCtrlButtons(int mx, int my, int button)
-{
- int return_code = 0;
- static int choice = -1;
- static boolean pressed = FALSE;
- static int ctrl_button[4] =
- {
- ED_BUTTON_EDIT,
- ED_BUTTON_CLEAR,
- ED_BUTTON_UNDO,
- ED_BUTTON_EXIT
- };
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_CTRL_BUTTON(mx,my))
- {
- choice = CTRL_BUTTON(mx,my);
- pressed = TRUE;
- DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_PRESSED);
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_CTRL_BUTTON(mx,my) || CTRL_BUTTON(mx,my)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_RELEASED);
- }
- else if (ON_CTRL_BUTTON(mx,my) && CTRL_BUTTON(mx,my)==choice && !pressed)
- {
- pressed = TRUE;
- DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_PRESSED);
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_CTRL_BUTTON(mx,my) && CTRL_BUTTON(mx,my)==choice && pressed)
- {
- DrawCtrlButton(ctrl_button[choice] | ED_BUTTON_RELEASED);
- return_code = 1<<(choice+6);
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-int CheckElemButtons(int mx, int my, int button)
-{
- int return_code = -1;
- static int choice = -1;
- static boolean pressed = FALSE;
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_ELEM_BUTTON(mx,my))
- {
- choice = ELEM_BUTTON(mx,my);
- pressed = TRUE;
- DrawElemButton(choice,ED_BUTTON_PRESSED);
- if (choice==ED_BUTTON_EUP ||
- choice==ED_BUTTON_EDOWN)
- return_code = choice;
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_ELEM_BUTTON(mx,my) || ELEM_BUTTON(mx,my)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawElemButton(choice,ED_BUTTON_RELEASED);
- }
- else if (ON_ELEM_BUTTON(mx,my) && ELEM_BUTTON(mx,my)==choice)
- {
- if (!pressed)
- DrawElemButton(choice,ED_BUTTON_PRESSED);
- pressed = TRUE;
- if (choice==ED_BUTTON_EUP ||
- choice==ED_BUTTON_EDOWN)
- return_code = choice;
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_ELEM_BUTTON(mx,my) && ELEM_BUTTON(mx,my)==choice && pressed)
- {
- DrawElemButton(choice,ED_BUTTON_RELEASED);
- if (choice!=ED_BUTTON_EUP &&
- choice!=ED_BUTTON_EDOWN)
- return_code = choice;
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-int CheckCountButtons(int mx, int my, int button)
-{
- int return_code = -1;
- static int choice = -1;
- static boolean pressed = FALSE;
-
- if (button)
- {
- if (!motion_status) /* Maustaste neu gedrückt */
- {
- if (ON_COUNT_BUTTON(mx,my))
- {
- choice = COUNT_BUTTON(mx,my);
- pressed = TRUE;
- DrawCountButton(choice,ED_BUTTON_PRESSED);
- return_code = choice;
- }
- }
- else /* Mausbewegung bei gedrückter Maustaste */
- {
- if ((!ON_COUNT_BUTTON(mx,my) || COUNT_BUTTON(mx,my)!=choice) &&
- choice>=0 && pressed)
- {
- pressed = FALSE;
- DrawCountButton(choice,ED_BUTTON_RELEASED);
- }
- else if (ON_COUNT_BUTTON(mx,my) && COUNT_BUTTON(mx,my)==choice)
- {
- if (!pressed)
- DrawCountButton(choice,ED_BUTTON_PRESSED);
- pressed = TRUE;
- return_code = choice;
- }
- }
- }
- else /* Maustaste wieder losgelassen */
- {
- if (ON_COUNT_BUTTON(mx,my) && COUNT_BUTTON(mx,my)==choice && pressed)
- {
- DrawCountButton(choice,ED_BUTTON_RELEASED);
- choice = -1;
- pressed = FALSE;
- }
- else
- {
- choice = -1;
- pressed = FALSE;
- }
- }
-
- BackToFront();
- return(return_code);
-}
-
-
-/* NEW GADGET STUFF -------------------------------------------------------- */
-
-
-static struct GadgetInfo *gadget_list_first_entry = NULL;
-static struct GadgetInfo *gadget_list_last_entry = NULL;
-static int next_free_gadget_id = 1;
-static boolean gadget_id_wrapped = FALSE;
-
-static struct GadgetInfo *getGadgetInfoFromGadgetID(int id)
-{
- struct GadgetInfo *gi = gadget_list_first_entry;
-
- while (gi && gi->id != id)
- gi = gi->next;
-
- return gi;
-}
-
-static int getNewGadgetID()
-{
- int id = next_free_gadget_id++;
-
- if (next_free_gadget_id <= 0) /* counter overrun */
- {
- gadget_id_wrapped = TRUE; /* now we must check each ID */
- next_free_gadget_id = 0;
- }
-
- if (gadget_id_wrapped)
- {
- next_free_gadget_id++;
- while (getGadgetInfoFromGadgetID(next_free_gadget_id) != NULL)
- next_free_gadget_id++;
- }
-
- if (next_free_gadget_id <= 0) /* cannot get new gadget id */
- Error(ERR_EXIT, "too much gadgets -- this should not happen");
-
- return id;
-}
-
-static struct GadgetInfo *getGadgetInfoFromMousePosition(int mx, int my)
-{
- struct GadgetInfo *gi = gadget_list_first_entry;
-
- while (gi)
- {
- if (gi->mapped &&
- mx >= gi->x && mx < gi->x + gi->width &&
- my >= gi->y && my < gi->y + gi->height)
- {
-
-#if 0
- if (gi->type & GD_TYPE_SCROLLBAR)
- {
- int mpos, gpos;
-
- if (gi->type == GD_TYPE_SCROLLBAR_HORIZONTAL)
- {
- mpos = mx;
- gpos = gi->x;
- }
- else
- {
- mpos = my;
- gpos = gi->y;
- }
-
- if (mpos >= gpos + gi->scrollbar.position &&
- mpos < gpos + gi->scrollbar.position + gi->scrollbar.size)
- break;
- }
- else
-#endif
-
- break;
- }
-
- gi = gi->next;
- }
-
- return gi;
-}
-
-static void default_callback_info(void *ptr)
-{
- if (game_status == LEVELED)
- HandleEditorGadgetInfoText(ptr);
-}