192
|
1 #include "paranormal.h"
|
|
2 #include "actuators.h"
|
|
3 #include "pn_utils.h"
|
|
4
|
|
5 extern SDL_Surface *screen;
|
|
6
|
|
7 void
|
|
8 pn_draw_line (guint _x0, guint _y0, guint _x1, guint _y1, guchar value)
|
|
9 {
|
|
10 gint x0 = _x0;
|
|
11 gint y0 = _y0;
|
|
12 gint x1 = _x1;
|
|
13 gint y1 = _y1;
|
|
14
|
|
15 gint dy = y1 - y0;
|
|
16 gint dx = x1 - x0;
|
|
17 gint stepx, stepy;
|
|
18 gint fraction;
|
|
19
|
|
20 if (dy < 0)
|
|
21 {
|
|
22 dy = -dy;
|
|
23 stepy = -(screen->pitch >> 2);
|
|
24 }
|
|
25 else
|
|
26 {
|
|
27 stepy = screen->pitch>>2;
|
|
28 }
|
|
29 if (dx < 0)
|
|
30 {
|
|
31 dx = -dx;
|
|
32 stepx = -1;
|
|
33 }
|
|
34 else
|
|
35 {
|
|
36 stepx = 1;
|
|
37 }
|
|
38 dy <<= 1;
|
|
39 dx <<= 1;
|
|
40
|
|
41 y0 *= screen->pitch>>2;
|
|
42 y1 *= screen->pitch>>2;
|
|
43 pn_image_data->surface[0][PN_IMG_INDEX(x0, y0)] = value;
|
|
44 if (dx > dy)
|
|
45 {
|
|
46 fraction = dy - (dx >> 1);
|
|
47 while (x0 != x1)
|
|
48 {
|
|
49 if (fraction >= 0)
|
|
50 {
|
|
51 y0 += stepy;
|
|
52 fraction -= dx;
|
|
53 }
|
|
54 x0 += stepx;
|
|
55 fraction += dy;
|
|
56 pn_image_data->surface[0][PN_IMG_INDEX(x0, y0)] = value;
|
|
57 }
|
|
58 }
|
|
59 else
|
|
60 {
|
|
61 fraction = dx - (dy >> 1);
|
|
62 while (y0 != y1)
|
|
63 {
|
|
64 if (fraction >= 0)
|
|
65 {
|
|
66 x0 += stepx;
|
|
67 fraction -= dy;
|
|
68 }
|
|
69 y0 += stepy;
|
|
70 fraction += dx;
|
|
71 pn_image_data->surface[0][PN_IMG_INDEX(x0, y0)] = value;
|
|
72 }
|
|
73 }
|
|
74 }
|