From 4a15eb593d0d1447bf9bca87ef966f84b8077a4f Mon Sep 17 00:00:00 2001 From: Tyler Thrailkill Date: Wed, 23 Jun 2021 20:21:40 -0600 Subject: snowe keymap/userspace and Ocean Dream animation (#12477) * Add snowe keymap/userspace & Ocean Dream animation * Add snowe userspace with keymap wrappers and two animations * Add crkbd keymap * Add Ocean Dream animation, a cool full screen animation with: * * twinkling stars * * meteor showers * * ocean waves * * island with palm tree * * moon with phases * Disable Luna so travis build succeeds. * Add more copyrights * Add pragma once to keycode_aliases.h Co-authored-by: Drashna Jaelre Co-authored-by: Drashna Jaelre --- users/snowe/ocean_dream.h | 103 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 users/snowe/ocean_dream.h (limited to 'users/snowe/ocean_dream.h') diff --git a/users/snowe/ocean_dream.h b/users/snowe/ocean_dream.h new file mode 100644 index 0000000000..498375559a --- /dev/null +++ b/users/snowe/ocean_dream.h @@ -0,0 +1,103 @@ +/* + * Copyright 2021 Tyler Thrailkill (@snowe/@snowe2010) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include "quantum.h" + +/** + * Features: + * You can turn on and off features in this section + */ +#define ENABLE_MOON // Uses 182 bytes +#define ENABLE_WAVE // Uses 844 bytes +#define ENABLE_SHOOTING_STARS // Uses 872 bytes +#define ENABLE_ISLAND +#define ENABLE_STARS // Uses 606 bytes + +/** + * Global Settings + */ +#define STARRY_NIGHT_ANIM_FRAME_DURATION 30 // how long each frame lasts in ms +#define NUMBER_OF_FRAMES 20 // Self explanatory. Probably shouldn't touch this, not sure how stuff will work if it's changed. If changed should be multiple of 1, 2, 3, 4, and 5 +#define WIDTH OLED_DISPLAY_HEIGHT // for vertical displays +#define HEIGHT OLED_DISPLAY_WIDTH // for vertical displays + +/** + * Moon Parameters + */ +#define MOON_LINE 4 // the line you want the moon to appear at +#define MOON_COLUMN 4 // the column you want the moon to appear at +//#define STATIC_MOON // uncomment this to make the moon a static image, no animation +#ifndef STATIC_MOON +# define ANIMATE_MOON_EVERY_N_FRAMES 100 // animate the moon every n frames +#endif + +/** + * Wave Parameters + */ +#define OCEAN_LINE 14 // Line you want to render the ocean starting at (best at oled_max_lines() - 2) +#define WAVE_CALM 20 // render calm ocean under this WPM and ripple ocean at this WPM +#define WAVE_HEAVY_STORM 40 // render medium ocean at this WPM +#define WAVE_HURRICANE 60 // render heavy waves above this WPM +// What number of frames you want to animate the ocean at. +// Should be equal to or smaller than NUMBER_OF_FRAMES, e.g. 30, would animate on every other frame, 20, every third frame, etc +// Don't set equal to 0. +#define OCEAN_ANIMATION_SPEED 1 + +/** + * Shooting Star Parameters + */ +#define SHOOTING_STAR_DELAY 12 // delay modulus for time between shooting stars. Decides number of frames to delay, e.g. 12 means 0-11 frames of delay between each shooting star +#define SHOOTING_STAR_FRAMES 16 // how many 2 pixel frames per shooting star. Increment this for longer shooting stars +#define MAX_NUMBER_OF_SHOOTING_STARS 12 // maximum number of shooting stars that can be on screen at the same time +#define SHOOTING_STAR_WPM_INCREMENT 10 // every n WPM increase, add an extra star, up to MAX_NUMBER_OF_SHOOTING_STARS, e.g. an increment of 5 would result in 1 shooting star at 5-9wpm, 2 at 10-14, etc. +// What number of frames you want to animate the shooting stars at. +// Should be equal to or smaller than NUMBER_OF_FRAMES, e.g. 30, would animate on every other frame, 20, every third frame, etc +// Don't set equal to 0. +#define SHOOTING_STAR_ANIMATION_SPEED 30 + +/** + * Star Parameters + */ +#define STARS_PER_LINE 4 // number of stars per line (for a display that is 128x32, this would be 4 stars spread out evenly over the 32byte width, one every 8 bytes) +#define NUMBER_OF_STAR_LINES 16 // number of lines to fill up with stars (for a display that is 128x32, 16 bytes are filled with the ocean animation, so that leaves 112 pixels left over. The number of lines depends on your OLED_FONT_HEIGHT) +#define TWINKLE_PROBABILITY 25 // probability that any star twinkles on a given frame +// What number of frames you want to animate the stars at. +// Should be equal to or smaller than NUMBER_OF_FRAMES, e.g. 20, would animate on every frame, 10, every other frame, etc +// Don't set equal to 0. +#define STAR_ANIMATION_SPEED 1 + +/** + * Island Parameters + */ +#define ISLAND_LINE 12 // line that the island starts at. Island is 2 lines tall +#define ISLAND_COLUMN 0 // column that the island starts at +#define ISLAND_CALM 20 // WPM at which the palm tree calmly moves +#define ISLAND_HEAVY_STORM 40 // WPM at which the heavy storm occurs +#define ISLAND_HURRICANE 60 // WPM at which THE HURRICANE STARTS + +/* + * DON'T TOUCH + */ + +extern bool is_calm; + +// timers +extern uint32_t starry_night_anim_timer; +extern uint32_t starry_night_anim_sleep; + +void render_stars(void); -- cgit v1.2.3