Browse Source

add basic power meter for movement

Thomas B 2 months ago
parent
commit
3ff9a66541
1 changed files with 39 additions and 10 deletions
  1. 39
    10
      src/main.c

+ 39
- 10
src/main.c View File

@@ -49,6 +49,10 @@ enum ACCELERATION {
49 49
 #define SPEED_MAX 16
50 50
 #define SHOT_SPEED 8
51 51
 
52
+#define BAR_OFFSET_X (4 - 80)
53
+#define HEALTH_OFFSET_Y -16
54
+#define POWER_OFFSET_Y 16
55
+
52 56
 static void splash(void) {
53 57
     disable_interrupts();
54 58
     DISPLAY_OFF;
@@ -77,6 +81,34 @@ static void splash(void) {
77 81
     }
78 82
 }
79 83
 
84
+static void status(uint8_t health, uint8_t power, uint8_t *hiwater) {
85
+    if (health > 0) {
86
+        switch (health >> 6) {
87
+            case 3:
88
+                spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 24, hiwater);
89
+            case 2:
90
+                spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 16, hiwater);
91
+            case 1:
92
+                spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 8, hiwater);
93
+            case 0:
94
+                spr_draw(SPR_HEALTH, FLIP_X, BAR_OFFSET_X, HEALTH_OFFSET_Y - 0, hiwater);
95
+        }
96
+    }
97
+
98
+    if (power > 0) {
99
+        switch (power >> 6) {
100
+            case 3:
101
+                spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 0, hiwater);
102
+            case 2:
103
+                spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 8, hiwater);
104
+            case 1:
105
+                spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 16, hiwater);
106
+            case 0:
107
+                spr_draw(SPR_POWER, FLIP_X, BAR_OFFSET_X, POWER_OFFSET_Y + 24, hiwater);
108
+        }
109
+    }
110
+}
111
+
80 112
 static void game(void) {
81 113
     disable_interrupts();
82 114
     DISPLAY_OFF;
@@ -94,6 +126,8 @@ static void game(void) {
94 126
     enum SPRITE_ROT rot = 0;
95 127
     enum ACCELERATION prev_acc = 0xFF; // so we draw the ship on the first frame
96 128
     uint8_t ship_hiwater = 0;
129
+    uint8_t health = 0xFF;
130
+    uint8_t power = 0xFF;
97 131
 
98 132
     obj_init();
99 133
 
@@ -114,7 +148,8 @@ static void game(void) {
114 148
             acc |= ACC_R;
115 149
         }
116 150
 
117
-        if (KEY_DOWN(J_A)) {
151
+        if (KEY_DOWN(J_A) && (power > 0)) {
152
+            power--;
118 153
             switch (rot) {
119 154
                 case ROT_0:
120 155
                     SpdY -= SPEED_INC;
@@ -143,6 +178,8 @@ static void game(void) {
143 178
                 default:
144 179
                     break;
145 180
             }
181
+        } else if (!KEY_DOWN(J_A) && (power < 0xFF)) {
182
+            power++;
146 183
         }
147 184
 
148 185
         if (KEY_PRESSED(J_B)) {
@@ -188,15 +225,7 @@ static void game(void) {
188 225
         }
189 226
 
190 227
         obj_draw(SpdX, SpdY, &hiwater);
191
-
192
-        spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -32, &hiwater);
193
-        spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -24, &hiwater);
194
-        spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -16, &hiwater);
195
-        spr_draw(SPR_HEALTH, FLIP_NONE, -80 + 8, -8, &hiwater);
196
-        spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 32, &hiwater);
197
-        spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 24, &hiwater);
198
-        spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 16, &hiwater);
199
-        spr_draw(SPR_POWER, FLIP_NONE, -80 + 8, 8, &hiwater);
228
+        status(health, power, &hiwater);
200 229
 
201 230
         hide_sprites_range(hiwater, MAX_HARDWARE_SPRITES);
202 231
 

Loading…
Cancel
Save