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.419 by root, Sun Nov 11 02:38:10 2012 UTC vs.
Revision 1.420 by root, Sun Nov 11 04:29:11 2012 UTC

92 92
93static SV 93static SV
94 *cv_cf_do_invoke, 94 *cv_cf_do_invoke,
95 *cv_cf__can_merge, 95 *cv_cf__can_merge,
96 *cv_cf_client_send_msg, 96 *cv_cf_client_send_msg,
97 *cv_cf_ix,
97 *cv_cf_tick, 98 *cv_cf_tick,
98 *cv_cf_match_match; 99 *cv_cf_match_match;
99 100
100#ifndef newSVpv_utf8 101#ifndef newSVpv_utf8
101static SV * 102static SV *
1157 CALL_ARG (originator); 1158 CALL_ARG (originator);
1158 CALL_CALL ("cf::mapscript::activate", G_VOID); 1159 CALL_CALL ("cf::mapscript::activate", G_VOID);
1159 CALL_END; 1160 CALL_END;
1160} 1161}
1161 1162
1163void cfperl_ix (client *ns, faceidx idx, int pri, uint32 size, uint32 fofs)
1164{
1165 CALL_BEGIN (5);
1166 CALL_ARG (ns);
1167 CALL_ARG (idx);
1168 CALL_ARG (pri);
1169 CALL_ARG (size);
1170 CALL_ARG (fofs);
1171 CALL_CALL (cv_cf_ix, G_VOID);
1172 CALL_END;
1173}
1174
1162player * 1175player *
1163player::find (const_utf8_string name) 1176player::find (const_utf8_string name)
1164{ 1177{
1165 CALL_BEGIN (1); 1178 CALL_BEGIN (1);
1166 CALL_ARG (name); 1179 CALL_ARG (name);
1436_connect_to_perl_2 () 1449_connect_to_perl_2 ()
1437{ 1450{
1438 cv_cf_do_invoke = (SV *)get_cv ("cf::do_invoke" , 0); assert (cv_cf_do_invoke); 1451 cv_cf_do_invoke = (SV *)get_cv ("cf::do_invoke" , 0); assert (cv_cf_do_invoke);
1439 cv_cf__can_merge = (SV *)get_cv ("cf::_can_merge" , 0); assert (cv_cf__can_merge); 1452 cv_cf__can_merge = (SV *)get_cv ("cf::_can_merge" , 0); assert (cv_cf__can_merge);
1440 cv_cf_client_send_msg = (SV *)get_cv ("cf::client::send_msg", 0); assert (cv_cf_client_send_msg); 1453 cv_cf_client_send_msg = (SV *)get_cv ("cf::client::send_msg", 0); assert (cv_cf_client_send_msg);
1454 cv_cf_ix = (SV *)get_cv ("cf::face::ix" , 0); assert (cv_cf_ix);
1441 cv_cf_tick = (SV *)get_cv ("cf::tick" , 0); assert (cv_cf_tick); 1455 cv_cf_tick = (SV *)get_cv ("cf::tick" , 0); assert (cv_cf_tick);
1442 cv_cf_match_match = (SV *)get_cv ("cf::match::match" , 0); assert (cv_cf_match_match); 1456 cv_cf_match_match = (SV *)get_cv ("cf::match::match" , 0); assert (cv_cf_match_match);
1443} 1457}
1444 1458
1445MODULE = cf PACKAGE = cf PREFIX = cf_ 1459MODULE = cf PACKAGE = cf PREFIX = cf_
2388 croak ("maptile::add_underlay: palette must be arrayref"); 2402 croak ("maptile::add_underlay: palette must be arrayref");
2389 2403
2390 palette = SvRV (palette); 2404 palette = SvRV (palette);
2391 2405
2392 STRLEN idxlen; 2406 STRLEN idxlen;
2393 const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); 2407 const uint8 *idx = (const uint8 *)SvPVbyte (data, idxlen);
2394 2408
2395 for (int x = 0; x < THIS->width; ++x) 2409 for (int x = 0; x < THIS->width; ++x)
2396 for (int y = 0; y < THIS->height; ++y) 2410 for (int y = 0; y < THIS->height; ++y)
2397 { 2411 {
2398 for (object *op = THIS->at (x, y).bot; op; op = op->above) 2412 for (object *op = THIS->at (x, y).bot; op; op = op->above)
2438 croak ("maptile::set_regiondata: palette must be arrayref"); 2452 croak ("maptile::set_regiondata: palette must be arrayref");
2439 2453
2440 palette = SvRV (palette); 2454 palette = SvRV (palette);
2441 2455
2442 STRLEN idxlen; 2456 STRLEN idxlen;
2443 const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); 2457 const uint8 *idx = (const uint8 *)SvPVbyte (data, idxlen);
2444 2458
2445 region_ptr *regionmap = new region_ptr [av_len ((AV *)palette) + 1]; 2459 region_ptr *regionmap = new region_ptr [av_len ((AV *)palette) + 1];
2446 uint8_t *regions = salloc<uint8_t> (THIS->size ()); 2460 uint8 *regions = salloc<uint8_t> (THIS->size ());
2447 2461
2448 for (int i = av_len ((AV *)palette) + 1; i--; ) 2462 for (int i = av_len ((AV *)palette) + 1; i--; )
2449 regionmap [i] = region::find (cfSvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); 2463 regionmap [i] = region::find (cfSvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1)));
2450 2464
2451 for (int y = 0; y < THIS->height; ++y) 2465 for (int y = 0; y < THIS->height; ++y)
2760 case 2: f->magicmap = value; break; 2774 case 2: f->magicmap = value; break;
2761 case 3: f->smooth = value; break; 2775 case 3: f->smooth = value; break;
2762 case 4: f->smoothlevel = value; break; 2776 case 4: f->smoothlevel = value; break;
2763 } 2777 }
2764 2778
2765void set_data (faceidx idx, int faceset, SV *data, SV *chksum) 2779void set_data (faceidx idx, int faceset, uint32 size, uint32 fofs, SV *chksum)
2766 CODE: 2780 CODE:
2767{ 2781{
2768 faceinfo *f = face_info (idx); assert (f); 2782 faceinfo *f = face_info (idx); assert (f);
2769 facedata *d = f->face + faceset; 2783 facedata *d = f->face + faceset;
2770 sv_to (data, d->data);
2771 STRLEN clen; 2784 STRLEN clen;
2772 char *cdata = SvPVbyte (chksum, clen); 2785 char *cdata = SvPVbyte (chksum, clen);
2773 2786
2774 assert (("cf::face::set_data called with too long checksum", clen <= CHKSUM_MAXLEN)); 2787 assert (("cf::face::set_data called with too long checksum", clen <= CHKSUM_MAXLEN));
2775 assert (("cf::face::set_data must be called with a non-empty checksum", clen)); 2788 assert (("cf::face::set_data must be called with a non-empty checksum", clen));
2789
2790 d->size = size;
2791 d->fofs = fofs;
2776 2792
2777 if (clen != d->chksum_len || memcmp (d->chksum, cdata, clen)) 2793 if (clen != d->chksum_len || memcmp (d->chksum, cdata, clen))
2778 { 2794 {
2779 d->chksum_len = clen; 2795 d->chksum_len = clen;
2780 memcpy (d->chksum, cdata, clen); 2796 memcpy (d->chksum, cdata, clen);
2782 // invalidate existing client face info 2798 // invalidate existing client face info
2783 for_all_clients (ns) 2799 for_all_clients (ns)
2784 ns->invalidate_face (idx); 2800 ns->invalidate_face (idx);
2785 } 2801 }
2786} 2802}
2787
2788int get_data_size (faceidx idx, int faceset = 0)
2789 CODE:
2790 facedata *d = face_data (idx, faceset);
2791 if (!d) XSRETURN_UNDEF;
2792 RETVAL = d->data.size ();
2793 OUTPUT:
2794 RETVAL
2795 2803
2796void set_meta (faceidx idx, SV *sv) 2804void set_meta (faceidx idx, SV *sv)
2797 CODE: 2805 CODE:
2798{ 2806{
2799 faceinfo *f = face_info (idx); assert (f); 2807 faceinfo *f = face_info (idx); assert (f);
2831 if (!f) XSRETURN_UNDEF; 2839 if (!f) XSRETURN_UNDEF;
2832 RETVAL = to_sv (f->name); 2840 RETVAL = to_sv (f->name);
2833 OUTPUT: 2841 OUTPUT:
2834 RETVAL 2842 RETVAL
2835 2843
2836SV *get_data (faceidx idx, int faceset = 0) 2844uint32 get_size (faceidx idx, int faceset = 0)
2837 CODE: 2845 CODE:
2838 facedata *d = face_data (idx, faceset); 2846 facedata *d = face_data (idx, faceset);
2839 if (!d) XSRETURN_UNDEF; 2847 if (!d) XSRETURN_UNDEF;
2840 RETVAL = newSVpvn (d->data, d->data.size ()); 2848 RETVAL = d->size;
2849 OUTPUT:
2850 RETVAL
2851
2852uint32 get_fofs (faceidx idx, int faceset = 0)
2853 CODE:
2854 facedata *d = face_data (idx, faceset);
2855 if (!d) XSRETURN_UNDEF;
2856 RETVAL = d->fofs;
2841 OUTPUT: 2857 OUTPUT:
2842 RETVAL 2858 RETVAL
2843 2859
2844SV *get_meta (faceidx idx) 2860SV *get_meta (faceidx idx)
2845 CODE: 2861 CODE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines