static void recalc_light(world_t w) { static const vec3_t c_noon = {1.0, 0.87, 1.0}; static const vec3_t c_dusk = {0.8, 0.4, 0.24}; static const vec3_t c_night = {0.05, 0.05, 0.2}; vec3_t color; float lerp; w->lpos[0] = 0.0; w->lpos[1] = sin(w->lightAngle); w->lpos[2] = cos(w->lightAngle); if ( w->lpos[1] >= 0.0 ) { lerp = w->lpos[1]; color[0] = c_dusk[0] + (c_noon[0] - c_dusk[0]) * lerp; color[1] = c_dusk[1] + (c_noon[1] - c_dusk[1]) * lerp; color[2] = c_dusk[2] + (c_noon[2] - c_dusk[2]) * lerp; }else{ lerp = -(w->lpos[1] * 4); if ( lerp > 1.0 ) lerp = 1.0; w->lpos[1] = sin(-w->lightAngle); w->lpos[2] = cos(-w->lightAngle); color[0] = c_dusk[0] + (c_night[0] - c_dusk[0]) * lerp; color[1] = c_dusk[1] + (c_night[1] - c_dusk[1]) * lerp; color[2] = c_dusk[2] + (c_night[2] - c_dusk[2]) * lerp; } light_set_color(w->light, color[0], color[1], color[2]); light_set_pos(w->light, w->lpos); }
void ble_device_on_message(uint8_t type, uint16_t length, uint8_t* value) { uint8_t onoff = value[0]; uint8_t * rgb = value+1; if(onoff == 1) { light_off(); light_set_color(rgb); light_on(); } else if(onoff == 0) { light_off(); } else if(onoff == 2) { light_off(); light_set_color(rgb_color); light_on(); } }