source: abuse/trunk/src/imlib/event.h

Last change on this file was 731, checked in by jjsimpso, 4 years ago

sdlport: Add support for SDL2, inculding the game controller API. Configure
script will check for SDL2 and use it if present, otherwise it will fall
back to SDL v1. Some old SDL v1 features not implemented yet on SDL2, such
as saving screenshots.

core: Small change for SDL2 game controller API to disable the game
controller in the save/load game menu.

Summary of game controller API changes:

  • Enable with -gamepad
  • Tested with PS3 dualshock 3.
  • D-pad moves, right analog controls aiming
  • X: change weapon, []: jump, R1: fire, L1: special ability, /\:use/activate
  • All menu navigation requires the mouse, which is disabled during normal game play.
  • Property svn:keywords set to Id
File size: 2.4 KB
Line 
1/*
2 *  Abuse - dark 2D side-scrolling platform game
3 *  Copyright (c) 1995 Crack dot Com
4 *  Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net>
5 *
6 *  This software was released into the Public Domain. As with most public
7 *  domain software, no warranty is made or implied by Crack dot Com, by
8 *  Jonathan Clark, or by Sam Hocevar.
9 */
10
11#ifndef __EVENT_HPP_
12#define __EVENT_HPP_
13#define EV_MOUSE_MOVE     1
14#define EV_MOUSE_BUTTON   2
15#define EV_KEY            4
16#define EV_KEY_SPECIAL    8
17/* #define EV_REDRAW        16 UNUSED */
18#define EV_SPURIOUS      32
19#define EV_RESIZE        64
20#define EV_KEYRELEASE   128
21#define EV_CLOSE_WINDOW 256
22#define EV_DRAG_WINDOW  512
23#define EV_MESSAGE     1024
24
25#define LEFT_BUTTON    1
26#define RIGHT_BUTTON   2
27#define MIDDLE_BUTTON  4
28
29#include "keys.h"
30#include "sprite.h"
31
32class Jwindow;
33
34class Event : public linked_node
35{
36public:
37    Event()
38    {
39        type = EV_SPURIOUS;
40    }
41
42    Event(int id, char *data)
43    {
44        type = EV_MESSAGE;
45        message.id = id;
46        message.data = data;
47    }
48
49    int type;
50    ivec2 mouse_move;
51    int mouse_button, key;
52
53    struct { char alt, ctrl, shift; } key_special;
54
55    Jwindow *window;      // NULL is root
56    ivec2 window_position;
57    struct { int id; char *data; } message;
58};
59
60class EventHandler
61{
62public:
63    EventHandler(image *screen, palette *pal);
64    ~EventHandler();
65
66    void Push(Event *ev)
67    {
68        m_events.add_end(ev);
69    }
70
71    void SysInit();
72    void SysWarpMouse(ivec2 pos);
73    void SysEvent(Event &ev);
74
75    int IsPending();
76    void Get(Event &ev);
77  void flush_screen();
78
79  int has_mouse() { return 1; }
80    void SetMouseShape(image *im, ivec2 center)
81    {
82        m_sprite->SetVisual(im, 1);
83        m_center = center;
84    }
85    void SetMousePos(ivec2 pos)
86    {
87        m_pos = ivec2(Min(Max(pos.x, 0), m_screen->Size().x - 1),
88                      Min(Max(pos.y, 0), m_screen->Size().y - 1));
89        SysWarpMouse(m_pos);
90    }
91
92  // To enable/disable game controller
93  // enables switching between mouse and gamepad when entering certain screens
94  // Added for SDL2 game controller support
95  void enable_controller(bool enabled)
96  {
97      controller_enabled = enabled;
98  }
99
100private:
101    linked_list m_events;
102    int m_pending, last_key;
103
104    image *m_screen;
105    bool controller_enabled;
106
107protected:
108    /* Mouse information */
109    Sprite *m_sprite;
110    ivec2 m_pos, m_center;
111    int m_button;
112};
113
114#endif
115
Note: See TracBrowser for help on using the repository browser.