aboutsummaryrefslogtreecommitdiff
path: root/apps/xracer/map.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-17 15:33:03 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-17 15:33:03 -0500
commit6030b176c2819c83c625f257ad7e8632a8245ed9 (patch)
treefd98417c4f40a3bc8479a5900920a0ccd40fedd6 /apps/xracer/map.c
parentef4cc242dc8ad04320d19af22931fcbdbf670c13 (diff)
downloadkappa-6030b176c2819c83c625f257ad7e8632a8245ed9.zip
kappa-6030b176c2819c83c625f257ad7e8632a8245ed9.tar.gz
kappa-6030b176c2819c83c625f257ad7e8632a8245ed9.tar.bz2
kappa-6030b176c2819c83c625f257ad7e8632a8245ed9.tar.xz
Emulate the Rockbox plugin API, ported xracer
Tons of changes
Diffstat (limited to 'apps/xracer/map.c')
-rw-r--r--apps/xracer/map.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/apps/xracer/map.c b/apps/xracer/map.c
new file mode 100644
index 0000000..9a4f740
--- /dev/null
+++ b/apps/xracer/map.c
@@ -0,0 +1,44 @@
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "generator.h"
+#include "map.h"
+#include "util.h"
+
+static bool add_section(struct road_segment *road, unsigned int max_road_length, unsigned int *back, struct road_section *map)
+{
+ bool ret = true;
+ switch(map->type)
+ {
+ case 0:
+ /* constant segment */
+ add_road(road, max_road_length, *back, map->len, map->curve, map->slope);
+ *back += map->len;
+ break;
+ case 1:
+ /* up-hill */
+ add_uphill(road, max_road_length, *back, map->slope, map->len, map->curve);
+ *back += map->len + 2*map->slope;
+ break;
+ case 2:
+ add_downhill(road, max_road_length, *back, map->slope, map->len, map->curve);
+ *back += map->len + 2*map->slope;
+ break;
+ default:
+ warning("invalid type id");
+ ret = false;
+ break;
+ }
+ return ret;
+}
+
+unsigned load_map(struct road_segment *road, unsigned int max_road_length, struct road_section *map, unsigned int map_length)
+{
+ gen_reset();
+ unsigned int back = 0;
+ for(unsigned int i=0;i<map_length;++i)
+ {
+ add_section(road, max_road_length, &back, &map[i]);
+ }
+ return back;
+}