#pragma once #include enum SettingType { TYPE_UINT8, TYPE_UINT16, TYPE_BOOL }; typedef struct { const char* name; uint16_t* value; SettingType type; } Setting; struct Settings { uint16_t fps = 50; struct /* effects */ { struct /* cycle */ { uint16_t time = 300; uint16_t random = 1; } cycle ; struct /* matrix */ { uint16_t length_min = 4; uint16_t length_max = 20; uint16_t speed_min = 3; uint16_t speed_max = 7; uint16_t count = 16; uint16_t random_count = 32; } matrix; struct /* big_clock */ { uint16_t spacing = 5; } big_clock; struct /* blur2d */ { uint16_t count = 5; } blur2d; struct /* confetti */ { uint16_t pixels_per_loop = 2; } confetti; struct /* dvd */ { uint16_t width = 3; uint16_t height = 2; uint16_t speed = 50; } dvd; struct /* dynamic */ { uint16_t single_loop_time = 40; uint16_t multi_loop_time = 1400; uint16_t big_loop_time = 50; uint16_t big_size = 3; } dynamic; struct /* fire */ { uint16_t cooldown = 192; uint16_t spark_chance = 5; } fire; struct /* firework */ { uint16_t drag = 255; uint16_t bounce = 200; uint16_t gravity = 10; uint16_t sparks = 12; } firework; struct /* gol */ { uint16_t start_percentage = 90; uint16_t blend_speed = 10; uint16_t restart_after_steps = 100; } gol; struct /* lightspeed */ { uint16_t count = 25; } lightspeed; struct /* sines */ { uint16_t count = 5; } sines; struct /* snake */ { uint16_t direction_change = 5; uint16_t slowdown = 2; } snake; struct /* tv_static */ { uint16_t black_bar_speed = 12; } tv_static; } effects; }; extern Settings settings; extern Setting all_settings[]; extern const uint8_t all_settings_size; bool change_setting(const char* key, uint16_t new_value); uint16_t setting_default(Setting* s); bool save_settings(); bool load_settings();