64 lines
1.7 KiB
C
64 lines
1.7 KiB
C
/*
|
|
* This software is licensed under the terms of the MIT License.
|
|
* See COPYING for further information.
|
|
* ---
|
|
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
|
|
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
|
|
*/
|
|
|
|
#include "background_anim.h"
|
|
#include "draw.h"
|
|
|
|
#include "global.h"
|
|
#include "stageutils.h"
|
|
#include "util/glm.h"
|
|
|
|
TASK(animate_bg) {
|
|
Stage3DrawData *dd = stage3_get_draw_data();
|
|
Camera3D *cam = &stage_3d_context.cam;
|
|
|
|
dd->target_swing_strength = 0.2f;
|
|
|
|
for(int t = 0;; ++t, YIELD) {
|
|
float f = 1.0f / sqrtf(1.0f + t / 500.0f);
|
|
glm_vec3_copy((vec3) { f, f, sqrtf(f) }, dd->ambient_color);
|
|
|
|
float swing = sin(t / 100.0) * dd->swing_strength;
|
|
cam->pos[0] = swing;
|
|
cam->rot.yaw = swing * -8.0f;
|
|
|
|
fapproach_asymptotic_p(&dd->swing_strength, dd->target_swing_strength, 0.005f, 1e-3f);
|
|
|
|
vec4 f0 = { 0.60, 0.30, 0.60, 1.0 };
|
|
vec4 f1 = { 0.20, 0.10, 0.30, 1.0 };
|
|
glm_vec4_lerp(f0, f1, 1 - f, dd->fog_color);
|
|
|
|
vec3 e0 = { 2.50, 0.80, 0.50 };
|
|
vec3 e1 = { 0.20, 0.30, 0.50 };
|
|
glm_vec3_lerp(e0, e1, 1 - f, dd->environment_color);
|
|
glm_vec3_scale(dd->environment_color, 0.5 * f, dd->environment_color);
|
|
|
|
stage3d_update(&stage_3d_context);
|
|
|
|
if(global.boss && !boss_is_fleeing(global.boss)) {
|
|
fapproach_asymptotic_p(&dd->boss_light_alpha, 1, 0.02f, 1e-3f);
|
|
} else {
|
|
fapproach_asymptotic_p(&dd->boss_light_alpha, 0, 0.02f, 1e-3f);
|
|
}
|
|
|
|
if(dd->boss_light_alpha > 0 && global.boss) {
|
|
vec3 r;
|
|
camera3d_unprojected_ray(cam, global.boss->pos, r);
|
|
glm_vec3_scale(r, 14, r);
|
|
glm_vec3_add(cam->pos, r, dd->boss_light.pos);
|
|
}
|
|
}
|
|
}
|
|
|
|
void stage3_bg_init_fullstage(void) {
|
|
INVOKE_TASK(animate_bg);
|
|
}
|
|
|
|
void stage3_bg_init_spellpractice(void) {
|
|
INVOKE_TASK(animate_bg);
|
|
}
|