# HG changeset patch # User John Tsiombikas # Date 1430449121 -10800 # Node ID c8826e5ebec109c2d41e6062fa9e8c3461e40609 # Parent f35596f110bcfedfc44b5cdc2f05e6d390518c0c - changed every data loading function to return dummy objects instead of failing - fixed mistake in AndroidManifest.xml diff -r f35596f110bc -r c8826e5ebec1 android/AndroidManifest.xml --- a/android/AndroidManifest.xml Fri May 01 04:38:43 2015 +0300 +++ b/android/AndroidManifest.xml Fri May 01 05:58:41 2015 +0300 @@ -7,15 +7,18 @@ + android:hasCode="false" + android:debuggable="true"> + - + + - - + + diff -r f35596f110bc -r c8826e5ebec1 android/Makefile --- a/android/Makefile Fri May 01 04:38:43 2015 +0300 +++ b/android/Makefile Fri May 01 05:58:41 2015 +0300 @@ -65,6 +65,10 @@ install-release: adb install -r $(apk-release) +.PHONY: uninstall +uninstall: + adb uninstall $(pkg) + .PHONY: run run: adb shell am start -n $(pkg)/$(act) diff -r f35596f110bc -r c8826e5ebec1 android/build.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/android/build.xml Fri May 01 05:58:41 2015 +0300 @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f35596f110bc -r c8826e5ebec1 src/level.c --- a/src/level.c Fri May 01 04:38:43 2015 +0300 +++ b/src/level.c Fri May 01 05:58:41 2015 +0300 @@ -13,6 +13,18 @@ #define IS_SOLID(x) ((x) == C_WALL) +#define DEF_LVL_SZ 5 +static const char def_lvl_cells[DEF_LVL_SZ][DEF_LVL_SZ] = { + "#####", + "##x##", + "#o o#", + "# s #", + "#####" +}; + + +static int default_level(struct level *lvl); + void level_init(struct level *lvl) { @@ -22,6 +34,28 @@ lvl->floor_tex_scale = lvl->wall_tex_scale = lvl->ceil_tex_scale = 1.0; } +static int default_level(struct level *lvl) +{ + int i, j; + + lvl->num_cells[0] = lvl->num_cells[1] = DEF_LVL_SZ; + + for(i=0; icells[i][j] = c; + if(c == 's') { + lvl->start_pos[0] = j; + lvl->start_pos[1] = i; + } else if(c == 'x') { + lvl->goal_pos[0] = j; + lvl->goal_pos[1] = i; + } + } + } + return 0; +} + static void clean_line(char *buf) { char *end = buf + strlen(buf) - 1; @@ -41,23 +75,23 @@ if(!(fp = fopen(fname, "r"))) { fprintf(stderr, "failed to open file: %s\n", fname); - return -1; + return default_level(lvl); } if(!fgets(buf, sizeof buf, fp)) { fprintf(stderr, "level file %s is empty\n", fname); fclose(fp); - return -1; + return default_level(lvl); } if(sscanf(buf, "s %dx%d", size, size + 1) != 2) { fprintf(stderr, "level file %s doesn't start with size definition\n", fname); fclose(fp); - return -1; + return default_level(lvl); } if(size[0] > MAX_LEVEL_SIZE || size[1] > MAX_LEVEL_SIZE) { fprintf(stderr, "level size %dx%d is larger than compile-time maximum (%d)\n", size[0], size[1], MAX_LEVEL_SIZE); fclose(fp); - return -1; + return default_level(lvl); } lvl->num_cells[0] = size[0]; diff -r f35596f110bc -r c8826e5ebec1 src/mesh.c --- a/src/mesh.c Fri May 01 04:38:43 2015 +0300 +++ b/src/mesh.c Fri May 01 05:58:41 2015 +0300 @@ -1,8 +1,34 @@ #include +#include #include "opengl.h" #include "mesh.h" #include "objfile.h" +static struct vec3 def_verts[] = { + {-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, -1, 1}, {1, 1, 1}, {-1, 1, 1}, + {1, -1, 1}, {1, -1, -1}, {1, 1, -1}, {1, -1, 1}, {1, 1, -1}, {1, 1, 1}, + {1, -1, -1}, {-1, -1, -1}, {-1, 1, -1}, {1, -1, -1}, {-1, 1, -1}, {1, 1, -1}, + {-1, -1, -1}, {-1, -1, 1}, {-1, 1, 1}, {-1, -1, -1}, {-1, 1, 1}, {-1, 1, -1} +}; +#define FACEATTR(x, y, z) {x, y, z}, {x, y, z}, {x, y, z}, {x, y, z}, {x, y, z}, {x, y, z} +static struct vec3 def_norm[] = { + FACEATTR(0, 0, 1), + FACEATTR(1, 0, 0), + FACEATTR(0, 0, -1), + FACEATTR(-1, 0, 0) +}; +static struct vec3 def_tc[] = { + {0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}, {1, 1, 0}, {0, 1, 0}, + {0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}, {1, 1, 0}, {0, 1, 0}, + {0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}, {1, 1, 0}, {0, 1, 0}, + {0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}, {1, 1, 0}, {0, 1, 0} +}; + +static struct mesh def_mesh = { + def_verts, def_norm, def_tc, + sizeof def_verts / sizeof *def_verts +}; + /* use objfile to load mesh data (vertices, normals, and texcoords) * from a wavefront|OBJ file. */ @@ -13,7 +39,7 @@ struct objfile *obj; if(!(obj = objf_load(fname))) { - return 0; + return &def_mesh; } m = malloc(sizeof *m); m->num_verts = objf_vertex_count(obj); @@ -44,7 +70,7 @@ void free_mesh(struct mesh *m) { - if(m) { + if(m && m != &def_mesh) { free(m->vert); free(m->norm); free(m->tc); diff -r f35596f110bc -r c8826e5ebec1 src/texture.c --- a/src/texture.c Fri May 01 04:38:43 2015 +0300 +++ b/src/texture.c Fri May 01 05:58:41 2015 +0300 @@ -7,6 +7,8 @@ #define GL_GENERATE_MIPMAP_SGIS 0x8191 #endif +static unsigned int default_texture(void); + unsigned int load_texture(const char *fname) { unsigned int tex; @@ -14,7 +16,7 @@ if(!(img = load_image(fname))) { fprintf(stderr, "failed to load image: %s\n", fname); - return 0; + return default_texture(); } glGenTextures(1, &tex); @@ -26,3 +28,36 @@ free_image(img); return tex; } + +#define DEF_TEX_SZ 64 + +static unsigned int default_texture(void) +{ + static unsigned int tex; + static unsigned char pixels[DEF_TEX_SZ * DEF_TEX_SZ * 3]; + + if(!tex) { + /* generate it */ + int i, j; + unsigned char *pptr = pixels; + + for(i=0; i> 3) & 1) == ((j >> 3) & 1); + + *pptr++ = c ? 255 : 64; + *pptr++ = 100; + *pptr++ = c ? 64 : 255; + } + } + + glGenTextures(1, &tex); + glBindTexture(GL_TEXTURE_2D, tex); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, DEF_TEX_SZ, DEF_TEX_SZ, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels); + } + + return tex; +} diff -r f35596f110bc -r c8826e5ebec1 src/timer.h --- a/src/timer.h Fri May 01 04:38:43 2015 +0300 +++ b/src/timer.h Fri May 01 05:58:41 2015 +0300 @@ -7,4 +7,4 @@ double get_time_sec(void); void sleep_sec(double sec); -#endif // TIMER_H_ +#endif /* TIMER_H_ */