bool Prop2D::propPoll(double dt) { if( prop2DPoll(dt) == false ) return false; if(remote_vel.isZero()==false) { // for cloud syncing loc += remote_vel*dt; } // animation of index if(anim_curve){ int previndex = index; bool finished = false; index = anim_curve->getIndex( accum_time - anim_start_at, &finished ); if( index != previndex ){ onIndexChanged(previndex); } if(finished) { onAnimFinished(); } } // animation of scale if( seek_scl_time != 0 ){ double elt = accum_time - seek_scl_started_at; if( elt > seek_scl_time ){ scl = seek_scl_target; seek_scl_time = 0; } else { double rate = elt / seek_scl_time; scl.x = seek_scl_orig.x + ( seek_scl_target.x - seek_scl_orig.x ) * rate; scl.y = seek_scl_orig.y + ( seek_scl_target.y - seek_scl_orig.y ) * rate; } } // animation of rotation if( seek_rot_time != 0 ){ double elt = accum_time - seek_rot_started_at; if( elt > seek_rot_time ){ rot = seek_rot_target; seek_rot_time = 0; } else { double rate = elt / seek_rot_time; rot = seek_rot_orig + ( seek_rot_target - seek_rot_orig ) * rate; } } // animation of color if( seek_color_time != 0 ){ double elt = accum_time - seek_color_started_at; if( elt > seek_color_time ){ color = seek_color_target; if(seek_color_time!=0){ onColorChanged(); } seek_color_time = 0; } else { double rate = elt / seek_color_time; color = Color( seek_color_orig.r + ( seek_color_target.r - seek_color_orig.r ) * rate, seek_color_orig.g + ( seek_color_target.g - seek_color_orig.g ) * rate, seek_color_orig.b + ( seek_color_target.b - seek_color_orig.b ) * rate, seek_color_orig.a + ( seek_color_target.a - seek_color_orig.a ) * rate ); onColorChanged(); } } // children for(int i=0;i<children_num;i++){ Prop2D *p = children[i]; p->basePoll(dt); } return true; }