Store combinations on face close

This commit is contained in:
2026-03-28 22:32:45 -04:00
parent e4734d82a4
commit ac932d126f
2 changed files with 26 additions and 9 deletions

View File

@@ -17,7 +17,6 @@ Since the original watchface is **NOT** open source, this "port" could be more a
- The original [Maan On My Wrist](https://apps.rebble.io/en_US/application/557724772d93bc0eae00004c?native=false&query=maan&section=watchfaces) is still perfectly silly on b&w screens!
# Considerations For The Future
- Restore last combo after using an app
- Add more Maan art (see [this gallery](https://www.flickr.com/photos/53297919@N04/albums/72157624708812279) for potential candidates)
- Potential light mode (don't hold your breath - I'm still not sure this would look good and I don't like the idea of having settings)
- Black&white support if I get bored or Pebble releases a modern b&w watch (Flint doesn't count)

View File

@@ -119,6 +119,10 @@ static const GColor8 s_dark_bg_colors[] = {
GColorBrilliantRose, GColorMelon, GColorShockingPink,
// Brown
GColorRoseVale};
#define storage_key_head 0
#define storage_key_butt 1
#define storage_key_color 2
static uint8_t s_head_index, s_butt_index;
static void destroy_animation_handler(Animation *animation, bool finished, void *context) {
animation_destroy(animation);
@@ -207,7 +211,8 @@ static void schedule_guy_animation(Animation *raise_tmpl, Animation *out_tmpl, A
static void update_minute_30_out_handler(Animation *animation, bool finished, void *context) {
// destroy and reassign
gbitmap_destroy(s_butt);
s_butt = gbitmap_create_with_resource(s_random_butts[rand() % s_butt_count]);
s_butt_index = rand() % s_butt_count;
s_butt = gbitmap_create_with_resource(s_random_butts[s_butt_index]);
// swap colors
replace_gbitmap_color(GColorGreen, s_random_color_next, s_butt, NULL);
@@ -228,7 +233,8 @@ static void update_minute_30() {
static void update_minute_60_out_handler(Animation *animation, bool finished, void *context) {
// destroy and reassign
gbitmap_destroy(s_head);
s_head = gbitmap_create_with_resource(s_random_heads[rand() % s_head_count]);
s_head_index = rand() % s_head_count;
s_head = gbitmap_create_with_resource(s_random_heads[s_head_index]);
// swap colors
replace_gbitmap_color(GColorGreen, s_random_color_next, s_head, NULL);
@@ -379,15 +385,22 @@ static void init() {
window_set_background_color(s_main_window, GColorBlack);
// load initial batch of silly guy parts into memory
s_head = gbitmap_create_with_resource(s_random_heads[rand() % s_head_count]);
s_butt = gbitmap_create_with_resource(s_random_butts[rand() % s_butt_count]);
// pick starting colors
if (persist_exists(storage_key_color)) {
s_head_index = persist_read_int(storage_key_head);
s_butt_index = persist_read_int(storage_key_butt);
s_random_color_current = (GColor8){.argb = persist_read_int(storage_key_color)};
} else {
s_head_index = rand() % s_head_count;
s_butt_index = rand() % s_butt_count;
s_random_color_current = s_dark_bg_colors[rand() % s_color_count];
}
s_head = gbitmap_create_with_resource(s_random_heads[s_head_index]);
s_butt = gbitmap_create_with_resource(s_random_butts[s_butt_index]);
// set starting colors
s_random_color_next = s_dark_bg_colors[rand() % s_color_count];
replace_gbitmap_color(GColorGreen, s_random_color_current, s_head, NULL);
replace_gbitmap_color(GColorGreen, s_random_color_current, s_butt, NULL);
// don't overwrite current color, as it will need to be replaced
s_random_color_next = s_dark_bg_colors[rand() % s_color_count];
// load custom font
#if PBL_DISPLAY_WIDTH <= 180
@@ -489,6 +502,11 @@ static void deinit() {
gbitmap_destroy(s_bt0_icon);
gbitmap_destroy(s_bt1_icon);
// write to persistent storage
persist_write_int(storage_key_head, s_head_index);
persist_write_int(storage_key_butt, s_butt_index);
persist_write_int(storage_key_color, s_random_color_current.argb);
// destroy window
window_destroy(s_main_window);
}