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
 #define SPEED_MAX 16
49
 #define SPEED_MAX 16
50
 #define SHOT_SPEED 8
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
 static void splash(void) {
56
 static void splash(void) {
53
     disable_interrupts();
57
     disable_interrupts();
54
     DISPLAY_OFF;
58
     DISPLAY_OFF;
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
 static void game(void) {
112
 static void game(void) {
81
     disable_interrupts();
113
     disable_interrupts();
82
     DISPLAY_OFF;
114
     DISPLAY_OFF;
94
     enum SPRITE_ROT rot = 0;
126
     enum SPRITE_ROT rot = 0;
95
     enum ACCELERATION prev_acc = 0xFF; // so we draw the ship on the first frame
127
     enum ACCELERATION prev_acc = 0xFF; // so we draw the ship on the first frame
96
     uint8_t ship_hiwater = 0;
128
     uint8_t ship_hiwater = 0;
129
+    uint8_t health = 0xFF;
130
+    uint8_t power = 0xFF;
97
 
131
 
98
     obj_init();
132
     obj_init();
99
 
133
 
114
             acc |= ACC_R;
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
             switch (rot) {
153
             switch (rot) {
119
                 case ROT_0:
154
                 case ROT_0:
120
                     SpdY -= SPEED_INC;
155
                     SpdY -= SPEED_INC;
143
                 default:
178
                 default:
144
                     break;
179
                     break;
145
             }
180
             }
181
+        } else if (!KEY_DOWN(J_A) && (power < 0xFF)) {
182
+            power++;
146
         }
183
         }
147
 
184
 
148
         if (KEY_PRESSED(J_B)) {
185
         if (KEY_PRESSED(J_B)) {
188
         }
225
         }
189
 
226
 
190
         obj_draw(SpdX, SpdY, &hiwater);
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
         hide_sprites_range(hiwater, MAX_HARDWARE_SPRITES);
230
         hide_sprites_range(hiwater, MAX_HARDWARE_SPRITES);
202
 
231
 

Loading…
Cancel
Save