void Title_Sun::animate(RNG& rng){ for(size_t i=0;i<shimmers.size();){ shimmers[i].movement(); if(shimmers[i].is_done(box.h)){ shimmers.erase(shimmers.begin()+i); } else{ i++; } } if(++shimmer_spawn>=Game_Constants::TITLE_SUN_SHIMMER_SPAWN_RATE*Engine::UPDATE_RATE/1000){ shimmer_spawn=0; if(shimmers.size()<Game_Constants::TITLE_MAX_SUN_SHIMMERS && rng.random_range(0,99)<Game_Constants::TITLE_SUN_SHIMMER_SPAWN_CHANCE){ double y_right_mod=rng.random_range(Game_Constants::TITLE_SUN_SHIMMER_Y_RIGHT_MOD_MIN,Game_Constants::TITLE_SUN_SHIMMER_Y_RIGHT_MOD_MAX); if(rng.random_range(0,99)<50){ y_right_mod*=-1.0; } bool left_side=true; bool right_side=true; uint32_t random_side=rng.random_range(0,99); if(random_side<20){ left_side=false; } else if(random_side<40){ right_side=false; } shimmers.push_back(Title_Sun_Shimmer(0.0,y_right_mod,left_side,right_side, 0.01*(double)rng.random_range(Game_Constants::TITLE_SUN_SHIMMER_SPEED_MIN,Game_Constants::TITLE_SUN_SHIMMER_SPEED_MAX), rng.random_range(Game_Constants::TITLE_SUN_SHIMMER_RADIUS_MIN,Game_Constants::TITLE_SUN_SHIMMER_RADIUS_MAX))); } } if(base_surface!=0){ if(image.texture!=0){ image.unload_image(); } image.w=box.w; image.h=box.h; SDL_Surface* surface=SDL_CreateRGBSurface(base_surface->flags,base_surface->w,base_surface->h,32,base_surface->format->Rmask,base_surface->format->Gmask,base_surface->format->Bmask,base_surface->format->Amask); SDL_SetSurfaceBlendMode(surface,SDL_BLENDMODE_NONE); SDL_BlitSurface(base_surface,0,surface,0); if(SDL_MUSTLOCK(surface)){ SDL_LockSurface(surface); } for(size_t i=0;i<shimmers.size();i++){ shimmers[i].draw(surface); } if(SDL_MUSTLOCK(surface)){ SDL_UnlockSurface(surface); } image.load_image(surface); SDL_FreeSurface(surface); } }