Deliantra-Client
view release on metacpan or search on metacpan
CODE:
map_clear (self);
void
set_tileid (DC::Map self, int face, int tile)
CODE:
{
need_facenum (self, face); self->face2tile [face] = tile;
need_texid (self, tile);
}
void
set_smooth (DC::Map self, int face, int smooth, int level)
CODE:
{
tileid texid;
maptex *tex;
if (face < 0 || face >= self->faces)
return;
if (smooth < 0 || smooth >= self->faces)
return;
texid = self->face2tile [face];
if (!texid)
return;
tex = self->tex + texid;
tex->smoothtile = self->face2tile [smooth];
tex->smoothlevel = level;
}
void
set_texture (DC::Map self, int texid, int name, int w, int h, float s, float t, int r, int g, int b, int a)
CODE:
{
need_texid (self, texid);
{
maptex *tex = self->tex + texid;
tex->name = name;
tex->w = w;
tex->h = h;
tex->s = s;
tex->t = t;
tex->r = r;
tex->g = g;
tex->b = b;
tex->a = a;
}
// somewhat hackish, but for textures that require it, it really
// improves the look, and most others don't suffer.
glBindTexture (GL_TEXTURE_2D, name);
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
//glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// use uglier nearest interpolation because linear suffers
// from transparent color bleeding and ugly wrapping effects.
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
void
expire_textures (DC::Map self, int texid, int count)
PPCODE:
for (; texid < self->texs && count; ++texid, --count)
{
maptex *tex = self->tex + texid;
if (tex->name)
{
if (tex->unused)
{
tex->name = 0;
tex->unused = 0;
XPUSHs (sv_2mortal (newSViv (texid)));
}
else
tex->unused = 1;
}
}
int
ox (DC::Map self)
ALIAS:
oy = 1
x = 2
y = 3
w = 4
h = 5
CODE:
switch (ix)
{
case 0: RETVAL = self->ox; break;
case 1: RETVAL = self->oy; break;
case 2: RETVAL = self->x; break;
case 3: RETVAL = self->y; break;
case 4: RETVAL = self->w; break;
case 5: RETVAL = self->h; break;
}
OUTPUT:
RETVAL
void
scroll (DC::Map self, int dx, int dy)
CODE:
{
if (dx > 0)
map_blank (self, self->x, self->y, dx, self->h);
else if (dx < 0)
map_blank (self, self->x + self->w + dx, self->y, -dx, self->h);
if (dy > 0)
map_blank (self, self->x, self->y, self->w, dy);
else if (dy < 0)
map_blank (self, self->x, self->y + self->h + dy, self->w, -dy);
self->ox += dx; self->x += dx;
self->oy += dy; self->y += dy;
( run in 2.610 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )