- if(strcmp(dsys_screens[i]->name, name) == 0) {
- return dsys_screens[i];
+ scr = dsys_screens[i];
+ scr->vis = anm_get_value(&scr->track, dsys_time);
+
+ if(scr->vis > 0.0f) {
+ if(!scr->active) {
+ if(scr->start) scr->start();
+ scr->active = 1;
+ }
+ if(scr->update) scr->update(dsys_time);
+
+ if(dsys_num_act && scr->prio != dsys_act[dsys_num_act - 1]->prio) {
+ sort_needed = 1;
+ }
+ dsys_act[dsys_num_act++] = scr;
+ } else {
+ if(scr->active) {
+ if(scr->stop) scr->stop();
+ scr->active = 0;
+ }
+ }
+ }
+
+ if(sort_needed) {
+ for(i=0; i<dsys_num_act; i++) {
+ for(j=i+1; j<dsys_num_act; j++) {
+ if(dsys_act[j]->prio > dsys_act[j - 1]->prio) {
+ void *tmp = dsys_act[j];
+ dsys_act[j] = dsys_act[j - 1];
+ dsys_act[j - 1] = tmp;
+ }
+ }