summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpixel <pixel>2003-03-08 02:49:42 +0000
committerpixel <pixel>2003-03-08 02:49:42 +0000
commit02ee82a20cc5462ab43fdfa3b0237cd8618bdd97 (patch)
treea8d1053b3f520765573936ba380547d048bc39f2 /lib
parent054738ff7c07cf86e72fa7fb6d4136349eef5b1c (diff)
Sprites working(?)
Diffstat (limited to 'lib')
-rw-r--r--lib/sprite.cc48
1 files changed, 31 insertions, 17 deletions
diff --git a/lib/sprite.cc b/lib/sprite.cc
index be2fd3b..26b57dd 100644
--- a/lib/sprite.cc
+++ b/lib/sprite.cc
@@ -1,4 +1,5 @@
#include <SDL.h>
+#include "glbase.h"
#include "sprite.h"
#define TEXSIZE 256
@@ -8,23 +9,26 @@ mogltk::Sprite::TexList * mogltk::Sprite::TexList::header = 0;
mogltk::Sprite::Sprite(Handle * h, int asx, int asy) : sx(asx), sy(asy) {
alloc();
for (int y = 0; y < sy; y++) {
- h->read(tlist->GetTex()->pixels + TEXSIZE * y + posx, sx);
+ h->read(tlist->GetTex()->GetPixels() + TEXSIZE * y + posx, sx * 4);
}
+
+ SDL_SaveBMP(tlist->GetTex()->GetSurface(), "bleh.bmp");
}
mogltk::Sprite::Sprite(Uint8 * p, int asx, int asy) : sx(asx), sy(asy) {
alloc();
for (int y = 0; y < sy; y++) {
- bcopy(p, tlist->GetTex()->pixels + TEXSIZE * y + posx, sx);
- p += sx;
+ bcopy(p, tlist->GetTex()->GetPixels() + TEXSIZE * y + posx, sx * 4);
+ p += sx * 4;
}
}
mogltk::Sprite::~Sprite() {
if (prev)
- prev->next = next
+ prev->next = next;
else
tlist->sprheader = next;
+
if (next)
next->prev = prev;
@@ -39,9 +43,9 @@ void mogltk::Sprite::alloc() {
TexList * p;
for (p = tlist; p && !found; p = p->GetNext()) {
- for (y = 0; (py < (TEXSIZE - sy)) && !found; py++) {
- for (x = 0; (px < (TEXSIZE - sx)) && !found; px++) {
- if (p->strheader->canfit(x, y, x + sx, y + sy)) {
+ for (posy = 0; (posy < (TEXSIZE - sy)) && !found; posy++) {
+ for (posx = 0; (posx < (TEXSIZE - sx)) && !found; posx++) {
+ if (p->sprheader->canfit(posx, posy, posx + sx, posy + sy)) {
found = true;
}
}
@@ -52,7 +56,7 @@ void mogltk::Sprite::alloc() {
#ifdef DEBUG
printm(M_INFO, "Allocating a new texture for sprites\n");
#endif
- x = y = 0;
+ posx = posy = 0;
p = new TexList(TEXSIZE);
}
@@ -71,10 +75,12 @@ mogltk::Sprite::TexList::TexList(int size) {
mogltk::Sprite::TexList::~TexList() {
delete tex;
+
if (prev)
- prev->next = next
+ prev->next = next;
else
header = next;
+
if (next)
next->prev = prev;
}
@@ -83,7 +89,11 @@ const mogltk::texture * mogltk::Sprite::TexList::GetTex() const {
return tex;
}
-const mogltk::Sprite::TexList * mogltk::Sprite::TexList::GetHead() const {
+mogltk::texture * mogltk::Sprite::TexList::GetTex() {
+ return tex;
+}
+
+const mogltk::Sprite::TexList * mogltk::Sprite::TexList::GetHead() {
return header;
}
@@ -91,22 +101,26 @@ const mogltk::Sprite::TexList * mogltk::Sprite::TexList::GetNext() const {
return next;
}
+mogltk::Sprite::TexList * mogltk::Sprite::TexList::GetNext() {
+ return next;
+}
+
void mogltk::Sprite::TexList::Bind() const {
tex->Bind();
}
bool mogltk::Sprite::intersect(int x1, int y1, int x2, int y2) const {
- int sx1 = x, sy1 = y, sx2 = x + sx, sy2 = y + sy;
+ int sx1 = posx, sy1 = posy, sx2 = posx + sx, sy2 = posy + sy;
return !((sx1 >= x2) || (sx2 <= x1) || (sy1 >= y1) || (sy2 <= y2));
}
bool mogltk::Sprite::canfit(int x1, int y1, int x2, int y2) const {
if (!intersect(x1, y1, x2, y2))
- return true
+ return true;
else
if (next)
- return next->canfit()
+ return next->canfit(x1, y1, x2, y2);
else
return false;
}
@@ -121,10 +135,10 @@ void mogltk::Sprite::draw(int dx, int dy, Color c) {
tlist->Bind();
glBegin(GL_TRIANGLE_STRIP);
- glTexCoord2i(x , y ); glVertex2i(dx , dy );
- glTexCoord2i(x + sx - 1, y ); glVertex2i(dx + sx - 1, dy );
- glTexCoord2i(x , y + sy - 1); glVertex2i(dx , dy + sy - 1);
- glTexCoord2i(x + sx - 1, y + sy - 1); glVertex2i(dx + sx - 1, dy + sy - 1);
+ glTexCoord2i(posx , posy ); glVertex2i(dx , dy );
+ glTexCoord2i(posx + sx - 1, posy ); glVertex2i(dx + sx - 1, dy );
+ glTexCoord2i(posx , posy + sy - 1); glVertex2i(dx , dy + sy - 1);
+ glTexCoord2i(posx + sx - 1, posy + sy - 1); glVertex2i(dx + sx - 1, dy + sy - 1);
glEnd();
if (!was2D)