File: sprite_eupdate_aff.c

package info (click to toggle)
xsystem35 1.7.3-pre5-8
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 7,372 kB
  • sloc: ansic: 51,007; sh: 12,049; asm: 863; makefile: 412; xml: 281; perl: 142
file content (103 lines) | stat: -rw-r--r-- 2,688 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// եѴ (ž)

static void do_aff(surface_t *in, surface_t *out, int deg, double zx, double zy) {
	int xs = in->width  / 2;
	int ys = in->height / 2;
	double r = deg * M_PI / 180;
	double c = cos(r);
	double s = sin(r);
	double x, y;
	int i, j, m, n;
	
	switch(in->depth) {
	case 15:
	case 16: {
		WORD *src, *dst;
		
		for (i = -ys; i < ys; i++) {
			for (j = -xs; j < xs; j++) {
				y = (j * s + i * c) / zy;
				x = (j * c - i * s) / zx;
				if (y > 0) m = (int)y;
				else       m = (int)(y -1);
				if (x > 0) n = (int)x;
				else       n = (int)(x -1);
				src = (WORD *)GETOFFSET_PIXEL(in,  n+xs, m+ys);
				dst = (WORD *)GETOFFSET_PIXEL(out, j+xs, i+ys);
				if ((m >= -ys) && (m < ys) && (n >= -xs) && (n < xs)) {
					*dst = *src;
				}
			}
		}
		break;
	}
	case 24:
	case 32: {
		DWORD *src, *dst;
		
		for (i = -ys; i < ys; i++) {
			for (j = -xs; j < xs; j++) {
				y = (j * s + i * c) / zy;
				x = (j * c - i * s) / zx;
				if (y > 0) m = (int)y;
				else       m = (int)(y -1);
				if (x > 0) n = (int)x;
				else       n = (int)(x -1);
				src = (DWORD *)GETOFFSET_PIXEL(in,  n+xs, m+ys);
				dst = (DWORD *)GETOFFSET_PIXEL(out, j+xs, i+ys);
				if ((m >= -ys) && (m < ys) && (n >= -xs) && (n < xs)) {
					*dst = *src;
				}
			}
		}
		break;
	}}
}



//ž
static void ec20_cb(surface_t *sfsrc, surface_t *sfdst) {
	//ž
	int maxstep, curstep;
	maxstep = 360;
	curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
	sf_copyall(sf0, sfdst);
	do_aff(sfsrc, sf0, curstep, 1- (double)curstep / maxstep, 1- (double)curstep / maxstep);
	ags_updateFull();
	ecp.oldstep = curstep;
}

//ž
static void ec21_cb(surface_t *sfsrc, surface_t *sfdst) {
	int maxstep, curstep;
	maxstep = 360;
	curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
	sf_copyall(sf0, sfsrc);
	do_aff(sfdst, sf0, curstep, (double)curstep / maxstep, (double)curstep / maxstep);
	ags_updateFull();
	ecp.oldstep = curstep;
}

//ž(ײ)
static void ec22_cb(surface_t *sfsrc, surface_t *sfdst) {
	int maxstep, curstep;
	maxstep = 360;
	curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
	sf_copyall(sf0, sfdst);
	do_aff(sfsrc, sf0, -curstep, 1- (double)curstep / maxstep, 1- (double)curstep / maxstep);
	ags_updateFull();
	ecp.oldstep = curstep;
}

//ž(ײ)
static void ec23_cb(surface_t *sfsrc, surface_t *sfdst) {
	int maxstep, curstep;
	maxstep = 360;
	curstep = maxstep * (ecp.curtime - ecp.sttime)/ (ecp.edtime - ecp.sttime);
	sf_copyall(sf0, sfsrc);
	do_aff(sfdst, sf0, -curstep, (double)curstep / maxstep, (double)curstep / maxstep);
	ags_updateFull();
	ecp.oldstep = curstep;
}