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

204
Actor.cpp Executable file
View File

@@ -0,0 +1,204 @@
//#include "Game.h"
#include "Common.h"
#include "Actor.h"
#include "Animation.h"
#include <SDL.h>
#include <iostream>
Actor::Actor()
{
this->userType = 0;
this->state = STATE_NONE;
this->animMap = new AnimationStateMap();
this->position.x = 0;
this->position.y = 0;
this->position.z = 0;
this->velocity.x = 0;
this->velocity.y = 0;
this->velocity.z = 0;
this->parent = NULL;
this->frameCounter.curFrame = 0;
this->frameCounter.lastFrame = 0;
this->frameCounter.lastTime = SDL_GetTicks();
this->logicCounter.lastTime = SDL_GetTicks();
}
Actor::~Actor()
{
}
Actor::Actor(AnimationStateMap *animMap, Vector position, Vector velocity)
{
this->animMap = animMap;
if ( this->animMap == NULL ) {
this->animMap = new AnimationStateMap();
}
this->position.x = position.x;
this->position.y = position.y;
this->position.z = position.z;
this->velocity.x = velocity.x;
this->velocity.y = velocity.y;
this->velocity.z = velocity.z;
this->frameCounter.curFrame = 0;
this->frameCounter.lastFrame = 0;
this->frameCounter.lastTime = SDL_GetTicks();
this->logicCounter.lastTime = SDL_GetTicks();
this->state = 0;
}
int Actor::addAnimation(Animation *anim, unsigned int stateKey)
{
// I started letting this accept NULL sprite strips when STATE_DEFAULT was introduced
// so that you could force an actor to be culled from the display list by setting its
// STATE_DEAD to NULL manually.
if ( this->animMap == NULL) {
//////std::cerr << "Pussying out.";
return 1;
}
//////std::cerr << "Adding " << anim << " to animation map " << this->animMap << " for " << this << " at state " << stateKey << "\n";
if ( this->animMap->count(stateKey) > 0 ) {
this->animMap->erase(stateKey);
}
(*this->animMap)[stateKey] = anim;
return 0;
}
Animation *Actor::getAnimation(unsigned int stateKey)
{
//////std::cerr << "stateKey " << stateKey << " this->animMap " << this->animMap << " count " << this->animMap->count(stateKey) << "\n";
if ( this->animMap == NULL ) {
return NULL;
}
if ( this->animMap != NULL && this->animMap->count(stateKey) > 0 ) {
//////std::cerr << "Returning SOMETHING...\n";
return (*this->animMap)[stateKey];
} else if ( this->animMap->count(STATE_DEFAULT) > 0 ) {
return (*this->animMap)[STATE_DEFAULT];
}
return NULL;
}
SDL_Surface *Actor::nextFrame()
{
SDL_Surface *newFrame = NULL;
Animation *anim = this->getAnimation(this->state);
if ( anim != NULL ) {
newFrame = anim->nextFrame(0, 0, this);
return newFrame;
}
////std::cerr << "Got NULL animation!\n";
return NULL;
}
void Actor::setState(int state)
{
this->state = state;
}
void Actor::addState(int state)
{
this->state = this->state | state;
//////std::cerr << "State is now " << this->state << " for actor " << this << "\n";
}
void Actor::removeState(int state)
{
if ( this->hasState(state) ) {
this->state = this->state ^ state;
}
//////std::cerr << "State is now " << this->state << " for actor " << this << "\n";
}
Vector Actor::getPosition(char gfxanchor)
{
Animation *anim = NULL;
Vector pos;
Vector parentPos;
pos.x = this->position.x;
pos.y = this->position.y;
pos.z = this->position.z;
if ( gfxanchor == 1 ) {
anim = this->getAnimation(this->state);
if ( anim )
pos = anim->anchorAt(pos);
}
if ( this->parent != NULL && this->hasState(STATE_RENDERPARENT)) {
parentPos = this->parent->getPosition();
pos.x += parentPos.x;
pos.y += parentPos.y;
pos.z += parentPos.z;
}
return pos;
}
void Actor::update()
{
Animation *curAnim;
Vector parentPos;
//if ( (SDL_GetTicks() - this->logicCounter.lastTime) > (1000/GAMEFPS) ) {
this->logicCounter.lastTime = SDL_GetTicks();
if ( this->hasState(STATE_MOVEXAXIS)) {
this->position.x += this->velocity.x;
} else {
if ( this->hasState(STATE_MOVERIGHT) )
this->position.x += this->velocity.x;
if ( this->hasState(STATE_MOVELEFT) )
this->position.x -= this->velocity.x;
}
if ( this->hasState(STATE_MOVEYAXIS) ) {
this->position.y += this->velocity.y;
} else {
if ( this->hasState(STATE_MOVEDOWN) )
this->position.y += this->velocity.y;
if ( this->hasState(STATE_MOVEUP) )
this->position.y -= this->velocity.y;
}
if ( this->hasState(STATE_MOVEIN) )
this->position.z -= this->velocity.z;
if ( this->hasState(STATE_MOVEOUT) )
this->position.z += this->velocity.z;
//std::cerr << "x = " << this->position.x << " y = " << this->position.y << "\n";
//std::cerr << " state = " << this->state << "\n";
curAnim = this->getAnimation(this->state);
//std::cerr << curAnim->numFrames();
//if ( curAnim != NULL )
//std::cerr << "Dying object " << this << "has animation " << curAnim << " current frame " << this->frameCounter.curFrame << " of " << curAnim->numFrames() << " state " << this->state << "\n";
//std::cerr.flush();
if ( ((curAnim != NULL) && (this->frameCounter.curFrame+1 >= (unsigned int)curAnim->numFrames()) && (this->hasState(STATE_DYING))) ||
(curAnim == NULL && this->hasState(STATE_DYING)) ) {
// we're dead
//std::cerr << "Actor " << this << " is dead.\n";
this->state = STATE_DEAD;
}
//}
}
int Actor::hasState(int state)
{
if ( (this->state & state) == state )
return 1;
else return 0;
}
int Actor::getState()
{
return this->state;
}
unsigned int Actor::getUserType()
{
return this->userType;
}
void Actor::setUserType(unsigned int type)
{
this->userType = type;
}