… | |
… | |
67 | static int tick_inhibit; |
67 | static int tick_inhibit; |
68 | static int tick_pending; |
68 | static int tick_pending; |
69 | |
69 | |
70 | global gbl_ev; |
70 | global gbl_ev; |
71 | static AV *cb_global, *cb_attachable, *cb_object, *cb_player, *cb_client, *cb_type, *cb_map; |
71 | static AV *cb_global, *cb_attachable, *cb_object, *cb_player, *cb_client, *cb_type, *cb_map; |
72 | static SV *sv_runtime, *sv_tick_start, *sv_next_tick, *sv_now; |
72 | static SV *sv_runtime, *sv_tick_start, *sv_next_tick, *sv_now, *sv_server_tick; |
73 | static AV *av_reflect; |
73 | static AV *av_reflect; |
74 | |
74 | |
75 | bitset<NUM_EVENT_TYPES> ev_want_event; |
75 | bitset<NUM_EVENT_TYPES> ev_want_event; |
76 | bitset<NUM_TYPES> ev_want_type; |
76 | bitset<NUM_TYPES> ev_want_type; |
77 | |
77 | |
… | |
… | |
1404 | stash_cf_region_wrap = gv_stashpv ("cf::region::wrap", 1); |
1404 | stash_cf_region_wrap = gv_stashpv ("cf::region::wrap", 1); |
1405 | stash_cf_living_wrap = gv_stashpv ("cf::living::wrap", 1); |
1405 | stash_cf_living_wrap = gv_stashpv ("cf::living::wrap", 1); |
1406 | stash_cf_layout_wrap = gv_stashpv ("cf::layout::wrap", 1); |
1406 | stash_cf_layout_wrap = gv_stashpv ("cf::layout::wrap", 1); |
1407 | stash_ext_map_world = gv_stashpv ("ext::map_world" , 1); |
1407 | stash_ext_map_world = gv_stashpv ("ext::map_world" , 1); |
1408 | |
1408 | |
1409 | sv_now = get_sv ("cf::NOW" , 1); SvUPGRADE (sv_now , SVt_NV); |
1409 | sv_now = get_sv ("cf::NOW" , 1); SvUPGRADE (sv_now , SVt_NV); |
1410 | sv_runtime = get_sv ("cf::RUNTIME" , 1); SvUPGRADE (sv_runtime , SVt_NV); |
1410 | sv_runtime = get_sv ("cf::RUNTIME" , 1); SvUPGRADE (sv_runtime , SVt_NV); |
|
|
1411 | sv_server_tick = get_sv ("cf::SERVER_TICK", 1); SvUPGRADE (sv_server_tick, SVt_IV); |
1411 | sv_tick_start = get_sv ("cf::TICK_START", 1); SvUPGRADE (sv_tick_start, SVt_NV); |
1412 | sv_tick_start = get_sv ("cf::TICK_START" , 1); SvUPGRADE (sv_tick_start , SVt_NV); |
1412 | sv_next_tick = get_sv ("cf::NEXT_TICK" , 1); SvUPGRADE (sv_next_tick , SVt_NV); |
1413 | sv_next_tick = get_sv ("cf::NEXT_TICK" , 1); SvUPGRADE (sv_next_tick , SVt_NV); |
1413 | |
1414 | |
1414 | cb_global = get_av ("cf::CB_GLOBAL", 1); |
1415 | cb_global = get_av ("cf::CB_GLOBAL", 1); |
1415 | cb_attachable = get_av ("cf::CB_ATTACHABLE", 1); |
1416 | cb_attachable = get_av ("cf::CB_ATTACHABLE", 1); |
1416 | cb_object = get_av ("cf::CB_OBJECT", 1); |
1417 | cb_object = get_av ("cf::CB_OBJECT", 1); |
1417 | cb_player = get_av ("cf::CB_PLAYER", 1); |
1418 | cb_player = get_av ("cf::CB_PLAYER", 1); |
… | |
… | |
1610 | { |
1611 | { |
1611 | ev_async_send (EV_DEFAULT, &tick_watcher); |
1612 | ev_async_send (EV_DEFAULT, &tick_watcher); |
1612 | coroapi::cede (); |
1613 | coroapi::cede (); |
1613 | } |
1614 | } |
1614 | |
1615 | |
1615 | void server_tick () |
1616 | void one_tick () |
1616 | CODE: |
1617 | CODE: |
1617 | { |
1618 | { |
1618 | ev_now_update (EV_DEFAULT); |
1619 | ev_now_update (EV_DEFAULT); |
1619 | NOW = ev_now (EV_DEFAULT); |
1620 | NOW = ev_now (EV_DEFAULT); |
1620 | SvNV_set (sv_now, NOW); SvNOK_only (sv_now); |
1621 | SvNV_set (sv_now, NOW); SvNOK_only (sv_now); |
1621 | SvNV_set (sv_tick_start, NOW); SvNOK_only (sv_tick_start); |
1622 | SvNV_set (sv_tick_start, NOW); SvNOK_only (sv_tick_start); |
1622 | runtime = SvNVX (sv_runtime); |
1623 | runtime = SvNVX (sv_runtime); |
1623 | |
1624 | |
|
|
1625 | one_tick (); |
|
|
1626 | |
1624 | server_tick (); |
1627 | ++server_tick; |
|
|
1628 | SvUV_set (sv_server_tick, server_tick); SvIOK_only_UV (sv_server_tick); |
1625 | |
1629 | |
1626 | ev_now_update (EV_DEFAULT); |
1630 | ev_now_update (EV_DEFAULT); |
1627 | NOW = ev_now (EV_DEFAULT); |
1631 | NOW = ev_now (EV_DEFAULT); |
1628 | SvNV_set (sv_now, NOW); SvNOK_only (sv_now); |
1632 | SvNV_set (sv_now, NOW); SvNOK_only (sv_now); |
|
|
1633 | |
1629 | runtime += TICK; |
1634 | runtime += TICK; |
1630 | SvNV_set (sv_runtime, runtime); SvNOK_only (sv_runtime); |
1635 | SvNV_set (sv_runtime, runtime); SvNOK_only (sv_runtime); |
1631 | } |
1636 | } |
1632 | |
1637 | |
1633 | NV floor (NV x) |
1638 | NV floor (NV x) |