new background for main screen

This commit is contained in:
2025-12-01 20:52:26 +01:00
parent cfbb4e4c86
commit 383b2e48ec
11 changed files with 417 additions and 85 deletions

View File

@ -0,0 +1,69 @@
#pragma once
#include <SDL3/SDL.h>
#include <random>
#include <vector>
struct SpaceWarpSettings {
float baseSpawnRange = 1.45f; // logical radius for initial star positions
float warpFactorScale = 122.85f; // scales perspective factor so stars spread faster or slower
float spawnMargin = 60.0f; // how far offscreen a star can travel before respawn
float minShade = 0.85f; // lower bound for per-star brightness multiplier
float maxShade = 1.15f; // upper bound for per-star brightness multiplier
float minSpeed = 120.0f; // slowest warp velocity (higher feels faster motion)
float maxSpeed = 280.0f; // fastest warp velocity
float minDotSize = 2.5f; // smallest star size in pixels
float maxDotSize = 4.5f; // largest star size in pixels
float minAlpha = 70.0f; // base opacity even for distant stars
float alphaDepthBoost = 160.0f; // extra opacity applied as stars approach the camera
float minColor = 180.0f; // clamp for minimum grayscale value
float maxColor = 205.0f; // clamp for maximum grayscale value
float baseShadeScale = 0.75f; // baseline multiplier applied to the sampled grayscale shade
float depthColorScale = 0.55f; // how much depth affects the grayscale brightness
bool drawTrails = true; // when true, also render streak lines for hyper-speed look
float trailAlphaScale = 0.75f; // relative opacity for streak lines vs dots
float maxTrailLength = 36.0f; // clamp length of each streak in pixels
};
class SpaceWarp {
public:
SpaceWarp();
void init(int width, int height, int starCount = 320);
void resize(int width, int height);
void update(float deltaSeconds);
void draw(SDL_Renderer* renderer, float alphaScale = 1.0f);
void setSettings(const SpaceWarpSettings& newSettings);
const SpaceWarpSettings& getSettings() const { return settings; }
private:
struct WarpStar {
float x = 0.0f;
float y = 0.0f;
float z = 0.0f;
float speed = 0.0f;
float prevScreenX = 0.0f;
float prevScreenY = 0.0f;
float screenX = 0.0f;
float screenY = 0.0f;
float shade = 1.0f;
Uint8 baseShade = 220;
};
void respawn(WarpStar& star, bool randomDepth = true);
bool project(const WarpStar& star, float& outX, float& outY) const;
float randomRange(float min, float max);
std::vector<WarpStar> stars;
std::mt19937 rng;
int width = 0;
int height = 0;
float centerX = 0.0f;
float centerY = 0.0f;
float warpFactor = 520.0f;
SpaceWarpSettings settings{};
float minDepth = 2.0f;
float maxDepth = 320.0f;
};