Initial clone in from local subversion server

This commit is contained in:
2011-05-26 02:24:33 +00:00
commit ccca81e04e
87 changed files with 20290 additions and 0 deletions

81
Display2D.cpp Executable file
View File

@@ -0,0 +1,81 @@
#include "Display2D.h"
#include "Renderable.h"
#include <SDL.h>
#include <iostream>
Display2D::Display2D()
{
return;
}
int Display2D::addActor(Actor *actor, int layer)
{
Display::addActor(actor);
this->layers[layer].push_back(actor);
//std::cerr << "Added actor " << actor << " to layer " << layer << "\n";
return 0;
}
void Display2D::update(int logicOnly)
{
ActorListIterator actorIter;
ActorListIterator newActorIter;
SDL_Surface *curFrame = NULL;
Actor *actor = NULL;
if ( this->active == 0 ) {
return;
}
//std::cerr << "Updating Display2D " << this << "\n";
SDL_Rect screen = {0, 0, this->canvas->w, this->canvas->h};
Vector actorpos;
if ( this->canvas->refcount < 2 ) {
// don't blank out someone's shared canvas
SDL_FillRect(this->canvas, &screen, 0);
}
for ( int layer = 0; layer < MAX_LAYERS; layer++ ) {
//std::cerr << "Displaying " << this->layers[layer].size() << " sprites on layer " << layer << " on canvas " << this->canvas << "\n";
actorIter = this->layers[layer].begin();
while ( actorIter != this->layers[layer].end() ) {
actor = (*actorIter);
//std::cerr << "Updating actor " << actor << "\n";
if ( actor != NULL ) {
actor->update();
if ( logicOnly == 0 ) {
curFrame = actor->nextFrame();
actorpos = actor->getPosition(1);
//std::cerr << "Position of " << actor << " " << actorpos.x << "x" << actorpos.y << "\n";
if ( curFrame ) {
//std::cerr << "Blitting sprite " << curFrame << " to (" << actorpos.x << "," << actorpos.y << ")...\n";
SDL_Rect srcRect = {0, 0, curFrame->w, curFrame->h};
SDL_Rect destRect = {(Sint16) actorpos.x, (Sint16)actorpos.y, 0, 0};
SDL_BlitSurface(curFrame, &srcRect, this->canvas, &destRect);
}
}
// more logic
if ( actor->hasState(STATE_DEAD) ) {
actorIter = this->layers[layer].erase(actorIter);
newActorIter = this->actors.begin();
while ( newActorIter < this->actors.begin() ) {
if ( *newActorIter == actor ) {
newActorIter = this->actors.erase(newActorIter);
continue;
}
newActorIter++;
}
//delete actor;
continue;
}
}
actorIter++;
}
}
}
void Display2D::setTransparentBG()
{
SDL_SetColorKey(this->canvas, SDL_SRCCOLORKEY, SDL_MapRGB(this->canvas->format, 0, 0, 0));
}