mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-10-08 14:48:19 +03:00
sdl_fader: Implement blind effects
This commit is contained in:
@@ -39,10 +39,8 @@ static ecopyparam_t ecp;
|
||||
|
||||
|
||||
|
||||
#define ECA7_D 16
|
||||
#define ECA12_D 256
|
||||
|
||||
static void ec7_cb();
|
||||
static void ec11_cb(int step);
|
||||
static void ec11_prepare(void);
|
||||
static void ec12_cb(int step);
|
||||
@@ -99,9 +97,6 @@ void gpx_effect(int no,
|
||||
ags_faderinfo_t i;
|
||||
|
||||
switch(no) {
|
||||
case 7:
|
||||
ec7_cb();
|
||||
break;
|
||||
case 11:
|
||||
ec11_prepare();
|
||||
i.step_max = 6;
|
||||
@@ -131,29 +126,6 @@ void gpx_effect(int no,
|
||||
}
|
||||
|
||||
|
||||
#define EC_WAIT \
|
||||
if ((key |= sys_getInputInfo()) && ecp.cancel) break; \
|
||||
key = sys_keywait(cnt - sdl_getTicks(), ecp.cancel);
|
||||
|
||||
static void ec7_cb() {
|
||||
int i, j, y, key = 0, cnt;
|
||||
int waitcnt = ecp.time == 0 ? 40 : (ecp.time/60);
|
||||
|
||||
cnt = sdl_getTicks();
|
||||
for (i = 0; i < ECA7_D + ecp.h / ECA7_D -1; i++) {
|
||||
cnt += waitcnt;
|
||||
for (j = 0; j < min(i + 1, ECA7_D); j++) {
|
||||
y = j + ECA7_D * (i-j);
|
||||
if (y < 0 || y >= ecp.h) continue;
|
||||
gr_copy(ecp.write, ecp.wx, ecp.wy + y, ecp.src, ecp.sx, ecp.sy + y, ecp.w, 1);
|
||||
}
|
||||
ags_updateArea(ecp.wx, ecp.wy, ecp.w, ecp.h);
|
||||
EC_WAIT;
|
||||
}
|
||||
|
||||
ags_updateArea(ecp.wx, ecp.wy, ecp.w, ecp.h);
|
||||
}
|
||||
|
||||
static void ec11_prepare() {
|
||||
int i;
|
||||
|
||||
|
||||
@@ -40,9 +40,6 @@
|
||||
|
||||
|
||||
static void ec6_cb(surface_t *, surface_t *);
|
||||
static void ec7_cb(surface_t *, surface_t *);
|
||||
static void ec8_cb(surface_t *, surface_t *);
|
||||
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 *);
|
||||
@@ -70,99 +67,6 @@ static void ec_dummy_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
WARNING("NOT IMPLEMENTED\n");
|
||||
}
|
||||
|
||||
// すだれ落ち
|
||||
static void ec7_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
#define EC7DELTA 16
|
||||
int curstep, maxstep = sfsrc->height / EC7DELTA + EC7DELTA;
|
||||
int i, t, y;
|
||||
|
||||
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
|
||||
//SACT_DEBUG("step = %d\n", curstep);
|
||||
|
||||
if (ecp.oldstep == curstep) {
|
||||
usleep(0);
|
||||
return;
|
||||
}
|
||||
t = ecp.oldstep;
|
||||
while(t < curstep) {
|
||||
for (i = 0; i < min(t + 1, EC7DELTA); i++) {
|
||||
y = i + EC7DELTA * (t - i);
|
||||
if (y < 0 || y >= sfsrc->height) continue;
|
||||
gr_copy(sf0, 0, y,
|
||||
sfdst, 0, y, sfsrc->width, 1);
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
ecp.oldstep = curstep;
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
// すだれ左->右
|
||||
static void ec8_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
#define EC8DELTA 16
|
||||
int curstep, maxstep = sfsrc->width / EC8DELTA + EC8DELTA;
|
||||
int i, t, x;
|
||||
|
||||
curstep = maxstep * (ecp.curtime - ecp.sttime) / (ecp.edtime - ecp.sttime);
|
||||
//SACT_DEBUG("step = %d\n", curstep);
|
||||
|
||||
if (ecp.oldstep == curstep) {
|
||||
usleep(0);
|
||||
return;
|
||||
}
|
||||
t = ecp.oldstep;
|
||||
while(t < curstep) {
|
||||
for (i = 0; i < min(t + 1, EC8DELTA); i++) {
|
||||
x = i + EC8DELTA * (t - i);
|
||||
if (x < 0 || x >= sfsrc->width) continue;
|
||||
gr_copy(sf0, x, 0,
|
||||
sfdst, x, 0, 1, sfsrc->height);
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
ecp.oldstep = curstep;
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
// すだれ落ち&左->右
|
||||
static void ec9_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
#define EC9DELTA 16
|
||||
int curstep, maxstep;
|
||||
int i, t, x, y;
|
||||
|
||||
maxstep = max(sfsrc->height / EC9DELTA + EC9DELTA,
|
||||
sfsrc->width / EC9DELTA + EC9DELTA);
|
||||
|
||||
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
|
||||
//SACT_DEBUG("step = %d\n", curstep);
|
||||
|
||||
if (ecp.oldstep == curstep) {
|
||||
usleep(0);
|
||||
return;
|
||||
}
|
||||
t = ecp.oldstep;
|
||||
while(t < curstep) {
|
||||
for (i = 0; i < min(t + 1, EC9DELTA); i++) {
|
||||
y = i + EC9DELTA * (t - i);
|
||||
if (y < 0 || y >= sfsrc->height) continue;
|
||||
gr_copy(sf0, 0, y,
|
||||
sfdst, 0, y, sfsrc->width, 1);
|
||||
}
|
||||
for (i = 0; i < min(t + 1, EC9DELTA); i++) {
|
||||
x = i + EC9DELTA * (t - i);
|
||||
if (x < 0 || x >= sfsrc->width) continue;
|
||||
gr_copy(sf0, x, 0,
|
||||
sfdst, x, 0, 1, sfsrc->height);
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
ecp.oldstep = curstep;
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
// 上->下クロスフェード
|
||||
static void ec12_cb(surface_t *src, surface_t *dst) {
|
||||
#define EC12DELTA 256
|
||||
@@ -258,12 +162,6 @@ int nt_sp_eupdate(int type, int time, int cancel) {
|
||||
case 10:
|
||||
cb = ec_dummy_cb;
|
||||
break;
|
||||
case 107: // 簾落ち
|
||||
cb = ec7_cb;
|
||||
break;
|
||||
case 108: // 左->右すだれ
|
||||
cb = ec8_cb;
|
||||
break;
|
||||
case 111: // 線形ぼかし
|
||||
ec11_prepare(sfsrc, sfdst);
|
||||
cb = ec11_cb;
|
||||
|
||||
@@ -41,9 +41,6 @@
|
||||
|
||||
|
||||
static void ec6_cb(surface_t *, surface_t *);
|
||||
static void ec7_cb(surface_t *, surface_t *);
|
||||
static void ec8_cb(surface_t *, surface_t *);
|
||||
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 *);
|
||||
@@ -76,9 +73,9 @@ static entrypoint *cb[39] = {
|
||||
sdlfader_cb,
|
||||
sdlfader_cb,
|
||||
ec6_cb,
|
||||
ec7_cb,
|
||||
ec8_cb,
|
||||
ec9_cb,
|
||||
sdlfader_cb,
|
||||
sdlfader_cb,
|
||||
sdlfader_cb,
|
||||
ec10_cb,
|
||||
ec11_cb,
|
||||
ec12_cb,
|
||||
@@ -115,99 +112,6 @@ static void ec_dummy_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
WARNING("NOT IMPLEMENTED\n");
|
||||
}
|
||||
|
||||
// すだれ落ち
|
||||
static void ec7_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
#define EC7DELTA 16
|
||||
int curstep, maxstep = sfsrc->height / EC7DELTA + EC7DELTA;
|
||||
int i, t, y;
|
||||
|
||||
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
|
||||
SACT_DEBUG("step = %d\n", curstep);
|
||||
|
||||
if (ecp.oldstep == curstep) {
|
||||
usleep(0);
|
||||
return;
|
||||
}
|
||||
t = ecp.oldstep;
|
||||
while(t < curstep) {
|
||||
for (i = 0; i < min(t + 1, EC7DELTA); i++) {
|
||||
y = i + EC7DELTA * (t - i);
|
||||
if (y < 0 || y >= sfsrc->height) continue;
|
||||
gr_copy(sf0, 0, y,
|
||||
sfdst, 0, y, sfsrc->width, 1);
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
ecp.oldstep = curstep;
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
// すだれ左->右
|
||||
static void ec8_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
#define EC8DELTA 16
|
||||
int curstep, maxstep = sfsrc->width / EC8DELTA + EC8DELTA;
|
||||
int i, t, x;
|
||||
|
||||
curstep = maxstep * (ecp.curtime - ecp.sttime) / (ecp.edtime - ecp.sttime);
|
||||
SACT_DEBUG("step = %d\n", curstep);
|
||||
|
||||
if (ecp.oldstep == curstep) {
|
||||
usleep(0);
|
||||
return;
|
||||
}
|
||||
t = ecp.oldstep;
|
||||
while(t < curstep) {
|
||||
for (i = 0; i < min(t + 1, EC8DELTA); i++) {
|
||||
x = i + EC8DELTA * (t - i);
|
||||
if (x < 0 || x >= sfsrc->width) continue;
|
||||
gr_copy(sf0, x, 0,
|
||||
sfdst, x, 0, 1, sfsrc->height);
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
ecp.oldstep = curstep;
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
// すだれ落ち&左->右
|
||||
static void ec9_cb(surface_t *sfsrc, surface_t *sfdst) {
|
||||
#define EC9DELTA 16
|
||||
int curstep, maxstep;
|
||||
int i, t, x, y;
|
||||
|
||||
maxstep = max(sfsrc->height / EC9DELTA + EC9DELTA,
|
||||
sfsrc->width / EC9DELTA + EC9DELTA);
|
||||
|
||||
curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
|
||||
SACT_DEBUG("step = %d\n", curstep);
|
||||
|
||||
if (ecp.oldstep == curstep) {
|
||||
usleep(0);
|
||||
return;
|
||||
}
|
||||
t = ecp.oldstep;
|
||||
while(t < curstep) {
|
||||
for (i = 0; i < min(t + 1, EC9DELTA); i++) {
|
||||
y = i + EC9DELTA * (t - i);
|
||||
if (y < 0 || y >= sfsrc->height) continue;
|
||||
gr_copy(sf0, 0, y,
|
||||
sfdst, 0, y, sfsrc->width, 1);
|
||||
}
|
||||
for (i = 0; i < min(t + 1, EC9DELTA); i++) {
|
||||
x = i + EC9DELTA * (t - i);
|
||||
if (x < 0 || x >= sfsrc->width) continue;
|
||||
gr_copy(sf0, x, 0,
|
||||
sfdst, x, 0, 1, sfsrc->height);
|
||||
}
|
||||
t++;
|
||||
}
|
||||
|
||||
ecp.oldstep = curstep;
|
||||
ags_updateFull();
|
||||
}
|
||||
|
||||
// 上->下クロスフェード
|
||||
static void ec12_cb(surface_t *src, surface_t *dst) {
|
||||
#define EC12DELTA 256
|
||||
|
||||
Reference in New Issue
Block a user