mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-10-05 21:28:22 +03:00
Use sdl_fader in SACT
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user