… | |
… | |
964 | } |
964 | } |
965 | |
965 | |
966 | SV * |
966 | SV * |
967 | cfperl_result (int idx) |
967 | cfperl_result (int idx) |
968 | { |
968 | { |
969 | AV *av = get_av ("cfperl::invoke_results", 0); |
969 | AV *av = get_av ("cf::INVOKE_RESULTS", 0); |
970 | if (!av) |
970 | if (!av) |
971 | return &PL_sv_undef; |
971 | return &PL_sv_undef; |
972 | |
972 | |
973 | SV **sv = av_fetch (av, idx, 0); |
973 | SV **sv = av_fetch (av, idx, 0); |
974 | if (!sv) |
974 | if (!sv) |
… | |
… | |
1021 | void |
1021 | void |
1022 | cfperl_send_msg (client *ns, int color, const char *type, const char *msg) |
1022 | cfperl_send_msg (client *ns, int color, const char *type, const char *msg) |
1023 | { |
1023 | { |
1024 | CALL_BEGIN (4); |
1024 | CALL_BEGIN (4); |
1025 | CALL_ARG (ns); |
1025 | CALL_ARG (ns); |
1026 | CALL_ARG (color); |
|
|
1027 | CALL_ARG (type); |
1026 | CALL_ARG (type); |
1028 | CALL_ARG_SV (newSVpv_utf8 (msg)); |
1027 | CALL_ARG_SV (newSVpv_utf8 (msg)); |
|
|
1028 | CALL_ARG (color); |
1029 | CALL_CALL ("cf::client::send_msg", G_VOID); |
1029 | CALL_CALL ("cf::client::send_msg", G_VOID); |
1030 | CALL_END; |
1030 | CALL_END; |
|
|
1031 | } |
|
|
1032 | |
|
|
1033 | int |
|
|
1034 | cfperl_can_merge (object *ob1, object *ob2) |
|
|
1035 | { |
|
|
1036 | int can; |
|
|
1037 | |
|
|
1038 | CALL_BEGIN (2); |
|
|
1039 | CALL_ARG (ob1); |
|
|
1040 | CALL_ARG (ob2); |
|
|
1041 | CALL_CALL ("cf::_can_merge", G_SCALAR); |
|
|
1042 | can = count && SvTRUE (TOPs); |
|
|
1043 | CALL_END; |
|
|
1044 | |
|
|
1045 | return can; |
1031 | } |
1046 | } |
1032 | |
1047 | |
1033 | maptile * |
1048 | maptile * |
1034 | maptile::find_sync (const char *path, maptile *origin) |
1049 | maptile::find_sync (const char *path, maptile *origin) |
1035 | { |
1050 | { |
… | |
… | |
1549 | |
1564 | |
1550 | for_all_objects (op) |
1565 | for_all_objects (op) |
1551 | op->reattach (); |
1566 | op->reattach (); |
1552 | } |
1567 | } |
1553 | |
1568 | |
1554 | void _post_tick () |
|
|
1555 | CODE: |
|
|
1556 | coroapi::next_cede = SvNV (sv_next_tick) - TICK * (1. - 1. / CEDES_PER_TICK); |
|
|
1557 | |
|
|
1558 | # support function for map-world.ext |
1569 | # support function for map-world.ext |
1559 | void _quantise (SV *data_sv, SV *plt_sv) |
1570 | void _quantise (SV *data_sv, SV *plt_sv) |
1560 | CODE: |
1571 | CODE: |
1561 | { |
1572 | { |
1562 | if (!SvROK (plt_sv) || SvTYPE (SvRV (plt_sv)) != SVt_PVAV) |
1573 | if (!SvROK (plt_sv) || SvTYPE (SvRV (plt_sv)) != SVt_PVAV) |
… | |
… | |
1594 | len -= 3; |
1605 | len -= 3; |
1595 | } |
1606 | } |
1596 | |
1607 | |
1597 | SvCUR_set (data_sv, dst - SvPVX (data_sv)); |
1608 | SvCUR_set (data_sv, dst - SvPVX (data_sv)); |
1598 | } |
1609 | } |
|
|
1610 | |
|
|
1611 | void _post_tick () |
|
|
1612 | CODE: |
|
|
1613 | coroapi::next_cede = SvNV (sv_next_tick) - TICK * (1. - 1. / CEDES_PER_TICK); |
|
|
1614 | |
|
|
1615 | NV till_cede () |
|
|
1616 | CODE: |
|
|
1617 | RETVAL = coroapi::next_cede - now (); |
|
|
1618 | OUTPUT: |
|
|
1619 | RETVAL |
|
|
1620 | |
|
|
1621 | NV till_tick () |
|
|
1622 | CODE: |
|
|
1623 | RETVAL = SvNV (sv_next_tick) - now (); |
|
|
1624 | OUTPUT: |
|
|
1625 | RETVAL |
1599 | |
1626 | |
1600 | NV floor (NV x) |
1627 | NV floor (NV x) |
1601 | |
1628 | |
1602 | NV ceil (NV x) |
1629 | NV ceil (NV x) |
1603 | |
1630 | |
… | |
… | |
2009 | |
2036 | |
2010 | void add_button_link (object *button, maptile *map, int connected); |
2037 | void add_button_link (object *button, maptile *map, int connected); |
2011 | |
2038 | |
2012 | void remove_button_link (object *op); |
2039 | void remove_button_link (object *op); |
2013 | |
2040 | |
|
|
2041 | void handle_apply_yield (object *op); |
|
|
2042 | |
2014 | |
2043 | |
2015 | MODULE = cf PACKAGE = cf::object PREFIX = cf_ |
2044 | MODULE = cf PACKAGE = cf::object PREFIX = cf_ |
2016 | |
2045 | |
2017 | object *cf_insert_ob_in_ob (object *ob, object *where) |
2046 | object *cf_insert_ob_in_ob (object *ob, object *where) |
2018 | |
2047 | |
… | |
… | |
2269 | palette = SvRV (palette); |
2298 | palette = SvRV (palette); |
2270 | |
2299 | |
2271 | STRLEN idxlen; |
2300 | STRLEN idxlen; |
2272 | const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); |
2301 | const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); |
2273 | |
2302 | |
2274 | region **regionmap = (region **)malloc ( |
2303 | region_ptr *regionmap = new region_ptr [av_len ((AV *)palette) + 1]; |
2275 | (av_len ((AV *)palette) + 1) * sizeof (region *)); |
|
|
2276 | uint8_t *regions = salloc<uint8_t> (THIS->size ()); |
2304 | uint8_t *regions = salloc<uint8_t> (THIS->size ()); |
2277 | |
2305 | |
2278 | for (int i = av_len ((AV *)palette) + 1; i--; ) |
2306 | for (int i = av_len ((AV *)palette) + 1; i--; ) |
2279 | regionmap [i] = region::find ( |
2307 | regionmap [i] = region::find (SvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); |
2280 | SvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); |
|
|
2281 | |
2308 | |
2282 | for (int y = 0; y < THIS->height; ++y) |
2309 | for (int y = 0; y < THIS->height; ++y) |
2283 | memcpy (regions + y * THIS->width, idx + offset + y * stride, THIS->width); |
2310 | memcpy (regions + y * THIS->width, idx + offset + y * stride, THIS->width); |
2284 | |
2311 | |
2285 | sfree (THIS->regions, THIS->size ()); |
2312 | sfree (THIS->regions, THIS->size ()); |
2286 | free (THIS->regionmap); |
2313 | delete [] THIS->regionmap; |
2287 | |
2314 | |
2288 | THIS->regions = regions; |
2315 | THIS->regions = regions; |
2289 | THIS->regionmap = regionmap; |
2316 | THIS->regionmap = regionmap; |
2290 | } |
2317 | } |
2291 | |
2318 | |
… | |
… | |
2594 | char *buf = SvPVbyte (packet, len); |
2621 | char *buf = SvPVbyte (packet, len); |
2595 | |
2622 | |
2596 | THIS->send_packet (buf, len); |
2623 | THIS->send_packet (buf, len); |
2597 | } |
2624 | } |
2598 | |
2625 | |
|
|
2626 | faceidx |
|
|
2627 | client::find_face (utf8_string name, faceidx defidx = 0) |
|
|
2628 | CODE: |
|
|
2629 | RETVAL = face_find (name, defidx); |
|
|
2630 | THIS->send_face (RETVAL); |
|
|
2631 | THIS->flush_fx (); |
|
|
2632 | OUTPUT: |
|
|
2633 | RETVAL |
|
|
2634 | |
2599 | MODULE = cf PACKAGE = cf::face PREFIX = face_ |
2635 | MODULE = cf PACKAGE = cf::face PREFIX = face_ |
2600 | |
2636 | |
2601 | #INCLUDE: $PERL $srcdir/genacc faceset ../include/face.h | |
2637 | #INCLUDE: $PERL $srcdir/genacc faceset ../include/face.h | |
2602 | |
2638 | |
2603 | faceidx face_find (utf8_string name, faceidx defidx = 0) |
2639 | faceidx face_find (utf8_string name, faceidx defidx = 0) |
… | |
… | |
2639 | } |
2675 | } |
2640 | |
2676 | |
2641 | void set_data (faceidx idx, int faceset, SV *data, SV *chksum) |
2677 | void set_data (faceidx idx, int faceset, SV *data, SV *chksum) |
2642 | CODE: |
2678 | CODE: |
2643 | { |
2679 | { |
2644 | facedata *d = face_data (idx, faceset); assert (d); |
2680 | faceinfo *f = face_info (idx); assert (f); |
|
|
2681 | facedata *d = &(faceset ? f->data64 : f->data32); |
2645 | sv_to (data, d->data); |
2682 | sv_to (data, d->data); |
2646 | STRLEN clen; |
2683 | STRLEN clen; |
2647 | char *cdata = SvPVbyte (chksum, clen); |
2684 | char *cdata = SvPVbyte (chksum, clen); |
2648 | clen = min (CHKSUM_SIZE, clen); |
2685 | clen = min (CHKSUM_SIZE, clen); |
2649 | |
2686 | |