mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
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:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user