/+junk/c_sdl_joypad

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/%2Bjunk/c_sdl_joypad
21 by Gustav Hatvigsson
* added Modeline to (almost) all files.
1
/* c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil
2
 * vi: set shiftwidth=2 tabstop=2 expandtab:
3
 * :indentSize=2:tabSize=2:noTabs=true:
4
 */
5
1 by Gustav Hartvigsson
Initial code.
6
#include "Game.h"
7
#include "MousePointer.h"
8
#include "GameButton.h"
9
#include "game_utils.h"
4 by Gustav Hartvigsson
What I have done:
10
#include "GameObject.h"
1 by Gustav Hartvigsson
Initial code.
11
17 by Gustav Hartvigsson
* fixed a few Doxygen problems.
12
/*
7 by Gustav Hartvigsson
* Added licensing information to the files.
13
 * This file, as the rest of the project is under MIT license.
14
 * see http://opensource.org/licenses/MIT
15
 *
8 by Gustav Hartvigsson
* added and changed little in the files Lincening information.
16
 * Author Gustav Hartvigsson <gustav.hartvigsson _at_ gmail.com> 2014
7 by Gustav Hartvigsson
* Added licensing information to the files.
17
 */
18
1 by Gustav Hartvigsson
Initial code.
19
void quit (int rc) {
20
  SDL_Quit();
21
  exit(rc);
22
}
23
24
void game_button_my_callback_hover (GameButton * self, void * data);
25
void game_button_my_callback_stop_hover (GameButton * self, void * data);
26
void game_button_my_callback_clicked (GameButton * self, void * data);
27
28
Game * game_new () {
29
  if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
30
    fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
31
    quit (1);
32
  }
33
  
34
  Game * self = malloc (sizeof (Game));
35
  fprintf (stdout, "Creating Game: address: %ld\n", (long) self);
36
  
37
  self->window = SDL_CreateWindow ("Hello World",
38
                             SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
39
                             640, 480, SDL_WINDOW_SHOWN);
40
  
41
  if (!self->window) {
42
    fprintf(stderr, "Couldn't create 640x480 window: %s\n",
43
            SDL_GetError());
44
    quit (2);
45
  }
46
  
47
  SDL_ShowCursor(0);
48
  
49
  self->renderer = SDL_CreateRenderer (self->window,
50
          -1, /* initialize the first one supporting the requested flags */
51
          SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
52
  
53
  if (!self->renderer) {
54
    fprintf(stderr, "Couldn't create renderer object: %s\n", SDL_GetError());
55
    quit (3);
56
  }
57
  
58
  self->game_controller = SDL_GameControllerOpen(0);
59
  if (!self->game_controller) {
60
    fprintf(stderr, "Couldn't open controller: %s\n", SDL_GetError());
61
  } else {
62
    fprintf (stdout, "Could open controller %s\n",
63
             SDL_GameControllerName (self->game_controller));
64
  }
65
  
66
  self->bg_colour_toggle = false;
67
  self->background_colour = game_color_create_color (0,0,0,255);
68
  
69
  self->button = game_button_new (50,50, 50, 100);
70
  game_button_set_callback (self->button, "hover", game_button_my_callback_hover, NULL);
71
  game_button_set_callback (self->button, "stop_hover", game_button_my_callback_stop_hover, NULL);
72
  game_button_set_callback (self->button, "clicked", game_button_my_callback_clicked, self);
73
  
74
  self->done = 0;
75
  
76
  self->mouse_delta.x = 0;
77
  self->mouse_delta.y = 0;
78
  self->mouse = mouse_pointer_new (640,480);
79
  
80
  return self;
81
} /* game_new */
82
83
void game_main_loop (Game * self) {
84
  while (!self->done) {
85
    game_process_events (self);
86
    game_draw (self);
87
  }
88
  fprintf (stdout, "Exiting main loop!\n");
89
}
90
91
void game_process_events (Game * self) {
92
  while (SDL_PollEvent(&self->event)) {
93
    switch (self->event.type) {
94
        case SDL_QUIT: 
95
        self->done = 1;
96
        break;
97
      case SDL_CONTROLLERAXISMOTION:
98
        if (self->event.caxis.axis == SDL_CONTROLLER_AXIS_LEFTX) {
99
         self->mouse_delta.x = self->event.caxis.value / J_SCALE_FACTOR;
100
        }
101
        if (self->event.caxis.axis == SDL_CONTROLLER_AXIS_LEFTY) {
102
         self->mouse_delta.y = self->event.caxis.value / J_SCALE_FACTOR;
103
        }
104
        break;
105
      case SDL_MOUSEBUTTONDOWN:
106
      case SDL_CONTROLLERBUTTONDOWN:
107
        if(self->event.cbutton.button == SDL_CONTROLLER_BUTTON_A) {
108
          fprintf (stdout,"Button A was Pressed!\n");
109
          self->mouse->pressed = true;
110
        }
111
        break;
112
      case SDL_MOUSEBUTTONUP:
113
      case SDL_CONTROLLERBUTTONUP:
114
        if(self->event.cbutton.button == SDL_CONTROLLER_BUTTON_A) {
115
          fprintf (stdout,"Button A was Relised!\n");
116
          self->mouse->pressed = false;
117
        }
118
        break;
119
      case SDL_MOUSEMOTION:
120
        mouse_pointer_move_to (self->mouse,
121
          self->event.motion.x + self->event.motion.xrel,
122
          self->event.motion.y + self->event.motion.yrel);
123
        break;
124
    }
125
  }
126
  game_button_check_clicked (self->button, self->mouse);
127
  game_button_check_hover (self->button, self->mouse);
128
  mouse_pointer_move (self->mouse, self->mouse_delta.x, self->mouse_delta.y);
129
}
130
131
void game_draw (Game * self) {
132
  game_color_set_draw_color (self->renderer, self->background_colour);
133
  
134
  SDL_RenderClear(self->renderer);
135
  
136
  game_button_draw (self->button, self->renderer);
137
  
138
  mouse_pointer_draw (self->mouse, self->renderer);
139
  
140
  SDL_RenderPresent (self->renderer);
141
}
142
143
void game_free (Game * self) {
144
  fprintf (stdout, "Freeing Game: address: %ld\n", (long) self);
145
  SDL_DestroyRenderer (self->renderer);
146
  SDL_DestroyWindow (self->window);
147
  game_button_free (self->button);
148
  mouse_pointer_free (self->mouse);
149
  free (self);
150
  SDL_Quit ();
151
}
152
153
154
/* CALLBACKS */
155
156
void game_button_my_callback_hover (GameButton * self, void * data) {
157
  fprintf (stdout, "Hover callback is triggered! @ time: %d\n", SDL_GetTicks());
158
  game_button_set_fill (self, true);
159
}
160
161
void game_button_my_callback_stop_hover (GameButton * self, void * data) {
162
  fprintf (stdout, "Stop Hover callback is triggered! @ time: %d\n", SDL_GetTicks());
163
  game_button_set_fill (self, false);
164
}
165
166
void game_button_my_callback_clicked (GameButton * self, void * data){
167
  Game * game = (Game *) data;
168
  if (game->bg_colour_toggle) {
169
    game->bg_colour_toggle = false;
170
    game->background_colour = game_color_create_color (0,0,0,255);
171
  } else {
172
    game->bg_colour_toggle = true;
173
    game->background_colour = game_color_create_color (55,55,55,255);
174
  }
175
}
176
177
178
179
/* MOO! */