Use sdl_fader in SACT

This commit is contained in:
kichikuou
2021-12-12 22:21:20 +09:00
parent d7dd98a8ca
commit e1e1e5cacc
5 changed files with 34 additions and 120 deletions
-56
View File
@@ -47,10 +47,6 @@ static void ec9_cb(surface_t *, surface_t *);
static void ec11_cb(surface_t *, surface_t *);
static void ec12_cb(surface_t *, surface_t *);
static void ec13_cb(surface_t *, surface_t *);
static void ec14_cb(surface_t *, surface_t *);
static void ec15_cb(surface_t *, surface_t *);
static void ec16_cb(surface_t *, surface_t *);
static void ec17_cb(surface_t *, surface_t *);
static void ec_dummy_cb(surface_t *, surface_t *);
struct ecopyparam {
@@ -245,58 +241,6 @@ static void ec13_cb(surface_t *src, surface_t *dst) {
ecp.oldstep = st_i;
}
// 五芒星 (内->外)
static void ec14_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 44, curstep);
ecp.oldstep = curstep;
}
// 五芒星 (外->内)
static void ec15_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 45, curstep);
ecp.oldstep = curstep;
}
// 六芒星 (内->外)
static void ec16_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 46, curstep);
ecp.oldstep = curstep;
}
// 六芒星 (外->内)
static void ec17_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 47, curstep);
ecp.oldstep = curstep;
}
// フェードイン
static void ec_fadein_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep;
+27 -54
View File
@@ -48,10 +48,7 @@ static void ec9_cb(surface_t *, surface_t *);
static void ec11_cb(surface_t *, surface_t *);
static void ec12_cb(surface_t *, surface_t *);
static void ec13_cb(surface_t *, surface_t *);
static void ec14_cb(surface_t *, surface_t *);
static void ec15_cb(surface_t *, surface_t *);
static void ec16_cb(surface_t *, surface_t *);
static void ec17_cb(surface_t *, surface_t *);
static void sdlfader_cb(surface_t *, surface_t *);
static void ec_dummy_cb(surface_t *, surface_t *);
struct ecopyparam {
@@ -60,6 +57,7 @@ struct ecopyparam {
int edtime;
int curstep;
int oldstep;
struct sdl_fader *fader;
};
typedef struct ecopyparam ecopyparam_t;
static ecopyparam_t ecp;
@@ -87,10 +85,10 @@ static entrypoint *cb[39] = {
ec11_cb,
ec12_cb,
ec13_cb,
ec14_cb,
ec15_cb,
ec16_cb,
ec17_cb,
sdlfader_cb,
sdlfader_cb,
sdlfader_cb,
sdlfader_cb,
ec_dummy_cb, // 欠番
ec19_cb,
ec20_cb,
@@ -288,55 +286,13 @@ static void ec13_cb(surface_t *src, surface_t *dst) {
ecp.oldstep = st_i;
}
// 五芒星 (内->外)
static void ec14_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
static void sdlfader_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep = SDL_FADER_MAXSTEP * (ecp.curtime - ecp.sttime) / (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 44, curstep);
ecp.oldstep = curstep;
}
// 五芒星 (外->内)
static void ec15_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 45, curstep);
ecp.oldstep = curstep;
}
// 六芒星 (内->外)
static void ec16_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 46, curstep);
ecp.oldstep = curstep;
}
// 六芒星 (外->内)
static void ec17_cb(surface_t *sfsrc, surface_t *sfdst) {
int curstep, maxstep;
maxstep = 256;
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
if (ecp.oldstep == 0) {
sf_copyall(sf0, sfdst);
}
sdl_maskupdate(0, 0, sfsrc->width, sfsrc->height, 0, 0, 47, curstep);
sdl_fader_step(ecp.fader, curstep);
ecp.oldstep = curstep;
}
@@ -386,6 +342,15 @@ static void ec38_cb(surface_t *sfsrc, surface_t *sfdst) {
static void ec39_cb(surface_t *sfsrc, surface_t *sfdst) {
}
static enum effect sact_effect_to_effect(enum sact_effect effect) {
switch (effect) {
case SACT_EFFECT_PENTAGRAM_IN_OUT: return EFFECT_PENTAGRAM_IN_OUT;
case SACT_EFFECT_PENTAGRAM_OUT_IN: return EFFECT_PENTAGRAM_OUT_IN;
case SACT_EFFECT_HEXAGRAM_IN_OUT: return EFFECT_HEXAGRAM_IN_OUT;
case SACT_EFFECT_HEXAGRAM_OUT_IN: return EFFECT_HEXAGRAM_OUT_IN;
default: return 0;
}
}
/*
効果つき画面更新
@@ -409,7 +374,11 @@ int sp_eupdate(int type, int time, int cancel) {
sfdst = sf_dup(sf0);
sf_copyall(sf0, sfsrc); // 全部の効果タイプにこの処理は要らないんだけど
if (SACT_EFFECT_PENTAGRAM_IN_OUT <= type && type <= SACT_EFFECT_HEXAGRAM_OUT_IN)
ecp.fader = sdl_fader_init(0, 0, sfsrc->width, sfsrc->height, 0, 0, sact_effect_to_effect(type));
else
sf_copyall(sf0, sfsrc); // 全部の効果タイプにこの処理は要らないんだけど
// 5つを越えたら別の方法を考えよう
if (type == 10) {
ec10_prepare(sfsrc, sfdst);
@@ -449,6 +418,10 @@ int sp_eupdate(int type, int time, int cancel) {
if (type == 19) {
ec19_drain(sfsrc, sfdst);
}
if (ecp.fader) {
sdl_fader_finish(ecp.fader);
ecp.fader = NULL;
}
return OK;
}
+7
View File
@@ -32,4 +32,11 @@ enum effect {
EFFECT_WINDMILL_360 = 52,
};
enum sact_effect {
SACT_EFFECT_PENTAGRAM_IN_OUT = 14,
SACT_EFFECT_PENTAGRAM_OUT_IN = 15,
SACT_EFFECT_HEXAGRAM_IN_OUT = 16,
SACT_EFFECT_HEXAGRAM_OUT_IN = 17,
};
#endif /* __EFFECT_H__ */
-1
View File
@@ -81,7 +81,6 @@ extern void sdl_CopyRegion(void *src, int sx, int sy, int w, int h, int dx, int
extern void sdl_restoreRegion(void *src, int x, int y);
extern void* sdl_saveRegion(int x, int y, int w, int h);
extern void sdl_delRegion(void *src);
extern void sdl_maskupdate(int sx, int sy, int w, int h, int dx, int dy, int func, int step);
extern SDL_Surface *com2surface(agsurface_t *s);
/* fader */
-9
View File
@@ -480,12 +480,3 @@ void sdl_wrapColor(int sx, int sy, int w, int h, BYTE c, int rate) {
SDL_BlitSurface(s, &r_src, sdl_dib, &r_dst);
SDL_FreeSurface(s);
}
/* mask update まだ */
void sdl_maskupdate(int sx, int sy, int w, int h, int dx, int dy, int func, int step) {
if (step == 256) {
WARNING("Unimplemented effect %d\n", func);
ags_copyArea(sx, sy, w, h, dx, dy);
ags_updateArea(dx, dy, w, h);
}
}