Refactor effect enums

Since not all SACT effects can be mapped to CE effects, a third enum
type is needed.
This commit is contained in:
kichikuou
2022-01-04 12:32:10 +09:00
parent 8dc49fee71
commit d03568c3ff
5 changed files with 65 additions and 34 deletions
+1 -11
View File
@@ -342,16 +342,6 @@ 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;
}
}
/*
効果つき画面更新
@param type: 効果の種類
@@ -375,7 +365,7 @@ int sp_eupdate(int type, int time, int cancel) {
sfdst = sf_dup(sf0);
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));
ecp.fader = sdl_fader_init(0, 0, sfsrc->width, sfsrc->height, 0, 0, from_sact_effect(type));
else
sf_copyall(sf0, sfsrc); // 全部の効果タイプにこの処理は要らないんだけど
+8 -8
View File
@@ -1428,17 +1428,17 @@ void ags_eCopyArea(int sx, int sy, int w, int h, int dx, int dy, int sw, int opt
ags_fader(&i);
return;
case EFFECT_PENTAGRAM_IN_OUT:
case EFFECT_PENTAGRAM_OUT_IN:
case EFFECT_HEXAGRAM_IN_OUT:
case EFFECT_HEXAGRAM_OUT_IN:
case EFFECT_WINDMILL:
case EFFECT_WINDMILL_180:
case EFFECT_WINDMILL_360:
case NACT_EFFECT_PENTAGRAM_IN_OUT:
case NACT_EFFECT_PENTAGRAM_OUT_IN:
case NACT_EFFECT_HEXAGRAM_IN_OUT:
case NACT_EFFECT_HEXAGRAM_OUT_IN:
case NACT_EFFECT_WINDMILL:
case NACT_EFFECT_WINDMILL_180:
case NACT_EFFECT_WINDMILL_360:
i.step_max = SDL_FADER_MAXSTEP;
i.effect_time = opt == 0 ? 1000 : opt;
i.cancel = cancel;
sdlfader = sdl_fader_init(ecp.sx, ecp.sy, ecp.w, ecp.h, ecp.dx, ecp.dy, sw);
sdlfader = sdl_fader_init(ecp.sx, ecp.sy, ecp.w, ecp.h, ecp.dx, ecp.dy, from_nact_effect(sw));
i.callback = sdlfader_step;
ags_fader(&i);
sdl_fader_finish(sdlfader);
+29 -12
View File
@@ -20,23 +20,40 @@
#ifndef __EFFECT_H__
#define __EFFECT_H__
// Effect numbers for the CE command.
enum effect {
EFFECT_CROSSFADE = 31,
EFFECT_PENTAGRAM_IN_OUT = 44,
EFFECT_PENTAGRAM_OUT_IN = 45,
EFFECT_HEXAGRAM_IN_OUT = 46,
EFFECT_HEXAGRAM_OUT_IN = 47,
EFFECT_WINDMILL = 50,
EFFECT_WINDMILL_180 = 51,
EFFECT_WINDMILL_360 = 52,
// Effect types of the CE command.
enum nact_effect {
NACT_EFFECT_CROSSFADE = 31,
NACT_EFFECT_PENTAGRAM_IN_OUT = 44,
NACT_EFFECT_PENTAGRAM_OUT_IN = 45,
NACT_EFFECT_HEXAGRAM_IN_OUT = 46,
NACT_EFFECT_HEXAGRAM_OUT_IN = 47,
NACT_EFFECT_WINDMILL = 50,
NACT_EFFECT_WINDMILL_180 = 51,
NACT_EFFECT_WINDMILL_360 = 52,
};
// Effect types of SCAT.DrawEffect.
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,
SACT_EFFECT_HEXAGRAM_IN_OUT = 16,
SACT_EFFECT_HEXAGRAM_OUT_IN = 17,
};
// Internal effect numbers.
enum sdl_effect {
EFFECT_INVALID,
EFFECT_CROSSFADE,
EFFECT_PENTAGRAM_IN_OUT,
EFFECT_PENTAGRAM_OUT_IN,
EFFECT_HEXAGRAM_IN_OUT,
EFFECT_HEXAGRAM_OUT_IN,
EFFECT_WINDMILL,
EFFECT_WINDMILL_180,
EFFECT_WINDMILL_360,
};
enum sdl_effect from_nact_effect(enum nact_effect effect);
enum sdl_effect from_sact_effect(enum sact_effect effect);
#endif /* __EFFECT_H__ */
+1 -1
View File
@@ -88,7 +88,7 @@ extern SDL_Surface *com2surface(agsurface_t *s);
#define SDL_FADER_MAXSTEP 256
struct sdl_fader;
struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum effect type);
struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum sdl_effect type);
void sdl_fader_step(struct sdl_fader *fader, int step);
void sdl_fader_finish(struct sdl_fader *fader);
extern void sdl_fadeIn(int step);
+26 -2
View File
@@ -30,9 +30,33 @@
struct sdl_fader {
SDL_Texture *tx_old, *tx_new, *tx_tmp;
SDL_Rect dst_rect;
enum effect effect;
enum sdl_effect effect;
};
enum sdl_effect from_nact_effect(enum nact_effect effect) {
switch (effect) {
case NACT_EFFECT_CROSSFADE: return EFFECT_CROSSFADE;
case NACT_EFFECT_PENTAGRAM_IN_OUT: return EFFECT_PENTAGRAM_IN_OUT;
case NACT_EFFECT_PENTAGRAM_OUT_IN: return EFFECT_PENTAGRAM_OUT_IN;
case NACT_EFFECT_HEXAGRAM_IN_OUT: return EFFECT_HEXAGRAM_IN_OUT;
case NACT_EFFECT_HEXAGRAM_OUT_IN: return EFFECT_HEXAGRAM_OUT_IN;
case NACT_EFFECT_WINDMILL: return EFFECT_WINDMILL;
case NACT_EFFECT_WINDMILL_180: return EFFECT_WINDMILL_180;
case NACT_EFFECT_WINDMILL_360: return EFFECT_WINDMILL_360;
default: return EFFECT_INVALID;
}
}
enum sdl_effect from_sact_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 EFFECT_INVALID;
}
}
#define HAS_SDL_RenderGeometry SDL_VERSION_ATLEAST(2, 0, 18)
#if HAS_SDL_RenderGeometry
@@ -269,7 +293,7 @@ static void step_crossfade(struct sdl_fader *fader, int step) {
SDL_RenderPresent(sdl_renderer);
}
struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum effect effect) {
struct sdl_fader *sdl_fader_init(int sx, int sy, int w, int h, int dx, int dy, enum sdl_effect effect) {
if (!SDL_RenderTargetSupported(sdl_renderer) || !HAS_SDL_RenderGeometry) {
WARNING("Effect %d is not supported in this system. Falling back to crossfade.\n", effect);
effect = EFFECT_CROSSFADE;