projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed displaying title strings from config files in info screen headline
[rocksndiamonds.git]
/
src
/
events.c
diff --git
a/src/events.c
b/src/events.c
index 65b20da1cb634a22e5a6cc1e4c8ce39fdd8a1e9e..7a3f9987d4b09a80ebdc48c970c8eb118f3b4727 100644
(file)
--- a/
src/events.c
+++ b/
src/events.c
@@
-304,7
+304,8
@@
void HandleMouseCursor()
cursor_inside_playfield &&
DelayReached(&special_cursor_delay, special_cursor_delay_value))
{
cursor_inside_playfield &&
DelayReached(&special_cursor_delay, special_cursor_delay_value))
{
- if (level.game_engine_type != GAME_ENGINE_TYPE_MM)
+ if (level.game_engine_type != GAME_ENGINE_TYPE_MM ||
+ tile_cursor.enabled)
SetMouseCursor(CURSOR_PLAYFIELD);
}
}
SetMouseCursor(CURSOR_PLAYFIELD);
}
}
@@
-400,6
+401,7
@@
void SetPlayerMouseAction(int mx, int my, int button)
{
int lx = getLevelFromScreenX(mx);
int ly = getLevelFromScreenY(my);
{
int lx = getLevelFromScreenX(mx);
int ly = getLevelFromScreenY(my);
+ int new_button = (!local_player->mouse_action.button && button);
ClearPlayerMouseAction();
ClearPlayerMouseAction();
@@
-412,10
+414,12
@@
void SetPlayerMouseAction(int mx, int my, int button)
if (tape.recording && tape.pausing && tape.use_mouse)
{
if (tape.recording && tape.pausing && tape.use_mouse)
{
- /*
prevent button release or motion events from un-pausing a paused game
*/
- if (
button && !motion_status
)
- TapeTogglePause(TAPE_TOGGLE_
MANUAL
);
+ /*
un-pause a paused game only if mouse button was newly pressed down
*/
+ if (
new_button
)
+ TapeTogglePause(TAPE_TOGGLE_
AUTOMATIC
);
}
}
+
+ SetTileCursorXY(lx, ly);
}
void SleepWhileUnmapped()
}
void SleepWhileUnmapped()
@@
-1824,7
+1828,7
@@
void HandleKey(Key key, int key_status)
else
stored_player[pnr].action &= ~key_action;
else
stored_player[pnr].action &= ~key_action;
- if (tape.single_step && tape.recording && tape.pausing)
+ if (tape.single_step && tape.recording && tape.pausing
&& !tape.use_mouse
)
{
if (key_status == KEY_PRESSED && key_action & KEY_MOTION)
{
{
if (key_status == KEY_PRESSED && key_action & KEY_MOTION)
{
@@
-2187,7
+2191,7
@@
static void HandleTileCursor(int dx, int dy, int button)
(dx < 0 ? MB_LEFTBUTTON :
dx > 0 ? MB_RIGHTBUTTON : MB_RELEASED));
}
(dx < 0 ? MB_LEFTBUTTON :
dx > 0 ? MB_RIGHTBUTTON : MB_RELEASED));
}
- else
+ else
if (!tile_cursor.moving)
{
int old_xpos = tile_cursor.xpos;
int old_ypos = tile_cursor.ypos;
{
int old_xpos = tile_cursor.xpos;
int old_ypos = tile_cursor.ypos;
@@
-2242,6
+2246,8
@@
void HandleJoystick()
static unsigned int joytest_delay = 0;
static unsigned int joytest_delay_value = GADGET_FRAME_DELAY;
static int joytest_last = 0;
static unsigned int joytest_delay = 0;
static unsigned int joytest_delay_value = GADGET_FRAME_DELAY;
static int joytest_last = 0;
+ int delay_value_first = GADGET_FRAME_DELAY_FIRST;
+ int delay_value = GADGET_FRAME_DELAY;
int joystick = HandleJoystickForAllPlayers();
int keyboard = key_joystick_mapping;
int joy = (joystick | keyboard);
int joystick = HandleJoystickForAllPlayers();
int keyboard = key_joystick_mapping;
int joy = (joystick | keyboard);
@@
-2254,6
+2260,7
@@
void HandleJoystick()
int newbutton = (AnyJoystickButton() == JOY_BUTTON_NEW_PRESSED);
int dx = (left ? -1 : right ? 1 : 0);
int dy = (up ? -1 : down ? 1 : 0);
int newbutton = (AnyJoystickButton() == JOY_BUTTON_NEW_PRESSED);
int dx = (left ? -1 : right ? 1 : 0);
int dy = (up ? -1 : down ? 1 : 0);
+ boolean use_delay_value_first = (joytest != joytest_last);
if (HandleGlobalAnimClicks(-1, -1, newbutton))
{
if (HandleGlobalAnimClicks(-1, -1, newbutton))
{
@@
-2263,10
+2270,18
@@
void HandleJoystick()
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
{
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
{
- // when playing MM style levels, also use delay for keyboard events
if (game_status == GAME_MODE_PLAYING)
if (game_status == GAME_MODE_PLAYING)
+ {
+ // when playing MM style levels, also use delay for keyboard events
joytest |= keyboard;
joytest |= keyboard;
+ // only use first delay value for new events, but not for changed events
+ use_delay_value_first = (!joytest != !joytest_last);
+
+ // only use delay after the initial keyboard event
+ delay_value = 0;
+ }
+
// for any joystick or keyboard event, enable playfield tile cursor
if (dx || dy || button)
SetTileCursorEnabled(TRUE);
// for any joystick or keyboard event, enable playfield tile cursor
if (dx || dy || button)
SetTileCursorEnabled(TRUE);
@@
-2281,7
+2296,7
@@
void HandleJoystick()
{
/* first start with longer delay, then continue with shorter delay */
joytest_delay_value =
{
/* first start with longer delay, then continue with shorter delay */
joytest_delay_value =
- (
joytest != joytest_last ? GADGET_FRAME_DELAY_FIRST : GADGET_FRAME_DELAY
);
+ (
use_delay_value_first ? delay_value_first : delay_value
);
}
joytest_last = joytest;
}
joytest_last = joytest;
@@
-2315,8
+2330,11
@@
void HandleJoystick()
}
case GAME_MODE_PLAYING:
}
case GAME_MODE_PLAYING:
+#if 0
+ // !!! causes immediate GameEnd() when solving MM level with keyboard !!!
if (tape.playing || keyboard)
newbutton = ((joy & JOY_BUTTON) != 0);
if (tape.playing || keyboard)
newbutton = ((joy & JOY_BUTTON) != 0);
+#endif
if (newbutton && AllPlayersGone)
{
if (newbutton && AllPlayersGone)
{
@@
-2325,7
+2343,12
@@
void HandleJoystick()
return;
}
return;
}
- if (tape.recording && tape.pausing)
+ if (tape.single_step && tape.recording && tape.pausing && !tape.use_mouse)
+ {
+ if (joystick & JOY_ACTION)
+ TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+ }
+ else if (tape.recording && tape.pausing && !tape.use_mouse)
{
if (joystick & JOY_ACTION)
TapeTogglePause(TAPE_TOGGLE_MANUAL);
{
if (joystick & JOY_ACTION)
TapeTogglePause(TAPE_TOGGLE_MANUAL);