ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/Client.xs
(Generate patch)

Comparing deliantra/Deliantra-Client/Client.xs (file contents):
Revision 1.212 by root, Sun Jul 29 03:58:26 2007 UTC vs.
Revision 1.221 by root, Fri Aug 10 04:02:13 2007 UTC

804 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("CFPlus::UI::Event", 1)))); 804 XPUSHs (sv_2mortal (sv_bless (newRV_noinc ((SV *)hv), gv_stashpv ("CFPlus::UI::Event", 1))));
805 } 805 }
806} 806}
807 807
808int 808int
809Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 4096) 809Mix_OpenAudio (int frequency = 44100, int format = MIX_DEFAULT_FORMAT, int channels = 2, int chunksize = 1024)
810 POSTCALL: 810 POSTCALL:
811 Mix_HookMusicFinished (music_finished); 811 Mix_HookMusicFinished (music_finished);
812 Mix_ChannelFinished (channel_finished); 812 Mix_ChannelFinished (channel_finished);
813 813
814void 814void
815Mix_CloseAudio () 815Mix_CloseAudio ()
816 816
817int 817int
818Mix_AllocateChannels (int numchans = -1) 818Mix_AllocateChannels (int numchans = -1)
819
820const char *
821Mix_GetError ()
819 822
820void 823void
821lowdelay (int fd, int val = 1) 824lowdelay (int fd, int val = 1)
822 CODE: 825 CODE:
823 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (void *)&val, sizeof (val)); 826 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, (void *)&val, sizeof (val));
1347 HV *hv = (HV *)SvRV (self); 1350 HV *hv = (HV *)SvRV (self);
1348 float s = SvNV (*hv_fetch (hv, "s", 1, 1)); 1351 float s = SvNV (*hv_fetch (hv, "s", 1, 1));
1349 float t = SvNV (*hv_fetch (hv, "t", 1, 1)); 1352 float t = SvNV (*hv_fetch (hv, "t", 1, 1));
1350 int name = SvIV (*hv_fetch (hv, "name", 4, 1)); 1353 int name = SvIV (*hv_fetch (hv, "name", 4, 1));
1351 1354
1355 if (name <= 0)
1356 XSRETURN_EMPTY;
1357
1352 if (items < 5) 1358 if (items < 5)
1353 { 1359 {
1354 w = SvNV (*hv_fetch (hv, "w", 1, 1)); 1360 w = SvNV (*hv_fetch (hv, "w", 1, 1));
1355 h = SvNV (*hv_fetch (hv, "h", 1, 1)); 1361 h = SvNV (*hv_fetch (hv, "h", 1, 1));
1356 } 1362 }
1544 self->rows += MAP_EXTEND_Y; 1550 self->rows += MAP_EXTEND_Y;
1545 self->y += MAP_EXTEND_Y; 1551 self->y += MAP_EXTEND_Y;
1546 } 1552 }
1547} 1553}
1548 1554
1549void 1555SV *
1550map1a_update (CFPlus::Map self, SV *data_, int extmap) 1556map1a_update (CFPlus::Map self, SV *data_, int extmap)
1551 CODE: 1557 CODE:
1552{ 1558{
1553 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_); 1559 uint8_t *data = (uint8_t *)SvPVbyte_nolen (data_);
1554 uint8_t *data_end = (uint8_t *)SvEND (data_); 1560 uint8_t *data_end = (uint8_t *)SvEND (data_);
1555 mapcell *cell; 1561 mapcell *cell;
1556 int x, y, flags; 1562 int x, y, z, flags;
1563 AV *missing = newAV ();
1564 RETVAL = newRV_noinc ((SV *)missing);
1557 1565
1558 while (data < data_end - 1) 1566 while (data < data_end - 1)
1559 { 1567 {
1560 flags = (data [0] << 8) + data [1]; data += 2; 1568 flags = (data [0] << 8) + data [1]; data += 2;
1561 1569
1612 } 1620 }
1613 else 1621 else
1614 cell->darkness = *data++ + 1; 1622 cell->darkness = *data++ + 1;
1615 } 1623 }
1616 1624
1625 for (z = 0; z <= 2; ++z)
1617 if (flags & 4) 1626 if (flags & (4 >> z))
1618 { 1627 {
1619 faceid face = (data [0] << 8) + data [1]; data += 2; 1628 faceid face = (data [0] << 8) + data [1]; data += 2;
1620 need_facenum (self, face); 1629 need_facenum (self, face);
1621 cell->tile [0] = self->face2tile [face]; 1630 cell->tile [z] = self->face2tile [face];
1631
1632 if (cell->tile [z])
1633 {
1634 maptex *tex = self->tex + cell->tile [z];
1635 if (!tex->name)
1636 av_push (missing, newSViv (cell->tile [z]));
1637
1638 if (tex->smoothtile)
1639 {
1640 maptex *smooth = self->tex + tex->smoothtile;
1641 if (!smooth->name)
1642 av_push (missing, newSViv (tex->smoothtile));
1643 }
1644 }
1622 } 1645 }
1623
1624 if (flags & 2)
1625 {
1626 faceid face = (data [0] << 8) + data [1]; data += 2;
1627 need_facenum (self, face);
1628 cell->tile [1] = self->face2tile [face];
1629 }
1630
1631 if (flags & 1)
1632 {
1633 faceid face = (data [0] << 8) + data [1]; data += 2;
1634 need_facenum (self, face);
1635 cell->tile [2] = self->face2tile [face];
1636 }
1637 } 1646 }
1638 else 1647 else
1639 cell->darkness = 0; 1648 cell->darkness = 0;
1640 } 1649 }
1641} 1650}
1651 OUTPUT:
1652 RETVAL
1642 1653
1643SV * 1654SV *
1644mapmap (CFPlus::Map self, int x0, int y0, int w, int h) 1655mapmap (CFPlus::Map self, int x0, int y0, int w, int h)
1645 CODE: 1656 CODE:
1646{ 1657{
1720 glEnable (GL_TEXTURE_2D); 1731 glEnable (GL_TEXTURE_2D);
1721 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 1732 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
1722 1733
1723 glBegin (GL_QUADS); 1734 glBegin (GL_QUADS);
1724 1735
1725 last_name = 0; 1736 last_name = -1;
1726 1737
1727 mx += self->x; 1738 mx += self->x;
1728 my += self->y; 1739 my += self->y;
1729 1740
1730 // first pass: determine smooth_max 1741 // first pass: determine smooth_max
1765 tileid tile = cell->tile [z]; 1776 tileid tile = cell->tile [z];
1766 1777
1767 if (tile) 1778 if (tile)
1768 { 1779 {
1769 maptex tex = self->tex [tile]; 1780 maptex tex = self->tex [tile];
1770 int px = (x + 1) * T - tex.w; 1781 int px, py;
1771 int py = (y + 1) * T - tex.h;
1772 1782
1773 // suppressing texture state switches here 1783 // suppressing texture state switches here
1774 // is only moderately effective, but worth the extra effort 1784 // is only moderately effective, but worth the extra effort
1775 if (last_name != tex.name) 1785 if (last_name != tex.name)
1776 { 1786 {
1779 1789
1780 glEnd (); 1790 glEnd ();
1781 glBindTexture (GL_TEXTURE_2D, last_name = tex.name); 1791 glBindTexture (GL_TEXTURE_2D, last_name = tex.name);
1782 glBegin (GL_QUADS); 1792 glBegin (GL_QUADS);
1783 } 1793 }
1794
1795 px = (x + 1) * T - tex.w;
1796 py = (y + 1) * T - tex.h;
1784 1797
1785 glTexCoord2f (0 , 0 ); glVertex2f (px , py ); 1798 glTexCoord2f (0 , 0 ); glVertex2f (px , py );
1786 glTexCoord2f (0 , tex.t); glVertex2f (px , py + tex.h); 1799 glTexCoord2f (0 , tex.t); glVertex2f (px , py + tex.h);
1787 glTexCoord2f (tex.s, tex.t); glVertex2f (px + tex.w, py + tex.h); 1800 glTexCoord2f (tex.s, tex.t); glVertex2f (px + tex.w, py + tex.h);
1788 glTexCoord2f (tex.s, 0 ); glVertex2f (px + tex.w, py ); 1801 glTexCoord2f (tex.s, 0 ); glVertex2f (px + tex.w, py );
2257 CODE: 2270 CODE:
2258 RETVAL = SDL_RWFromFile (path, mode); 2271 RETVAL = SDL_RWFromFile (path, mode);
2259 OUTPUT: 2272 OUTPUT:
2260 RETVAL 2273 RETVAL
2261 2274
2275# fails on win32:
2276# CFPlus.xs(2268) : error C2059: syntax error : '('
2262void 2277#void
2263close (CFPlus::RW self) 2278#close (CFPlus::RW self)
2264 CODE: 2279# CODE:
2265 SDL_RWclose (self); 2280# (self->(close)) (self);
2266 2281
2267MODULE = CFPlus PACKAGE = CFPlus::Channel 2282MODULE = CFPlus PACKAGE = CFPlus::Channel
2268 2283
2269PROTOTYPES: DISABLE 2284PROTOTYPES: DISABLE
2285
2286CFPlus::Channel
2287find ()
2288 CODE:
2289{
2290 RETVAL = Mix_GroupAvailable (-1);
2291
2292 if (RETVAL < 0)
2293 {
2294 RETVAL = Mix_GroupOldest (-1);
2295
2296 if (RETVAL < 0)
2297 XSRETURN_UNDEF;
2298
2299 Mix_HaltChannel (RETVAL);
2300 }
2301
2302 Mix_UnregisterAllEffects (RETVAL);
2303 Mix_Volume (RETVAL, 128);
2304}
2305 OUTPUT:
2306 RETVAL
2307
2308void
2309halt (CFPlus::Channel self)
2310 CODE:
2311 Mix_HaltChannel (self);
2312
2313void
2314expire (CFPlus::Channel self, int ticks = -1)
2315 CODE:
2316 Mix_ExpireChannel (self, ticks);
2317
2318void
2319fade_out (CFPlus::Channel self, int ticks = -1)
2320 CODE:
2321 Mix_FadeOutChannel (self, ticks);
2270 2322
2271int 2323int
2272volume (CFPlus::Channel self, int volume) 2324volume (CFPlus::Channel self, int volume)
2273 CODE: 2325 CODE:
2274 RETVAL = Mix_Volume (self, volume); 2326 RETVAL = Mix_Volume (self, CLAMP (volume, 0, 128));
2275 OUTPUT: 2327 OUTPUT:
2276 RETVAL 2328 RETVAL
2277 2329
2278int 2330void
2279unregister_all_effects (CFPlus::Channel self) 2331unregister_all_effects (CFPlus::Channel self)
2280 CODE: 2332 CODE:
2281 RETVAL = Mix_UnregisterAllEffects (self); 2333 Mix_UnregisterAllEffects (self);
2282 OUTPUT:
2283 RETVAL
2284 2334
2285int 2335void
2286set_panning (CFPlus::Channel self, int left, int right) 2336set_panning (CFPlus::Channel self, int left, int right)
2287 CODE: 2337 CODE:
2338 left = CLAMP (left , 0, 255);
2339 right = CLAMP (right, 0, 255);
2288 RETVAL = Mix_SetPanning (self, left, right); 2340 Mix_SetPanning (self, left, right);
2289 OUTPUT:
2290 RETVAL
2291 2341
2292int 2342void
2293set_distance (CFPlus::Channel self, int distance) 2343set_distance (CFPlus::Channel self, int distance)
2294 CODE: 2344 CODE:
2295 RETVAL = Mix_SetDistance (self, distance); 2345 Mix_SetDistance (self, CLAMP (distance, 0, 255));
2296 OUTPUT:
2297 RETVAL
2298 2346
2299int 2347void
2300set_position (CFPlus::Channel self, int angle, int distance) 2348set_position (CFPlus::Channel self, int angle, int distance)
2301 CODE: 2349 CODE:
2350
2351void
2352set_position_r (CFPlus::Channel self, int dx, int dy, int maxdistance)
2353 CODE:
2354{
2355 int distance = sqrtf (dx * dx + dy * dy) * (255.f / sqrtf (maxdistance * maxdistance));
2356 int angle = 360 + (int)roundf (atan2f (dx, -dy) * 180.f / (float)M_PI);
2302 RETVAL = Mix_SetPosition (self, angle, distance); 2357 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255));
2303 OUTPUT: 2358}
2304 RETVAL
2305 2359
2306int 2360void
2307set_reverse_stereo (CFPlus::Channel self, int flip) 2361set_reverse_stereo (CFPlus::Channel self, int flip)
2308 CODE: 2362 CODE:
2309 RETVAL = Mix_SetReverseStereo (self, flip); 2363 Mix_SetReverseStereo (self, flip);
2310 OUTPUT:
2311 RETVAL
2312 2364
2313MODULE = CFPlus PACKAGE = CFPlus::MixChunk 2365MODULE = CFPlus PACKAGE = CFPlus::MixChunk
2314 2366
2315PROTOTYPES: DISABLE 2367PROTOTYPES: DISABLE
2316 2368
2327 Mix_FreeChunk (self); 2379 Mix_FreeChunk (self);
2328 2380
2329int 2381int
2330volume (CFPlus::MixChunk self, int volume = -1) 2382volume (CFPlus::MixChunk self, int volume = -1)
2331 CODE: 2383 CODE:
2384 if (items > 1)
2385 volume = CLAMP (volume, 0, 128);
2332 RETVAL = Mix_VolumeChunk (self, volume); 2386 RETVAL = Mix_VolumeChunk (self, volume);
2333 OUTPUT: 2387 OUTPUT:
2334 RETVAL 2388 RETVAL
2335 2389
2336CFPlus::Channel 2390CFPlus::Channel
2337play (CFPlus::MixChunk self, int channel = -1, int loops = 0, int ticks = -1) 2391play (CFPlus::MixChunk self, CFPlus::Channel channel = -1, int loops = 0, int ticks = -1)
2338 CODE: 2392 CODE:
2393{
2339 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks); 2394 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks);
2395
2396 if (RETVAL < 0)
2397 XSRETURN_UNDEF;
2398
2399 if (channel < 0)
2400 {
2340 Mix_UnregisterAllEffects (RETVAL); 2401 Mix_UnregisterAllEffects (RETVAL);
2402 Mix_Volume (RETVAL, 128);
2403 }
2404}
2341 OUTPUT: 2405 OUTPUT:
2342 RETVAL 2406 RETVAL
2343 2407
2344MODULE = CFPlus PACKAGE = CFPlus::MixMusic 2408MODULE = CFPlus PACKAGE = CFPlus::MixMusic
2345 2409
2346int 2410int
2347volume (int volume = -1) 2411volume (int volume = -1)
2348 PROTOTYPE: ;$ 2412 PROTOTYPE: ;$
2349 CODE: 2413 CODE:
2414 if (items > 0)
2415 volume = CLAMP (volume, 0, 128);
2350 RETVAL = Mix_VolumeMusic (volume); 2416 RETVAL = Mix_VolumeMusic (volume);
2351 OUTPUT: 2417 OUTPUT:
2352 RETVAL 2418 RETVAL
2353 2419
2354int 2420void
2355fade_out (int ms) 2421fade_out (int ms)
2356 CODE: 2422 CODE:
2357 RETVAL = Mix_FadeOutMusic (ms); 2423 Mix_FadeOutMusic (ms);
2358 OUTPUT:
2359 RETVAL
2360 2424
2361void 2425void
2362halt () 2426halt ()
2363 CODE: 2427 CODE:
2364 Mix_HaltMusic (); 2428 Mix_HaltMusic ();
2380 CODE: 2444 CODE:
2381 RETVAL = Mix_PlayMusic (self, loops); 2445 RETVAL = Mix_PlayMusic (self, loops);
2382 OUTPUT: 2446 OUTPUT:
2383 RETVAL 2447 RETVAL
2384 2448
2385int 2449void
2386fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position) 2450fade_in_pos (CFPlus::MixMusic self, int loops, int ms, double position)
2387 CODE: 2451 CODE:
2388 RETVAL = Mix_FadeInMusicPos (self, loops, ms, position); 2452 Mix_FadeInMusicPos (self, loops, ms, position);
2389 OUTPUT:
2390 RETVAL
2391 2453
2392MODULE = CFPlus PACKAGE = CFPlus::OpenGL 2454MODULE = CFPlus PACKAGE = CFPlus::OpenGL
2393 2455
2394PROTOTYPES: ENABLE 2456PROTOTYPES: ENABLE
2395 2457

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines