snowflakes use high resolution system clock

This commit is contained in:
nullifiedcat 2017-04-29 11:18:02 +03:00
parent 14fb0fd6ed
commit 816d14cb7a
3 changed files with 14 additions and 10 deletions

View File

@ -23,9 +23,9 @@ static CatVar particle_type(particle_type_enum, "gui_bg_particles_type", "0", "P
static CatVar particle_chance(CV_INT, "gui_bg_particles_chance", "10", "Particles Spawn Rate", "Defines snowflake spawn rate (HAS TO BE NONZERO!)", 1.0f, 100.0f);
static CatVar particle_pack_size(CV_INT, "gui_bg_particles_pack_size", "10", "Particles Max Pack", "Defines max snowflake spawn pack size (HAS TO BE NONZERO!)", 1.0f, 100.0f);
static CatVar particle_safe(CV_INT, "gui_bg_particles_safe_zone", "100", "Particles Safe Zone", "Defines snowflake safe zone (they will decay after reaching that point)", 0.0f, 400.0f);
static CatVar particle_gravity(CV_FLOAT, "gui_bg_particles_gravity", "0.9", "Particles Gravity", "Defines snowflake gravity (HAS TO BE NONZERO!)", 0.01f, 5.0f);
static CatVar particle_gravity(CV_FLOAT, "gui_bg_particles_gravity", "700", "Particles Gravity", "Defines snowflake gravity (HAS TO BE NONZERO!)", 0.01f, 5.0f);
static CatVar particle_jittering(CV_INT, "gui_bg_particles_jittering", "2", "Particles Jittering", "Defines snowflake jittering amount", 0.0f, 10.0f);
static CatVar particle_wind(CV_INT, "gui_bg_particles_wind", "0", "Particles Wind", "Wind strength and direction", -50.0f, 50.0f);
static CatVar particle_wind(CV_INT, "gui_bg_particles_wind", "0", "Particles Wind", "Wind strength and direction", -500.0f, 500.0f);
static CatVar particle_jittering_chance(CV_INT, "gui_bg_particles_jittering_chance", "60", "Snowflake Jittering Rate", "Defines snowflake jittering rate (HAS TO BE NONZERO!)", 1.0f, 20.0f);
static CatEnum background_visible_enum({"NEVER", "MENU", "ALWAYS"});
static CatVar background_visible(background_visible_enum, "gui_bg_visible", "1", "Render background", "Render background when");
@ -36,10 +36,12 @@ bool Background::AlwaysVisible() {
void Background::Update() {
if (!particles) return;
auto newtime = std::chrono::system_clock::now();
std::chrono::duration<float> dt = newtime - last_update;
Particle* current = list;
while (current) {
Particle* next = current->next;
current->Update();
current->Update(dt.count());
if (current->dead) {
KillParticle(current);
}
@ -48,6 +50,7 @@ void Background::Update() {
if (!(rand() % (int)particle_chance)) {
for (int i = 0; i < rand() % (int)particle_pack_size; i++) MakeParticle();
}
last_update = newtime;
}
Background::~Background() {
@ -127,17 +130,17 @@ void Background::KillParticle(Particle* flake) {
delete flake;
}
void Background::Particle::Update() {
void Background::Particle::Update(float dt) {
if (show_in) show_in--;
if (particle_wind) {
vx += (float)particle_wind * 0.005f;
vx += (float)particle_wind * dt;
}
if (!(rand() % (int)(particle_jittering_chance))) {
x += (rand() % 2) ? (int)particle_jittering : -(int)particle_jittering;
}
vy += (float)particle_gravity / 60.0f;
x += vx;
y += vy;
vy += (float)particle_gravity * dt;
x += vx * dt;
y += vy * dt;
if (y > (int)particle_safe + 255) dead = true;
}

View File

@ -27,7 +27,7 @@ public:
Texture* texture { nullptr };
Particle* next { nullptr };
Particle* prev { nullptr };
void Update();
void Update(float dt);
};
public:
Background();
@ -45,6 +45,7 @@ public:
Texture tx_raindrop;
Texture tx_flame;
Texture tx_heart;
std::chrono::time_point<std::chrono::system_clock> last_update;
Particle* list { nullptr };
Particle* list_tail { nullptr };
};

View File

@ -387,7 +387,7 @@ void ProcessEntity(CachedEntity* ent) {
return;
}*/
}
if (show_name) AddEntityString(ent, format("LV ", level, ' ', name));
if (show_name || show_class) AddEntityString(ent, format("LV ", level, ' ', name));
if (show_health) {
AddEntityString(ent, format(ent->m_iHealth, '/', ent->m_iMaxHealth, " HP"), colors::Health(ent->m_iHealth, ent->m_iMaxHealth));
}