ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/cfperl.xs
(Generate patch)

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.228 by root, Wed Jul 11 16:55:19 2007 UTC vs.
Revision 1.237 by root, Mon Jul 23 23:46:03 2007 UTC

964} 964}
965 965
966SV * 966SV *
967cfperl_result (int idx) 967cfperl_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)
1021void 1021void
1022cfperl_send_msg (client *ns, int color, const char *type, const char *msg) 1022cfperl_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
1033int
1034cfperl_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
1033maptile * 1048maptile *
1034maptile::find_sync (const char *path, maptile *origin) 1049maptile::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
1554void _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
1559void _quantise (SV *data_sv, SV *plt_sv) 1570void _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
1611void _post_tick ()
1612 CODE:
1613 coroapi::next_cede = SvNV (sv_next_tick) - TICK * (1. - 1. / CEDES_PER_TICK);
1614
1615NV till_cede ()
1616 CODE:
1617 RETVAL = coroapi::next_cede - now ();
1618 OUTPUT:
1619 RETVAL
1620
1621NV till_tick ()
1622 CODE:
1623 RETVAL = SvNV (sv_next_tick) - now ();
1624 OUTPUT:
1625 RETVAL
1599 1626
1600NV floor (NV x) 1627NV floor (NV x)
1601 1628
1602NV ceil (NV x) 1629NV ceil (NV x)
1603 1630
2009 2036
2010void add_button_link (object *button, maptile *map, int connected); 2037void add_button_link (object *button, maptile *map, int connected);
2011 2038
2012void remove_button_link (object *op); 2039void remove_button_link (object *op);
2013 2040
2041void handle_apply_yield (object *op);
2042
2014 2043
2015MODULE = cf PACKAGE = cf::object PREFIX = cf_ 2044MODULE = cf PACKAGE = cf::object PREFIX = cf_
2016 2045
2017object *cf_insert_ob_in_ob (object *ob, object *where) 2046object *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
2626faceidx
2627client::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
2599MODULE = cf PACKAGE = cf::face PREFIX = face_ 2635MODULE = 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
2603faceidx face_find (utf8_string name, faceidx defidx = 0) 2639faceidx face_find (utf8_string name, faceidx defidx = 0)
2626 set_visibility = 1 2662 set_visibility = 1
2627 set_magicmap = 2 2663 set_magicmap = 2
2628 set_smooth = 3 2664 set_smooth = 3
2629 set_smoothlevel = 4 2665 set_smoothlevel = 4
2630 CODE: 2666 CODE:
2631 faceinfo *f = face_info (idx); 2667 faceinfo *f = face_info (idx); assert (f);
2632 assert (f);
2633 switch (ix) 2668 switch (ix)
2634 { 2669 {
2635 case 0: f->type = value; break; 2670 case 0: f->type = value; break;
2636 case 1: f->visibility = value; break; 2671 case 1: f->visibility = value; break;
2637 case 2: f->magicmap = value; break; 2672 case 2: f->magicmap = value; break;
2640 } 2675 }
2641 2676
2642void set_data (faceidx idx, int faceset, SV *data, SV *chksum) 2677void set_data (faceidx idx, int faceset, SV *data, SV *chksum)
2643 CODE: 2678 CODE:
2644{ 2679{
2645 facedata *d = face_data (idx, faceset); 2680 faceinfo *f = face_info (idx); assert (f);
2646 assert (d); 2681 facedata *d = &(faceset ? f->data64 : f->data32);
2647 sv_to (data, d->data); 2682 sv_to (data, d->data);
2648 STRLEN clen; 2683 STRLEN clen;
2649 char *cdata = SvPVbyte (chksum, clen); 2684 char *cdata = SvPVbyte (chksum, clen);
2650 clen = min (CHKSUM_SIZE, clen); 2685 clen = min (CHKSUM_SIZE, clen);
2651 2686
2661 ns->force_newmap = true; 2696 ns->force_newmap = true;
2662 } 2697 }
2663 } 2698 }
2664} 2699}
2665 2700
2701int get_data_size (faceidx idx, int faceset = 0)
2702 CODE:
2703 facedata *d = face_data (idx, faceset); assert (d);
2704 RETVAL = d->data.size ();
2705 OUTPUT:
2706 RETVAL
2707
2708SV *get_chksum (faceidx idx, int faceset = 0)
2709 CODE:
2710 facedata *d = face_data (idx, faceset); assert (d);
2711 RETVAL = newSVpvn ((char *)d->chksum, CHKSUM_SIZE);
2712 OUTPUT:
2713 RETVAL
2714
2666void invalidate (faceidx idx) 2715void invalidate (faceidx idx)
2667 CODE: 2716 CODE:
2668 for_all_clients (ns) 2717 for_all_clients (ns)
2669 { 2718 {
2670 ns->faces_sent [idx] = false; 2719 ns->faces_sent [idx] = false;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines