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.213 by root, Sun Jul 29 04:14:45 2007 UTC vs.
Revision 1.219 by root, Mon Aug 6 05:06:32 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 }
1693 RETVAL = map_sv; 1699 RETVAL = map_sv;
1694} 1700}
1695 OUTPUT: 1701 OUTPUT:
1696 RETVAL 1702 RETVAL
1697 1703
1698void 1704SV *
1699draw (CFPlus::Map self, int mx, int my, int sw, int sh, int T) 1705draw (CFPlus::Map self, int mx, int my, int sw, int sh, int T)
1700 CODE: 1706 CODE:
1701{ 1707{
1702 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ()); 1708 HV *smooth = (HV *)sv_2mortal ((SV *)newHV ());
1703 uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level 1709 uint32_t smooth_level[256 / 32]; // one bit for every possible smooth level
1704 static uint8_t smooth_max[256][256]; // egad, fats and wasteful on memory (64k) 1710 static uint8_t smooth_max[256][256]; // egad, fats and wasteful on memory (64k)
1705 smooth_key skey; 1711 smooth_key skey;
1706 int x, y, z; 1712 int x, y, z;
1707 int last_name; 1713 int last_name;
1714 AV *missing = newAV ();
1715 RETVAL = newRV_noinc ((SV *)missing);
1708 1716
1709 // thats current max. sorry. 1717 // thats current max. sorry.
1710 if (sw > 255) sw = 255; 1718 if (sw > 255) sw = 255;
1711 if (sh > 255) sh = 255; 1719 if (sh > 255) sh = 255;
1712 1720
1720 glEnable (GL_TEXTURE_2D); 1728 glEnable (GL_TEXTURE_2D);
1721 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 1729 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
1722 1730
1723 glBegin (GL_QUADS); 1731 glBegin (GL_QUADS);
1724 1732
1725 last_name = 0; 1733 last_name = -1;
1726 1734
1727 mx += self->x; 1735 mx += self->x;
1728 my += self->y; 1736 my += self->y;
1729 1737
1730 // first pass: determine smooth_max 1738 // first pass: determine smooth_max
1765 tileid tile = cell->tile [z]; 1773 tileid tile = cell->tile [z];
1766 1774
1767 if (tile) 1775 if (tile)
1768 { 1776 {
1769 maptex tex = self->tex [tile]; 1777 maptex tex = self->tex [tile];
1770 int px = (x + 1) * T - tex.w; 1778 int px, py;
1771 int py = (y + 1) * T - tex.h;
1772 1779
1773 // suppressing texture state switches here 1780 // suppressing texture state switches here
1774 // is only moderately effective, but worth the extra effort 1781 // is only moderately effective, but worth the extra effort
1775 if (last_name != tex.name) 1782 if (last_name != tex.name)
1776 { 1783 {
1777 if (!tex.name) 1784 if (!tex.name)
1785 {
1786 av_push (missing, newSViv (tile));
1778 tex = self->tex [2]; /* missing, replace by noface */ 1787 tex = self->tex [2]; /* missing, replace by noface */
1788 }
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 );
1884 // this time naively avoiding texture state changes 1897 // this time naively avoiding texture state changes
1885 // save gobs of state changes. 1898 // save gobs of state changes.
1886 if (last_name != tex.name) 1899 if (last_name != tex.name)
1887 { 1900 {
1888 if (!tex.name) 1901 if (!tex.name)
1902 {
1903 av_push (missing, newSViv (skey->tile));
1889 continue; // smoothing not yet available 1904 continue; // smoothing not yet available
1905 }
1890 1906
1891 glEnd (); 1907 glEnd ();
1892 glBindTexture (GL_TEXTURE_2D, last_name = tex.name); 1908 glBindTexture (GL_TEXTURE_2D, last_name = tex.name);
1893 glBegin (GL_QUADS); 1909 glBegin (GL_QUADS);
1894 } 1910 }
1955 px + width - 2 - cell->stat_hp * (width - 4) / 255, py - 1); 1971 px + width - 2 - cell->stat_hp * (width - 4) / 255, py - 1);
1956 } 1972 }
1957 } 1973 }
1958 } 1974 }
1959} 1975}
1976 OUTPUT:
1977 RETVAL
1960 1978
1961void 1979void
1962draw_magicmap (CFPlus::Map self, int dx, int dy, int w, int h, unsigned char *data) 1980draw_magicmap (CFPlus::Map self, int dx, int dy, int w, int h, unsigned char *data)
1963 CODE: 1981 CODE:
1964{ 1982{
2257 CODE: 2275 CODE:
2258 RETVAL = SDL_RWFromFile (path, mode); 2276 RETVAL = SDL_RWFromFile (path, mode);
2259 OUTPUT: 2277 OUTPUT:
2260 RETVAL 2278 RETVAL
2261 2279
2280# fails on win32:
2281# CFPlus.xs(2268) : error C2059: syntax error : '('
2262void 2282#void
2263close (CFPlus::RW self) 2283#close (CFPlus::RW self)
2264 CODE: 2284# CODE:
2265 SDL_RWclose (self); 2285# (self->(close)) (self);
2266 2286
2267MODULE = CFPlus PACKAGE = CFPlus::Channel 2287MODULE = CFPlus PACKAGE = CFPlus::Channel
2268 2288
2269PROTOTYPES: DISABLE 2289PROTOTYPES: DISABLE
2290
2291CFPlus::Channel
2292find ()
2293 CODE:
2294{
2295 RETVAL = Mix_GroupAvailable (-1);
2296
2297 if (RETVAL < 0)
2298 {
2299 RETVAL = Mix_GroupOldest (-1);
2300
2301 if (RETVAL < 0)
2302 XSRETURN_UNDEF;
2303
2304 Mix_HaltChannel (RETVAL);
2305 }
2306
2307 Mix_UnregisterAllEffects (RETVAL);
2308 Mix_Volume (RETVAL, 128);
2309}
2310 OUTPUT:
2311 RETVAL
2270 2312
2271void 2313void
2272halt (CFPlus::Channel self) 2314halt (CFPlus::Channel self)
2273 CODE: 2315 CODE:
2274 Mix_HaltChannel (self); 2316 Mix_HaltChannel (self);
2284 Mix_FadeOutChannel (self, ticks); 2326 Mix_FadeOutChannel (self, ticks);
2285 2327
2286int 2328int
2287volume (CFPlus::Channel self, int volume) 2329volume (CFPlus::Channel self, int volume)
2288 CODE: 2330 CODE:
2289 RETVAL = Mix_Volume (self, volume); 2331 RETVAL = Mix_Volume (self, CLAMP (volume, 0, 128));
2290 OUTPUT: 2332 OUTPUT:
2291 RETVAL 2333 RETVAL
2292 2334
2293void 2335void
2294unregister_all_effects (CFPlus::Channel self) 2336unregister_all_effects (CFPlus::Channel self)
2296 Mix_UnregisterAllEffects (self); 2338 Mix_UnregisterAllEffects (self);
2297 2339
2298void 2340void
2299set_panning (CFPlus::Channel self, int left, int right) 2341set_panning (CFPlus::Channel self, int left, int right)
2300 CODE: 2342 CODE:
2343 left = CLAMP (left , 0, 255);
2344 right = CLAMP (right, 0, 255);
2301 Mix_SetPanning (self, left, right); 2345 Mix_SetPanning (self, left, right);
2302 2346
2303void 2347void
2304set_distance (CFPlus::Channel self, int distance) 2348set_distance (CFPlus::Channel self, int distance)
2305 CODE: 2349 CODE:
2306 Mix_SetDistance (self, distance); 2350 Mix_SetDistance (self, CLAMP (distance, 0, 255));
2307 2351
2308void 2352void
2309set_position (CFPlus::Channel self, int angle, int distance) 2353set_position (CFPlus::Channel self, int angle, int distance)
2310 CODE: 2354 CODE:
2311 Mix_SetPosition (self, angle, distance); 2355 Mix_SetPosition (self, angle, CLAMP (distance, 0, 255));
2312 2356
2313void 2357void
2314set_reverse_stereo (CFPlus::Channel self, int flip) 2358set_reverse_stereo (CFPlus::Channel self, int flip)
2315 CODE: 2359 CODE:
2316 Mix_SetReverseStereo (self, flip); 2360 Mix_SetReverseStereo (self, flip);
2332 Mix_FreeChunk (self); 2376 Mix_FreeChunk (self);
2333 2377
2334int 2378int
2335volume (CFPlus::MixChunk self, int volume = -1) 2379volume (CFPlus::MixChunk self, int volume = -1)
2336 CODE: 2380 CODE:
2381 if (items > 1)
2382 volume = CLAMP (volume, 0, 128);
2337 RETVAL = Mix_VolumeChunk (self, volume); 2383 RETVAL = Mix_VolumeChunk (self, volume);
2338 OUTPUT: 2384 OUTPUT:
2339 RETVAL 2385 RETVAL
2340 2386
2341CFPlus::Channel 2387CFPlus::Channel
2342play (CFPlus::MixChunk self, int channel = -1, int loops = 0, int ticks = -1) 2388play (CFPlus::MixChunk self, CFPlus::Channel channel = -1, int loops = 0, int ticks = -1)
2343 CODE: 2389 CODE:
2390{
2344 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks); 2391 RETVAL = Mix_PlayChannelTimed (channel, self, loops, ticks);
2392
2393 if (RETVAL < 0)
2394 XSRETURN_UNDEF;
2395
2396 if (channel < 0)
2397 {
2345 Mix_UnregisterAllEffects (RETVAL); 2398 Mix_UnregisterAllEffects (RETVAL);
2399 Mix_Volume (RETVAL, 128);
2400 }
2401}
2346 OUTPUT: 2402 OUTPUT:
2347 RETVAL 2403 RETVAL
2348 2404
2349MODULE = CFPlus PACKAGE = CFPlus::MixMusic 2405MODULE = CFPlus PACKAGE = CFPlus::MixMusic
2350 2406
2351int 2407int
2352volume (int volume = -1) 2408volume (int volume = -1)
2353 PROTOTYPE: ;$ 2409 PROTOTYPE: ;$
2354 CODE: 2410 CODE:
2411 if (items > 0)
2412 volume = CLAMP (volume, 0, 128);
2355 RETVAL = Mix_VolumeMusic (volume); 2413 RETVAL = Mix_VolumeMusic (volume);
2356 OUTPUT: 2414 OUTPUT:
2357 RETVAL 2415 RETVAL
2358 2416
2359void 2417void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines