changeset 22:b725a715b358

cursor now blinks the current selection
author William Morgan <bill@mrgn.org>
date Mon, 13 Jan 2014 21:48:22 -0800
parents bb7dfb42b320
children 330e58fb01aa
files src/main.c src/map.h
diffstat 2 files changed, 34 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/main.c	Sun Jan 12 23:53:18 2014 -0800
+++ b/src/main.c	Mon Jan 13 21:48:22 2014 -0800
@@ -44,10 +44,13 @@
 
 u16 countdown;
 
-int cursor_x = 0;  // tiles
-int cursor_y = 0;  // tiles
-int pixels_per_tile = 8;
-const int cursor_width = 2; // tiles
+s16 cursor_x = 0;  // tiles
+s16 cursor_y = 0;  // tiles
+u16 cursor_selection = WALL;
+#define CURSOR_BLINK_RATE 16
+#define CURSOR_WIDTH 2; // tiles
+
+#define PIXELS_PER_TILE 8
 
 
 u16 build_order[3] = {
@@ -58,19 +61,30 @@
 u8 build_order_size = 3;
 u8 running = 0;
 
+void clear_cursor() {
+	VDP_setTileMap(VDP_PLAN_A, 0, cursor_x,     cursor_y);
+	VDP_setTileMap(VDP_PLAN_A, 0, cursor_x + 1, cursor_y);
+	VDP_setTileMap(VDP_PLAN_A, 0, cursor_x,     cursor_y + 1);
+	VDP_setTileMap(VDP_PLAN_A, 0, cursor_x + 1, cursor_y + 1);
+}
+
 void joy_event_handler(u16 joy, u16 changed, u16 state) {
 	u16 went_down = changed & state;
 	if (went_down & BUTTON_UP) {
-		cursor_y -= cursor_width;
+		clear_cursor();
+		cursor_y -= CURSOR_WIDTH;
 	}
 	if (went_down & BUTTON_DOWN) {
-		cursor_y += cursor_width;
+		clear_cursor();
+		cursor_y += CURSOR_WIDTH;
 	}
 	if (went_down & BUTTON_LEFT) {
-		cursor_x -= cursor_width;
+		clear_cursor();
+		cursor_x -= CURSOR_WIDTH;
 	}
 	if (went_down & BUTTON_RIGHT) {
-		cursor_x += cursor_width;
+		clear_cursor();
+		cursor_x += CURSOR_WIDTH;
 	}
 	if (went_down & BUTTON_A && !running) {
 		//u16 type_to_place = EMPTY;
@@ -116,11 +130,20 @@
 	{
 		VDP_waitVSync();
 		VDP_updateSprites();
+		if ((getTick() % CURSOR_BLINK_RATE) == 0) {
+			VDP_setTileMap(VDP_PLAN_A, tileinfo[cursor_selection][0], cursor_x,     cursor_y);
+			VDP_setTileMap(VDP_PLAN_A, tileinfo[cursor_selection][1], cursor_x + 1, cursor_y);
+			VDP_setTileMap(VDP_PLAN_A, tileinfo[cursor_selection][2], cursor_x,     cursor_y + 1);
+			VDP_setTileMap(VDP_PLAN_A, tileinfo[cursor_selection][3], cursor_x + 1, cursor_y + 1);
+		}
+		if ((getTick() % CURSOR_BLINK_RATE) == CURSOR_BLINK_RATE >> 1) {
+			clear_cursor();
+		}
 		for (i = 0; i < 28; i++)
 		{
 			VDP_setTileMapRectByIndex(VDP_PLAN_B, tilemap + i*40, i*64, 40, 0);
 		}
-		VDP_setSprite(0, cursor_x * pixels_per_tile, cursor_y * pixels_per_tile, SPRITE_SIZE(2,2), TILE_ATTR_FULL(PAL0, 1, 0, 0, cursor_tile_index), spriteDefCache[0].link);
+		VDP_setSprite(0, cursor_x * PIXELS_PER_TILE, cursor_y * PIXELS_PER_TILE, SPRITE_SIZE(2,2), TILE_ATTR_FULL(PAL0, 1, 0, 0, cursor_tile_index), spriteDefCache[0].link);
 		if (running)
 		{
 			if (countdown)
--- a/src/map.h	Sun Jan 12 23:53:18 2014 -0800
+++ b/src/map.h	Mon Jan 13 21:48:22 2014 -0800
@@ -10,7 +10,7 @@
 	OBJECT_TYPES
 } object_type;
 
-#define EMPTY_TA 0
+#define EMPTY_TA 0 // make something else later, 0 will be pure alpha
 #define WALL_UL  'O'-32 + TILE_FONTINDEX
 #define TOWER_UL TILE_ATTR_FULL(1, 0, 0, 0, 'T'-32 + TILE_FONTINDEX)
 #define GOAL_UL  TILE_ATTR_FULL(1, 0, 0, 0, 'G'-32 + TILE_FONTINDEX)
@@ -18,6 +18,7 @@
 
 extern u16 distances[20*14];
 extern u16 tilemap[40*28];
+extern u16 tileinfo[OBJECT_TYPES][4];
 void gen_distances(u16 x, u16 y);
 void print_distances(void);
 void place_object(u16 type, u16 x, u16 y);