- [NEW] spr_r per a rotar sprites (retalla cantos)
- [NEW] sspr admet un nou paràmetre "invert", per a invertir la x i la y.
This commit is contained in:
40
lua.cpp
40
lua.cpp
@@ -160,30 +160,6 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* static int cpp_pal(lua_State *L) {
|
|
||||||
int numargs = lua_gettop(L);
|
|
||||||
switch (numargs) {
|
|
||||||
case 0: pal(); return 0;
|
|
||||||
case 1: luaL_error(L, "not enough arguments"); return 0;
|
|
||||||
}
|
|
||||||
uint8_t c0 = luaL_checkinteger(L, 1);
|
|
||||||
uint8_t c1 = luaL_checkinteger(L, 2);
|
|
||||||
uint8_t p = luaL_optinteger(L, 3, 0);
|
|
||||||
pal(c0, c1, p);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cpp_palt(lua_State *L) {
|
|
||||||
int numargs = lua_gettop(L);
|
|
||||||
switch (numargs) {
|
|
||||||
case 0: palt(); return 0;
|
|
||||||
case 1: uint16_t bits = luaL_checkinteger(L, 1); palt(bits); return 0;
|
|
||||||
}
|
|
||||||
uint8_t col = luaL_checkinteger(L, 1);
|
|
||||||
bool t = lua_toboolean(L, 2);
|
|
||||||
palt(col, t);
|
|
||||||
return 0;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
static int cpp_pset(lua_State *L) {
|
static int cpp_pset(lua_State *L) {
|
||||||
int x = luaL_checknumber(L, 1);
|
int x = luaL_checknumber(L, 1);
|
||||||
@@ -436,7 +412,20 @@ extern "C" {
|
|||||||
int dh = luaL_optnumber(L, 8, 0);
|
int dh = luaL_optnumber(L, 8, 0);
|
||||||
bool flip_x = lua_toboolean(L, 9);
|
bool flip_x = lua_toboolean(L, 9);
|
||||||
bool flip_y = lua_toboolean(L, 10);
|
bool flip_y = lua_toboolean(L, 10);
|
||||||
sspr(sx, sy, sw, sh, dx, dy, dw, dh, flip_x, flip_y);
|
bool invert = lua_toboolean(L, 11);
|
||||||
|
sspr(sx, sy, sw, sh, dx, dy, dw, dh, flip_x, flip_y, invert);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cpp_spr_r(lua_State *L) {
|
||||||
|
int sx = luaL_checknumber(L, 1);
|
||||||
|
int sy = luaL_checknumber(L, 2);
|
||||||
|
int sw = luaL_checknumber(L, 3);
|
||||||
|
int sh = luaL_checknumber(L, 4);
|
||||||
|
int dx = luaL_checknumber(L, 5);
|
||||||
|
int dy = luaL_checknumber(L, 6);
|
||||||
|
float a = luaL_checknumber(L, 7);
|
||||||
|
spr_r(sx, sy, sw, sh, dx, dy, a);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -934,6 +923,7 @@ void push_lua_funcs() {
|
|||||||
lua_pushcfunction(L,cpp_sget); lua_setglobal(L, "sget");
|
lua_pushcfunction(L,cpp_sget); lua_setglobal(L, "sget");
|
||||||
lua_pushcfunction(L,cpp_spr); lua_setglobal(L, "spr");
|
lua_pushcfunction(L,cpp_spr); lua_setglobal(L, "spr");
|
||||||
lua_pushcfunction(L,cpp_sspr); lua_setglobal(L, "sspr");
|
lua_pushcfunction(L,cpp_sspr); lua_setglobal(L, "sspr");
|
||||||
|
lua_pushcfunction(L,cpp_spr_r); lua_setglobal(L, "spr_r");
|
||||||
lua_pushcfunction(L,cpp_tline); lua_setglobal(L, "tline");
|
lua_pushcfunction(L,cpp_tline); lua_setglobal(L, "tline");
|
||||||
lua_pushcfunction(L,cpp_thline); lua_setglobal(L, "thline");
|
lua_pushcfunction(L,cpp_thline); lua_setglobal(L, "thline");
|
||||||
lua_pushcfunction(L,cpp_tvline); lua_setglobal(L, "tvline");
|
lua_pushcfunction(L,cpp_tvline); lua_setglobal(L, "tvline");
|
||||||
|
|||||||
28
mini.cpp
28
mini.cpp
@@ -872,7 +872,7 @@ void spr(uint8_t n, int x, int y, float w, float h, bool flip_x, bool flip_y) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sspr(int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, bool flip_x, bool flip_y) {
|
void sspr(int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, bool flip_x, bool flip_y, bool invert) {
|
||||||
if (dw==0) dw=sw;
|
if (dw==0) dw=sw;
|
||||||
if (dh==0) dh=sh;
|
if (dh==0) dh=sh;
|
||||||
float sdx = float(sw)/float(dw);
|
float sdx = float(sw)/float(dw);
|
||||||
@@ -885,13 +885,37 @@ void sspr(int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, bool f
|
|||||||
for(int y=dy;y<dy+dh;++y) {
|
for(int y=dy;y<dy+dh;++y) {
|
||||||
csx = ssx;
|
csx = ssx;
|
||||||
for(int x=dx;x<dx+dw;++x) {
|
for(int x=dx;x<dx+dw;++x) {
|
||||||
pset(x, y, sget(SDL_max(sx, csx), SDL_max(sy,csy)));
|
uint8_t color = invert ? sget(SDL_max(sy,csy),SDL_max(sx, csx)) : sget(SDL_max(sx, csx), SDL_max(sy,csy));
|
||||||
|
pset(x, y, color);
|
||||||
csx += sdx;
|
csx += sdx;
|
||||||
}
|
}
|
||||||
csy += sdy;
|
csy += sdy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void spr_r(int sx, int sy, int sw, int sh, int x, int y, float a)
|
||||||
|
{
|
||||||
|
const int x0 = sw>>1;
|
||||||
|
const int y0 = sh>>1;
|
||||||
|
|
||||||
|
const float sa = SDL_sinf(a);
|
||||||
|
const float ca = SDL_cosf(a);
|
||||||
|
|
||||||
|
for (int ix=0; ix<=sw; ++ix)
|
||||||
|
{
|
||||||
|
for (int iy=0; iy<=sh; ++iy)
|
||||||
|
{
|
||||||
|
const float dx = ix-x0;
|
||||||
|
const float dy = iy-y0;
|
||||||
|
const float xx = dx*ca - dy*sa + float(x0);
|
||||||
|
const float yy = dx*sa + dy*ca + float(y0);
|
||||||
|
|
||||||
|
if (xx>=0 && xx<sw-1 && yy>=0 && yy<=sh-1)
|
||||||
|
pset(x+ix, y+iy, sget(sx+xx, sy+yy));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void tline(int x0, int y0, int x1, int y1, float mx, float my, float mdx, float mdy) {
|
void tline(int x0, int y0, int x1, int y1, float mx, float my, float mdx, float mdy) {
|
||||||
int x, y;
|
int x, y;
|
||||||
int dx, dy;
|
int dx, dy;
|
||||||
|
|||||||
9
mini.h
9
mini.h
@@ -137,12 +137,6 @@ uint8_t gettrans();
|
|||||||
void subpal(uint8_t index, uint8_t color);
|
void subpal(uint8_t index, uint8_t color);
|
||||||
void reset_subpal();
|
void reset_subpal();
|
||||||
|
|
||||||
/*void pal();
|
|
||||||
void pal(uint8_t c0, uint8_t c1, uint8_t p = 0);
|
|
||||||
void palt();
|
|
||||||
void palt(uint16_t bits);
|
|
||||||
void palt(uint8_t col, bool t);*/
|
|
||||||
|
|
||||||
void pset(int x, int y);
|
void pset(int x, int y);
|
||||||
void pset(int x, int y, uint8_t color);
|
void pset(int x, int y, uint8_t color);
|
||||||
|
|
||||||
@@ -194,7 +188,8 @@ void sset(int x, int y);
|
|||||||
void sset(int x, int y, uint8_t color);
|
void sset(int x, int y, uint8_t color);
|
||||||
|
|
||||||
void spr(uint8_t n, int x, int y, float w = 1.0f, float h = 1.0f, bool flip_x = false, bool flip_y = false);
|
void spr(uint8_t n, int x, int y, float w = 1.0f, float h = 1.0f, bool flip_x = false, bool flip_y = false);
|
||||||
void sspr(int sx, int sy, int sw, int sh, int dx, int dy, int dw=0, int dh=0, bool flip_x = false, bool flip_y = false);
|
void sspr(int sx, int sy, int sw, int sh, int dx, int dy, int dw=0, int dh=0, bool flip_x = false, bool flip_y = false, bool invert = false);
|
||||||
|
void spr_r(int sx, int sy, int sw, int sh, int x, int y, float a);
|
||||||
|
|
||||||
void tline(int x0, int y0, int x1, int y1, float mx, float my, float mdx=0.125f, float mdy=0.0f);
|
void tline(int x0, int y0, int x1, int y1, float mx, float my, float mdx=0.125f, float mdy=0.0f);
|
||||||
void thline(int x0, int y, int x1, float mx, float my, float mdx=0.125f, float mdy=0.0f);
|
void thline(int x0, int y, int x1, float mx, float my, float mdx=0.125f, float mdy=0.0f);
|
||||||
|
|||||||
Reference in New Issue
Block a user