Fix level system

This commit is contained in:
Willy-JL
2023-01-17 18:04:13 +00:00
parent 13d7585477
commit 93399489bd
3 changed files with 22 additions and 16 deletions

View File

@@ -14,9 +14,9 @@
#define DOLPHIN_STATE_PATH INT_PATH(DOLPHIN_STATE_FILE_NAME)
#define DOLPHIN_STATE_HEADER_MAGIC 0xD0
#define DOLPHIN_STATE_HEADER_VERSION 0x01
int level_array[30] = {100, 200, 300, 450, 600, 750, 950, 1150, 1350, 1600,
1850, 2100, 2400, 2700, 3000, 3350, 3700, 4050, 4450, 4850,
5250, 5700, 6150, 6600, 7100, 7600, 8100, 8650, 9200};
int level_array[DOLPHIN_LEVEL_COUNT] = {100, 200, 300, 450, 600, 750, 950, 1150, 1350, 1600,
1850, 2100, 2400, 2700, 3000, 3350, 3700, 4050, 4450, 4850,
5250, 5700, 6150, 6600, 7100, 7600, 8100, 8650, 9200};
#define BUTTHURT_MAX 14
#define BUTTHURT_MIN 0
@@ -82,7 +82,7 @@ uint64_t dolphin_state_timestamp() {
}
bool dolphin_state_is_levelup(int icounter) {
for(int i = 0; i < 30; ++i) {
for(int i = 0; i < DOLPHIN_LEVEL_COUNT; ++i) {
if((icounter == level_array[i])) {
return true;
}
@@ -91,30 +91,30 @@ bool dolphin_state_is_levelup(int icounter) {
}
uint8_t dolphin_get_level(int icounter) {
for(int i = 0; i < 29; ++i) {
for(int i = 0; i < DOLPHIN_LEVEL_COUNT; ++i) {
if(icounter <= level_array[i]) {
return i + 1;
}
}
return 30;
return DOLPHIN_LEVEL_COUNT + 1;
}
uint32_t dolphin_state_xp_above_last_levelup(int icounter) {
for(int i = 1; i < 29; ++i) {
if(icounter <= level_array[i]) {
return icounter - level_array[i - 1];
for(int i = DOLPHIN_LEVEL_COUNT; i >= 0; --i) {
if(icounter >= level_array[i]) {
return icounter - level_array[i];
}
}
return icounter;
}
uint32_t dolphin_state_xp_to_levelup(int icounter) {
for(int i = 0; i < 29; ++i) {
for(int i = 0; i < DOLPHIN_LEVEL_COUNT; ++i) {
if(icounter <= level_array[i]) {
return level_array[i] - icounter;
}
}
return (uint32_t)-1 - icounter;
return (uint32_t)-1;
}
void dolphin_state_on_deed(DolphinState* dolphin_state, DolphinDeed deed) {
@@ -198,4 +198,4 @@ void dolphin_state_clear_limits(DolphinState* dolphin_state) {
}
dolphin_state->data.butthurt_daily_limit = 0;
dolphin_state->dirty = true;
}
}

View File

@@ -5,6 +5,8 @@
#include <stdint.h>
#include <time.h>
#define DOLPHIN_LEVEL_COUNT 29
typedef struct DolphinState DolphinState;
typedef struct {
uint8_t icounter_daily_limit[DolphinAppMAX];

View File

@@ -102,7 +102,7 @@ static void render_callback(Canvas* canvas, void* _ctx) {
}
uint32_t xp_have = xp_levelup - xp_need;
if(stats->level == 30) {
if(stats->level == DOLPHIN_LEVEL_COUNT + 1) {
xp_progress = 0;
} else {
xp_progress = xp_need * 64 / xp_levelup;
@@ -116,7 +116,7 @@ static void render_callback(Canvas* canvas, void* _ctx) {
}
// portrait
furi_assert((stats->level > 0) && (stats->level <= 30));
furi_assert((stats->level > 0) && (stats->level <= DOLPHIN_LEVEL_COUNT + 1));
uint16_t tmpLvl = 0;
if(settings->sfw_mode) {
canvas_draw_icon(canvas, 11, 2, portraits_sfw[mood][tmpLvl]);
@@ -126,7 +126,11 @@ static void render_callback(Canvas* canvas, void* _ctx) {
const char* my_name = furi_hal_version_get_name_ptr();
snprintf(level_str, 12, "Level: %hu", stats->level);
snprintf(xp_str, 12, "%lu/%lu", xp_have, xp_levelup);
if(stats->level == DOLPHIN_LEVEL_COUNT + 1) {
snprintf(xp_str, 12, "Max Level!");
} else {
snprintf(xp_str, 12, "%lu/%lu", xp_have, xp_levelup);
}
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 58, 10, my_name ? my_name : "Unknown");
canvas_draw_str(canvas, 58, 22, mood_str);
@@ -138,7 +142,7 @@ static void render_callback(Canvas* canvas, void* _ctx) {
canvas_set_font(canvas, FontSecondary);
canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, 123 - xp_progress, 45, xp_progress + 1, 5);
canvas_draw_box(canvas, 123 - xp_progress, 45, xp_progress + (xp_progress > 0), 5);
canvas_set_color(canvas, ColorBlack);
canvas_draw_icon(canvas, 52, 51, &I_Ok_btn_9x9);