annotate XCodeiPhoneOS/Demos/src/accelerometer.c @ 2380:7fbcfc1574dc gsoc2008_iphone

Demo of iPhone accelerometer as SDL joystick
author Holmes Futrell <hfutrell@umail.ucsb.edu>
date Fri, 18 Jul 2008 20:50:59 +0000
parents
children ecc18fbfdec3
rev   line source
2380
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
1 /*
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
2 * accelerometer.c
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
3 * written by Holmes Futrell
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
4 * use however you want
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
5 */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
6
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
7 #include "SDL.h"
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
8 #include "math.h"
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
9 #include "common.h"
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
10
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
11 #define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
12 #define DAMPING 0.5f; /* after bouncing off a wall, damping coefficient determines final speed */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
13 #define FRICTION 0.0008f /* coefficient of acceleration that opposes direction of motion */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
14 #define GRAVITY_CONSTANT 0.02f /* how sensitive the ship is to the accelerometer */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
15
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
16 static SDL_Joystick *accelerometer; /* used for controlling the ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
17
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
18 static struct {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
19 float x, y; /* position of ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
20 float vx, vy; /* velocity of ship (in pixels per millesecond) */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
21 SDL_Rect rect; /* (drawn) position and size of ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
22 } ship;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
23
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
24 static SDL_TextureID shipID=0; /* texture for spaceship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
25 static SDL_TextureID spaceID=0; /* texture for space (background */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
26
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
27 void render(void) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
28
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
29 /* get joystick (accelerometer) axis values and normalize them */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
30 float amax = (float)(0x7FFF); /* largest Sint16 number */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
31 float ax = SDL_JoystickGetAxis(accelerometer, 0) / amax;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
32 float ay = -SDL_JoystickGetAxis(accelerometer, 1) / amax;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
33
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
34 /* ship screen constraints */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
35 Uint32 minx = 0.0f;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
36 Uint32 maxx = SCREEN_WIDTH - ship.rect.w;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
37 Uint32 miny = 0.0f;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
38 Uint32 maxy = SCREEN_HEIGHT - ship.rect.h;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
39
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
40 /* update velocity from accelerometer */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
41 ship.vx += ax * GRAVITY_CONSTANT * MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
42 ship.vy += ay * GRAVITY_CONSTANT * MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
43
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
44 float speed = sqrt(ship.vx * ship.vx + ship.vy * ship.vy);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
45
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
46 if (speed > 0) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
47 /* compensate for friction */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
48 float dirx = ship.vx / speed; /* normalized x velocity */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
49 float diry = ship.vy / speed; /* normalized y velocity */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
50
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
51 /* update velocity due to friction */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
52 if (speed - FRICTION * MILLESECONDS_PER_FRAME > 0) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
53 /* apply friction */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
54 ship.vx -= dirx * FRICTION * MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
55 ship.vy -= diry * FRICTION * MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
56 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
57 else {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
58 /* applying friction would MORE than stop the ship, so just stop the ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
59 ship.vx = 0.0f;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
60 ship.vy = 0.0f;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
61 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
62 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
63
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
64 /* update ship location */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
65 ship.x += ship.vx * MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
66 ship.y += ship.vy * MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
67
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
68 if (ship.x > maxx) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
69 ship.x = maxx;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
70 ship.vx = -ship.vx * DAMPING;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
71 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
72 else if (ship.x < minx) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
73 ship.x = minx;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
74 ship.vx = -ship.vx * DAMPING;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
75 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
76 if (ship.y > maxy) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
77 ship.y = maxy;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
78 ship.vy = -ship.vy * DAMPING;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
79 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
80 else if (ship.y < miny) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
81 ship.y = miny;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
82 ship.vy = -ship.vy * DAMPING;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
83 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
84
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
85 /* draw the background */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
86 SDL_RenderCopy(spaceID, NULL, NULL);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
87
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
88 /* draw the ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
89 ship.rect.x = ship.x;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
90 ship.rect.y = ship.y;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
91
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
92 SDL_RenderCopy(shipID, NULL, &ship.rect);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
93
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
94 /* update screen */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
95 SDL_RenderPresent();
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
96
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
97 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
98
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
99 void initializeTextures() {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
100
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
101 SDL_Surface *bmp_surface;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
102 SDL_Surface *bmp_surface_rgba;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
103 int format = SDL_PIXELFORMAT_ABGR8888; /* desired texture format */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
104 Uint32 Rmask, Gmask, Bmask, Amask; /* masks for desired format */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
105 int bpp; /* bits per pixel for desired format */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
106
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
107 /* load the ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
108 bmp_surface = SDL_LoadBMP("ship.bmp");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
109 if (bmp_surface == NULL) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
110 fatalError("could not ship.bmp");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
111 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
112 /* set blue to transparent on the ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
113 SDL_SetColorKey(bmp_surface, 1, SDL_MapRGB(bmp_surface->format, 0, 0, 255));
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
114 SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
115 /*
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
116 create a new RGBA surface and blit the bmp to it
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
117 this is an extra step, but it seems to be necessary for the color key to work
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
118
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
119 does the fact that this is necessary indicate a bug in SDL?
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
120 */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
121 bmp_surface_rgba = SDL_CreateRGBSurface(0, bmp_surface->w, bmp_surface->h, bpp, Rmask, Gmask, Bmask, Amask);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
122 SDL_BlitSurface(bmp_surface, NULL, bmp_surface_rgba, NULL);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
123
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
124 /* create ship texture from surface */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
125 shipID = SDL_CreateTextureFromSurface(format, bmp_surface_rgba);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
126 if (shipID == 0) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
127 fatalError("could not create ship texture");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
128 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
129 SDL_SetTextureBlendMode(shipID, SDL_TEXTUREBLENDMODE_BLEND);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
130
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
131 /* set the width and height of the ship from the surface dimensions */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
132 ship.rect.w = bmp_surface->w;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
133 ship.rect.h = bmp_surface->h;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
134
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
135 SDL_FreeSurface(bmp_surface_rgba);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
136 SDL_FreeSurface(bmp_surface);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
137
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
138 /* load the space background */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
139 bmp_surface = SDL_LoadBMP("space.bmp");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
140 if (bmp_surface == NULL) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
141 fatalError("could not load space.bmp");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
142 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
143 /* create space texture from surface */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
144 spaceID = SDL_CreateTextureFromSurface(format, bmp_surface);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
145 if (spaceID == 0) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
146 fatalError("could not create space texture");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
147 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
148 SDL_FreeSurface(bmp_surface);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
149
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
150 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
151
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
152
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
153
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
154 int main(int argc, char *argv[]) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
155
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
156 SDL_WindowID windowID; /* ID of main window */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
157 Uint32 startFrame; /* time frame began to process */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
158 Uint32 endFrame; /* time frame ended processing */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
159 Uint32 delay; /* time to pause waiting to draw next frame */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
160 int done; /* should we clean up and exit? */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
161
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
162 /* initialize SDL */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
163 if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
164 fatalError("Could not initialize SDL");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
165 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
166
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
167 /* create main window and renderer */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
168 windowID = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,\
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
169 SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
170 SDL_CreateRenderer(windowID, 0, 0);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
171
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
172 /* print out some info about joysticks and try to open accelerometer for use */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
173 printf("There are %d joysticks available\n", SDL_NumJoysticks());
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
174 printf("Default joystick (index 0) is %s\n", SDL_JoystickName(0));
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
175 accelerometer = SDL_JoystickOpen(0);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
176 if (accelerometer == NULL) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
177 fatalError("Could not open joystick (accelerometer)");
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
178 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
179 printf("joystick number of axis = %d\n", SDL_JoystickNumAxes(accelerometer));
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
180 printf("joystick number of hats = %d\n", SDL_JoystickNumHats(accelerometer));
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
181 printf("joystick number of balls = %d\n", SDL_JoystickNumBalls(accelerometer));
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
182 printf("joystick number of buttons = %d\n", SDL_JoystickNumButtons(accelerometer));
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
183
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
184 /* load graphics */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
185 initializeTextures();
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
186
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
187 /* setup ship */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
188 ship.x = (SCREEN_WIDTH - ship.rect.w) / 2;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
189 ship.y = (SCREEN_HEIGHT - ship.rect.h) / 2;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
190 ship.vx = 0.0f;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
191 ship.vy = 0.0f;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
192
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
193 done = 0;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
194 /* enter main loop */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
195 while(!done) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
196 startFrame = SDL_GetTicks();
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
197 SDL_Event event;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
198 while (SDL_PollEvent(&event)) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
199 if (event.type == SDL_QUIT) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
200 done = 1;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
201 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
202 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
203 render();
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
204 endFrame = SDL_GetTicks();
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
205
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
206 /* figure out how much time we have left, and then sleep */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
207 delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
208 if (delay < 0) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
209 delay = 0;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
210 } else if (delay > MILLESECONDS_PER_FRAME) {
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
211 delay = MILLESECONDS_PER_FRAME;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
212 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
213 SDL_Delay(delay);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
214 }
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
215
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
216 /* delete textures */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
217 SDL_DestroyTexture(shipID);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
218 SDL_DestroyTexture(spaceID);
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
219
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
220 /* shutdown SDL */
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
221 SDL_Quit();
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
222
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
223 return 0;
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
224
7fbcfc1574dc Demo of iPhone accelerometer as SDL joystick
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff changeset
225 }