Skip to content

Commit 8fab2d9

Browse files
author
root
committed
Added in a very basic sprite handler.
1 parent 7f51996 commit 8fab2d9

File tree

2 files changed

+62
-11
lines changed

2 files changed

+62
-11
lines changed

make_display.c

+61-11
Original file line numberDiff line numberDiff line change
@@ -67,28 +67,78 @@ MAKEDISPLAY *initialize_display()
6767
int make_display(MAKEDISPLAY *dis,ws2811_led_t MATRIX[][15])
6868
{
6969
int i,j,jone,jcoord,jonecoord,coord,mirrorcoord;
70-
70+
int basepos,phase;
71+
7172
GifColorType *sprite;
7273

73-
sprite=dis->sprites[(dis->phase++)>>2];
74+
//sprite=dis->sprites[(dis->phase++)>>2];
7475

75-
if (dis->phase >= 8*16) {
76+
phase = dis->phase++;
77+
if (dis->phase >= 92) {
7678
dis->phase = 0;
7779
}
78-
79-
for(j=0;j<16;j++) {
80-
for(i=0;i<15;i++) {
81-
MATRIX[j][i] =
82-
sprite[dis->SpriteW*j + i].Red +
83-
sprite[dis->SpriteW*j + i].Green*0x100 +
84-
sprite[dis->SpriteW*j + i].Blue*0x10000;
80+
81+
if(phase<36) {
82+
sprite = dis->sprites[(phase)&1];
83+
_put_sprite(dis,MATRIX,sprite,0,36 - phase);
84+
} else if(phase<38) {
85+
sprite = dis->sprites[6+((phase)&1)];
86+
_put_sprite(dis,MATRIX,sprite,0,0);
87+
} else if(phase<54) {
88+
sprite = dis->sprites[6+((phase)&1)];
89+
_put_sprite(dis,MATRIX,sprite,phase-38,0);
90+
} else if(phase<70) {
91+
sprite = dis->sprites[14 +((phase)&1)];
92+
_put_sprite(dis,MATRIX,sprite,phase-54-16,0);
93+
} else if(phase<72) {
94+
sprite = dis->sprites[10 + ((phase)&1)];
95+
_put_sprite(dis,MATRIX,sprite,0,0);
96+
} else if(phase<92) {
97+
sprite = dis->sprites[10 + ((phase)&1)];
98+
_put_sprite(dis,MATRIX,sprite,0,phase-72);
99+
}
100+
101+
102+
103+
/*
104+
for(j=0;j<20;j++) {
105+
{
106+
for(i=0;i<15;i++) {
107+
MATRIX[j][i] =
108+
sprite[dis->SpriteW*j + i].Red +
109+
sprite[dis->SpriteW*j + i].Green*0x100 +
110+
sprite[dis->SpriteW*j + i].Blue*0x10000;
111+
}
85112
}
86113
}
87-
114+
*/
88115
return 0;
89116

90117
}
91118

119+
void _put_sprite(MAKEDISPLAY *dis,ws2811_led_t MATRIX[][15],GifColorType *sprite,int x, int y)
120+
{
121+
int i,j,transx,transy;
122+
123+
for(j=0;j<dis->SpriteH;j++)
124+
{
125+
transy = j+y;
126+
if(transy>=0 && transy<60) {
127+
for(i=0;i<dis->SpriteW;i++)
128+
{
129+
transx = i+x;
130+
if(transx>=0 && transx < 15)
131+
{
132+
MATRIX[transy][transx] =
133+
sprite[dis->SpriteW*j + i].Red +
134+
sprite[dis->SpriteW*j + i].Green*0x100 +
135+
sprite[dis->SpriteW*j + i].Blue*0x10000;
136+
}
137+
}
138+
}
139+
}
140+
}
141+
92142
void close_display(MAKEDISPLAY *dis)
93143
{
94144
gifloader_close(dis->gfl);

make_display.h

+1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ typedef struct {
1515
MAKEDISPLAY *initialize_display();
1616
int make_display(MAKEDISPLAY *dis,ws2811_led_t MATRIX[][15]);
1717
void close_display(MAKEDISPLAY *dis);
18+
void _put_sprite(MAKEDISPLAY *dis,ws2811_led_t MATRIX[][15],GifColorType *sprite,int x, int y);
1819

1920
#endif // MAKE_DISPLAY_INCLUDE

0 commit comments

Comments
 (0)