void My_Timer(int val) { angle += 1.0f; if (angle >= 360.0f)angle = 0.0f; magiccircle.rotate_angle += 2.0f; if (magiccircle.rotate_angle >= 360.0f)magiccircle.rotate_angle = 0.0f; body.change_core_color(angle); if (magiccircle.light_enable){ magiccircle.light_offset += 0.2f; if (magiccircle.light_offset >= magiccircle.light_blank)magiccircle.light_offset = 0.0f; } // animation control if (animation.enable){ switch (animation.kind){ case ACTION_WALK_UP: if (!animation.action()){ animation.walk_down(); animation.start(40,0); }break; case ACTION_WALK_DOWN: if (!animation.action()){ animation.walk_up(); animation.start(40, 0); }break; case ACTION_RUN_UP_BACK: if (!animation.action()){ animation.run_up_front(); animation.start(8, 0); }break; case ACTION_RUN_UP_FRONT: if (!animation.action()){ animation.run_down_back(); animation.start(8, 0); }break; case ACTION_RUN_DOWN_BACK: if (!animation.action()){ animation.run_down_front(); animation.start(8, 0); }break; case ACTION_RUN_DOWN_FRONT: if (!animation.action()){ animation.run_up_back(); animation.start(8, 0); }break; case ACTION_PATRONUM_STAY: if (!animation.action()){ animation.patronum_begin(); animation.start(80, 0); }break; case ACTION_PATRONUM_BEGIN: if (!animation.action()){ animation.patronum_appear(); animation.start(100, 0); }break; case ACTION_PATRONUM_APPEAR: if (!animation.action()){ animation.magiccircle_disappear(); animation.start(80, 0); }break; case ACTION_MAGICCIRCLE_DISAPPEAR: if (!animation.action()){ magiccircle.enable = 0; animation.animation_disable = 0; animation.init_pos(); animation.start(20, 0); } break; case STOP_ACTION: if (!animation.action()){ animation.enable = false; } break; default: break; } } //.... glutPostRedisplay(); if(timer_enabled) { glutTimerFunc(timer_speed, My_Timer, val); } }