--- deliantra/server/include/cfperl.h 2007/04/16 11:09:31 1.61 +++ deliantra/server/include/cfperl.h 2007/04/23 18:09:57 1.63 @@ -207,7 +207,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -struct object_freezer : dynbuf +struct object_freezer : dynbuf_text { AV *av; @@ -408,17 +408,30 @@ static int nready () { return CORO_NREADY; } static int cede () { return CORO_CEDE ; } + static double (*time)(); + static double next_cede; static int cede_counter; + static void do_cede_every (); + static void do_cede_to_tick (); + static void do_cede_to_tick_every (); + static void cede_every (int count) { if (++cede_counter >= count) - { - cede_counter = 0; + do_cede_every (); + } - if (coroapi::nready ()) - coroapi::cede (); - } + static void cede_to_tick () + { + if (time () >= next_cede) + do_cede_to_tick (); + } + + static void cede_to_tick_every (int count) + { + if (++cede_counter >= count) + cede_to_tick (); } static void wait_for_tick ();