hedgewars/uCursor.pas
author Wuzzy <Wuzzy2@mail.ru>
Fri, 03 Aug 2018 00:39:50 +0200
changeset 13612 212036414957
parent 13499 424944a835a7
child 14289 a3531b520efb
permissions -rw-r--r--
Make cake bounce off bounce edge, stop cake at wrap edge to prevent other bug The "other bug" is that the cake just walks through terrain when it hits the wrap world edge. This behaviour is even worse.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     1
unit uCursor;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     2
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     3
interface
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     4
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     5
procedure init;
8225
186229af4fc1 GCI2012: Remove Quit Prompt On Mouse Click
Drew Gottlieb
parents: 6580
diff changeset
     6
procedure resetPosition;
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     7
procedure updatePosition;
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8225
diff changeset
     8
procedure handlePositionUpdate(x, y: LongInt);
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
     9
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    10
implementation
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    11
13499
424944a835a7 Fix cursor teleporting to center after leaving game with video recording
Wuzzy <Wuzzy2@mail.ru>
parents: 12836
diff changeset
    12
uses SDLh, uVariables, uTypes;
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    13
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    14
procedure init;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    15
begin
8225
186229af4fc1 GCI2012: Remove Quit Prompt On Mouse Click
Drew Gottlieb
parents: 6580
diff changeset
    16
    resetPosition();
186229af4fc1 GCI2012: Remove Quit Prompt On Mouse Click
Drew Gottlieb
parents: 6580
diff changeset
    17
end;
186229af4fc1 GCI2012: Remove Quit Prompt On Mouse Click
Drew Gottlieb
parents: 6580
diff changeset
    18
186229af4fc1 GCI2012: Remove Quit Prompt On Mouse Click
Drew Gottlieb
parents: 6580
diff changeset
    19
procedure resetPosition;
186229af4fc1 GCI2012: Remove Quit Prompt On Mouse Click
Drew Gottlieb
parents: 6580
diff changeset
    20
begin
13499
424944a835a7 Fix cursor teleporting to center after leaving game with video recording
Wuzzy <Wuzzy2@mail.ru>
parents: 12836
diff changeset
    21
    if GameType = gmtRecord then
424944a835a7 Fix cursor teleporting to center after leaving game with video recording
Wuzzy <Wuzzy2@mail.ru>
parents: 12836
diff changeset
    22
        exit;
12836
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    23
    // Move curser by 1px in case it's already centered.
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    24
    // The game camera in the Alpha for 0.9.23 screwed up if
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    25
    // the game started with the mouse already being centered.
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    26
    // This fixes it, but we might have overlooked a related
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    27
    // bug somewhere else.
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    28
    // No big deal since this function is (so far) only called once.
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    29
    SDL_WarpMouse((cScreenWidth div 2) + 1, cScreenHeight div 2);
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    30
    SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2);
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    31
end;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    32
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    33
procedure updatePosition;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    34
var x, y: LongInt;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    35
begin
13499
424944a835a7 Fix cursor teleporting to center after leaving game with video recording
Wuzzy <Wuzzy2@mail.ru>
parents: 12836
diff changeset
    36
    if GameType <> gmtRecord then
424944a835a7 Fix cursor teleporting to center after leaving game with video recording
Wuzzy <Wuzzy2@mail.ru>
parents: 12836
diff changeset
    37
        SDL_GetMouseState(@x, @y);
10017
de822cd3df3a fixwhitespace and dos2unix
koda
parents: 10015
diff changeset
    38
12836
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    39
    if(x <> cScreenWidth div 2) or (y <> cScreenHeight div 2) then
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    40
    begin
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    41
        handlePositionUpdate(x - cScreenWidth div 2, y - cScreenHeight div 2);
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    42
13499
424944a835a7 Fix cursor teleporting to center after leaving game with video recording
Wuzzy <Wuzzy2@mail.ru>
parents: 12836
diff changeset
    43
        if cHasFocus and (GameType <> gmtRecord) then
12836
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    44
            SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2);
1fbc0d5a82d0 Backed out changeset 575c0de98505
Wuzzy <Wuzzy2@mail.ru>
parents: 12798
diff changeset
    45
    end
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    46
end;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    47
8346
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8225
diff changeset
    48
procedure handlePositionUpdate(x, y: LongInt);
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8225
diff changeset
    49
begin
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8225
diff changeset
    50
    CursorPoint.X:= CursorPoint.X + x;
3443e0de2c9d GCI2012: Advanced Keyboard Configuration
dag10
parents: 8225
diff changeset
    51
    CursorPoint.Y:= CursorPoint.Y - y;
5191
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    52
end;
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    53
c7000a6b397b - Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
diff changeset
    54
end.