/+junk/c_sdl_joypad_ducktape

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