Initial clone in from local subversion server
204
Actor.cpp
Executable 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;
|
||||
}
|
||||
|
||||
|
||||
62
Actor.h
Executable file
@@ -0,0 +1,62 @@
|
||||
#ifndef __ACTOR_H__
|
||||
#define __ACTOR_H__
|
||||
|
||||
#include <vector>
|
||||
#include <SDL.h>
|
||||
#include "Renderable.h"
|
||||
#include "Animation.h"
|
||||
|
||||
#define STATE_NONE 0
|
||||
#define STATE_DYING 2
|
||||
#define STATE_DEAD 4
|
||||
#define STATE_MOVEXAXIS (8 | 16)
|
||||
#define STATE_MOVELEFT 8
|
||||
#define STATE_MOVERIGHT 16
|
||||
#define STATE_MOVEYAXIS (32 | 64)
|
||||
#define STATE_MOVEUP 32
|
||||
#define STATE_MOVEDOWN 64
|
||||
#define STATE_VISIBLE 128
|
||||
#define STATE_INVINCIBLE 256
|
||||
#define STATE_SPAWNWAIT 512
|
||||
#define STATE_FADEIN 1024
|
||||
#define STATE_FADEOUT 2048
|
||||
#define STATE_ATTACKING 4096
|
||||
#define STATE_MOVEIN 8192
|
||||
#define STATE_MOVEOUT 16384
|
||||
#define STATE_RENDERPARENT 32768 // this status flag specifies that, when an Actor has a Parent,
|
||||
// the position returned by this actor should be relative to their parent
|
||||
|
||||
#define STATE_DEFAULT 0xFFFFFFFF
|
||||
|
||||
class Actor : public AnimatedRenderable
|
||||
{
|
||||
protected:
|
||||
int state;
|
||||
FrameCounter logicCounter;
|
||||
unsigned int userType;
|
||||
public:
|
||||
AnimationStateMap *animMap;
|
||||
Actor(AnimationStateMap *animMap, Vector position, Vector velocity);
|
||||
Actor();
|
||||
virtual ~Actor();
|
||||
virtual SDL_Surface *nextFrame();
|
||||
virtual Vector getPosition(char gfxanchor = 0);
|
||||
virtual int addAnimation(Animation *anim, unsigned int key);
|
||||
virtual Animation *getAnimation(unsigned int stateKey);
|
||||
virtual void setState(int state);
|
||||
virtual int getState();
|
||||
virtual void addState(int state);
|
||||
virtual void removeState(int state);
|
||||
virtual int hasState(int state);
|
||||
virtual void update();
|
||||
virtual void collide(Actor *ptr) {};
|
||||
virtual unsigned int getUserType();
|
||||
virtual void setUserType(unsigned int type);
|
||||
|
||||
Actor *parent;
|
||||
};
|
||||
|
||||
typedef std::vector<Actor *> ActorList;
|
||||
typedef std::vector<Actor *>::iterator ActorListIterator;
|
||||
|
||||
#endif // __ACTOR_H__
|
||||
107
Animation.cpp
Executable file
@@ -0,0 +1,107 @@
|
||||
#include <SDL.h>
|
||||
#include "SpriteStrip.h"
|
||||
#include "Animation.h"
|
||||
#include "Actor.h"
|
||||
#include <iostream>
|
||||
|
||||
// TODO: Animation has mysterious segfault problems when it is used static; e.g.
|
||||
//
|
||||
// Animation anim; <-- using this object will eventually cause a segfault thru the framecounters/indexers
|
||||
// ..
|
||||
// Animation *anim = new Animation() <-- ... using this one will not
|
||||
|
||||
Animation::Animation()
|
||||
{
|
||||
this->strip = NULL;
|
||||
this->timeStep = 0;
|
||||
this->fps = 0;
|
||||
this->anchor.x = 0;
|
||||
this->anchor.y = 0;
|
||||
}
|
||||
|
||||
Animation::~Animation()
|
||||
{
|
||||
}
|
||||
|
||||
int Animation::setStrip(SpriteStrip *strip, int fps, int loop, Vector anchor)
|
||||
{
|
||||
if ( strip == NULL ) {
|
||||
std::cerr << "Got NULL sprite strip\n";
|
||||
return 1;
|
||||
}
|
||||
this->loop = loop;
|
||||
this->strip = strip;
|
||||
//std::cerr << "this->strip is now " << strip << "\n";
|
||||
this->fps = fps;
|
||||
if ( this-> fps > 0 )
|
||||
this->timeStep = 1000 / fps;
|
||||
if ( anchor.x <= this->strip->width() )
|
||||
this->anchor.x = anchor.x;
|
||||
if ( anchor.y <= this->strip->height() )
|
||||
this->anchor.y = anchor.y;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FIXME : The way this interaction works is INCREDIBLY hackish. I should look
|
||||
// at collapsing the nextFrame() functionality into Actor, and basically redoing the
|
||||
// Animation class as a structure that does nothing. For now, though, this works.
|
||||
|
||||
SDL_Surface *Animation::nextFrame(int curFrame, int lastTime, AnimatedRenderable *actorSource)
|
||||
{
|
||||
FrameCounter fc;
|
||||
if ( actorSource ) {
|
||||
fc = actorSource->getFrameCounter();
|
||||
curFrame = fc.curFrame;
|
||||
lastTime = fc.lastTime;
|
||||
}
|
||||
SDL_Surface *toRet = NULL;
|
||||
//std::cerr << "Checking for step; timeStep " << this->timeStep << " lastTime " << lastTime << "\n";
|
||||
if ( this->fps > 0 && ((SDL_GetTicks() - lastTime) >= this->timeStep) ) {
|
||||
if ( curFrame +1 >= this->strip->numFrames() && this->loop == 0 ) {
|
||||
toRet = this->strip->getFrame(0);
|
||||
//std::cerr << "Time for a step; Returning frame 0\n";
|
||||
} else if ( curFrame + 1 >= this->strip->numFrames() && this->loop == 1) {
|
||||
return NULL;
|
||||
}
|
||||
//std::cerr << "Time for a step; returning frame " << curFrame + 1 << "\n";
|
||||
toRet = this->strip->getFrame(curFrame+1);
|
||||
curFrame += 1;
|
||||
if ( actorSource ) {
|
||||
fc.curFrame += 1;
|
||||
if ( fc.curFrame >= this->strip->numFrames() && this->loop == 0 ) {
|
||||
//std::cerr << "Resetting to zero\n";
|
||||
fc.curFrame = 0;
|
||||
curFrame = 0;
|
||||
}
|
||||
fc.lastTime = SDL_GetTicks();
|
||||
fc.lastFrame = toRet;
|
||||
actorSource->setFrameCounter(fc);
|
||||
}
|
||||
} else if ( this->fps == 0 ) {
|
||||
//std::cerr << "0 FPS ; Returning frame 0\n";
|
||||
toRet = this->strip->getFrame(0);
|
||||
} else {
|
||||
//std::cerr << "Not time for a step; Returning frame " << curFrame << "\n";
|
||||
toRet = this->strip->getFrame(curFrame);
|
||||
}
|
||||
if ( toRet == NULL )
|
||||
return this->strip->getFrame(0);
|
||||
else
|
||||
return toRet;
|
||||
}
|
||||
|
||||
int Animation::numFrames()
|
||||
{
|
||||
if ( this->strip != NULL ) {
|
||||
return this->strip->numFrames();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Vector Animation::anchorAt(Vector position)
|
||||
{
|
||||
Vector newVector;
|
||||
newVector.x = position.x - this->anchor.x;
|
||||
newVector.y = position.y - this->anchor.y;
|
||||
return newVector;
|
||||
}
|
||||
34
Animation.h
Executable file
@@ -0,0 +1,34 @@
|
||||
#ifndef __ANIMATION_H__
|
||||
#define __ANIMATION_H__
|
||||
|
||||
#include <SDL.h>
|
||||
#include "SpriteStrip.h"
|
||||
#include "Renderable.h"
|
||||
#include <map>
|
||||
|
||||
class Animation
|
||||
{
|
||||
private:
|
||||
unsigned int lastTime;
|
||||
SpriteStrip *strip;
|
||||
unsigned int timeStep;
|
||||
int fps;
|
||||
int loop;
|
||||
Vector anchor;
|
||||
public:
|
||||
Animation();
|
||||
virtual ~Animation();
|
||||
int getLoop() { return this->loop; };
|
||||
int setStrip(SpriteStrip *strip, int fps, int loop = 0, Vector anchor = (Vector){0,0,0});
|
||||
SDL_Surface *nextFrame(int curFrame, int lastTime, AnimatedRenderable *actorSource = NULL);
|
||||
int numFrames();
|
||||
Vector anchorAt(Vector position);
|
||||
};
|
||||
|
||||
//typedef std::map<std::string, Animation *> AnimationMap;
|
||||
//typedef std::map<std::string, Animation *>::iterator AnimationMapIterator;
|
||||
typedef std::map<unsigned int, Animation *> AnimationStateMap;
|
||||
typedef std::map<unsigned int, Animation *>::iterator AnimationStateMapIterator;
|
||||
|
||||
|
||||
#endif // __ANIMATION_H__
|
||||
75
Common.cpp
Executable file
@@ -0,0 +1,75 @@
|
||||
#include "Common.h"
|
||||
#include <iostream>
|
||||
|
||||
SharedCanvas2D::SharedCanvas2D()
|
||||
{
|
||||
this->canvas = NULL;
|
||||
}
|
||||
|
||||
SharedCanvas2D::~SharedCanvas2D()
|
||||
{
|
||||
this->releaseCanvas();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return a pointer to the SDL_Surface pointer held by this shared canvas
|
||||
* @return SDL_Surface *
|
||||
*/
|
||||
SDL_Surface *SharedCanvas2D::getCanvas()
|
||||
{
|
||||
return this->canvas;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the canvas pointer to the given object, and increment its refcount
|
||||
* @param obj A SharedCanvas2D object whose surface you want to share
|
||||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
int SharedCanvas2D::shareCanvas(SharedCanvas2D *obj)
|
||||
{
|
||||
if ( obj == NULL || this->canvas != NULL || obj->getCanvas() == NULL ) {
|
||||
std::cerr << "Unable to share canvas from object " << obj << "\n";
|
||||
return 1;
|
||||
}
|
||||
this->canvas = obj->getCanvas();
|
||||
this->canvas->refcount += 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set the canvas pointer to the given object, and increment its refcount
|
||||
* @param obj A SDL_Surface pointer who you want to share
|
||||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
int SharedCanvas2D::shareCanvas(SDL_Surface *obj)
|
||||
{
|
||||
if ( obj == NULL ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
this->canvas = obj;
|
||||
obj->refcount += 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn SharedCanvas2D::releaseCanvas
|
||||
* @brief Decrement the refcount of the canvas we're currently sharing, and release it
|
||||
* @return 0 on success, 1 on failure
|
||||
*/
|
||||
int SharedCanvas2D::releaseCanvas()
|
||||
{
|
||||
if ( this->canvas == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
if ( this->canvas->refcount >= 2 ) {
|
||||
this->canvas->refcount -= 1;
|
||||
this->canvas = NULL;
|
||||
return 1;
|
||||
} else if ( this->canvas->refcount == 1 ) {
|
||||
SDL_FreeSurface(this->canvas);
|
||||
return 1;
|
||||
}
|
||||
// do nothing if canvas refcount == 0 (thou shalt not double free)
|
||||
return 0;
|
||||
}
|
||||
45
Common.h
Executable file
@@ -0,0 +1,45 @@
|
||||
#ifndef __COMMON_H__
|
||||
#define __COMMON_H__
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
#define GAMEFPS 60
|
||||
|
||||
struct Vector
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
};
|
||||
|
||||
typedef Vector Point;
|
||||
|
||||
struct FrameCounter
|
||||
{
|
||||
unsigned int curFrame;
|
||||
unsigned int lastTime;
|
||||
SDL_Surface *lastFrame;
|
||||
};
|
||||
|
||||
/**
|
||||
* @class SharedCanvas2D
|
||||
* @brief A class that allows multiple objects to re-use a single SDL_Surface with reference counting for safe memory usage
|
||||
*
|
||||
* The only thing that might be confusing about this class is that it is just
|
||||
* a container for an SDL_Surface that implements refcounting.
|
||||
*/
|
||||
|
||||
class SharedCanvas2D
|
||||
{
|
||||
protected:
|
||||
SDL_Surface *canvas;
|
||||
public:
|
||||
SharedCanvas2D();
|
||||
virtual ~SharedCanvas2D();
|
||||
SDL_Surface *getCanvas();
|
||||
virtual int shareCanvas(SharedCanvas2D *obj);
|
||||
virtual int shareCanvas(SDL_Surface *obj);
|
||||
virtual int releaseCanvas();
|
||||
};
|
||||
|
||||
#endif // __COMMON_H__
|
||||
BIN
Debug/libgame-dbg
Executable file
119
Display.cpp
Executable file
@@ -0,0 +1,119 @@
|
||||
#include "Display.h"
|
||||
#include "Actor.h"
|
||||
#include <iostream>
|
||||
|
||||
Display::Display()
|
||||
{
|
||||
this->active = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
Display::~Display()
|
||||
{
|
||||
if ( this->canvas != NULL && this->canvas->refcount > 0 ) {
|
||||
SDL_FreeSurface(this->canvas);
|
||||
}
|
||||
}
|
||||
|
||||
int Display::isActive()
|
||||
{
|
||||
return this->active;
|
||||
}
|
||||
|
||||
void Display::setActive(int active)
|
||||
{
|
||||
this->active = active;
|
||||
}
|
||||
|
||||
int Display::initVideo(Vector pos, int w, int h, int depth, int flags)
|
||||
{
|
||||
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
|
||||
int rmask = 0xff000000;
|
||||
int gmask = 0x00ff0000;
|
||||
int bmask = 0x0000ff00;
|
||||
//int amask = 0x000000ff;
|
||||
#else
|
||||
int rmask = 0x000000ff;
|
||||
int gmask = 0x0000ff00;
|
||||
int bmask = 0x00ff0000;
|
||||
//int amask = 0xff000000;
|
||||
#endif
|
||||
this->setPosition(pos);
|
||||
this->canvas = SDL_CreateRGBSurface(flags, w, h, depth, rmask, gmask, bmask, 0);
|
||||
if ( this->canvas == NULL ) {
|
||||
//std::cerr << "Failed to create new SDL surface. Error was: " << SDL_GetError() << "\n";
|
||||
return 1;
|
||||
}
|
||||
////std::cerr << "Created new SDL surface at " << this->canvas << "\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Display::addActor(Actor *actor)
|
||||
{
|
||||
if ( actor == NULL ) {
|
||||
//std::cerr << "NULL actor!";
|
||||
return 1;
|
||||
}
|
||||
//std::cerr << "Adding actor " << actor << " to Display " << this << "\n";
|
||||
ActorListIterator iter = this->actors.begin();
|
||||
while ( iter != this->actors.end() ) {
|
||||
if ( *iter == actor ) {
|
||||
return 1;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
|
||||
this->actors.push_back(actor);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Actor *Display::getActor(unsigned int index)
|
||||
{
|
||||
if ( index < this->actors.size() ) {
|
||||
return this->actors.at(index);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int Display::removeActor(Actor *actor)
|
||||
{
|
||||
ActorListIterator iter = this->actors.begin();
|
||||
//std::cerr << "Trying to delete actor " << actor << " from master list\n";
|
||||
while ( iter != this->actors.end() ) {
|
||||
if ( (*iter) == actor ) {
|
||||
//std::cerr << "Found it!\n";
|
||||
this->actors.erase(iter);
|
||||
return 0;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
SDL_Surface *Display::nextFrame()
|
||||
{
|
||||
//std::cerr << "[" << this << "]::nextFrame active = " << this->active << "\n";
|
||||
if ( this->active == 1 ) {
|
||||
return this->canvas;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_PixelFormat *Display::pixelFormat()
|
||||
{
|
||||
return this->canvas->format;
|
||||
}
|
||||
|
||||
int Display::objectsOfType(unsigned int userType)
|
||||
{
|
||||
int ocount = 0;
|
||||
ActorListIterator iter = this->actors.begin();
|
||||
while ( iter != this->actors.end() ) {
|
||||
if ( (*iter)->getUserType() == userType ) {
|
||||
ocount += 1;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
return ocount;
|
||||
}
|
||||
29
Display.h
Executable file
@@ -0,0 +1,29 @@
|
||||
#ifndef __DISPLAY_H__
|
||||
#define __DISPLAY_H__
|
||||
|
||||
#include "Actor.h"
|
||||
#include "Renderable.h"
|
||||
#include "FontRenderer.h"
|
||||
#include <SDL.h>
|
||||
|
||||
class Display : public Renderable, public SharedCanvas2D
|
||||
{
|
||||
protected:
|
||||
ActorList actors;
|
||||
int active;
|
||||
public:
|
||||
Display();
|
||||
virtual ~Display();
|
||||
virtual int isActive();
|
||||
virtual void setActive(int active);
|
||||
virtual int initVideo(Vector pos, int w, int h, int depth, int flags);
|
||||
virtual SDL_Surface *nextFrame();
|
||||
virtual int addActor(Actor *actor = NULL);
|
||||
virtual Actor *getActor(unsigned int index);
|
||||
virtual int removeActor(Actor *actor);
|
||||
virtual void update(int logicOnly = 0) {};
|
||||
SDL_PixelFormat *pixelFormat();
|
||||
virtual int objectsOfType(unsigned int userType);
|
||||
};
|
||||
|
||||
#endif // __DISPLAY_H__
|
||||
81
Display2D.cpp
Executable 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));
|
||||
}
|
||||
|
||||
29
Display2D.h
Executable file
@@ -0,0 +1,29 @@
|
||||
#ifndef __DISPLAY2D_H__
|
||||
#define __DISPLAY2D_H__
|
||||
|
||||
#include "Display.h"
|
||||
#include "Common.h"
|
||||
|
||||
#define LAYER_BACKGROUND 0
|
||||
#define LAYER_SPRITE1 1
|
||||
#define LAYER_SPRITE2 2
|
||||
#define LAYER_SPRITE3 3
|
||||
#define LAYER_EFFECTS 4
|
||||
#define LAYER_HUDOVERLAY 5
|
||||
#define LAYER_MENUOVERLAY 6
|
||||
|
||||
#define MAX_LAYERS 6
|
||||
|
||||
class Display2D : public Display
|
||||
{
|
||||
protected:
|
||||
int blitSprite(SDL_Surface *srcframe, int x, int y);
|
||||
std::vector<Actor *> layers[MAX_LAYERS];
|
||||
public:
|
||||
Display2D();
|
||||
int addActor(Actor *actor, int layer = LAYER_BACKGROUND);
|
||||
void update(int logicOnly = 0);
|
||||
void setTransparentBG();
|
||||
};
|
||||
|
||||
#endif // __Display2D_H__
|
||||
103
FontRenderer.cpp
Executable file
@@ -0,0 +1,103 @@
|
||||
#include "FontRenderer.h"
|
||||
#include "Common.h"
|
||||
#include <SDL.h>
|
||||
#include <SDL_gfxPrimitives.h>
|
||||
|
||||
FontRenderer::FontRenderer()
|
||||
{
|
||||
this->setColor((SDL_Color) {0,0,0,0}, (SDL_Color){255,255,255,0}, 1);
|
||||
}
|
||||
|
||||
FontRenderer::~FontRenderer()
|
||||
{
|
||||
////std::cerr << "Freeing memory in FontRenderer is not yet implemented\n";
|
||||
}
|
||||
|
||||
int FontRenderer::loadFont(std::string filename, std::string fontname, int pointsize)
|
||||
{
|
||||
TTF_Font *font = TTF_OpenFont(filename.c_str(), pointsize);
|
||||
if ( font == NULL ) {
|
||||
////std::cerr << "Unable to load font " << filename << "\n";
|
||||
return 1;
|
||||
}
|
||||
this->loadedFonts[fontname][pointsize] = font;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void FontRenderer::setColor(SDL_Color textColor, SDL_Color bgColor, int alpha)
|
||||
{
|
||||
//std::cerr << "FontRenderer::setColor (" << textColor.r << " : " << textColor.g << " : " << textColor.b << ") "
|
||||
//<< " ( " << bgColor.r << " : " << bgColor.g << " : " << bgColor.b << " ) alpha " << alpha << "\n";
|
||||
this->textColor = textColor;
|
||||
this->bgColor = bgColor;
|
||||
this->alpha = alpha;
|
||||
}
|
||||
|
||||
SDL_Rect FontRenderer::renderString(std::string text,
|
||||
SDL_Surface *dest,
|
||||
std::string fontname,
|
||||
Vector position,
|
||||
int pointsize)
|
||||
{
|
||||
SDL_Rect destrect;
|
||||
SDL_Surface *surface;
|
||||
SDL_Color foregroundColor, backgroundColor;
|
||||
TTF_Font *font;
|
||||
SDL_Rect blankrect;
|
||||
int plainTextWidth = 0;
|
||||
|
||||
if ( dest == NULL ) {
|
||||
return blankrect;
|
||||
}
|
||||
|
||||
if ( fontname == "" ) {
|
||||
plainTextWidth = text.size() * 8;
|
||||
if ( position.x == -1 )
|
||||
position.x = (dest->w/2) - (plainTextWidth/2);
|
||||
if ( position.y == -1 )
|
||||
position.y = (dest->h/2) - 8;
|
||||
//std::cerr << "Rendering (plain text) " << text << " at " << position.x << " x " << position.y << "\n";
|
||||
stringRGBA(dest, (int)position.x, (int)position.y, text.c_str(),
|
||||
this->textColor.r, this->textColor.g, this->textColor.b, this->alpha);
|
||||
return blankrect;
|
||||
}
|
||||
////std::cerr << "Rendering (true type) " << text << " at " << position.x << " x " << position.y << "\n";
|
||||
if ( this->loadedFonts.count(fontname) == 1 ) {
|
||||
if ( this->loadedFonts[fontname].count(pointsize) == 1 ) {
|
||||
////std::cerr << "Found font..";
|
||||
font = this->loadedFonts[fontname][pointsize];
|
||||
} else {
|
||||
////std::cerr << "No font found for (point size) 20\n";
|
||||
return blankrect;
|
||||
}
|
||||
} else {
|
||||
////std::cerr << "No font found for (" << fontname << ")\n";
|
||||
return blankrect;
|
||||
}
|
||||
surface = TTF_RenderUTF8_Shaded(font, text.c_str(), this->textColor, this->bgColor);
|
||||
|
||||
if (surface == NULL)
|
||||
{
|
||||
////std::cerr << "Couldn't create String " << text << ":" << SDL_GetError() << "\n";
|
||||
return blankrect;
|
||||
}
|
||||
|
||||
/* Blit the entire surface to the screen */
|
||||
|
||||
destrect.x = (position.x == -1 ? (dest->w - surface->w) / 2 : (Sint16) position.x);
|
||||
destrect.y = (position.y == -1 ? (dest->h - surface->h) / 2 : (Sint16) position.y);
|
||||
destrect.w = surface->w;
|
||||
destrect.h = surface->h;
|
||||
|
||||
////std::cerr << "FontRenderer::renderString this->alpha " << this->alpha << "\n";
|
||||
if ( this->alpha == 1 ) {
|
||||
SDL_SetColorKey(surface, SDL_SRCCOLORKEY,
|
||||
SDL_MapRGBA(surface->format, this->bgColor.r, this->bgColor.g, this->bgColor.b, 0) );
|
||||
}
|
||||
SDL_BlitSurface(surface, NULL, dest, &destrect);
|
||||
|
||||
/* Free the generated string image */
|
||||
|
||||
SDL_FreeSurface(surface);
|
||||
return destrect;
|
||||
}
|
||||
36
FontRenderer.h
Executable file
@@ -0,0 +1,36 @@
|
||||
#ifndef __FONTRENDERER_H__
|
||||
#define __FONTRENDERER_H__
|
||||
|
||||
#include <SDL.h>
|
||||
#include <SDL_ttf.h>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include "Common.h"
|
||||
|
||||
class FontRenderer
|
||||
{
|
||||
protected:
|
||||
// organized by loadedFonts[FontName][PointSize] = TTF_Font *
|
||||
FontRenderer();
|
||||
~FontRenderer();
|
||||
std::map<std::string, std::map<int, TTF_Font *> > loadedFonts;
|
||||
SDL_Color textColor;
|
||||
SDL_Color bgColor;
|
||||
int alpha;
|
||||
public:
|
||||
static FontRenderer &NewSingleton()
|
||||
{
|
||||
static FontRenderer rend;
|
||||
return rend;
|
||||
}
|
||||
void setColor(SDL_Color textColor, SDL_Color bgColor, int alpha);
|
||||
int loadFont(std::string filename, std::string fontname, int pointsize);
|
||||
SDL_Rect renderString(std::string text,
|
||||
SDL_Surface *dest,
|
||||
std::string fontname,
|
||||
Vector position,
|
||||
int pointsize);
|
||||
};
|
||||
|
||||
#endif // __FONTRENDERER_H__
|
||||
506
Game.cpp
Executable file
@@ -0,0 +1,506 @@
|
||||
#include "Game.h"
|
||||
#include "SpriteStrip.h"
|
||||
#include "Actor.h"
|
||||
#include "Display2D.h"
|
||||
#include <SDL_mixer.h>
|
||||
#include <SDL.h>
|
||||
#include <iostream>
|
||||
|
||||
Game::Game()
|
||||
{
|
||||
this->musicVolume = 128;
|
||||
this->soundVolume = 128;
|
||||
this->lastNumKeys = 0;
|
||||
this->lastKeyState = NULL;
|
||||
this->fpslock = 0;
|
||||
this->realfps = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
Game::~Game()
|
||||
{
|
||||
if ( this->canvas != NULL ) {
|
||||
SDL_FreeSurface(this->canvas);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int Game::initSDL(int audio_rate, Uint16 audio_format, int audio_channels, int audio_buffers)
|
||||
{
|
||||
if ( SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) != 0 ) {
|
||||
//std::cerr << "Failed to initialize SDL. Error was: " << SDL_GetError() << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) {
|
||||
//std::cerr << "Unable to initialize audio: " << Mix_GetError() << "\n";
|
||||
exit(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Game::initVideo(int w, int h, int depth, int flags)
|
||||
{
|
||||
this->canvas = SDL_SetVideoMode(w, h, depth, flags);
|
||||
if ( this->canvas == NULL ) {
|
||||
//std::cerr << "Failed to create new SDL display. Error was: " << SDL_GetError() << "\n";
|
||||
return 1;
|
||||
}
|
||||
////std::cerr << "Created new SDL display at " << this->canvas << "\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Game::update(int logicOnly)
|
||||
{
|
||||
DisplayList::iterator displayIter;
|
||||
SDL_Surface *curFrame = NULL;
|
||||
Display *display = NULL;
|
||||
Uint8 *keyState = NULL;
|
||||
int numKeys = 0;
|
||||
int gfxframe = 1;
|
||||
static unsigned int lastTime = 0;
|
||||
static unsigned int lastfps = 0;
|
||||
static unsigned int realFPStimer = 0;
|
||||
SDL_Rect screen = {0, 0, this->canvas->w, this->canvas->h};
|
||||
Vector displaypos;
|
||||
|
||||
SDL_PumpEvents();
|
||||
|
||||
if ( (this->fpslock != 0) && (SDL_GetTicks() - lastTime) >= (1000/this->fpslock) ) {
|
||||
gfxframe = 1;
|
||||
lastTime = SDL_GetTicks();
|
||||
} else if (this->fpslock != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (SDL_GetTicks() - realFPStimer) > 1000 ) {
|
||||
this->realfps = lastfps;
|
||||
lastfps = 0;
|
||||
realFPStimer = SDL_GetTicks();
|
||||
} else {
|
||||
lastfps++;
|
||||
}
|
||||
|
||||
if ( logicOnly == 0 ) {
|
||||
SDL_FillRect(this->canvas, &screen, 0);
|
||||
}
|
||||
for ( displayIter = this->windows.begin(); displayIter != this->windows.end() ; displayIter++ ) {
|
||||
display = (*displayIter);
|
||||
//std::cerr << "Updating display " << display << "\n";
|
||||
display->update();
|
||||
if ( logicOnly == 1 ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
curFrame = display->nextFrame();
|
||||
displaypos = display->getPosition();
|
||||
//std::cerr << "Position of " << display << " " << displaypos.x << "x" << displaypos.y << "\n";
|
||||
if ( curFrame && curFrame != this->canvas ) {
|
||||
//std::cerr << "Blitting display " << display << " canvas " << curFrame << " to main canvas " << this->canvas << "(" << displaypos.x << "," << displaypos.y << ")...\n";
|
||||
SDL_Rect destRect = {(Sint16) displaypos.x, (Sint16) displaypos.y, 0, 0};
|
||||
SDL_BlitSurface(curFrame, NULL, this->canvas, &destRect);
|
||||
//this->blitSprite(curFrame, 0, 0);
|
||||
} else if ( curFrame == this->canvas ) {
|
||||
//std::cerr << "Not blitting display window " << display << " to our canvas " << this->canvas << " because it is sharing our canvas at " << curFrame << "\n";
|
||||
} else if ( curFrame == NULL ) {
|
||||
//std::cerr << "display " << display << " has a NULL canvas\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ( this->lastKeyState != NULL ) {
|
||||
delete this->lastKeyState;
|
||||
}
|
||||
keyState = SDL_GetKeyState(&numKeys);
|
||||
this->lastKeyState = new Uint8[numKeys];
|
||||
if ( this->lastKeyState != NULL ) {
|
||||
memcpy(this->lastKeyState, keyState, (sizeof(Uint8)*numKeys));
|
||||
}
|
||||
|
||||
//this->handleEvents();
|
||||
this->cleanSounds();
|
||||
}
|
||||
|
||||
/*int Game::handleControlEvent(SDL_Event *event)
|
||||
{
|
||||
switch(event->type) {
|
||||
case SDL_KEYUP:
|
||||
if ( event->key.state == SDL_RELEASED ) {
|
||||
if ( event->key.keysym.sym == SDLK_ESCAPE ) {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Game::handleEvents()
|
||||
{
|
||||
SDL_Event nextEvent;
|
||||
while ( SDL_PollEvent(&nextEvent) ) {
|
||||
switch(nextEvent.type) {
|
||||
case SDL_KEYUP:
|
||||
this->handleControlEvent(&nextEvent);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
int Game::playMusic(std::string filename)
|
||||
{
|
||||
Mix_HaltMusic();
|
||||
if ( this->bgmusic )
|
||||
Mix_FreeMusic(this->bgmusic);
|
||||
this->bgmusic = Mix_LoadMUS(filename.c_str());
|
||||
if ( this->bgmusic == NULL ) {
|
||||
//std::cerr << "Unable to load " << filename.c_str() << " to play music.\n";
|
||||
return 1;
|
||||
}
|
||||
if ( Mix_PlayMusic(this->bgmusic, -1) == -1 ) {
|
||||
//std::cerr << "Unable to play background music. " << Mix_GetError() << " \n";
|
||||
return 1;
|
||||
}
|
||||
Mix_VolumeMusic(this->musicVolume);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Game::haltMusic()
|
||||
{
|
||||
Mix_HaltMusic();
|
||||
if ( this->bgmusic )
|
||||
Mix_FreeMusic(this->bgmusic);
|
||||
this->bgmusic = NULL;
|
||||
}
|
||||
|
||||
int Game::playSound(std::string filename, int loops)
|
||||
{
|
||||
PlayingSound *sndstruct = NULL;
|
||||
Mix_Chunk *sound = NULL;
|
||||
int channel = 0;
|
||||
|
||||
sound = Mix_LoadWAV(filename.c_str());
|
||||
if ( sound == NULL ) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
channel = Mix_PlayChannel(-1, sound, loops);
|
||||
if ( channel > -1 ) {
|
||||
//std::cerr << "Pushing sound chunk " << sound << " on channel " << channel << "\n";
|
||||
sndstruct = new PlayingSound();
|
||||
sndstruct->sound = sound;
|
||||
sndstruct->channel = channel;
|
||||
this->playingSounds.push_back(sndstruct);
|
||||
} else {
|
||||
Mix_FreeChunk(sound);
|
||||
return 1;
|
||||
}
|
||||
Mix_Volume(sndstruct->channel, this->soundVolume);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Game::cleanSounds(int force)
|
||||
{
|
||||
PlayingSoundList::iterator iter;
|
||||
PlayingSoundList::iterator newIter;
|
||||
PlayingSound *curSound = NULL;
|
||||
iter = this->playingSounds.begin() ;
|
||||
|
||||
while ( iter != this->playingSounds.end()) {
|
||||
curSound = *iter;
|
||||
if ( curSound == NULL ) {
|
||||
iter++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( Mix_Playing(curSound->channel) != 0 && force == 1) {
|
||||
Mix_HaltChannel(curSound->channel);
|
||||
} else if ( Mix_Playing(curSound->channel) != 0 ) {
|
||||
iter++;
|
||||
continue;
|
||||
}
|
||||
|
||||
newIter = iter;
|
||||
iter++;
|
||||
Mix_FreeChunk(curSound->sound);
|
||||
//std::cerr << "Cleared sound at channel" << curSound->channel << "\n";
|
||||
iter = this->playingSounds.erase(newIter);
|
||||
delete curSound;
|
||||
//iter++;
|
||||
}
|
||||
}
|
||||
|
||||
void Game::setMusicVolume(int volume)
|
||||
{
|
||||
this->musicVolume = volume;
|
||||
Mix_VolumeMusic(this->musicVolume);
|
||||
}
|
||||
|
||||
void Game::setSoundVolume(int volume)
|
||||
{
|
||||
this->soundVolume = volume;
|
||||
Mix_Volume(-1, this->soundVolume);
|
||||
}
|
||||
|
||||
int Game::keyHeldDown(int keysym)
|
||||
{
|
||||
Uint8 *keyState = NULL;
|
||||
int numKeys = 0;
|
||||
|
||||
keyState = SDL_GetKeyState(&numKeys);
|
||||
if ( this->lastKeyState == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
if ( keysym < this->lastNumKeys && keysym < numKeys ) {
|
||||
return 0;
|
||||
}
|
||||
if ( this->lastKeyState[keysym] + keyState[keysym] == 2 ) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ------------ class factory and memory management stuff
|
||||
|
||||
SpriteStrip *Game::newSpriteStrip(std::string key)
|
||||
{
|
||||
SpriteStrip *obj = new SpriteStrip();
|
||||
if ( obj == NULL )
|
||||
return NULL;
|
||||
if ( key != "" ) {
|
||||
if ( this->addSpriteStrip(obj, key) != 0 ) {
|
||||
delete obj;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
int Game::freeSpriteStrip(std::string key, SpriteStrip *obj)
|
||||
{
|
||||
if ( obj == NULL && this->spriteMap.count(key) == 0 ) {
|
||||
return 1;
|
||||
} else if ( obj == NULL ) {
|
||||
obj = this->spriteMap[key];
|
||||
}
|
||||
this->spriteMap.erase(key);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
Animation *Game::newAnimation(std::string key)
|
||||
{
|
||||
Animation *obj = new Animation();
|
||||
if ( obj == NULL )
|
||||
return NULL;
|
||||
if ( key != "" ) {
|
||||
if ( this->addAnimation(obj, key) != 0 ) {
|
||||
delete obj;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
int Game::freeAnimation(std::string key, Animation *obj)
|
||||
{
|
||||
if ( obj == NULL && this->animationMap.count(key) == 0 ) {
|
||||
return 1;
|
||||
} else if ( obj == NULL ) {
|
||||
obj = this->animationMap[key];
|
||||
}
|
||||
this->animationMap.erase(key);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
Actor *Game::newActor(std::string key)
|
||||
{
|
||||
Actor *obj = new Actor();
|
||||
if ( obj == NULL )
|
||||
return NULL;
|
||||
if ( key != "" ) {
|
||||
if ( this->addActor(obj, key) != 0 ) {
|
||||
delete obj;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
int Game::freeActor(std::string key, Actor *obj)
|
||||
{
|
||||
if ( obj == NULL && this->actorMap.count(key) == 0 ) {
|
||||
return 1;
|
||||
} else if ( obj == NULL ) {
|
||||
obj = this->actorMap[key];
|
||||
}
|
||||
this->actorMap.erase(key);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
|
||||
Display2D *Game::newDisplay2D(std::string key)
|
||||
{
|
||||
Display2D *obj = new Display2D();
|
||||
if ( obj == NULL )
|
||||
return NULL;
|
||||
if ( key != "" ) {
|
||||
if ( this->addDisplay(obj, key) != 0 ) {
|
||||
delete obj;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
int Game::freeDisplay2D(std::string key, Display2D *obj)
|
||||
{
|
||||
if ( obj == NULL && this->displayMap.count(key) == 0 ) {
|
||||
return 1;
|
||||
} else if ( obj == NULL ) {
|
||||
obj = (Display2D *)this->displayMap[key];
|
||||
}
|
||||
this->displayMap.erase(key);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
MenuDisplay *Game::newMenuDisplay(std::string key)
|
||||
{
|
||||
MenuDisplay *obj = new MenuDisplay();
|
||||
if ( obj == NULL )
|
||||
return NULL;
|
||||
if ( key != "" ) {
|
||||
if ( this->addDisplay(obj, key) != 0 ) {
|
||||
delete obj;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
int Game::freeMenuDisplay(std::string key, MenuDisplay *obj)
|
||||
{
|
||||
if ( obj == NULL && this->displayMap.count(key) == 0 ) {
|
||||
return 1;
|
||||
} else if ( obj == NULL ) {
|
||||
obj = (MenuDisplay *)this->displayMap[key];
|
||||
}
|
||||
this->displayMap.erase(key);
|
||||
delete obj;
|
||||
}
|
||||
|
||||
int Game::addSpriteStrip(SpriteStrip *strip, std::string key)
|
||||
{
|
||||
if ( strip == NULL || this->spriteMap.count(key) > 0 )
|
||||
return 1;
|
||||
this->spriteMap[key] = strip;
|
||||
return 0;
|
||||
}
|
||||
|
||||
SpriteStrip *Game::getSpriteStrip(std::string key)
|
||||
{
|
||||
if ( this->spriteMap.count(key) > 0 ) {
|
||||
return this->spriteMap[key];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int Game::removeSpriteStrip(std::string stripName)
|
||||
{
|
||||
if ( this->spriteMap.count(stripName) > 0 ) {
|
||||
this->spriteMap.erase(stripName);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Game::addAnimation(Animation *ptr, std::string key)
|
||||
{
|
||||
if ( ptr != NULL || this->animationMap.count(key) == 0 ) {
|
||||
this->animationMap[key] = ptr;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Animation *Game::getAnimation(std::string key)
|
||||
{
|
||||
if ( this->animationMap.count(key) > 0 ) {
|
||||
return this->animationMap[key];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int Game::removeAnimation(std::string key)
|
||||
{
|
||||
if ( this->animationMap.count(key) > 0 ) {
|
||||
this->animationMap.erase(key);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Game::addActor(Actor *ptr, std::string key)
|
||||
{
|
||||
if ( ptr != NULL || this->actorMap.count(key) == 0 ) {
|
||||
this->actorMap[key] = ptr;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Actor *Game::getActor(std::string key)
|
||||
{
|
||||
if ( this->actorMap.count(key) > 0 ) {
|
||||
return this->actorMap[key];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int Game::removeActor(std::string key)
|
||||
{
|
||||
if ( this->actorMap.count(key) > 0 ) {
|
||||
this->actorMap.erase(key);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int Game::addDisplay(Display *ptr, std::string key)
|
||||
{
|
||||
if ( ptr != NULL || this->displayMap.count(key) == 0 ) {
|
||||
this->displayMap[key] = ptr;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Display *Game::getDisplay(std::string key)
|
||||
{
|
||||
if ( this->displayMap.count(key) > 0 ) {
|
||||
return this->displayMap[key];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int Game::removeDisplay(std::string key)
|
||||
{
|
||||
if ( this->displayMap.count(key) > 0 ) {
|
||||
this->displayMap.erase(key);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void Game::lockFPS(int fps)
|
||||
{
|
||||
this->fpslock = fps;
|
||||
}
|
||||
|
||||
void Game::finishFrame()
|
||||
{
|
||||
SDL_Flip(this->canvas);
|
||||
}
|
||||
|
||||
SDL_Surface *Game::getCanvas()
|
||||
{
|
||||
return this->canvas;
|
||||
}
|
||||
113
Game.h
Executable file
@@ -0,0 +1,113 @@
|
||||
#ifndef __GAME_H__
|
||||
#define __GAME_H__
|
||||
|
||||
#include <SDL.h>
|
||||
#include "SpriteStrip.h"
|
||||
#include "Animation.h"
|
||||
#include "Actor.h"
|
||||
#include "Display.h"
|
||||
#include "MenuDisplay.h"
|
||||
#include <SDL_mixer.h>
|
||||
|
||||
struct Collision
|
||||
{
|
||||
Actor *actor1;
|
||||
Actor *actor2;
|
||||
};
|
||||
|
||||
struct PlayingSound
|
||||
{
|
||||
int channel;
|
||||
Mix_Chunk *sound;
|
||||
};
|
||||
|
||||
typedef std::vector<PlayingSound *> PlayingSoundList;
|
||||
|
||||
// TODO : Take parts of the Game class and break them out into a Window class.
|
||||
// the way that the Game class lets you specify a render window tells me that
|
||||
// it should really be its own class, w/ a separate class for game logic
|
||||
|
||||
typedef std::vector<Display *> DisplayList;
|
||||
|
||||
class Game : public SharedCanvas2D
|
||||
{
|
||||
protected:
|
||||
Mix_Music *bgmusic;
|
||||
// format is [ idx = [{filename, sound}, {filename, sound}] ]
|
||||
// .. where idx is a channel number, which gives you a vector of SoundPairs.
|
||||
PlayingSoundList playingSounds;
|
||||
int musicVolume;
|
||||
int soundVolume;
|
||||
int lastNumKeys;
|
||||
int fpslock;
|
||||
Uint8 *lastKeyState;
|
||||
std::map<std::string, SpriteStrip *> spriteMap;
|
||||
std::map<std::string, Actor *> actorMap;
|
||||
std::map<std::string, Animation *> animationMap;
|
||||
std::map<std::string, Display *> displayMap;
|
||||
|
||||
Game();
|
||||
virtual ~Game();
|
||||
public:
|
||||
// easier this way
|
||||
DisplayList windows;
|
||||
int realfps;
|
||||
|
||||
static Game &NewSingleton()
|
||||
{
|
||||
static Game theGame;
|
||||
return theGame;
|
||||
}
|
||||
|
||||
SDL_Surface *getCanvas();
|
||||
int initVideo(int w, int h, int depth, int flags);
|
||||
int initSDL(int audio_rate = 44100, Uint16 audio_format = AUDIO_S16SYS, int audio_channels = 2, int audio_buffers = 4096);
|
||||
// this stuff is removed for now because the control event mapping isn't implemented
|
||||
// at all and it was causing problems
|
||||
/*
|
||||
int handleEvents();
|
||||
int handleControlEvent(SDL_Event *event);
|
||||
*/
|
||||
void setMusicVolume(int volume = 128);
|
||||
void setSoundVolume(int volume = 128);
|
||||
int playMusic(std::string filename);
|
||||
void haltMusic();
|
||||
int playSound(std::string filename, int loops = 0);
|
||||
void cleanSounds(int force = 0);
|
||||
|
||||
// --------------- class factory stuff -----------------
|
||||
SpriteStrip *newSpriteStrip(std::string key = "");
|
||||
Animation *newAnimation(std::string key = "");
|
||||
Actor *newActor(std::string key = "");
|
||||
Display2D *newDisplay2D(std::string key = "");
|
||||
MenuDisplay *newMenuDisplay(std::string key = "");
|
||||
int freeSpriteStrip(std::string key = "", SpriteStrip *obj = NULL);
|
||||
int freeAnimation(std::string key = "", Animation *obj = NULL);
|
||||
int freeActor(std::string key = "", Actor *obj = NULL);
|
||||
int freeDisplay2D(std::string key = "", Display2D *obj = NULL);
|
||||
int freeMenuDisplay(std::string key = "", MenuDisplay *obj = NULL);
|
||||
|
||||
// --------------- object tracking ------------------
|
||||
int addSpriteStrip(SpriteStrip *strip, std::string key);
|
||||
SpriteStrip *getSpriteStrip(std::string stripName);
|
||||
int removeSpriteStrip(std::string stripName);
|
||||
int addActor(Actor *ptr, std::string key);
|
||||
Actor *getActor(std::string key);
|
||||
int removeActor(std::string key);
|
||||
int addAnimation(Animation *ptr, std::string key);
|
||||
Animation *getAnimation(std::string key);
|
||||
int removeAnimation(std::string key);
|
||||
int addDisplay(Display *ptr, std::string key);
|
||||
Display *getDisplay(std::string key);
|
||||
int removeDisplay(std::string key);
|
||||
|
||||
// ----------------- updating crap
|
||||
void update(int logicOnly = 0);
|
||||
void finishFrame();
|
||||
void lockFPS(int fps);
|
||||
|
||||
// ----------------- input helpers
|
||||
int keyHeldDown(int keysym);
|
||||
};
|
||||
|
||||
#endif // __GAME_H__
|
||||
98
Makefile
Executable file
@@ -0,0 +1,98 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
LIBNAME=game
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --static-libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows
|
||||
endif
|
||||
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
LIBTARGET=lib$(LIBNAME)-dbg
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-pg -I./source -g -ggdb -gstabs -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
LIBTARGET=lib$(LIBNAME)
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I./source -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(OUTDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer
|
||||
|
||||
LIBOBJ=$(OUTDIR)/Common.o \
|
||||
$(OUTDIR)/FontRenderer.o \
|
||||
$(OUTDIR)/Renderable.o \
|
||||
$(OUTDIR)/SpriteStrip.o \
|
||||
$(OUTDIR)/Animation.o \
|
||||
$(OUTDIR)/Actor.o \
|
||||
$(OUTDIR)/Display.o \
|
||||
$(OUTDIR)/Display2D.o \
|
||||
$(OUTDIR)/MenuDisplay.o \
|
||||
$(OUTDIR)/Game.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(shell which install)
|
||||
|
||||
$(OUTDIR)/%.o : %.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
ifeq "$(OS)" "macosx"
|
||||
all: sharedlib
|
||||
else
|
||||
all: staticlib
|
||||
endif
|
||||
|
||||
# this was a pain in my ass cross-platform, so I killed it
|
||||
sharedlib: $(LIBOBJ)
|
||||
$(CXX) -dynamiclib -Wl,-headerpad_max_install_names,-undefined,dynamic_lookup,-compatibility_version,1.0,-current_version,1.0,-install_name,/usr/lib/$(LIBTARGET).dylib -o $(CFG)/$(LIBTARGET).dylib $(LIBOBJ)
|
||||
|
||||
staticlib: $(LIBOBJ)
|
||||
$(AR) rcs $(OUTDIR)/$(LIBTARGET) $(LIBOBJ)
|
||||
|
||||
.PHONY: docs
|
||||
docs:
|
||||
doxygen doxygen.conf
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(LIBTARGET).*
|
||||
|
||||
.PHONY: demos
|
||||
demos:
|
||||
cd demo && ./build-demos.sh $(CFG)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG) OS=$(OS)
|
||||
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
$(INSTALL) $(OUTDIR)/$(LIBTARGET)* $(LIBDIR)/
|
||||
mkdir -p $(HEADERDIR)/libgame
|
||||
$(INSTALL) *h $(HEADERDIR)/libgame/
|
||||
|
||||
.PHONY: deps
|
||||
deps:
|
||||
cd deps && make
|
||||
430
MenuDisplay.cpp
Executable file
@@ -0,0 +1,430 @@
|
||||
#include "libgame.h"
|
||||
#include <iostream>
|
||||
#include <SDL_ttf.h>
|
||||
#include <SDL_gfxPrimitives.h>
|
||||
#include <cstdlib>
|
||||
|
||||
// TODO : Need to get the up/down left/right arrows displaying
|
||||
|
||||
// ------------------ Menu Relation --------------
|
||||
|
||||
MenuRelation::MenuRelation()
|
||||
{
|
||||
this->opt1 = 0;
|
||||
this->opt2 = 0;
|
||||
this->relation = 0;
|
||||
}
|
||||
|
||||
// ------------------ Menu Option -------------------
|
||||
|
||||
MenuOption::MenuOption(std::string name, int rangeLow, int rangeHigh, int rangeStart, int spinFree, SDL_Surface *img)
|
||||
{
|
||||
this->name = name;
|
||||
this->rangeLow = rangeLow;
|
||||
this->rangeHigh = rangeHigh;
|
||||
this->rangeStart = rangeStart;
|
||||
this->optionImage = img;
|
||||
this->spinFree = spinFree;
|
||||
if ( rangeHigh + rangeLow != 0 ) {
|
||||
this->selected = rangeStart;
|
||||
} else
|
||||
this->selected = -1;
|
||||
}
|
||||
|
||||
MenuOption::~MenuOption()
|
||||
{
|
||||
}
|
||||
|
||||
void MenuOption::clampValue(MenuRelation *relation, int defClampVal)
|
||||
{
|
||||
// check our relation for clamping issues
|
||||
if ( relation != NULL && relation->opt1 != NULL && relation->opt2 != NULL && relation->opt1 == this ) {
|
||||
std::cerr << "[" << this << "]->selected (" << this->selected << "=" << this->getStringValue() << ") = [" << relation->opt2 << "]->selected (" << relation->opt2->selected << "=" << relation->opt2->getStringValue() << ")\n";
|
||||
if ( (relation->relation == MENURELATION_NODUPLICATE) &&
|
||||
(this->getStringValue() == relation->opt2->getStringValue()) ) {
|
||||
if ( ((this->selected+1) >= (int) this->optlist.size()) ||
|
||||
((this->rangeHigh != 0) && (this->selected+1 > this->rangeHigh)) ){
|
||||
//std::cerr << "Clamping DOWN\n";
|
||||
this->selected -= 1;
|
||||
} else if ( ((this->selected - 1) < 0) ||
|
||||
((this->rangeLow != 0) && (this->selected - 1 < this->rangeLow)) ) {
|
||||
//std::cerr << "Clamping UP\n";
|
||||
this->selected += 1;
|
||||
} else {
|
||||
// we're safe to move either direction on the option here, so just ++ it and then clamp it
|
||||
this->selected += defClampVal;
|
||||
}
|
||||
this->clampValue(NULL);
|
||||
//std::cerr << "[" << this << "]->selected (" << this->selected << "=" << this->getStringValue() << ") = [" << relation->opt2 << "]->selected (" << relation->opt2->selected << "=" << relation->opt2->getStringValue() << ")\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( this->optlist.size() > 0 ) {
|
||||
if ( this->selected >= (int) this->optlist.size() ) {
|
||||
this->selected = this->optlist.size()-1;
|
||||
} else if ( this->selected < 0 ) {
|
||||
this->selected = 0;
|
||||
}
|
||||
} else {
|
||||
if ( this->selected < this->rangeLow ) {
|
||||
this->selected = this->rangeLow;
|
||||
} else if ( this->selected > this->rangeHigh ) {
|
||||
this->selected = this->rangeHigh;
|
||||
} else if ( this->rangeLow > this->rangeHigh || this->rangeLow + this->rangeHigh == 0 ) {
|
||||
this->selected = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//std::cerr << "MenuOption::clampValue " << this->name
|
||||
//<< " (" << this->optlist.size() << " sub-options ) "
|
||||
//<< " range (" << this->rangeLow << " - " << this->rangeHigh << ") "
|
||||
//<< " selected " << this->selected << "\n";
|
||||
}
|
||||
|
||||
std::string MenuOption::getStringValue()
|
||||
{
|
||||
char intStringBuff[64];
|
||||
memset((char *)&intStringBuff, 0x00, 63);
|
||||
if ( this->rangeLow + this->rangeHigh != 0 ) {
|
||||
sprintf((char *)&intStringBuff, "%d\0", this->selected);
|
||||
return std::string((char *)&intStringBuff);
|
||||
}
|
||||
if ( this->optlist.size() > this->selected )
|
||||
return this->optlist.at(this->selected);
|
||||
else
|
||||
return this->name;
|
||||
}
|
||||
|
||||
int MenuOption::getIntValue()
|
||||
{
|
||||
return this->selected;
|
||||
}
|
||||
|
||||
int MenuOption::select(int value)
|
||||
{
|
||||
if ( ( this->optlist.size() > 0 ) && ( value < this->optlist.size()) && ( value > -1 ) ) {
|
||||
this->selected = value;
|
||||
return 0;
|
||||
} else if ( (value >= this->rangeLow) && ( value <= this->rangeHigh ) ) {
|
||||
this->selected = value;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int MenuOption::whenhighlighted()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int MenuOption::whenselected()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int MenuOption::valueup()
|
||||
{
|
||||
this->select(this->selected + 1);
|
||||
}
|
||||
|
||||
int MenuOption::valuedown()
|
||||
{
|
||||
this->select(this->selected - 1);
|
||||
}
|
||||
|
||||
// ----------------- MenuDisplay --------------------
|
||||
|
||||
MenuDisplay::MenuDisplay()
|
||||
{
|
||||
this->pointerActor = NULL;
|
||||
this->curOpt = 0;
|
||||
this->origin.x = 0;
|
||||
this->origin.y = 0;
|
||||
this->origin.z = 0;
|
||||
this->fontname = "";
|
||||
this->pointsize = 0;
|
||||
this->spacing = 0;
|
||||
this->closeOpt = "";
|
||||
}
|
||||
|
||||
MenuDisplay::~MenuDisplay()
|
||||
{
|
||||
if ( this->pointerActor != NULL ) {
|
||||
delete this->pointerActor;
|
||||
}
|
||||
}
|
||||
|
||||
void MenuDisplay::setMenuImages(Animation *arrowLeft, Animation *arrowRight, Animation *arrowUp, Animation *arrowDown)
|
||||
{
|
||||
this->arrowLeft = arrowLeft;
|
||||
this->arrowRight = arrowRight;
|
||||
this->arrowUp = arrowUp;
|
||||
this->arrowDown = arrowDown;
|
||||
}
|
||||
|
||||
// this is just for backwards compatibility with old code.
|
||||
void MenuDisplay::addOption(std::string name, int rangeLow = 0, int rangeHigh = 0, int rangeStart = 0, int spinFree = 0, SDL_Surface *img = NULL)
|
||||
{
|
||||
this->addOption(new MenuOption(name, rangeLow, rangeHigh, rangeStart, spinFree, img) );
|
||||
}
|
||||
|
||||
void MenuDisplay::addOption(MenuOption *mopt)
|
||||
{
|
||||
if ( mopt != NULL )
|
||||
this->menuOptions.push_back(mopt);
|
||||
}
|
||||
|
||||
int MenuDisplay::addSubOption(std::string name, std::string subopt)
|
||||
{
|
||||
std::vector<MenuOption *>::iterator iter;
|
||||
iter = this->menuOptions.begin();
|
||||
while ( iter != this->menuOptions.end() ) {
|
||||
if ( *iter != NULL && (*iter)->optionImage != NULL ) {
|
||||
// there's zero point in adding a sub option string when this has an image
|
||||
return 1;
|
||||
}
|
||||
if ( *iter != NULL && (*iter)->name == name ) {
|
||||
(*iter)->optlist.push_back(subopt);
|
||||
(*iter)->select(0);
|
||||
return 0;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int MenuDisplay::setPointer(Animation *ptr)
|
||||
{
|
||||
if ( ptr == NULL ) {
|
||||
//std::cerr << "MenuDisplay::setPointer was passed a NULL Animation.\n";
|
||||
return 1;
|
||||
}
|
||||
if ( this->pointerActor != NULL ) {
|
||||
delete this->pointerActor;
|
||||
} else {
|
||||
this->pointerActor = new Actor();
|
||||
if ( this->pointerActor == NULL ) {
|
||||
//std::cerr << "Couldn't allocate memory for new pointer actor\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
//std::cerr << "Set animation " << ptr << " as animation for actor " << this->pointerActor << " for menu pointer\n";
|
||||
this->pointerActor->addAnimation(ptr, STATE_NONE);
|
||||
this->pointerActor->addState(STATE_NONE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
MenuOption *MenuDisplay::getOption(std::string name)
|
||||
{
|
||||
std::vector<MenuOption *>::iterator menuIter;
|
||||
MenuOption *opt = NULL;
|
||||
menuIter = this->menuOptions.begin();
|
||||
if ( name != "" ) {
|
||||
while ( menuIter != this->menuOptions.end() ) {
|
||||
opt = *menuIter;
|
||||
//std::cerr << "Checking " << opt->name << " against " << name << "\n";
|
||||
if ( opt->name == name ) {
|
||||
return opt;
|
||||
}
|
||||
menuIter++;
|
||||
}
|
||||
} else {
|
||||
//std::cerr << "Returning option at " << this->curOpt << "\n";
|
||||
return this->menuOptions.at(this->curOpt);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void MenuDisplay::setMenuOrigin(Vector origin)
|
||||
{
|
||||
this->origin.x = origin.x;
|
||||
this->origin.y = origin.y;
|
||||
this->origin.z = origin.z;
|
||||
//std::cerr << "MenuDisplay::setMenuOrigin x = " << this->origin.x << " y = " << this->origin.y << " z = " << this->origin.z << "\n";
|
||||
}
|
||||
|
||||
void MenuDisplay::update(int logicOnly)
|
||||
{
|
||||
SDL_Surface *frame = NULL;
|
||||
SDL_Rect destrect;
|
||||
SDL_Rect lastdirty;
|
||||
MenuOption *opt = NULL;
|
||||
FontRenderer &textEngine = FontRenderer::NewSingleton();
|
||||
int lastwidth = 0;
|
||||
std::vector<int> yvalues;
|
||||
|
||||
if ( this->active == 0 ) {
|
||||
return;
|
||||
}
|
||||
Display2D::update(logicOnly);
|
||||
|
||||
|
||||
//std::cerr << "curOpt now " << this->curOpt << "\n";
|
||||
if ( this->curOpt >= (int) this->menuOptions.size() ) {
|
||||
this->curOpt = this->menuOptions.size() - 1;
|
||||
} else if ( this->curOpt < 0 ) {
|
||||
this->curOpt = 0;
|
||||
}
|
||||
|
||||
if ( logicOnly == 1 ) {
|
||||
return;
|
||||
}
|
||||
//std::cerr << "fixed curOpt now " << this->curOpt << "\n";
|
||||
|
||||
lastdirty.x = (Sint16) this->origin.x;
|
||||
lastdirty.y = (Sint16) this->origin.y;
|
||||
lastdirty.w = 0;
|
||||
lastdirty.h = 0;
|
||||
|
||||
frame = this->pointerActor->nextFrame();
|
||||
|
||||
if ( frame != NULL ) {
|
||||
lastdirty.x += (frame->w + 10);
|
||||
}
|
||||
|
||||
for ( unsigned int i = 0; i < this->menuOptions.size(); i++ ) {
|
||||
opt = this->menuOptions.at(i);
|
||||
if ( opt == NULL ) {
|
||||
continue;
|
||||
}
|
||||
//std::cerr << " in MenuDisplay::update i = " << i << " curOpt = " << curOpt << "\n";
|
||||
//std::cerr << "String value of currently rendering option: " << opt->getStringValue() << "\n";
|
||||
lastdirty = textEngine.renderString(opt->name, this->canvas, this->fontname, (Vector){lastdirty.x, lastdirty.y + lastdirty.h, 0}, this->pointsize);
|
||||
if ( i == (unsigned int) curOpt ) {
|
||||
//std::cerr << this->optHeight * this->curOpt << " = " << this->origin.y + (this->optHeight * this->curOpt) << " = " << ptrdest.y << "\n";
|
||||
//std::cerr << "MenuDisplay origin is x = " << this->origin.x << " y = " << this->origin.y << " z = " << this->origin.z << " optHeight is " << this->optHeight << " curOpt is " << this->curOpt << "\n";
|
||||
if ( frame != NULL ) {
|
||||
// the pointer actually appears slightly to the left of the current option
|
||||
destrect.x = (Sint16) this->origin.x;
|
||||
destrect.y = lastdirty.y + ((lastdirty.h/2) - frame->h/2);
|
||||
destrect.w = 0;
|
||||
destrect.h = 0;
|
||||
//std::cerr << "Blitting frame " << frame << " to canvas " << this->canvas << " at (" << destrect.x << " x " << destrect.y << ") as pointer.\n";
|
||||
SDL_BlitSurface(frame, NULL, this->canvas, &destrect);
|
||||
}
|
||||
}
|
||||
lastdirty.y += this->spacing;
|
||||
if ( lastdirty.w > lastwidth ) {
|
||||
lastwidth = lastdirty.w;
|
||||
}
|
||||
yvalues.push_back(lastdirty.y - this->spacing);
|
||||
}
|
||||
for ( unsigned int i = 0; i < this->menuOptions.size(); i++ ) {
|
||||
opt = this->menuOptions.at(i);
|
||||
if ( opt->getStringValue() != opt->name ) {
|
||||
textEngine.renderString(opt->getStringValue(), this->canvas, this->fontname, (Vector){lastdirty.x + lastwidth + 10, yvalues.at(i), 0}, this->pointsize);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
void MenuDisplay::setFont(std::string fontname, int pointsize, SDL_Color color, SDL_Color bgcolor)
|
||||
{
|
||||
FontRenderer &textEngine = FontRenderer::NewSingleton();
|
||||
textEngine.setColor(color, bgcolor, 1);
|
||||
this->fontname = fontname;
|
||||
this->pointsize = pointsize;
|
||||
}
|
||||
|
||||
int MenuDisplay::handleEvent(SDL_Event *event)
|
||||
{
|
||||
MenuOption *opt = NULL;
|
||||
opt = this->getOption();
|
||||
int retval = 1;
|
||||
if ( this->active == 0 || opt == NULL ) {
|
||||
return retval;
|
||||
}
|
||||
//std::cerr << "MenuDisplay::handleEvent\n";
|
||||
//switch (event->type) {
|
||||
//default:
|
||||
if ( event->key.state == SDL_RELEASED && event->key.keysym.sym == SDLK_DOWN ) {
|
||||
this->curOpt += 1;
|
||||
if ( this->curOpt < 0 ) {
|
||||
this->curOpt = 0;
|
||||
}
|
||||
retval = 0;
|
||||
} else if ( event->key.state == SDL_RELEASED && event->key.keysym.sym == SDLK_UP ) {
|
||||
this->curOpt -= 1;
|
||||
if ( this->curOpt >= (int) this->menuOptions.size() ) {
|
||||
this->curOpt = this->menuOptions.size()-1;
|
||||
}
|
||||
retval = 0;
|
||||
} else if ( ( event->key.state == SDL_RELEASED || opt->spinFree == 1 && event->key.state == SDL_PRESSED )
|
||||
&& event->key.keysym.sym == SDLK_LEFT ) {
|
||||
opt->valuedown();
|
||||
this->clampValue(opt, -1);
|
||||
retval = 0;
|
||||
} else if ( ( event->key.state == SDL_RELEASED || opt->spinFree == 1 && event->key.state == SDL_PRESSED )
|
||||
&& event->key.keysym.sym == SDLK_RIGHT ) {
|
||||
opt->valueup();
|
||||
this->clampValue(opt, 1);
|
||||
retval = 0;
|
||||
} else if ( event->key.state == SDL_RELEASED && event->key.keysym.sym == SDLK_RETURN ) {
|
||||
if ( (this->closeOpt != "") && (opt->name != this->closeOpt)) {
|
||||
retval = 0;
|
||||
} else if ( ((this->closeOpt != "" ) && (opt->name == this->closeOpt)) || this->closeOpt == "") {
|
||||
this->active = 0;
|
||||
retval = 0;
|
||||
}
|
||||
}
|
||||
//}
|
||||
//opt->clampValue();
|
||||
return retval;
|
||||
}
|
||||
|
||||
void MenuDisplay::setCloseOption(std::string option)
|
||||
{
|
||||
this->closeOpt = option;
|
||||
}
|
||||
|
||||
void MenuDisplay::setSpacing(int spacing)
|
||||
{
|
||||
this->spacing = spacing;
|
||||
}
|
||||
|
||||
int MenuDisplay::setRelation(std::string opt1, std::string opt2, int relationType)
|
||||
{
|
||||
std::vector<MenuRelation *>::iterator iter;
|
||||
MenuRelation *tmp;
|
||||
iter = this->menuRelations.begin();
|
||||
while ( iter != this->menuRelations.end() ) {
|
||||
tmp = *iter;
|
||||
if ( tmp == NULL || tmp->opt1 == NULL || tmp->opt2 == NULL ) {
|
||||
iter++;
|
||||
continue;
|
||||
}
|
||||
if ( tmp->opt1->name == opt1 && tmp->opt2->name == opt2 && tmp->relation == relationType ) {
|
||||
return 1;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
tmp = new MenuRelation();
|
||||
tmp->opt1 = this->getOption(opt1);
|
||||
tmp->opt2 = this->getOption(opt2);
|
||||
tmp->relation = relationType;
|
||||
this->menuRelations.push_back(tmp);
|
||||
this->clampValue(tmp->opt1, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MenuDisplay::clampValue(MenuOption *opt, int defclamp)
|
||||
{
|
||||
std::vector<MenuRelation *>::iterator iter;
|
||||
MenuRelation *tmp;
|
||||
opt->clampValue();
|
||||
//std::cerr << "(PRE-RELATION CLAMP) Option " << opt->name << " now set to option " << opt->getIntValue() << "=" << opt->getStringValue() << "\n";
|
||||
iter = this->menuRelations.begin();
|
||||
while ( iter != this->menuRelations.end() ) {
|
||||
tmp = *iter;
|
||||
if ( tmp == NULL || tmp->opt1 == NULL || tmp->opt2 == NULL ) {
|
||||
iter++;
|
||||
continue;
|
||||
}
|
||||
if ( tmp->opt1->name == opt->name ) {
|
||||
//std::cerr << "Found relation for " << opt->name << " (" << tmp->opt1 << " = " << tmp->opt2 << ")\n";
|
||||
opt->clampValue(tmp, defclamp);
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
//std::cerr << "(POST-RELATION CLAMP) Option " << opt->name << " now set to option " << opt->getIntValue << "=" <<opt->getStringValue() << "\n";
|
||||
}
|
||||
97
MenuDisplay.h
Executable file
@@ -0,0 +1,97 @@
|
||||
#ifndef __MENUDISPLAY_H__
|
||||
#define __MENUDISPLAY_H__
|
||||
|
||||
#include "Actor.h"
|
||||
#include "Common.h"
|
||||
#include "Display2D.h"
|
||||
#include <vector>
|
||||
|
||||
// TODO: Add the ability to set a MenuOption to display as either text or as a slider for numeric values.
|
||||
|
||||
typedef struct MenuRelation;
|
||||
|
||||
#define MENU_OPTYPE_CHOICE 0
|
||||
#define MENU_OPTYPE_RANGE 1
|
||||
#define MENU_OPTYPE_SUBMENU 2
|
||||
|
||||
class MenuOption
|
||||
{
|
||||
public:
|
||||
std::string name;
|
||||
SDL_Surface *optionImage;
|
||||
std::vector<std::string> optlist;
|
||||
int rangeLow;
|
||||
int rangeHigh;
|
||||
int rangeStart;
|
||||
int selected; // doesn't hold info on whether this is selected or not, holds the index of optlist or the range number that is currently selected
|
||||
int spinFree; // if this is set to 1, then the value is modified on the presence of a key DOWN event, not a key RELEASE.
|
||||
|
||||
MenuOption(std::string name, int rangeLow, int rangeHigh, int rangeStart, int spinFree, SDL_Surface *img);
|
||||
~MenuOption();
|
||||
void clampValue(MenuRelation *relation = NULL, int defClampVal = 1);
|
||||
int getIntValue();
|
||||
std::string getStringValue();
|
||||
virtual int select(int value); // called by MenuDisplay to force selection to a given item
|
||||
virtual int whenhighlighted(); // called whenever the menu item is highlighted
|
||||
virtual int whenselected(); // called whenever the menu item is selected ("enter" is pressed on the item)
|
||||
virtual int valueup(); // called whenever the value of the item is increased (the range is moved up, or the next sub option is selected)
|
||||
virtual int valuedown(); // as with valueup(), but works with lower values and previous items
|
||||
};
|
||||
|
||||
#define MENURELATION_NODUPLICATE 0
|
||||
|
||||
struct MenuRelation
|
||||
{
|
||||
MenuOption *opt1;
|
||||
MenuOption *opt2;
|
||||
int relation;
|
||||
MenuRelation();
|
||||
};
|
||||
|
||||
// class for the menus in the game
|
||||
// This class dynamically creates actors for the menu options and such
|
||||
// the only actor you have to feed it is your pointer Animation
|
||||
class MenuDisplay : public Display2D
|
||||
{
|
||||
protected:
|
||||
std::vector<MenuOption *> menuOptions;
|
||||
std::vector<MenuRelation *> menuRelations;
|
||||
std::vector<MenuDisplay *> subMenus;
|
||||
Actor *pointerActor;
|
||||
int curOpt;
|
||||
Vector origin;
|
||||
SDL_Color textColor;
|
||||
SDL_Color bgColor;
|
||||
std::string fontname;
|
||||
int pointsize;
|
||||
int spacing;
|
||||
std::string closeOpt;
|
||||
Animation *arrowUp;
|
||||
Animation *arrowDown;
|
||||
Animation *arrowLeft;
|
||||
Animation *arrowRight;
|
||||
public:
|
||||
MenuDisplay();
|
||||
~MenuDisplay();
|
||||
|
||||
void setCloseOption(std::string option);
|
||||
void setSpacing(int spacing);
|
||||
int setPointer(Animation *ptr);
|
||||
void setMenuOrigin(Vector origin);
|
||||
void setMenuImages(Animation *arrowLeft, Animation *arrowRight, Animation *arrowUp, Animation *arrowDown);
|
||||
void setFont(std::string fontname, int pointsize, SDL_Color color, SDL_Color bgcolor);
|
||||
|
||||
void update(int logicOnly = 0);
|
||||
int handleEvent(SDL_Event *event);
|
||||
void clampValue(MenuOption *opt, int defClamp);
|
||||
|
||||
int setRelation(std::string opt1, std::string opt2, int relationType = MENURELATION_NODUPLICATE);
|
||||
void setOption(std::string optName, std::string );
|
||||
void setOption(std::string optName, int);
|
||||
void addOption(MenuOption *mopt);
|
||||
void addOption(std::string name, int rangeLow, int rangeHigh, int rangeStart, int spinFree, SDL_Surface *img);
|
||||
int addSubOption(std::string name, std::string subopt);
|
||||
MenuOption *getOption(std::string name = "");
|
||||
};
|
||||
|
||||
#endif // __MENUDISPLAY_H__
|
||||
64
Physics.h
Executable file
@@ -0,0 +1,64 @@
|
||||
#ifndef __PHYSICS_H__
|
||||
#define __PHYSICS_H__
|
||||
|
||||
// x = pounds to convert to newtons
|
||||
#define CALC_CONV_LB2NEWTON(x) ((x)*4.44822162)
|
||||
// x = ounces to convert to newtons
|
||||
#define CALC_CONV_OZ2NEWTON(x) (((x)*4.44822162)/16)
|
||||
// x = kilograms to convert to newtons
|
||||
#define CALC_CONV_KG2NEWTON(x) ((x)*9.81)
|
||||
// x = milligrams to convert to newtons
|
||||
#define CALC_CONV_MG2NEWTON(x) (((x)*9.81)/1000
|
||||
|
||||
// W = weight in newtons, g = constant acceleration of gravity
|
||||
#define CALC_MASSFROMWEIGHT(W, g) ((W)/(g))
|
||||
// F = Force applied to object, a = acceleration of object
|
||||
#define CALC_MASSFROMFORCE(F, a) ((F)/(a))
|
||||
// v = linear velocity of object, r = radius of circular path
|
||||
#define CALC_ACCEL_CENTRIPETAL(v, r) (((v)*(v))/(r))
|
||||
// v1 = starting velocity, v2 = ending velocity, t = time elapsed between v1 and v2
|
||||
#define CALC_ACCEL_VELOCITYDELTA(v1, v2, t) (((v2)-(v1)) / (t))
|
||||
// F = force applied to object, m = mass of object
|
||||
#define CALC_ACCEL_FORCE(F, m) ((F)/(m))
|
||||
// d = distance object has traveled, t = time object has spent in motion
|
||||
#define CALC_VELOCITY_AVG(d, t) ((d)/(t))
|
||||
// W = Weight of object, H = Height of object above the ground plane
|
||||
#define CALC_ENERGY_POTENTIAL(W, H) ((W)*(H))
|
||||
// m = mass of object, v = velocity of object
|
||||
#define CALC_ENERGY_KINETIC(m, v) (((m)*(v))/2)
|
||||
|
||||
|
||||
#define PHYSICS_NOPHYSICS 0000000000000000b
|
||||
#define PHYSICS_FRICTIONLESS 0000000000000001b
|
||||
#define PHYSICS_NOGRAVITY 0000000000000010b
|
||||
#define PHYSICS_MATERIAL_LIQUID 0000000000000100b
|
||||
#define PHYSICS_MATERIAL_GAS 0000000000001000b
|
||||
#define PHYSICS_MATERIAL_SOLID 0000000000010000b
|
||||
|
||||
struct WorldPhysics
|
||||
{
|
||||
float gravity;
|
||||
float airfriction;
|
||||
}
|
||||
|
||||
struct StaticPhysics
|
||||
{
|
||||
float friction;
|
||||
float bouyancy;
|
||||
int flags;
|
||||
}
|
||||
|
||||
struct ObjectPhysics : public StaticPhysics
|
||||
{
|
||||
float mass;
|
||||
float weight;
|
||||
float p1; // position 1, used for calculating velocity
|
||||
float p2; // position 2, "" " " "
|
||||
float v1; // velocity 1, used for calculation acceleration
|
||||
float v2; // velocity 2, " " " "
|
||||
float pe; // potential energy of an object at rest
|
||||
float ke; // kinetic energy of a moving object
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
69
Renderable.cpp
Executable file
@@ -0,0 +1,69 @@
|
||||
#include "Renderable.h"
|
||||
#include <SDL.h>
|
||||
#include <iostream>
|
||||
|
||||
Renderable::Renderable()
|
||||
{
|
||||
this->position = (Vector){0,0,0};
|
||||
this->velocity = (Vector){0,0,0};
|
||||
}
|
||||
|
||||
Vector Renderable::getPosition()
|
||||
{
|
||||
return this->position;
|
||||
}
|
||||
|
||||
Vector Renderable::getVelocity()
|
||||
{
|
||||
return this->velocity;
|
||||
}
|
||||
|
||||
void Renderable::setPosition(Vector pos)
|
||||
{
|
||||
this->position.x = pos.x;
|
||||
this->position.y = pos.y;
|
||||
this->position.z = pos.z;
|
||||
}
|
||||
|
||||
void Renderable::setVelocity(Vector vel)
|
||||
{
|
||||
this->velocity.x = vel.x;
|
||||
this->velocity.y = vel.y;
|
||||
this->velocity.z = vel.z;
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn Renderable::nextFrame
|
||||
* @brief Return the next surface that this class is ready to render
|
||||
* @return SDL_Surface *
|
||||
*/
|
||||
|
||||
SDL_Surface *Renderable::nextFrame()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AnimatedRenderable::AnimatedRenderable()
|
||||
{
|
||||
this->frameCounter.curFrame = 0;
|
||||
this->frameCounter.lastFrame = NULL;
|
||||
this->frameCounter.lastTime = 0;
|
||||
}
|
||||
|
||||
|
||||
FrameCounter AnimatedRenderable::getFrameCounter()
|
||||
{
|
||||
return this->frameCounter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn AnimatedRenderable::setFrameCounter
|
||||
* @brief Force the frame counter to a given FrameCounter value
|
||||
* @return 0
|
||||
*/
|
||||
int AnimatedRenderable::setFrameCounter(FrameCounter fc)
|
||||
{
|
||||
////std::cerr << "Updating frame counter\n";
|
||||
this->frameCounter = fc;
|
||||
return 0;
|
||||
}
|
||||
46
Renderable.h
Executable file
@@ -0,0 +1,46 @@
|
||||
#ifndef __RENDERABLE_H__
|
||||
#define __RENDERABLE_H__
|
||||
|
||||
#include <SDL.h>
|
||||
#include "Common.h"
|
||||
|
||||
/**
|
||||
* @class Renderable
|
||||
* @brief A base class for objects that are capable of returning renderable data
|
||||
*
|
||||
* This base class provides default mechanisms for an object to return renderable
|
||||
* data, track position and velocity.
|
||||
*/
|
||||
class Renderable
|
||||
{
|
||||
protected:
|
||||
Vector position; /**< The position of the renderable object */
|
||||
Vector velocity; /**< The velocity (if any) of the renderable object */
|
||||
public:
|
||||
Renderable();
|
||||
Vector getPosition();
|
||||
Vector getVelocity();
|
||||
void setPosition(Vector);
|
||||
void setVelocity(Vector);
|
||||
virtual SDL_Surface *nextFrame();
|
||||
};
|
||||
|
||||
/**
|
||||
* @class AnimatedRenderable
|
||||
* @brief A subclass of Renderable for objects that are renderable and animated
|
||||
*
|
||||
* This subclass defines the interface for libgame objects that are both
|
||||
* Renderable, but that also perform some kind of internal logic to return
|
||||
* different surfaces each call.
|
||||
*/
|
||||
class AnimatedRenderable : public Renderable
|
||||
{
|
||||
protected:
|
||||
FrameCounter frameCounter; /**< Current frame within the current animation */
|
||||
public:
|
||||
AnimatedRenderable();
|
||||
FrameCounter getFrameCounter();
|
||||
int setFrameCounter(FrameCounter fc);
|
||||
};
|
||||
|
||||
#endif // __RENDERABLE_H__
|
||||
142
SpriteStrip.cpp
Executable file
@@ -0,0 +1,142 @@
|
||||
#include "Renderable.h"
|
||||
#include "SpriteStrip.h"
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include <iostream>
|
||||
|
||||
SpriteStrip::SpriteStrip()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpriteStrip::~SpriteStrip()
|
||||
{
|
||||
this->clearFrames();
|
||||
}
|
||||
|
||||
int SpriteStrip::loadFromFile(std::string filename, int f_w, int f_h, Vector colorkey)
|
||||
{
|
||||
SDL_Surface *imgsurf = NULL;
|
||||
imgsurf = IMG_Load(filename.c_str());
|
||||
if ( imgsurf != NULL ) {
|
||||
//std::cerr << "Splitting frames from " << filename.c_str() << " (" << imgsurf->w << "x" << imgsurf->h << "...\n";
|
||||
return this->loadFromSurface(imgsurf, f_w, f_h, colorkey);
|
||||
} else {
|
||||
//std::cerr << "Couldn't load image from file!\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// pass 0 in f_w and f_h to return a single frame into the strip that's the size of the image
|
||||
// pass 0 in just one of them to indicate that each sprite is the entire width or height of
|
||||
// image
|
||||
int SpriteStrip::loadFromSurface(SDL_Surface *image, int f_w, int f_h, Vector colorkey)
|
||||
{
|
||||
int stripping = 1;
|
||||
SDL_Surface *newSurf = NULL;
|
||||
SDL_Rect copyRect = {0, 0, f_w, f_h };
|
||||
|
||||
if ( image == NULL )
|
||||
return 1;
|
||||
|
||||
if ( f_w == 0 ) {
|
||||
f_w = image->w;
|
||||
copyRect.w = f_w;
|
||||
}
|
||||
if ( f_h == 0 ) {
|
||||
f_h = image->h;
|
||||
copyRect.h = f_h;
|
||||
}
|
||||
|
||||
while ( stripping == 1) {
|
||||
newSurf = SDL_CreateRGBSurface(image->flags, f_w, f_h, image->format->BitsPerPixel, 0, 0, 0, 0);
|
||||
if ( newSurf != NULL ) {
|
||||
if ( colorkey.x > -1 && colorkey.y > -1 && colorkey.z > -1 ) {
|
||||
////std::cerr << "Setting color key\n";
|
||||
SDL_SetColorKey(newSurf, SDL_SRCCOLORKEY,
|
||||
SDL_MapRGB(newSurf->format,
|
||||
(Uint8) colorkey.x,
|
||||
(Uint8) colorkey.y,
|
||||
(Uint8) colorkey.z));
|
||||
}
|
||||
//std::cout << "Blitting new surface (" << copyRect.w << "x" << copyRect.h << " (src : " << copyRect.x << "," << copyRect.y << ")\n";
|
||||
if ( SDL_BlitSurface(image, ©Rect, newSurf, NULL) == 0 ) {
|
||||
this->frames.push_back(newSurf);
|
||||
newSurf = NULL;
|
||||
} else {
|
||||
//std::cerr << "Unable to blit from sprite sheet to sprite element.\n";
|
||||
exit(1);
|
||||
}
|
||||
if ( copyRect.x + (f_w*2) > image->w ) {
|
||||
copyRect.x = 0;
|
||||
copyRect.y += f_h;
|
||||
// overflowing image?
|
||||
if ( copyRect.y >= image->h ){
|
||||
stripping = 0;
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
copyRect.x += f_w;
|
||||
}
|
||||
} else {
|
||||
//std::cerr << "Unable to allocate memory for sprite strip element.\n";
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
//std::cout << "Split " << this->frames.size() << " frames into new sprite strip\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
SDL_Surface *SpriteStrip::getFrame(unsigned int frame)
|
||||
{
|
||||
if ( frame < this->frames.size() ) {
|
||||
return this->frames.at(frame);
|
||||
} else {
|
||||
////std::cerr << "Attempt to access beyond end of sprite strip (" << frame << " of " << this->frames.size() << ") on strip " << this << "\n";
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int SpriteStrip::width()
|
||||
{
|
||||
if ( this->frames.size() > 0 ) {
|
||||
return this->frames.at(0)->w;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SpriteStrip::height()
|
||||
{
|
||||
if ( this->frames.size() > 0 ) {
|
||||
return this->frames.at(0)->h;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SpriteStrip::clearFrames()
|
||||
{
|
||||
std::vector<SDL_Surface *>::iterator iter;
|
||||
while ( this->frames.size() > 0 ) {
|
||||
iter = this->frames.end();
|
||||
if ( *iter != NULL ) {
|
||||
SDL_FreeSurface(*iter);
|
||||
this->frames.erase(iter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int SpriteStrip::numFrames()
|
||||
{
|
||||
if ( this == NULL ) {
|
||||
//std::cerr << "SpriteStrip::numFrames got passed a NULL this-> pointer. How the FUCK did that happen?!\n";
|
||||
return 0;
|
||||
}
|
||||
return this->frames.size();
|
||||
}
|
||||
|
||||
SpriteStripIter SpriteStrip::iterator()
|
||||
{
|
||||
return (SpriteStripIter)this->frames.begin();
|
||||
}
|
||||
|
||||
|
||||
32
SpriteStrip.h
Executable file
@@ -0,0 +1,32 @@
|
||||
#ifndef __SPRITESTRIP_H__
|
||||
#define __SPRITESTRIP_H__
|
||||
|
||||
#include <SDL.h>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "Renderable.h"
|
||||
|
||||
typedef std::vector<SDL_Surface *>::iterator SpriteStripIter;
|
||||
|
||||
class SpriteStrip
|
||||
{
|
||||
private:
|
||||
std::vector<SDL_Surface *> frames;
|
||||
public:
|
||||
SpriteStrip();
|
||||
~SpriteStrip();
|
||||
int width();
|
||||
int height();
|
||||
int loadFromFile(std::string filename, int f_w = 0, int f_h = 0, Vector colorkey = (Vector){-1,-1,-1});
|
||||
int loadFromSurface(SDL_Surface *image, int f_w = 0, int f_h = 0, Vector colorkey = (Vector){-1,-1,-1});
|
||||
void clearFrames();
|
||||
SDL_Surface *getFrame(unsigned int frame);
|
||||
int numFrames();
|
||||
SpriteStripIter iterator();
|
||||
};
|
||||
|
||||
typedef std::map<std::string, SpriteStrip *> SpriteStripMap;
|
||||
|
||||
|
||||
#endif // #ifndef __SPRITESTRIP_H__
|
||||
32
TileSet.cpp
Executable file
@@ -0,0 +1,32 @@
|
||||
#include "Display2D.h"
|
||||
#include "TileSet.h"
|
||||
#include <libxml/xmlreader.h>
|
||||
#include <cstdlib>
|
||||
|
||||
int TileDisplay::loadFromTMX(std::string filename)
|
||||
{
|
||||
xmlTextReaderPtr reader;
|
||||
const xmlChar *name;
|
||||
const xmlChar *value;
|
||||
int ret;
|
||||
|
||||
reader = xmlReaderForFile(filename.c_str(), NULL, 0);
|
||||
if ( reader != NULL ) {
|
||||
ret = xmlTextReaderRead(reader);
|
||||
while ( ret == 1) {
|
||||
name = xmlTextReaderConstName(reader);
|
||||
if ( name != NULL ) {
|
||||
if ( !strcmp(name, "map") ) {
|
||||
|
||||
}
|
||||
value = xmlTextReaderConstValue(reader);
|
||||
}
|
||||
// process current node
|
||||
}
|
||||
xmlFreeTextReader(reader);
|
||||
if ( ret == 0 ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
37
TileSet.h
Executable file
@@ -0,0 +1,37 @@
|
||||
#ifndef __TILESET_H__
|
||||
#define __TILESET_H__
|
||||
|
||||
#include <SDL.h>
|
||||
#include "Display2D.h"
|
||||
|
||||
#define TILEMAP_ORTHOGONAL 1
|
||||
#define TILEMAP_ISOMETRIC 2
|
||||
|
||||
typedef std::map<int, SDL_Surface *> TileSet;
|
||||
|
||||
struct TileSetDef {
|
||||
int start_id;
|
||||
std::string name;
|
||||
TileSet *tiles;
|
||||
}
|
||||
|
||||
typedef std::vector<TileSetDef *> TileGroup;
|
||||
typedef std::vector<int> TileLayer;
|
||||
|
||||
class TileDisplay : public Display2D {
|
||||
protected:
|
||||
TileGroup tilegroup;
|
||||
std::vector<int>[MAX_LAYERS] layers;
|
||||
int w;
|
||||
int h;
|
||||
int tw;
|
||||
int th;
|
||||
public:
|
||||
int loadFromTMX(std::string filename);
|
||||
void clearTiles();
|
||||
void scroll(int x, int y);
|
||||
void autoScroll(int x, int y);
|
||||
void update();
|
||||
}
|
||||
|
||||
#endif // __TILESET_H__
|
||||
78
demo/bouncingball/Makefile
Executable file
@@ -0,0 +1,78 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
TARGET=demo
|
||||
BINTARGET=$(TARGET)
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows -DBUILD_MINGW32
|
||||
endif
|
||||
ifeq "$(OS)" "linux"
|
||||
ADDL_CFLAGS=-DBUILD_LINUX
|
||||
endif
|
||||
|
||||
# default for release configs
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET).exe
|
||||
else
|
||||
BINTARGET=$(TARGET)
|
||||
endif
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET)-dbg.exe
|
||||
else
|
||||
BINTARGET=$(TARGET)-dbg
|
||||
endif
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -pg -g -ggdb -gstabs -Wall -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(LIBDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL_ttf
|
||||
|
||||
BINOBJ=$(OUTDIR)/demo.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(which install)
|
||||
|
||||
$(OUTDIR)/%.o : cpp/%.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
|
||||
all: bin
|
||||
|
||||
bin: $(BINOBJ)
|
||||
$(LD) -pg -o $(OUTDIR)/$(BINTARGET) \
|
||||
-pg $(BINOBJ) $(LINKLIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(BINTARGET)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG)
|
||||
BIN
demo/bouncingball/Release/demo
Executable file
BIN
demo/bouncingball/Release/demo.exe
Executable file
BIN
demo/bouncingball/ball.png
Executable file
|
After Width: | Height: | Size: 648 B |
65
demo/bouncingball/cpp/demo.cpp
Executable file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* This demo just expands on the 'gravity' demo to show how one could create a primitive bouncing effect
|
||||
*/
|
||||
|
||||
#include <libgame/libgame.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Display2D display = Display2D();
|
||||
Game &myGame = Game::NewSingleton();
|
||||
Animation *anim = NULL;
|
||||
Actor ball;
|
||||
SpriteStrip *strip = NULL;
|
||||
float gravity = 0.1;
|
||||
unsigned int lastTimer = 0;
|
||||
|
||||
Vector actorPos;
|
||||
Vector actorVel;
|
||||
|
||||
myGame.initSDL();
|
||||
myGame.initVideo(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||
display.initVideo((Vector){0,0,0}, 640, 480, 32, SDL_HWSURFACE);
|
||||
display.setActive(1);
|
||||
myGame.windows.push_back(&display);
|
||||
|
||||
strip = myGame.newSpriteStrip("ball");
|
||||
strip->loadFromFile("ball.png", 32, 32, (Vector){0,0,0});
|
||||
anim = myGame.newAnimation("ball");
|
||||
anim->setStrip(strip, 0, 0, (Vector){0,0,0});
|
||||
ball.addAnimation(anim, STATE_DEFAULT);
|
||||
ball.setState(STATE_MOVERIGHT | STATE_MOVEUP);
|
||||
ball.setPosition((Vector){0,400,0});
|
||||
ball.setVelocity((Vector){.25, 1.5, 0});
|
||||
|
||||
display.addActor(&ball, LAYER_SPRITE1);
|
||||
|
||||
lastTimer = SDL_GetTicks();
|
||||
|
||||
while ( 1 ) {
|
||||
actorPos = ball.getPosition();
|
||||
actorVel = ball.getVelocity();
|
||||
/* this is what does the bounce */
|
||||
if ( actorPos.y > (480 - ball.nextFrame()->h) ) {
|
||||
actorVel.y = -(actorVel.y);
|
||||
actorPos.y = (480 - ball.nextFrame()->h);
|
||||
ball.setPosition(actorPos);
|
||||
}
|
||||
// -- end of bouncing
|
||||
if ( actorPos.x >= 640 ) {
|
||||
break;
|
||||
}
|
||||
if ( (SDL_GetTicks() - lastTimer) >= (1000/30) ) {
|
||||
myGame.update();
|
||||
actorVel.y -= gravity;
|
||||
ball.setVelocity(actorVel);
|
||||
lastTimer = SDL_GetTicks();
|
||||
} else {
|
||||
myGame.update(1);
|
||||
}
|
||||
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
|
||||
break;
|
||||
}
|
||||
myGame.finishFrame();
|
||||
}
|
||||
}
|
||||
BIN
demo/bouncingball/gmon.out
Executable file
277
demo/bouncingball/log.txt
Executable file
@@ -0,0 +1,277 @@
|
||||
ALSA lib pcm_dmix.c:874:(snd_pcm_dmix_open) unable to open slave
|
||||
Current time 35 last timer 30
|
||||
Moving ball down by 0.001 (0) units
|
||||
Now at 0 0
|
||||
Current time 40 last timer 30
|
||||
Moving ball down by 0.002 (0) units
|
||||
Now at 0 0
|
||||
Current time 51 last timer 30
|
||||
Moving ball down by 0.0042 (0) units
|
||||
Now at 0 0
|
||||
Current time 58 last timer 30
|
||||
Moving ball down by 0.0056 (0) units
|
||||
Now at 0 0
|
||||
Current time 61 last timer 30
|
||||
Moving ball down by 0.0062 (0) units
|
||||
Now at 0 0
|
||||
Current time 64 last timer 30
|
||||
Moving ball down by 0.0068 (0) units
|
||||
Now at 0 0
|
||||
Current time 74 last timer 30
|
||||
Moving ball down by 0.0088 (0) units
|
||||
Now at 0 0
|
||||
Current time 82 last timer 30
|
||||
Moving ball down by 0.0104 (0) units
|
||||
Now at 0 0
|
||||
Current time 91 last timer 30
|
||||
Moving ball down by 0.0122 (0) units
|
||||
Now at 0 0
|
||||
Current time 100 last timer 30
|
||||
Moving ball down by 0.014 (0) units
|
||||
Now at 0 0
|
||||
Current time 112 last timer 30
|
||||
Moving ball down by 0.0164 (0) units
|
||||
Now at 0 0
|
||||
Current time 121 last timer 30
|
||||
Moving ball down by 0.0182 (0) units
|
||||
Now at 0 0
|
||||
Current time 131 last timer 30
|
||||
Moving ball down by 0.0202 (0) units
|
||||
Now at 0 0
|
||||
Current time 141 last timer 30
|
||||
Moving ball down by 0.0222 (0) units
|
||||
Now at 0 0
|
||||
Current time 150 last timer 30
|
||||
Moving ball down by 0.024 (0) units
|
||||
Now at 0 0
|
||||
Current time 159 last timer 30
|
||||
Moving ball down by 0.0258 (0) units
|
||||
Now at 0 0
|
||||
Current time 169 last timer 30
|
||||
Moving ball down by 0.0278 (0) units
|
||||
Now at 0 0
|
||||
Current time 177 last timer 30
|
||||
Moving ball down by 0.0294 (0) units
|
||||
Now at 0 0
|
||||
Current time 188 last timer 30
|
||||
Moving ball down by 0.0316 (0) units
|
||||
Now at 0 0
|
||||
Current time 197 last timer 30
|
||||
Moving ball down by 0.0334 (0) units
|
||||
Now at 0 0
|
||||
Current time 207 last timer 30
|
||||
Moving ball down by 0.0354 (0) units
|
||||
Now at 0 0
|
||||
Current time 215 last timer 30
|
||||
Moving ball down by 0.037 (0) units
|
||||
Now at 0 0
|
||||
Current time 224 last timer 30
|
||||
Moving ball down by 0.0388 (0) units
|
||||
Now at 0 0
|
||||
Current time 234 last timer 30
|
||||
Moving ball down by 0.0408 (0) units
|
||||
Now at 0 0
|
||||
Current time 243 last timer 30
|
||||
Moving ball down by 0.0426 (0) units
|
||||
Now at 0 0
|
||||
Current time 251 last timer 30
|
||||
Moving ball down by 0.0442 (0) units
|
||||
Now at 0 0
|
||||
Current time 260 last timer 30
|
||||
Moving ball down by 0.046 (0) units
|
||||
Now at 0 0
|
||||
Current time 268 last timer 30
|
||||
Moving ball down by 0.0476 (0) units
|
||||
Now at 0 0
|
||||
Current time 277 last timer 30
|
||||
Moving ball down by 0.0494 (0) units
|
||||
Now at 0 0
|
||||
Current time 286 last timer 30
|
||||
Moving ball down by 0.0512 (0) units
|
||||
Now at 0 0
|
||||
Current time 295 last timer 30
|
||||
Moving ball down by 0.053 (0) units
|
||||
Now at 0 0
|
||||
Current time 307 last timer 30
|
||||
Moving ball down by 0.0554 (0) units
|
||||
Now at 0 0
|
||||
Current time 316 last timer 30
|
||||
Moving ball down by 0.0572 (0) units
|
||||
Now at 0 0
|
||||
Current time 325 last timer 30
|
||||
Moving ball down by 0.059 (0) units
|
||||
Now at 0 0
|
||||
Current time 333 last timer 30
|
||||
Moving ball down by 0.0606 (0) units
|
||||
Now at 0 0
|
||||
Current time 343 last timer 30
|
||||
Moving ball down by 0.0626 (0) units
|
||||
Now at 0 0
|
||||
Current time 351 last timer 30
|
||||
Moving ball down by 0.0642 (0) units
|
||||
Now at 0 0
|
||||
Current time 360 last timer 30
|
||||
Moving ball down by 0.066 (0) units
|
||||
Now at 0 0
|
||||
Current time 369 last timer 30
|
||||
Moving ball down by 0.0678 (0) units
|
||||
Now at 0 0
|
||||
Current time 377 last timer 30
|
||||
Moving ball down by 0.0694 (0) units
|
||||
Now at 0 0
|
||||
Current time 386 last timer 30
|
||||
Moving ball down by 0.0712 (0) units
|
||||
Now at 0 0
|
||||
Current time 399 last timer 30
|
||||
Moving ball down by 0.0738 (0) units
|
||||
Now at 0 0
|
||||
Current time 408 last timer 30
|
||||
Moving ball down by 0.0758 (0) units
|
||||
Now at 0 0
|
||||
Current time 422 last timer 30
|
||||
Moving ball down by 0.0784 (0) units
|
||||
Now at 0 0
|
||||
Current time 431 last timer 30
|
||||
Moving ball down by 0.0802 (0) units
|
||||
Now at 0 0
|
||||
Current time 440 last timer 30
|
||||
Moving ball down by 0.082 (0) units
|
||||
Now at 0 0
|
||||
Current time 449 last timer 30
|
||||
Moving ball down by 0.0838 (0) units
|
||||
Now at 0 0
|
||||
Current time 457 last timer 30
|
||||
Moving ball down by 0.0854 (0) units
|
||||
Now at 0 0
|
||||
Current time 468 last timer 30
|
||||
Moving ball down by 0.0876 (0) units
|
||||
Now at 0 0
|
||||
Current time 478 last timer 30
|
||||
Moving ball down by 0.0896 (0) units
|
||||
Now at 0 0
|
||||
Current time 487 last timer 30
|
||||
Moving ball down by 0.0914 (0) units
|
||||
Now at 0 0
|
||||
Current time 496 last timer 30
|
||||
Moving ball down by 0.0932 (0) units
|
||||
Now at 0 0
|
||||
Current time 506 last timer 30
|
||||
Moving ball down by 0.0954 (0) units
|
||||
Now at 0 0
|
||||
Current time 516 last timer 30
|
||||
Moving ball down by 0.0972 (0) units
|
||||
Now at 0 0
|
||||
Current time 525 last timer 30
|
||||
Moving ball down by 0.099 (0) units
|
||||
Now at 0 0
|
||||
Current time 533 last timer 30
|
||||
Moving ball down by 0.1006 (0) units
|
||||
Now at 0 0
|
||||
Current time 545 last timer 30
|
||||
Moving ball down by 0.103 (0) units
|
||||
Now at 0 0
|
||||
Current time 555 last timer 30
|
||||
Moving ball down by 0.105 (0) units
|
||||
Now at 0 0
|
||||
Current time 565 last timer 30
|
||||
Moving ball down by 0.107 (0) units
|
||||
Now at 0 0
|
||||
Current time 575 last timer 30
|
||||
Moving ball down by 0.109 (0) units
|
||||
Now at 0 0
|
||||
Current time 586 last timer 30
|
||||
Moving ball down by 0.1112 (0) units
|
||||
Now at 0 0
|
||||
Current time 595 last timer 30
|
||||
Moving ball down by 0.113 (0) units
|
||||
Now at 0 0
|
||||
Current time 607 last timer 30
|
||||
Moving ball down by 0.1154 (0) units
|
||||
Now at 0 0
|
||||
Current time 616 last timer 30
|
||||
Moving ball down by 0.1172 (0) units
|
||||
Now at 0 0
|
||||
Current time 625 last timer 30
|
||||
Moving ball down by 0.119 (0) units
|
||||
Now at 0 0
|
||||
Current time 633 last timer 30
|
||||
Moving ball down by 0.1206 (0) units
|
||||
Now at 0 0
|
||||
Current time 643 last timer 30
|
||||
Moving ball down by 0.1226 (0) units
|
||||
Now at 0 0
|
||||
Current time 651 last timer 30
|
||||
Moving ball down by 0.1244 (0) units
|
||||
Now at 0 0
|
||||
Current time 660 last timer 30
|
||||
Moving ball down by 0.126 (0) units
|
||||
Now at 0 0
|
||||
Current time 669 last timer 30
|
||||
Moving ball down by 0.128 (0) units
|
||||
Now at 0 0
|
||||
Current time 678 last timer 30
|
||||
Moving ball down by 0.1296 (0) units
|
||||
Now at 0 0
|
||||
Current time 687 last timer 30
|
||||
Moving ball down by 0.1314 (0) units
|
||||
Now at 0 0
|
||||
Current time 698 last timer 30
|
||||
Moving ball down by 0.1336 (0) units
|
||||
Now at 0 0
|
||||
Current time 707 last timer 30
|
||||
Moving ball down by 0.1354 (0) units
|
||||
Now at 0 0
|
||||
Current time 718 last timer 30
|
||||
Moving ball down by 0.1376 (0) units
|
||||
Now at 0 0
|
||||
Current time 727 last timer 30
|
||||
Moving ball down by 0.1394 (0) units
|
||||
Now at 0 0
|
||||
Current time 737 last timer 30
|
||||
Moving ball down by 0.1414 (0) units
|
||||
Now at 0 0
|
||||
Current time 748 last timer 30
|
||||
Moving ball down by 0.1436 (0) units
|
||||
Now at 0 0
|
||||
Current time 757 last timer 30
|
||||
Moving ball down by 0.1454 (0) units
|
||||
Now at 0 0
|
||||
Current time 765 last timer 30
|
||||
Moving ball down by 0.147 (0) units
|
||||
Now at 0 0
|
||||
Current time 774 last timer 30
|
||||
Moving ball down by 0.1488 (0) units
|
||||
Now at 0 0
|
||||
Current time 785 last timer 30
|
||||
Moving ball down by 0.151 (0) units
|
||||
Now at 0 0
|
||||
Current time 796 last timer 30
|
||||
Moving ball down by 0.1532 (0) units
|
||||
Now at 0 0
|
||||
Current time 806 last timer 30
|
||||
Moving ball down by 0.1552 (0) units
|
||||
Now at 0 0
|
||||
Current time 816 last timer 30
|
||||
Moving ball down by 0.1572 (0) units
|
||||
Now at 0 0
|
||||
Current time 825 last timer 30
|
||||
Moving ball down by 0.159 (0) units
|
||||
Now at 0 0
|
||||
Current time 833 last timer 30
|
||||
Moving ball down by 0.161 (0) units
|
||||
Now at 0 0
|
||||
Current time 847 last timer 30
|
||||
Moving ball down by 0.1634 (0) units
|
||||
Now at 0 0
|
||||
Current time 855 last timer 30
|
||||
Moving ball down by 0.165 (0) units
|
||||
Now at 0 0
|
||||
Current time 865 last timer 30
|
||||
Moving ball down by 0.167 (0) units
|
||||
Now at 0 0
|
||||
Current time 874 last timer 30
|
||||
Moving ball down by 0.1688 (0) units
|
||||
Now at 0 0
|
||||
Current time 883 last timer 30
|
||||
Moving ball down by 0.1708 (0) units
|
||||
Now at 0 0
|
||||
25
demo/build-demos.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
BUILTOK=""
|
||||
BUILTFAIL=""
|
||||
|
||||
|
||||
|
||||
for dir in $(find . -maxdepth 1 -type d | grep -v "\.$" );
|
||||
do
|
||||
echo "Making in $dir "
|
||||
cd $dir
|
||||
make CFG=$1 $2
|
||||
if [ $? -eq 0 ]; then
|
||||
BUILTOK="$(echo $BUILTOK $dir)"
|
||||
else
|
||||
BUILTFAIL="$(echo $BUILTFAIL $dir)"
|
||||
fi
|
||||
cd ..
|
||||
done
|
||||
|
||||
echo
|
||||
echo
|
||||
echo "OK : $BUILTOK"
|
||||
echo
|
||||
echo "FAIL : $BUILTFAIL"
|
||||
BIN
demo/controlmarine/MARINE_SHOOT_LEFT.png
Executable file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
demo/controlmarine/MARINE_SHOOT_RIGHT.png
Executable file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
demo/controlmarine/MARINE_STAND_LEFT.png
Executable file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
demo/controlmarine/MARINE_STAND_RIGHT.png
Executable file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
demo/controlmarine/MARINE_WALK_LEFT.png
Executable file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
demo/controlmarine/MARINE_WALK_RIGHT.png
Executable file
|
After Width: | Height: | Size: 7.6 KiB |
78
demo/exploder/Makefile
Executable file
@@ -0,0 +1,78 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
TARGET=demo
|
||||
BINTARGET=$(TARGET)
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows -DBUILD_MINGW32
|
||||
endif
|
||||
ifeq "$(OS)" "linux"
|
||||
ADDL_CFLAGS=-DBUILD_LINUX
|
||||
endif
|
||||
|
||||
# default for release configs
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET).exe
|
||||
else
|
||||
BINTARGET=$(TARGET)
|
||||
endif
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET)-dbg.exe
|
||||
else
|
||||
BINTARGET=$(TARGET)-dbg
|
||||
endif
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -pg -g -ggdb -gstabs -Wall -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(LIBDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL_ttf
|
||||
|
||||
BINOBJ=$(OUTDIR)/demo.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(which install)
|
||||
|
||||
$(OUTDIR)/%.o : cpp/%.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
|
||||
all: bin
|
||||
|
||||
bin: $(BINOBJ)
|
||||
$(LD) -pg -o $(OUTDIR)/$(BINTARGET) \
|
||||
-pg $(BINOBJ) $(LINKLIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(BINTARGET)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG)
|
||||
BIN
demo/exploder/Release/demo
Executable file
BIN
demo/exploder/Release/demo.exe
Executable file
33
demo/exploder/cpp/demo.cpp
Executable file
@@ -0,0 +1,33 @@
|
||||
#include <libgame/libgame.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Display2D display = Display2D();
|
||||
Game &myGame = Game::NewSingleton();
|
||||
Animation *anim = NULL;
|
||||
Actor exploder;
|
||||
SpriteStrip *strip = NULL;
|
||||
|
||||
myGame.initSDL();
|
||||
myGame.initVideo(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||
display.initVideo((Vector){0,0,0}, 640, 480, 32, SDL_HWSURFACE);
|
||||
display.setActive(1);
|
||||
myGame.windows.push_back(&display);
|
||||
|
||||
strip = myGame.newSpriteStrip("explosion");
|
||||
strip->loadFromFile("explosion.png", 110, 110, (Vector){0,0,0});
|
||||
anim = myGame.newAnimation("explosion");
|
||||
anim->setStrip(strip, 12, 0, (Vector){0,0,0});
|
||||
exploder.addAnimation(anim, STATE_DEFAULT);
|
||||
exploder.setState(STATE_NONE);
|
||||
|
||||
display.addActor(&exploder, LAYER_SPRITE1);
|
||||
|
||||
while ( 1 ) {
|
||||
myGame.update();
|
||||
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
|
||||
break;
|
||||
}
|
||||
myGame.finishFrame();
|
||||
}
|
||||
}
|
||||
BIN
demo/exploder/explosion.png
Executable file
|
After Width: | Height: | Size: 75 KiB |
BIN
demo/exploder/gmon.out
Executable file
12157
demo/explodingball/Debug/stderr.txt
Executable file
2
demo/explodingball/Debug/stdout.txt
Executable file
@@ -0,0 +1,2 @@
|
||||
Split 1 frames into new sprite strip
|
||||
Split 10 frames into new sprite strip
|
||||
78
demo/explodingball/Makefile
Executable file
@@ -0,0 +1,78 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
TARGET=demo
|
||||
BINTARGET=$(TARGET)
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows -DBUILD_MINGW32
|
||||
endif
|
||||
ifeq "$(OS)" "linux"
|
||||
ADDL_CFLAGS=-DBUILD_LINUX
|
||||
endif
|
||||
|
||||
# default for release configs
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET).exe
|
||||
else
|
||||
BINTARGET=$(TARGET)
|
||||
endif
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET)-dbg.exe
|
||||
else
|
||||
BINTARGET=$(TARGET)-dbg
|
||||
endif
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -pg -g -ggdb -gstabs -Wall -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(LIBDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL_ttf
|
||||
|
||||
BINOBJ=$(OUTDIR)/demo.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(which install)
|
||||
|
||||
$(OUTDIR)/%.o : cpp/%.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
|
||||
all: bin
|
||||
|
||||
bin: $(BINOBJ)
|
||||
$(LD) -pg -o $(OUTDIR)/$(BINTARGET) \
|
||||
-pg $(BINOBJ) $(LINKLIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(BINTARGET)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG)
|
||||
BIN
demo/explodingball/Release/demo
Executable file
BIN
demo/explodingball/Release/demo.exe
Executable file
BIN
demo/explodingball/ball.png
Executable file
|
After Width: | Height: | Size: 648 B |
100
demo/explodingball/cpp/demo.cpp
Executable file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* This demo expands on the frictionball demo. It shows how to create objects dynamically, by
|
||||
* creating an explosion every time the ball touches the ground
|
||||
*/
|
||||
|
||||
#include <libgame/libgame.h>
|
||||
#include <string>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Display2D display = Display2D();
|
||||
Game &myGame = Game::NewSingleton();
|
||||
Actor ball;
|
||||
Actor *exploder = NULL;
|
||||
float gravity = 0.1;
|
||||
//int exploderCount = 0;
|
||||
unsigned int lastTimer = 0;
|
||||
|
||||
Vector actorPos;
|
||||
Vector actorVel;
|
||||
|
||||
myGame.initSDL();
|
||||
myGame.initVideo(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||
display.initVideo((Vector){0,0,0}, 640, 480, 32, SDL_HWSURFACE);
|
||||
display.setActive(1);
|
||||
myGame.windows.push_back(&display);
|
||||
|
||||
// this stuff is a bit more terse now just to save space
|
||||
|
||||
myGame.newSpriteStrip("ball")->loadFromFile("ball.png", 32, 32, (Vector){0,0,0});
|
||||
myGame.newAnimation("ball")->setStrip(myGame.getSpriteStrip("ball"), 0, 0, (Vector){0,0,0});
|
||||
// create the new animation for the explosion
|
||||
myGame.newSpriteStrip("explosion")->loadFromFile("explosion.png", 110, 110, (Vector){0,0,0});
|
||||
myGame.newAnimation("explosion")->setStrip(myGame.getSpriteStrip("explosion"), 12, 0, (Vector){0,0,0});
|
||||
ball.addAnimation(myGame.getAnimation("ball"), STATE_DEFAULT);
|
||||
ball.setState(STATE_MOVERIGHT | STATE_MOVEUP);
|
||||
ball.setPosition((Vector){0,400,0});
|
||||
ball.setVelocity((Vector){.25, 1.5, 0});
|
||||
display.addActor(&ball, LAYER_SPRITE1);
|
||||
|
||||
lastTimer = SDL_GetTicks();
|
||||
|
||||
while ( 1 ) {
|
||||
actorPos = ball.getPosition();
|
||||
actorVel = ball.getVelocity();
|
||||
/* this is what does the bounce */
|
||||
if ( actorPos.y > (480 - ball.nextFrame()->h) && (actorVel.y != 0 ) ) {
|
||||
// if the velocity is low enough, then we just stop the ball so that it will roll
|
||||
// smoothly along the floor of the window
|
||||
if ( actorVel.y < .25 && actorVel.y > -.25 ) {
|
||||
//std::cerr << "STOPPING BALL\n";
|
||||
actorVel.y = 0;
|
||||
ball.setState(STATE_NONE);
|
||||
} else {
|
||||
// if the velocity is still significant, then we reverse it to create the bounce
|
||||
// but since real balls don't bounce quite as high as they did initially, when dropped
|
||||
// so we do a primitive modification of the velocity to inroduce something similar to
|
||||
// friction physics (see the "physics" demos for ACTUAL physics)
|
||||
|
||||
// The friction numbers here are arbitrary, and were used because they made sense in the
|
||||
// demo, you can change the friction for some pretty different effects.
|
||||
actorVel.y = -(actorVel.y) - .25;
|
||||
// this is friction applied to the X axis to stop the ball's movement eventually
|
||||
if ( actorVel.x < .01 && actorVel.x > -.01 ) {
|
||||
actorVel.x = 0;
|
||||
} else {
|
||||
actorVel.x -= .025;
|
||||
}
|
||||
}
|
||||
exploder = myGame.newActor();
|
||||
exploder->addAnimation(myGame.getAnimation("explosion"), STATE_DYING);
|
||||
exploder->setState(STATE_DYING);
|
||||
exploder->setPosition(actorPos);
|
||||
display.addActor(exploder, LAYER_SPRITE2);
|
||||
|
||||
actorPos.y = (480 - ball.nextFrame()->h);
|
||||
ball.setPosition(actorPos);
|
||||
}
|
||||
// -- end of bouncing
|
||||
if ( actorPos.x >= 640 ) {
|
||||
break;
|
||||
}
|
||||
if ( (SDL_GetTicks() - lastTimer) >= (1000/30) ) {
|
||||
myGame.update();
|
||||
if ( ball.hasState(STATE_MOVEUP) ) {
|
||||
actorVel.y -= gravity;
|
||||
}
|
||||
//std::cerr << "Velocity Y " << actorVel.y << "\n";
|
||||
ball.setVelocity(actorVel);
|
||||
lastTimer = SDL_GetTicks();
|
||||
} else {
|
||||
myGame.update(1);
|
||||
}
|
||||
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
|
||||
break;
|
||||
}
|
||||
myGame.finishFrame();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
BIN
demo/explodingball/explosion.png
Executable file
|
After Width: | Height: | Size: 75 KiB |
BIN
demo/explodingball/gmon.out
Executable file
277
demo/explodingball/log.txt
Executable file
@@ -0,0 +1,277 @@
|
||||
ALSA lib pcm_dmix.c:874:(snd_pcm_dmix_open) unable to open slave
|
||||
Current time 35 last timer 30
|
||||
Moving ball down by 0.001 (0) units
|
||||
Now at 0 0
|
||||
Current time 40 last timer 30
|
||||
Moving ball down by 0.002 (0) units
|
||||
Now at 0 0
|
||||
Current time 51 last timer 30
|
||||
Moving ball down by 0.0042 (0) units
|
||||
Now at 0 0
|
||||
Current time 58 last timer 30
|
||||
Moving ball down by 0.0056 (0) units
|
||||
Now at 0 0
|
||||
Current time 61 last timer 30
|
||||
Moving ball down by 0.0062 (0) units
|
||||
Now at 0 0
|
||||
Current time 64 last timer 30
|
||||
Moving ball down by 0.0068 (0) units
|
||||
Now at 0 0
|
||||
Current time 74 last timer 30
|
||||
Moving ball down by 0.0088 (0) units
|
||||
Now at 0 0
|
||||
Current time 82 last timer 30
|
||||
Moving ball down by 0.0104 (0) units
|
||||
Now at 0 0
|
||||
Current time 91 last timer 30
|
||||
Moving ball down by 0.0122 (0) units
|
||||
Now at 0 0
|
||||
Current time 100 last timer 30
|
||||
Moving ball down by 0.014 (0) units
|
||||
Now at 0 0
|
||||
Current time 112 last timer 30
|
||||
Moving ball down by 0.0164 (0) units
|
||||
Now at 0 0
|
||||
Current time 121 last timer 30
|
||||
Moving ball down by 0.0182 (0) units
|
||||
Now at 0 0
|
||||
Current time 131 last timer 30
|
||||
Moving ball down by 0.0202 (0) units
|
||||
Now at 0 0
|
||||
Current time 141 last timer 30
|
||||
Moving ball down by 0.0222 (0) units
|
||||
Now at 0 0
|
||||
Current time 150 last timer 30
|
||||
Moving ball down by 0.024 (0) units
|
||||
Now at 0 0
|
||||
Current time 159 last timer 30
|
||||
Moving ball down by 0.0258 (0) units
|
||||
Now at 0 0
|
||||
Current time 169 last timer 30
|
||||
Moving ball down by 0.0278 (0) units
|
||||
Now at 0 0
|
||||
Current time 177 last timer 30
|
||||
Moving ball down by 0.0294 (0) units
|
||||
Now at 0 0
|
||||
Current time 188 last timer 30
|
||||
Moving ball down by 0.0316 (0) units
|
||||
Now at 0 0
|
||||
Current time 197 last timer 30
|
||||
Moving ball down by 0.0334 (0) units
|
||||
Now at 0 0
|
||||
Current time 207 last timer 30
|
||||
Moving ball down by 0.0354 (0) units
|
||||
Now at 0 0
|
||||
Current time 215 last timer 30
|
||||
Moving ball down by 0.037 (0) units
|
||||
Now at 0 0
|
||||
Current time 224 last timer 30
|
||||
Moving ball down by 0.0388 (0) units
|
||||
Now at 0 0
|
||||
Current time 234 last timer 30
|
||||
Moving ball down by 0.0408 (0) units
|
||||
Now at 0 0
|
||||
Current time 243 last timer 30
|
||||
Moving ball down by 0.0426 (0) units
|
||||
Now at 0 0
|
||||
Current time 251 last timer 30
|
||||
Moving ball down by 0.0442 (0) units
|
||||
Now at 0 0
|
||||
Current time 260 last timer 30
|
||||
Moving ball down by 0.046 (0) units
|
||||
Now at 0 0
|
||||
Current time 268 last timer 30
|
||||
Moving ball down by 0.0476 (0) units
|
||||
Now at 0 0
|
||||
Current time 277 last timer 30
|
||||
Moving ball down by 0.0494 (0) units
|
||||
Now at 0 0
|
||||
Current time 286 last timer 30
|
||||
Moving ball down by 0.0512 (0) units
|
||||
Now at 0 0
|
||||
Current time 295 last timer 30
|
||||
Moving ball down by 0.053 (0) units
|
||||
Now at 0 0
|
||||
Current time 307 last timer 30
|
||||
Moving ball down by 0.0554 (0) units
|
||||
Now at 0 0
|
||||
Current time 316 last timer 30
|
||||
Moving ball down by 0.0572 (0) units
|
||||
Now at 0 0
|
||||
Current time 325 last timer 30
|
||||
Moving ball down by 0.059 (0) units
|
||||
Now at 0 0
|
||||
Current time 333 last timer 30
|
||||
Moving ball down by 0.0606 (0) units
|
||||
Now at 0 0
|
||||
Current time 343 last timer 30
|
||||
Moving ball down by 0.0626 (0) units
|
||||
Now at 0 0
|
||||
Current time 351 last timer 30
|
||||
Moving ball down by 0.0642 (0) units
|
||||
Now at 0 0
|
||||
Current time 360 last timer 30
|
||||
Moving ball down by 0.066 (0) units
|
||||
Now at 0 0
|
||||
Current time 369 last timer 30
|
||||
Moving ball down by 0.0678 (0) units
|
||||
Now at 0 0
|
||||
Current time 377 last timer 30
|
||||
Moving ball down by 0.0694 (0) units
|
||||
Now at 0 0
|
||||
Current time 386 last timer 30
|
||||
Moving ball down by 0.0712 (0) units
|
||||
Now at 0 0
|
||||
Current time 399 last timer 30
|
||||
Moving ball down by 0.0738 (0) units
|
||||
Now at 0 0
|
||||
Current time 408 last timer 30
|
||||
Moving ball down by 0.0758 (0) units
|
||||
Now at 0 0
|
||||
Current time 422 last timer 30
|
||||
Moving ball down by 0.0784 (0) units
|
||||
Now at 0 0
|
||||
Current time 431 last timer 30
|
||||
Moving ball down by 0.0802 (0) units
|
||||
Now at 0 0
|
||||
Current time 440 last timer 30
|
||||
Moving ball down by 0.082 (0) units
|
||||
Now at 0 0
|
||||
Current time 449 last timer 30
|
||||
Moving ball down by 0.0838 (0) units
|
||||
Now at 0 0
|
||||
Current time 457 last timer 30
|
||||
Moving ball down by 0.0854 (0) units
|
||||
Now at 0 0
|
||||
Current time 468 last timer 30
|
||||
Moving ball down by 0.0876 (0) units
|
||||
Now at 0 0
|
||||
Current time 478 last timer 30
|
||||
Moving ball down by 0.0896 (0) units
|
||||
Now at 0 0
|
||||
Current time 487 last timer 30
|
||||
Moving ball down by 0.0914 (0) units
|
||||
Now at 0 0
|
||||
Current time 496 last timer 30
|
||||
Moving ball down by 0.0932 (0) units
|
||||
Now at 0 0
|
||||
Current time 506 last timer 30
|
||||
Moving ball down by 0.0954 (0) units
|
||||
Now at 0 0
|
||||
Current time 516 last timer 30
|
||||
Moving ball down by 0.0972 (0) units
|
||||
Now at 0 0
|
||||
Current time 525 last timer 30
|
||||
Moving ball down by 0.099 (0) units
|
||||
Now at 0 0
|
||||
Current time 533 last timer 30
|
||||
Moving ball down by 0.1006 (0) units
|
||||
Now at 0 0
|
||||
Current time 545 last timer 30
|
||||
Moving ball down by 0.103 (0) units
|
||||
Now at 0 0
|
||||
Current time 555 last timer 30
|
||||
Moving ball down by 0.105 (0) units
|
||||
Now at 0 0
|
||||
Current time 565 last timer 30
|
||||
Moving ball down by 0.107 (0) units
|
||||
Now at 0 0
|
||||
Current time 575 last timer 30
|
||||
Moving ball down by 0.109 (0) units
|
||||
Now at 0 0
|
||||
Current time 586 last timer 30
|
||||
Moving ball down by 0.1112 (0) units
|
||||
Now at 0 0
|
||||
Current time 595 last timer 30
|
||||
Moving ball down by 0.113 (0) units
|
||||
Now at 0 0
|
||||
Current time 607 last timer 30
|
||||
Moving ball down by 0.1154 (0) units
|
||||
Now at 0 0
|
||||
Current time 616 last timer 30
|
||||
Moving ball down by 0.1172 (0) units
|
||||
Now at 0 0
|
||||
Current time 625 last timer 30
|
||||
Moving ball down by 0.119 (0) units
|
||||
Now at 0 0
|
||||
Current time 633 last timer 30
|
||||
Moving ball down by 0.1206 (0) units
|
||||
Now at 0 0
|
||||
Current time 643 last timer 30
|
||||
Moving ball down by 0.1226 (0) units
|
||||
Now at 0 0
|
||||
Current time 651 last timer 30
|
||||
Moving ball down by 0.1244 (0) units
|
||||
Now at 0 0
|
||||
Current time 660 last timer 30
|
||||
Moving ball down by 0.126 (0) units
|
||||
Now at 0 0
|
||||
Current time 669 last timer 30
|
||||
Moving ball down by 0.128 (0) units
|
||||
Now at 0 0
|
||||
Current time 678 last timer 30
|
||||
Moving ball down by 0.1296 (0) units
|
||||
Now at 0 0
|
||||
Current time 687 last timer 30
|
||||
Moving ball down by 0.1314 (0) units
|
||||
Now at 0 0
|
||||
Current time 698 last timer 30
|
||||
Moving ball down by 0.1336 (0) units
|
||||
Now at 0 0
|
||||
Current time 707 last timer 30
|
||||
Moving ball down by 0.1354 (0) units
|
||||
Now at 0 0
|
||||
Current time 718 last timer 30
|
||||
Moving ball down by 0.1376 (0) units
|
||||
Now at 0 0
|
||||
Current time 727 last timer 30
|
||||
Moving ball down by 0.1394 (0) units
|
||||
Now at 0 0
|
||||
Current time 737 last timer 30
|
||||
Moving ball down by 0.1414 (0) units
|
||||
Now at 0 0
|
||||
Current time 748 last timer 30
|
||||
Moving ball down by 0.1436 (0) units
|
||||
Now at 0 0
|
||||
Current time 757 last timer 30
|
||||
Moving ball down by 0.1454 (0) units
|
||||
Now at 0 0
|
||||
Current time 765 last timer 30
|
||||
Moving ball down by 0.147 (0) units
|
||||
Now at 0 0
|
||||
Current time 774 last timer 30
|
||||
Moving ball down by 0.1488 (0) units
|
||||
Now at 0 0
|
||||
Current time 785 last timer 30
|
||||
Moving ball down by 0.151 (0) units
|
||||
Now at 0 0
|
||||
Current time 796 last timer 30
|
||||
Moving ball down by 0.1532 (0) units
|
||||
Now at 0 0
|
||||
Current time 806 last timer 30
|
||||
Moving ball down by 0.1552 (0) units
|
||||
Now at 0 0
|
||||
Current time 816 last timer 30
|
||||
Moving ball down by 0.1572 (0) units
|
||||
Now at 0 0
|
||||
Current time 825 last timer 30
|
||||
Moving ball down by 0.159 (0) units
|
||||
Now at 0 0
|
||||
Current time 833 last timer 30
|
||||
Moving ball down by 0.161 (0) units
|
||||
Now at 0 0
|
||||
Current time 847 last timer 30
|
||||
Moving ball down by 0.1634 (0) units
|
||||
Now at 0 0
|
||||
Current time 855 last timer 30
|
||||
Moving ball down by 0.165 (0) units
|
||||
Now at 0 0
|
||||
Current time 865 last timer 30
|
||||
Moving ball down by 0.167 (0) units
|
||||
Now at 0 0
|
||||
Current time 874 last timer 30
|
||||
Moving ball down by 0.1688 (0) units
|
||||
Now at 0 0
|
||||
Current time 883 last timer 30
|
||||
Moving ball down by 0.1708 (0) units
|
||||
Now at 0 0
|
||||
787
demo/frictionball/Debug/stderr.txt
Executable file
@@ -0,0 +1,787 @@
|
||||
Splitting frames from ball.png (32x32...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0x3d4218 to main canvas 0x3d42c8(0,0)...
|
||||
1
demo/frictionball/Debug/stdout.txt
Executable file
@@ -0,0 +1 @@
|
||||
Split 1 frames into new sprite strip
|
||||
78
demo/frictionball/Makefile
Executable file
@@ -0,0 +1,78 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
TARGET=demo
|
||||
BINTARGET=$(TARGET)
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows -DBUILD_MINGW32
|
||||
endif
|
||||
ifeq "$(OS)" "linux"
|
||||
ADDL_CFLAGS=-DBUILD_LINUX
|
||||
endif
|
||||
|
||||
# default for release configs
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET).exe
|
||||
else
|
||||
BINTARGET=$(TARGET)
|
||||
endif
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET)-dbg.exe
|
||||
else
|
||||
BINTARGET=$(TARGET)-dbg
|
||||
endif
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -pg -g -ggdb -gstabs -Wall -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(LIBDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL_ttf
|
||||
|
||||
BINOBJ=$(OUTDIR)/demo.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(which install)
|
||||
|
||||
$(OUTDIR)/%.o : cpp/%.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
|
||||
all: bin
|
||||
|
||||
bin: $(BINOBJ)
|
||||
$(LD) -pg -o $(OUTDIR)/$(BINTARGET) \
|
||||
-pg $(BINOBJ) $(LINKLIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(BINTARGET)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG)
|
||||
BIN
demo/frictionball/Release/demo
Executable file
BIN
demo/frictionball/Release/demo.exe
Executable file
BIN
demo/frictionball/ball.png
Executable file
|
After Width: | Height: | Size: 648 B |
92
demo/frictionball/cpp/demo.cpp
Executable file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* This demo expands on the bouncingball demo to show how you can integrate simple physics to create a
|
||||
* more realistic bouncing effect, and bring the ball to a halt
|
||||
*/
|
||||
|
||||
#include <libgame/libgame.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Display2D display = Display2D();
|
||||
Game &myGame = Game::NewSingleton();
|
||||
Animation *anim = NULL;
|
||||
Actor ball;
|
||||
SpriteStrip *strip = NULL;
|
||||
float gravity = 0.1;
|
||||
unsigned int lastTimer = 0;
|
||||
|
||||
Vector actorPos;
|
||||
Vector actorVel;
|
||||
|
||||
myGame.initSDL();
|
||||
myGame.initVideo(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||
display.initVideo((Vector){0,0,0}, 640, 480, 32, SDL_HWSURFACE);
|
||||
display.setActive(1);
|
||||
myGame.windows.push_back(&display);
|
||||
|
||||
strip = myGame.newSpriteStrip("ball");
|
||||
strip->loadFromFile("ball.png", 32, 32, (Vector){0,0,0});
|
||||
anim = myGame.newAnimation("ball");
|
||||
anim->setStrip(strip, 0, 0, (Vector){0,0,0});
|
||||
ball.addAnimation(anim, STATE_DEFAULT);
|
||||
ball.setState(STATE_MOVERIGHT | STATE_MOVEUP);
|
||||
ball.setPosition((Vector){320,240,0});
|
||||
ball.setVelocity((Vector){-1, 0, 0});
|
||||
|
||||
display.addActor(&ball, LAYER_SPRITE1);
|
||||
|
||||
lastTimer = SDL_GetTicks();
|
||||
myGame.lockFPS(60);
|
||||
|
||||
while ( 1 ) {
|
||||
actorPos = ball.getPosition();
|
||||
actorVel = ball.getVelocity();
|
||||
/* this is what does the bounce */
|
||||
if ( actorPos.y > (480 - ball.nextFrame()->h) ) {
|
||||
// if the velocity is low enough, then we just stop the ball so that it will roll
|
||||
// smoothly along the floor of the window
|
||||
if ( actorVel.y < .01 && actorVel.y > -.01 ) {
|
||||
actorVel.y = 0;
|
||||
} else {
|
||||
// if the velocity is still significant, then we reverse it to create the bounce
|
||||
// but since real balls don't bounce quite as high as they did initially, when dropped
|
||||
// so we do a primitive modification of the velocity to inroduce something similar to
|
||||
// friction physics (see the "physics" demos for ACTUAL physics)
|
||||
|
||||
// The friction numbers here are arbitrary, and were used because they made sense in the
|
||||
// demo, you can change the friction for some pretty different effects.
|
||||
actorVel.y = -(actorVel.y) - 1;
|
||||
// this is friction applied to the X axis to stop the ball's movement eventually
|
||||
if ( actorVel.x < .01 && actorVel.x > -.01 ) {
|
||||
actorVel.x = 0;
|
||||
} else {
|
||||
if ( actorVel.x > 0 ) {
|
||||
actorVel.x -= .1;
|
||||
} else {
|
||||
actorVel.x += .1;
|
||||
}
|
||||
}
|
||||
}
|
||||
actorPos.y = (480 - ball.nextFrame()->h);
|
||||
ball.setPosition(actorPos);
|
||||
}
|
||||
if ( ((actorPos.x + ball.nextFrame()->w) >= 640) || actorPos.x < 0 ) {
|
||||
actorVel.x = -(actorVel.x);
|
||||
}
|
||||
// -- end of bouncing
|
||||
if ( actorPos.x >= 640 ) {
|
||||
break;
|
||||
}
|
||||
if ( (SDL_GetTicks() - lastTimer) >= (1000/30) ) {
|
||||
actorVel.y -= gravity;
|
||||
ball.setVelocity(actorVel);
|
||||
lastTimer = SDL_GetTicks();
|
||||
}
|
||||
myGame.update();
|
||||
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
|
||||
break;
|
||||
}
|
||||
myGame.finishFrame();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
BIN
demo/frictionball/gmon.out
Executable file
277
demo/frictionball/log.txt
Executable file
@@ -0,0 +1,277 @@
|
||||
ALSA lib pcm_dmix.c:874:(snd_pcm_dmix_open) unable to open slave
|
||||
Current time 35 last timer 30
|
||||
Moving ball down by 0.001 (0) units
|
||||
Now at 0 0
|
||||
Current time 40 last timer 30
|
||||
Moving ball down by 0.002 (0) units
|
||||
Now at 0 0
|
||||
Current time 51 last timer 30
|
||||
Moving ball down by 0.0042 (0) units
|
||||
Now at 0 0
|
||||
Current time 58 last timer 30
|
||||
Moving ball down by 0.0056 (0) units
|
||||
Now at 0 0
|
||||
Current time 61 last timer 30
|
||||
Moving ball down by 0.0062 (0) units
|
||||
Now at 0 0
|
||||
Current time 64 last timer 30
|
||||
Moving ball down by 0.0068 (0) units
|
||||
Now at 0 0
|
||||
Current time 74 last timer 30
|
||||
Moving ball down by 0.0088 (0) units
|
||||
Now at 0 0
|
||||
Current time 82 last timer 30
|
||||
Moving ball down by 0.0104 (0) units
|
||||
Now at 0 0
|
||||
Current time 91 last timer 30
|
||||
Moving ball down by 0.0122 (0) units
|
||||
Now at 0 0
|
||||
Current time 100 last timer 30
|
||||
Moving ball down by 0.014 (0) units
|
||||
Now at 0 0
|
||||
Current time 112 last timer 30
|
||||
Moving ball down by 0.0164 (0) units
|
||||
Now at 0 0
|
||||
Current time 121 last timer 30
|
||||
Moving ball down by 0.0182 (0) units
|
||||
Now at 0 0
|
||||
Current time 131 last timer 30
|
||||
Moving ball down by 0.0202 (0) units
|
||||
Now at 0 0
|
||||
Current time 141 last timer 30
|
||||
Moving ball down by 0.0222 (0) units
|
||||
Now at 0 0
|
||||
Current time 150 last timer 30
|
||||
Moving ball down by 0.024 (0) units
|
||||
Now at 0 0
|
||||
Current time 159 last timer 30
|
||||
Moving ball down by 0.0258 (0) units
|
||||
Now at 0 0
|
||||
Current time 169 last timer 30
|
||||
Moving ball down by 0.0278 (0) units
|
||||
Now at 0 0
|
||||
Current time 177 last timer 30
|
||||
Moving ball down by 0.0294 (0) units
|
||||
Now at 0 0
|
||||
Current time 188 last timer 30
|
||||
Moving ball down by 0.0316 (0) units
|
||||
Now at 0 0
|
||||
Current time 197 last timer 30
|
||||
Moving ball down by 0.0334 (0) units
|
||||
Now at 0 0
|
||||
Current time 207 last timer 30
|
||||
Moving ball down by 0.0354 (0) units
|
||||
Now at 0 0
|
||||
Current time 215 last timer 30
|
||||
Moving ball down by 0.037 (0) units
|
||||
Now at 0 0
|
||||
Current time 224 last timer 30
|
||||
Moving ball down by 0.0388 (0) units
|
||||
Now at 0 0
|
||||
Current time 234 last timer 30
|
||||
Moving ball down by 0.0408 (0) units
|
||||
Now at 0 0
|
||||
Current time 243 last timer 30
|
||||
Moving ball down by 0.0426 (0) units
|
||||
Now at 0 0
|
||||
Current time 251 last timer 30
|
||||
Moving ball down by 0.0442 (0) units
|
||||
Now at 0 0
|
||||
Current time 260 last timer 30
|
||||
Moving ball down by 0.046 (0) units
|
||||
Now at 0 0
|
||||
Current time 268 last timer 30
|
||||
Moving ball down by 0.0476 (0) units
|
||||
Now at 0 0
|
||||
Current time 277 last timer 30
|
||||
Moving ball down by 0.0494 (0) units
|
||||
Now at 0 0
|
||||
Current time 286 last timer 30
|
||||
Moving ball down by 0.0512 (0) units
|
||||
Now at 0 0
|
||||
Current time 295 last timer 30
|
||||
Moving ball down by 0.053 (0) units
|
||||
Now at 0 0
|
||||
Current time 307 last timer 30
|
||||
Moving ball down by 0.0554 (0) units
|
||||
Now at 0 0
|
||||
Current time 316 last timer 30
|
||||
Moving ball down by 0.0572 (0) units
|
||||
Now at 0 0
|
||||
Current time 325 last timer 30
|
||||
Moving ball down by 0.059 (0) units
|
||||
Now at 0 0
|
||||
Current time 333 last timer 30
|
||||
Moving ball down by 0.0606 (0) units
|
||||
Now at 0 0
|
||||
Current time 343 last timer 30
|
||||
Moving ball down by 0.0626 (0) units
|
||||
Now at 0 0
|
||||
Current time 351 last timer 30
|
||||
Moving ball down by 0.0642 (0) units
|
||||
Now at 0 0
|
||||
Current time 360 last timer 30
|
||||
Moving ball down by 0.066 (0) units
|
||||
Now at 0 0
|
||||
Current time 369 last timer 30
|
||||
Moving ball down by 0.0678 (0) units
|
||||
Now at 0 0
|
||||
Current time 377 last timer 30
|
||||
Moving ball down by 0.0694 (0) units
|
||||
Now at 0 0
|
||||
Current time 386 last timer 30
|
||||
Moving ball down by 0.0712 (0) units
|
||||
Now at 0 0
|
||||
Current time 399 last timer 30
|
||||
Moving ball down by 0.0738 (0) units
|
||||
Now at 0 0
|
||||
Current time 408 last timer 30
|
||||
Moving ball down by 0.0758 (0) units
|
||||
Now at 0 0
|
||||
Current time 422 last timer 30
|
||||
Moving ball down by 0.0784 (0) units
|
||||
Now at 0 0
|
||||
Current time 431 last timer 30
|
||||
Moving ball down by 0.0802 (0) units
|
||||
Now at 0 0
|
||||
Current time 440 last timer 30
|
||||
Moving ball down by 0.082 (0) units
|
||||
Now at 0 0
|
||||
Current time 449 last timer 30
|
||||
Moving ball down by 0.0838 (0) units
|
||||
Now at 0 0
|
||||
Current time 457 last timer 30
|
||||
Moving ball down by 0.0854 (0) units
|
||||
Now at 0 0
|
||||
Current time 468 last timer 30
|
||||
Moving ball down by 0.0876 (0) units
|
||||
Now at 0 0
|
||||
Current time 478 last timer 30
|
||||
Moving ball down by 0.0896 (0) units
|
||||
Now at 0 0
|
||||
Current time 487 last timer 30
|
||||
Moving ball down by 0.0914 (0) units
|
||||
Now at 0 0
|
||||
Current time 496 last timer 30
|
||||
Moving ball down by 0.0932 (0) units
|
||||
Now at 0 0
|
||||
Current time 506 last timer 30
|
||||
Moving ball down by 0.0954 (0) units
|
||||
Now at 0 0
|
||||
Current time 516 last timer 30
|
||||
Moving ball down by 0.0972 (0) units
|
||||
Now at 0 0
|
||||
Current time 525 last timer 30
|
||||
Moving ball down by 0.099 (0) units
|
||||
Now at 0 0
|
||||
Current time 533 last timer 30
|
||||
Moving ball down by 0.1006 (0) units
|
||||
Now at 0 0
|
||||
Current time 545 last timer 30
|
||||
Moving ball down by 0.103 (0) units
|
||||
Now at 0 0
|
||||
Current time 555 last timer 30
|
||||
Moving ball down by 0.105 (0) units
|
||||
Now at 0 0
|
||||
Current time 565 last timer 30
|
||||
Moving ball down by 0.107 (0) units
|
||||
Now at 0 0
|
||||
Current time 575 last timer 30
|
||||
Moving ball down by 0.109 (0) units
|
||||
Now at 0 0
|
||||
Current time 586 last timer 30
|
||||
Moving ball down by 0.1112 (0) units
|
||||
Now at 0 0
|
||||
Current time 595 last timer 30
|
||||
Moving ball down by 0.113 (0) units
|
||||
Now at 0 0
|
||||
Current time 607 last timer 30
|
||||
Moving ball down by 0.1154 (0) units
|
||||
Now at 0 0
|
||||
Current time 616 last timer 30
|
||||
Moving ball down by 0.1172 (0) units
|
||||
Now at 0 0
|
||||
Current time 625 last timer 30
|
||||
Moving ball down by 0.119 (0) units
|
||||
Now at 0 0
|
||||
Current time 633 last timer 30
|
||||
Moving ball down by 0.1206 (0) units
|
||||
Now at 0 0
|
||||
Current time 643 last timer 30
|
||||
Moving ball down by 0.1226 (0) units
|
||||
Now at 0 0
|
||||
Current time 651 last timer 30
|
||||
Moving ball down by 0.1244 (0) units
|
||||
Now at 0 0
|
||||
Current time 660 last timer 30
|
||||
Moving ball down by 0.126 (0) units
|
||||
Now at 0 0
|
||||
Current time 669 last timer 30
|
||||
Moving ball down by 0.128 (0) units
|
||||
Now at 0 0
|
||||
Current time 678 last timer 30
|
||||
Moving ball down by 0.1296 (0) units
|
||||
Now at 0 0
|
||||
Current time 687 last timer 30
|
||||
Moving ball down by 0.1314 (0) units
|
||||
Now at 0 0
|
||||
Current time 698 last timer 30
|
||||
Moving ball down by 0.1336 (0) units
|
||||
Now at 0 0
|
||||
Current time 707 last timer 30
|
||||
Moving ball down by 0.1354 (0) units
|
||||
Now at 0 0
|
||||
Current time 718 last timer 30
|
||||
Moving ball down by 0.1376 (0) units
|
||||
Now at 0 0
|
||||
Current time 727 last timer 30
|
||||
Moving ball down by 0.1394 (0) units
|
||||
Now at 0 0
|
||||
Current time 737 last timer 30
|
||||
Moving ball down by 0.1414 (0) units
|
||||
Now at 0 0
|
||||
Current time 748 last timer 30
|
||||
Moving ball down by 0.1436 (0) units
|
||||
Now at 0 0
|
||||
Current time 757 last timer 30
|
||||
Moving ball down by 0.1454 (0) units
|
||||
Now at 0 0
|
||||
Current time 765 last timer 30
|
||||
Moving ball down by 0.147 (0) units
|
||||
Now at 0 0
|
||||
Current time 774 last timer 30
|
||||
Moving ball down by 0.1488 (0) units
|
||||
Now at 0 0
|
||||
Current time 785 last timer 30
|
||||
Moving ball down by 0.151 (0) units
|
||||
Now at 0 0
|
||||
Current time 796 last timer 30
|
||||
Moving ball down by 0.1532 (0) units
|
||||
Now at 0 0
|
||||
Current time 806 last timer 30
|
||||
Moving ball down by 0.1552 (0) units
|
||||
Now at 0 0
|
||||
Current time 816 last timer 30
|
||||
Moving ball down by 0.1572 (0) units
|
||||
Now at 0 0
|
||||
Current time 825 last timer 30
|
||||
Moving ball down by 0.159 (0) units
|
||||
Now at 0 0
|
||||
Current time 833 last timer 30
|
||||
Moving ball down by 0.161 (0) units
|
||||
Now at 0 0
|
||||
Current time 847 last timer 30
|
||||
Moving ball down by 0.1634 (0) units
|
||||
Now at 0 0
|
||||
Current time 855 last timer 30
|
||||
Moving ball down by 0.165 (0) units
|
||||
Now at 0 0
|
||||
Current time 865 last timer 30
|
||||
Moving ball down by 0.167 (0) units
|
||||
Now at 0 0
|
||||
Current time 874 last timer 30
|
||||
Moving ball down by 0.1688 (0) units
|
||||
Now at 0 0
|
||||
Current time 883 last timer 30
|
||||
Moving ball down by 0.1708 (0) units
|
||||
Now at 0 0
|
||||
713
demo/gravity/Debug/stderr.txt
Executable file
@@ -0,0 +1,713 @@
|
||||
Splitting frames from ball.png (32x32...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
Blitting display 0x22fcf0 canvas 0xb6dcb0 to main canvas 0x3d4100(0,0)...
|
||||
Updating actor 0x22fc90
|
||||
Updating actor 0x22fc90
|
||||
1
demo/gravity/Debug/stdout.txt
Executable file
@@ -0,0 +1 @@
|
||||
Split 1 frames into new sprite strip
|
||||
78
demo/gravity/Makefile
Executable file
@@ -0,0 +1,78 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
TARGET=demo
|
||||
BINTARGET=$(TARGET)
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows -DBUILD_MINGW32
|
||||
endif
|
||||
ifeq "$(OS)" "linux"
|
||||
ADDL_CFLAGS=-DBUILD_LINUX
|
||||
endif
|
||||
|
||||
# default for release configs
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET).exe
|
||||
else
|
||||
BINTARGET=$(TARGET)
|
||||
endif
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET)-dbg.exe
|
||||
else
|
||||
BINTARGET=$(TARGET)-dbg
|
||||
endif
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -pg -g -ggdb -gstabs -Wall -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(LIBDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL_ttf
|
||||
|
||||
BINOBJ=$(OUTDIR)/demo.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(which install)
|
||||
|
||||
$(OUTDIR)/%.o : cpp/%.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
|
||||
all: bin
|
||||
|
||||
bin: $(BINOBJ)
|
||||
$(LD) -pg -o $(OUTDIR)/$(BINTARGET) \
|
||||
-pg $(BINOBJ) $(LINKLIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(BINTARGET)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG)
|
||||
BIN
demo/gravity/Release/demo
Executable file
BIN
demo/gravity/Release/demo.exe
Executable file
BIN
demo/gravity/ball.png
Executable file
|
After Width: | Height: | Size: 648 B |
61
demo/gravity/cpp/demo.cpp
Executable file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* This demo just creates a ball that moves up, and allows gravity to effect it.
|
||||
* The effect is to cause the velocity of the ball to change, causing it to travel
|
||||
* in a parabola on the Y axis rather than simply going straight up or straight down.
|
||||
*/
|
||||
|
||||
#include <libgame/libgame.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Display2D display = Display2D();
|
||||
Game &myGame = Game::NewSingleton();
|
||||
Animation *anim = NULL;
|
||||
Actor ball;
|
||||
SpriteStrip *strip = NULL;
|
||||
float gravity = 0.1;
|
||||
unsigned int lastTimer = 0;
|
||||
|
||||
Vector actorPos;
|
||||
Vector actorVel;
|
||||
|
||||
myGame.initSDL();
|
||||
myGame.initVideo(640, 480, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||
display.initVideo((Vector){0,0,0}, 640, 480, 32, SDL_HWSURFACE);
|
||||
display.setActive(1);
|
||||
myGame.windows.push_back(&display);
|
||||
|
||||
strip = myGame.newSpriteStrip("ball");
|
||||
strip->loadFromFile("ball.png", 32, 32, (Vector){0,0,0});
|
||||
anim = myGame.newAnimation("ball");
|
||||
anim->setStrip(strip, 0, 0, (Vector){0,0,0});
|
||||
ball.addAnimation(anim, STATE_DEFAULT);
|
||||
ball.setState(STATE_MOVERIGHT | STATE_MOVEUP);
|
||||
ball.setPosition((Vector){0,400,0});
|
||||
ball.setVelocity((Vector){1, 1.5, 0});
|
||||
|
||||
display.addActor(&ball, LAYER_SPRITE1);
|
||||
|
||||
lastTimer = SDL_GetTicks();
|
||||
|
||||
while ( 1 ) {
|
||||
actorPos = ball.getPosition();
|
||||
if ( actorPos.y >= 480 ) {
|
||||
break;
|
||||
}
|
||||
if ( (SDL_GetTicks() - lastTimer) >= (1000/30) ) {
|
||||
myGame.update();
|
||||
actorVel = ball.getVelocity();
|
||||
actorVel.y -= gravity;
|
||||
ball.setVelocity(actorVel);
|
||||
lastTimer = SDL_GetTicks();
|
||||
} else {
|
||||
myGame.update(1);
|
||||
}
|
||||
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
|
||||
break;
|
||||
}
|
||||
myGame.finishFrame();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
BIN
demo/gravity/gmon.out
Executable file
277
demo/gravity/log.txt
Executable file
@@ -0,0 +1,277 @@
|
||||
ALSA lib pcm_dmix.c:874:(snd_pcm_dmix_open) unable to open slave
|
||||
Current time 35 last timer 30
|
||||
Moving ball down by 0.001 (0) units
|
||||
Now at 0 0
|
||||
Current time 40 last timer 30
|
||||
Moving ball down by 0.002 (0) units
|
||||
Now at 0 0
|
||||
Current time 51 last timer 30
|
||||
Moving ball down by 0.0042 (0) units
|
||||
Now at 0 0
|
||||
Current time 58 last timer 30
|
||||
Moving ball down by 0.0056 (0) units
|
||||
Now at 0 0
|
||||
Current time 61 last timer 30
|
||||
Moving ball down by 0.0062 (0) units
|
||||
Now at 0 0
|
||||
Current time 64 last timer 30
|
||||
Moving ball down by 0.0068 (0) units
|
||||
Now at 0 0
|
||||
Current time 74 last timer 30
|
||||
Moving ball down by 0.0088 (0) units
|
||||
Now at 0 0
|
||||
Current time 82 last timer 30
|
||||
Moving ball down by 0.0104 (0) units
|
||||
Now at 0 0
|
||||
Current time 91 last timer 30
|
||||
Moving ball down by 0.0122 (0) units
|
||||
Now at 0 0
|
||||
Current time 100 last timer 30
|
||||
Moving ball down by 0.014 (0) units
|
||||
Now at 0 0
|
||||
Current time 112 last timer 30
|
||||
Moving ball down by 0.0164 (0) units
|
||||
Now at 0 0
|
||||
Current time 121 last timer 30
|
||||
Moving ball down by 0.0182 (0) units
|
||||
Now at 0 0
|
||||
Current time 131 last timer 30
|
||||
Moving ball down by 0.0202 (0) units
|
||||
Now at 0 0
|
||||
Current time 141 last timer 30
|
||||
Moving ball down by 0.0222 (0) units
|
||||
Now at 0 0
|
||||
Current time 150 last timer 30
|
||||
Moving ball down by 0.024 (0) units
|
||||
Now at 0 0
|
||||
Current time 159 last timer 30
|
||||
Moving ball down by 0.0258 (0) units
|
||||
Now at 0 0
|
||||
Current time 169 last timer 30
|
||||
Moving ball down by 0.0278 (0) units
|
||||
Now at 0 0
|
||||
Current time 177 last timer 30
|
||||
Moving ball down by 0.0294 (0) units
|
||||
Now at 0 0
|
||||
Current time 188 last timer 30
|
||||
Moving ball down by 0.0316 (0) units
|
||||
Now at 0 0
|
||||
Current time 197 last timer 30
|
||||
Moving ball down by 0.0334 (0) units
|
||||
Now at 0 0
|
||||
Current time 207 last timer 30
|
||||
Moving ball down by 0.0354 (0) units
|
||||
Now at 0 0
|
||||
Current time 215 last timer 30
|
||||
Moving ball down by 0.037 (0) units
|
||||
Now at 0 0
|
||||
Current time 224 last timer 30
|
||||
Moving ball down by 0.0388 (0) units
|
||||
Now at 0 0
|
||||
Current time 234 last timer 30
|
||||
Moving ball down by 0.0408 (0) units
|
||||
Now at 0 0
|
||||
Current time 243 last timer 30
|
||||
Moving ball down by 0.0426 (0) units
|
||||
Now at 0 0
|
||||
Current time 251 last timer 30
|
||||
Moving ball down by 0.0442 (0) units
|
||||
Now at 0 0
|
||||
Current time 260 last timer 30
|
||||
Moving ball down by 0.046 (0) units
|
||||
Now at 0 0
|
||||
Current time 268 last timer 30
|
||||
Moving ball down by 0.0476 (0) units
|
||||
Now at 0 0
|
||||
Current time 277 last timer 30
|
||||
Moving ball down by 0.0494 (0) units
|
||||
Now at 0 0
|
||||
Current time 286 last timer 30
|
||||
Moving ball down by 0.0512 (0) units
|
||||
Now at 0 0
|
||||
Current time 295 last timer 30
|
||||
Moving ball down by 0.053 (0) units
|
||||
Now at 0 0
|
||||
Current time 307 last timer 30
|
||||
Moving ball down by 0.0554 (0) units
|
||||
Now at 0 0
|
||||
Current time 316 last timer 30
|
||||
Moving ball down by 0.0572 (0) units
|
||||
Now at 0 0
|
||||
Current time 325 last timer 30
|
||||
Moving ball down by 0.059 (0) units
|
||||
Now at 0 0
|
||||
Current time 333 last timer 30
|
||||
Moving ball down by 0.0606 (0) units
|
||||
Now at 0 0
|
||||
Current time 343 last timer 30
|
||||
Moving ball down by 0.0626 (0) units
|
||||
Now at 0 0
|
||||
Current time 351 last timer 30
|
||||
Moving ball down by 0.0642 (0) units
|
||||
Now at 0 0
|
||||
Current time 360 last timer 30
|
||||
Moving ball down by 0.066 (0) units
|
||||
Now at 0 0
|
||||
Current time 369 last timer 30
|
||||
Moving ball down by 0.0678 (0) units
|
||||
Now at 0 0
|
||||
Current time 377 last timer 30
|
||||
Moving ball down by 0.0694 (0) units
|
||||
Now at 0 0
|
||||
Current time 386 last timer 30
|
||||
Moving ball down by 0.0712 (0) units
|
||||
Now at 0 0
|
||||
Current time 399 last timer 30
|
||||
Moving ball down by 0.0738 (0) units
|
||||
Now at 0 0
|
||||
Current time 408 last timer 30
|
||||
Moving ball down by 0.0758 (0) units
|
||||
Now at 0 0
|
||||
Current time 422 last timer 30
|
||||
Moving ball down by 0.0784 (0) units
|
||||
Now at 0 0
|
||||
Current time 431 last timer 30
|
||||
Moving ball down by 0.0802 (0) units
|
||||
Now at 0 0
|
||||
Current time 440 last timer 30
|
||||
Moving ball down by 0.082 (0) units
|
||||
Now at 0 0
|
||||
Current time 449 last timer 30
|
||||
Moving ball down by 0.0838 (0) units
|
||||
Now at 0 0
|
||||
Current time 457 last timer 30
|
||||
Moving ball down by 0.0854 (0) units
|
||||
Now at 0 0
|
||||
Current time 468 last timer 30
|
||||
Moving ball down by 0.0876 (0) units
|
||||
Now at 0 0
|
||||
Current time 478 last timer 30
|
||||
Moving ball down by 0.0896 (0) units
|
||||
Now at 0 0
|
||||
Current time 487 last timer 30
|
||||
Moving ball down by 0.0914 (0) units
|
||||
Now at 0 0
|
||||
Current time 496 last timer 30
|
||||
Moving ball down by 0.0932 (0) units
|
||||
Now at 0 0
|
||||
Current time 506 last timer 30
|
||||
Moving ball down by 0.0954 (0) units
|
||||
Now at 0 0
|
||||
Current time 516 last timer 30
|
||||
Moving ball down by 0.0972 (0) units
|
||||
Now at 0 0
|
||||
Current time 525 last timer 30
|
||||
Moving ball down by 0.099 (0) units
|
||||
Now at 0 0
|
||||
Current time 533 last timer 30
|
||||
Moving ball down by 0.1006 (0) units
|
||||
Now at 0 0
|
||||
Current time 545 last timer 30
|
||||
Moving ball down by 0.103 (0) units
|
||||
Now at 0 0
|
||||
Current time 555 last timer 30
|
||||
Moving ball down by 0.105 (0) units
|
||||
Now at 0 0
|
||||
Current time 565 last timer 30
|
||||
Moving ball down by 0.107 (0) units
|
||||
Now at 0 0
|
||||
Current time 575 last timer 30
|
||||
Moving ball down by 0.109 (0) units
|
||||
Now at 0 0
|
||||
Current time 586 last timer 30
|
||||
Moving ball down by 0.1112 (0) units
|
||||
Now at 0 0
|
||||
Current time 595 last timer 30
|
||||
Moving ball down by 0.113 (0) units
|
||||
Now at 0 0
|
||||
Current time 607 last timer 30
|
||||
Moving ball down by 0.1154 (0) units
|
||||
Now at 0 0
|
||||
Current time 616 last timer 30
|
||||
Moving ball down by 0.1172 (0) units
|
||||
Now at 0 0
|
||||
Current time 625 last timer 30
|
||||
Moving ball down by 0.119 (0) units
|
||||
Now at 0 0
|
||||
Current time 633 last timer 30
|
||||
Moving ball down by 0.1206 (0) units
|
||||
Now at 0 0
|
||||
Current time 643 last timer 30
|
||||
Moving ball down by 0.1226 (0) units
|
||||
Now at 0 0
|
||||
Current time 651 last timer 30
|
||||
Moving ball down by 0.1244 (0) units
|
||||
Now at 0 0
|
||||
Current time 660 last timer 30
|
||||
Moving ball down by 0.126 (0) units
|
||||
Now at 0 0
|
||||
Current time 669 last timer 30
|
||||
Moving ball down by 0.128 (0) units
|
||||
Now at 0 0
|
||||
Current time 678 last timer 30
|
||||
Moving ball down by 0.1296 (0) units
|
||||
Now at 0 0
|
||||
Current time 687 last timer 30
|
||||
Moving ball down by 0.1314 (0) units
|
||||
Now at 0 0
|
||||
Current time 698 last timer 30
|
||||
Moving ball down by 0.1336 (0) units
|
||||
Now at 0 0
|
||||
Current time 707 last timer 30
|
||||
Moving ball down by 0.1354 (0) units
|
||||
Now at 0 0
|
||||
Current time 718 last timer 30
|
||||
Moving ball down by 0.1376 (0) units
|
||||
Now at 0 0
|
||||
Current time 727 last timer 30
|
||||
Moving ball down by 0.1394 (0) units
|
||||
Now at 0 0
|
||||
Current time 737 last timer 30
|
||||
Moving ball down by 0.1414 (0) units
|
||||
Now at 0 0
|
||||
Current time 748 last timer 30
|
||||
Moving ball down by 0.1436 (0) units
|
||||
Now at 0 0
|
||||
Current time 757 last timer 30
|
||||
Moving ball down by 0.1454 (0) units
|
||||
Now at 0 0
|
||||
Current time 765 last timer 30
|
||||
Moving ball down by 0.147 (0) units
|
||||
Now at 0 0
|
||||
Current time 774 last timer 30
|
||||
Moving ball down by 0.1488 (0) units
|
||||
Now at 0 0
|
||||
Current time 785 last timer 30
|
||||
Moving ball down by 0.151 (0) units
|
||||
Now at 0 0
|
||||
Current time 796 last timer 30
|
||||
Moving ball down by 0.1532 (0) units
|
||||
Now at 0 0
|
||||
Current time 806 last timer 30
|
||||
Moving ball down by 0.1552 (0) units
|
||||
Now at 0 0
|
||||
Current time 816 last timer 30
|
||||
Moving ball down by 0.1572 (0) units
|
||||
Now at 0 0
|
||||
Current time 825 last timer 30
|
||||
Moving ball down by 0.159 (0) units
|
||||
Now at 0 0
|
||||
Current time 833 last timer 30
|
||||
Moving ball down by 0.161 (0) units
|
||||
Now at 0 0
|
||||
Current time 847 last timer 30
|
||||
Moving ball down by 0.1634 (0) units
|
||||
Now at 0 0
|
||||
Current time 855 last timer 30
|
||||
Moving ball down by 0.165 (0) units
|
||||
Now at 0 0
|
||||
Current time 865 last timer 30
|
||||
Moving ball down by 0.167 (0) units
|
||||
Now at 0 0
|
||||
Current time 874 last timer 30
|
||||
Moving ball down by 0.1688 (0) units
|
||||
Now at 0 0
|
||||
Current time 883 last timer 30
|
||||
Moving ball down by 0.1708 (0) units
|
||||
Now at 0 0
|
||||
123
deps/Makefile
vendored
Executable file
@@ -0,0 +1,123 @@
|
||||
all: clean packages
|
||||
|
||||
CFLAGS=$(CFLAGS) -I/usr/local/include -I/usr/include
|
||||
LDFLAGS=$(LDFLAGS) -L/usr/local/lib -L/usr/lib
|
||||
|
||||
.PHONY: files
|
||||
files:
|
||||
wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
|
||||
|
||||
.PHONY: packages
|
||||
packages: SDL_main zlib libpng libjpeg libtiff SDL_image libvorbis flac SDL_mixer freetype SDL_ttf SDL_gfx libxml2
|
||||
|
||||
.PHONY: SDL_main
|
||||
SDL_main:
|
||||
wget http://www.libsdl.org/release/SDL-1.2.14.tar.gz
|
||||
tar -zxvf SDL-1.2.14.tar.gz
|
||||
cd SDL-1.2.14 && ./configure && make && make install
|
||||
|
||||
.PHONY: libpng
|
||||
libpng:
|
||||
wget -O libpng-1.2.37-bin.zip http://downloads.sourceforge.net/gnuwin32/libpng-1.2.37-bin.zip
|
||||
unzip -od /usr/local/ libpng-1.2.37-bin.zip
|
||||
wget -O libpng-1.2.37-deps.zip http://downloads.sourceforge.net/gnuwin32/libpng-1.2.37-dep.zip
|
||||
unzip -od /usr/local/ libpng-1.2.37-deps.zip
|
||||
wget -O libpng-1.2.37-devs.zip http://downloads.sourceforge.net/gnuwin32/libpng-1.2.37-lib.zip
|
||||
unzip -od /usr/local/ libpng-1.2.37-devs.zip
|
||||
cp libpng-config /usr/local/bin/libpng-config
|
||||
|
||||
.PHONY: zlib
|
||||
zlib:
|
||||
wget -O zlib-bin.zip http://gnuwin32.sourceforge.net/downlinks/zlib-bin-zip.php
|
||||
unzip -od /usr/local/ zlib-bin.zip
|
||||
wget -O zlib-libs.zip http://gnuwin32.sourceforge.net/downlinks/zlib-lib-zip.php
|
||||
unzip -od /usr/local/ zlib-libs.zip
|
||||
|
||||
.PHONY: libjpeg
|
||||
libjpeg:
|
||||
wget -O jpeg-bin.zip http://gnuwin32.sourceforge.net/downlinks/jpeg-bin-zip.php
|
||||
unzip -od /usr/local/ jpeg-bin.zip
|
||||
wget -O jpeg-deps.zip http://gnuwin32.sourceforge.net/downlinks/jpeg-dep-zip.php
|
||||
unzip -od /usr/local/ jpeg-deps.zip
|
||||
wget -O jpeg-devs.zip http://gnuwin32.sourceforge.net/downlinks/jpeg-lib-zip.php
|
||||
unzip -od /usr/local/ jpeg-devs.zip
|
||||
|
||||
.PHONY: libtiff
|
||||
libtiff:
|
||||
wget -O tiff-bin.zip http://gnuwin32.sourceforge.net/downlinks/tiff-bin-zip.php
|
||||
unzip -od /usr/local/ tiff-bin.zip
|
||||
wget -O tiff-deps.zip http://gnuwin32.sourceforge.net/downlinks/tiff-dep-zip.php
|
||||
unzip -od /usr/local/ tiff-deps.zip
|
||||
wget -O tiff-devs.zip http://gnuwin32.sourceforge.net/downlinks/tiff-lib-zip.php
|
||||
unzip -od /usr/local/ tiff-devs.zip
|
||||
|
||||
|
||||
.PHONY: SDL_image
|
||||
SDL_image:
|
||||
wget http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz
|
||||
tar -zxvf SDL_image-1.2.10.tar.gz
|
||||
cd SDL_image-1.2.10 && CFLAGS="-I/usr/local/include -I/usr/include" LDFLAGS=-L/usr/local/lib ./configure && make && make install
|
||||
|
||||
.PHONY: libvorbis
|
||||
libvorbis:
|
||||
wget http://downloads.xiph.org/releases/ogg/libogg-1.2.2.tar.gz
|
||||
tar -zxvf libogg-1.2.2.tar.gz
|
||||
cd libogg-1.2.2 && ./configure && make && make install
|
||||
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.2.tar.gz
|
||||
tar -zxvf libvorbis-1.3.2.tar.gz
|
||||
cd libvorbis-1.3.2 && CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure && make && make install
|
||||
|
||||
.PHONY: flac
|
||||
flac:
|
||||
wget http://downloads.xiph.org/releases/flac/flac-1.2.1.tar.gz
|
||||
tar -zxvf flac-1.2.1.tar.gz
|
||||
patch -p0 < flac-alloc.h.patch
|
||||
patch -p0 < flac-main.cpp.patch
|
||||
cd flac-1.2.1 && ./configure && make && make install
|
||||
|
||||
.PHONY: SDL_mixer
|
||||
SDL_mixer:
|
||||
wget http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11.tar.gz
|
||||
tar -zxvf SDL_mixer-1.2.11.tar.gz
|
||||
cd SDL_mixer-1.2.11 && CFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib ./configure && make && make install
|
||||
|
||||
.PHONY: SDL_ttf
|
||||
SDL_ttf:
|
||||
wget http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.10.tar.gz
|
||||
tar -zxvf SDL_ttf-2.0.10.tar.gz
|
||||
cd SDL_ttf-2.0.10 && CFLAGS="-I/usr/local/include -I/usr/local/include/freetype2" LDFLAGS=-L/usr/local/lib ./configure && make && make install
|
||||
|
||||
.PHONY: freetype
|
||||
freetype:
|
||||
wget -O freetype-bin.zip http://gnuwin32.sourceforge.net/downlinks/freetype-bin-zip.php
|
||||
unzip -od /usr/local/ freetype-bin.zip
|
||||
wget -O freetype-deps.zip http://gnuwin32.sourceforge.net/downlinks/freetype-dep-zip.php
|
||||
unzip -od /usr/local/ freetype-deps.zip
|
||||
wget -O freetype-devs.zip http://gnuwin32.sourceforge.net/downlinks/freetype-lib-zip.php
|
||||
unzip -od /usr/local/ freetype-devs.zip
|
||||
|
||||
.PHONY: SDL_gfx
|
||||
SDL_gfx:
|
||||
wget http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.22.tar.gz
|
||||
tar -zxvf SDL_gfx-2.0.22.tar.gz
|
||||
mkdir SDL_gfx-2.0.22/m4
|
||||
cp /usr/local/share/aclocal/sdl.m4 SDL_gfx-2.0.22/m4
|
||||
cd SDL_gfx-2.0.22 && libtoolize --force --copy && aclocal -I m4 && autoconf && automake
|
||||
cd SDL_gfx-2.0.22 && CFLAGS="-I/usr/local/include -I/usr/include" LDFLAGS="-L/usr/local/lib -L/usr/lib" ./configure && make && make install
|
||||
|
||||
.PHONY: libxml2
|
||||
libxml2:
|
||||
wget http://sourceforge.net/projects/gnuwin32/files/libxml/2.4.12-1/libxml2-2.4.12-bin.zip/download
|
||||
unzip -od /usr/local/ libxml2-2.4.12-bin.zip
|
||||
wget http://sourceforge.net/projects/gnuwin32/files/libxml/2.4.12-1/libxml2-2.4.12-1-lib.zip/download
|
||||
unzip -od /usr/local/ libxml2-2.4.12-1-lib.zip
|
||||
|
||||
.PHONY: doxygen
|
||||
doxygen:
|
||||
wget http://ftp.stack.nl/pub/users/dimitri/doxygen-1.7.4.windows.bin.zip
|
||||
unzip -od /bin doxygen-1.7.4.windows.bin.zip
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf *gz *zip *bz2
|
||||
find . -maxdepth 1 -type d -iname "[a-zA-Z0-9]*" -exec rm -rf \{\} \;
|
||||
15
deps/flac-alloc.h.patch
vendored
Executable file
@@ -0,0 +1,15 @@
|
||||
--- flac-1.2.1/include/share/alloc.h 2007-09-12 01:32:21 -0400
|
||||
+++ flac-1.2.1/include/share/alloc.new.h 2011-05-22 13:52:19 -0400
|
||||
@@ -35,11 +35,7 @@
|
||||
|
||||
#ifndef SIZE_MAX
|
||||
# ifndef SIZE_T_MAX
|
||||
-# ifdef _MSC_VER
|
||||
-# define SIZE_T_MAX UINT_MAX
|
||||
-# else
|
||||
-# error
|
||||
-# endif
|
||||
+# define SIZE_T_MAX UINT_MAX
|
||||
# endif
|
||||
# define SIZE_MAX SIZE_T_MAX
|
||||
#endif
|
||||
10
deps/flac-main.cpp.patch
vendored
Executable file
@@ -0,0 +1,10 @@
|
||||
--- flac-1.2.1/examples/cpp/encode/file/main.cpp 2011-05-22 14:13:46 -0400
|
||||
+++ flac-1.2.1/examples/cpp/encode/file/main.new.cpp 2011-05-22 14:13:21 -0400
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
+#include <string.h>
|
||||
#include "FLAC++/metadata.h"
|
||||
#include "FLAC++/encoder.h"
|
||||
|
||||
124
deps/libpng-config
vendored
Executable file
@@ -0,0 +1,124 @@
|
||||
#! /bin/sh
|
||||
|
||||
# libpng-config
|
||||
# provides configuration info for libpng.
|
||||
|
||||
# Copyright (C) 2002, 2004, 2006, 2007 Glenn Randers-Pehrson
|
||||
# For conditions of distribution and use, see copyright notice in png.h
|
||||
|
||||
# Modeled after libxml-config.
|
||||
|
||||
version="1.2.37"
|
||||
prefix="/usr/include"
|
||||
exec_prefix="${prefix}"
|
||||
libdir="${exec_prefix}/lib"
|
||||
includedir="${prefix}/include/libpng12"
|
||||
libs="-lpng12"
|
||||
all_libs="-lpng12 -lz"
|
||||
I_opts="-I${includedir}"
|
||||
L_opts="-L${libdir}"
|
||||
R_opts=""
|
||||
cppflags=""
|
||||
ccopts=""
|
||||
ldopts=""
|
||||
|
||||
usage()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $0 [OPTION] ...
|
||||
|
||||
Known values for OPTION are:
|
||||
|
||||
--prefix print libpng prefix
|
||||
--libdir print path to directory containing library
|
||||
--libs print library linking information
|
||||
--ccopts print compiler options
|
||||
--cppflags print pre-processor flags
|
||||
--cflags print preprocessor flags, I_opts, and compiler options
|
||||
--I_opts print "-I" include options
|
||||
--L_opts print linker "-L" flags for dynamic linking
|
||||
--R_opts print dynamic linker "-R" or "-rpath" flags
|
||||
--ldopts print linker options
|
||||
--ldflags print linker flags (ldopts, L_opts, R_opts, and libs)
|
||||
--static revise subsequent outputs for static linking
|
||||
--help print this help and exit
|
||||
--version print version information
|
||||
EOF
|
||||
|
||||
exit $1
|
||||
}
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage 1
|
||||
fi
|
||||
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
|
||||
--prefix)
|
||||
echo ${prefix}
|
||||
;;
|
||||
|
||||
--version)
|
||||
echo ${version}
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--help)
|
||||
usage 0
|
||||
;;
|
||||
|
||||
--ccopts)
|
||||
echo ${ccopts}
|
||||
;;
|
||||
|
||||
--cppflags)
|
||||
echo ${cppflags}
|
||||
;;
|
||||
|
||||
--cflags)
|
||||
echo ${I_opts} ${cppflags} ${ccopts}
|
||||
;;
|
||||
|
||||
--libdir)
|
||||
echo ${libdir}
|
||||
;;
|
||||
|
||||
--libs)
|
||||
echo ${libs}
|
||||
;;
|
||||
|
||||
--I_opts)
|
||||
echo ${I_opts}
|
||||
;;
|
||||
|
||||
--L_opts)
|
||||
echo ${L_opts}
|
||||
;;
|
||||
|
||||
--R_opts)
|
||||
echo ${R_opts}
|
||||
;;
|
||||
|
||||
--ldopts)
|
||||
echo ${ldopts}
|
||||
;;
|
||||
|
||||
--ldflags)
|
||||
echo ${ldopts} ${L_opts} ${R_opts} ${libs}
|
||||
;;
|
||||
|
||||
--static)
|
||||
R_opts=""
|
||||
libs=${all_libs}
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
exit 0
|
||||
1716
doxygen.conf
Executable file
15
libgame.h
Executable file
@@ -0,0 +1,15 @@
|
||||
#ifndef __LIBGAME_H__
|
||||
#define __LIBGAME_H__
|
||||
|
||||
#include "Common.h"
|
||||
#include "FontRenderer.h"
|
||||
#include "Renderable.h"
|
||||
#include "SpriteStrip.h"
|
||||
#include "Animation.h"
|
||||
#include "Actor.h"
|
||||
#include "Display.h"
|
||||
#include "Display2D.h"
|
||||
#include "MenuDisplay.h"
|
||||
#include "Game.h"
|
||||
|
||||
#endif // __LIBGAME_H__
|
||||
BIN
util/animate/Debug/animate-dbg
Executable file
BIN
util/animate/Debug/demo-dbg
Executable file
BIN
util/animate/MARINE_WALK_LEFT.png
Executable file
|
After Width: | Height: | Size: 7.6 KiB |
77
util/animate/Makefile
Executable file
@@ -0,0 +1,77 @@
|
||||
# This makefile is a bit hackish. I wrote it early in the AM.
|
||||
# Fohgiveuhness, please!!
|
||||
|
||||
ifndef $(CFG)
|
||||
CFG=Debug
|
||||
endif
|
||||
|
||||
# you can also pass : mingw32 and macosx
|
||||
ifndef $(OS)
|
||||
OS=linux
|
||||
endif
|
||||
|
||||
TARGET=animate
|
||||
BINTARGET=$(TARGET)
|
||||
PROJECTHOME=$(shell pwd)
|
||||
SDL_CFLAGS=$(shell sdl-config --cflags)
|
||||
SDL_LDFLAGS=$(shell sdl-config --libs)
|
||||
LIBDIR=/usr/lib
|
||||
HEADERDIR=/usr/include
|
||||
ADDL_CFLAGS=
|
||||
|
||||
ifeq "$(OS)" "mingw32"
|
||||
ADDL_CFLAGS=-mwindows -DBUILD_MINGW32
|
||||
endif
|
||||
ifeq "$(OS)" "linux"
|
||||
ADDL_CFLAGS=-DBUILD_LINUX
|
||||
endif
|
||||
|
||||
# default for release configs
|
||||
ifeq "$(CFG)" "Release"
|
||||
OUTDIR=Release
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET).exe
|
||||
else
|
||||
BINTARGET=$(TARGET)
|
||||
endif
|
||||
LINKLIB=game
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
ifeq "$(CFG)" "Debug"
|
||||
OUTDIR=Debug
|
||||
ifeq "$(OS)" "mingw32"
|
||||
BINTARGET=$(TARGET)-dbg.exe
|
||||
else
|
||||
BINTARGET=$(TARGET)-dbg
|
||||
endif
|
||||
LINKLIB=game-dbg
|
||||
CXXFLAGS=-I../../../ -I$(HEADERDIR) -I./cpp -pg -g -ggdb -gstabs -Wall -c $(SDL_CFLAGS) $(ADDL_CFLAGS)
|
||||
endif
|
||||
|
||||
LINKLIBS=-L../../$(CFG) -L$(LIBDIR) -l$(LINKLIB) $(SDL_LDFLAGS) -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL_ttf
|
||||
|
||||
BINOBJ=$(OUTDIR)/demo.o
|
||||
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
LD = $(CXX)
|
||||
INSTALL = $(which install)
|
||||
|
||||
$(OUTDIR)/%.o : cpp/%.cpp
|
||||
$(CXX) $(CXXFLAGS) -o $@ $<
|
||||
|
||||
all: bin
|
||||
|
||||
bin: $(BINOBJ)
|
||||
$(LD) -pg -o $(OUTDIR)/$(BINTARGET) \
|
||||
-pg $(BINOBJ) $(LINKLIBS)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f $(OUTDIR)/*.o
|
||||
rm -f $(OUTDIR)/$(BINTARGET)
|
||||
|
||||
.PHONY: rebuild
|
||||
rebuild:
|
||||
make clean
|
||||
make CFG=$(CFG)
|
||||
BIN
util/animate/Release/animate
Executable file
85
util/animate/cpp/demo.cpp
Executable file
@@ -0,0 +1,85 @@
|
||||
#include <libgame/libgame.h>
|
||||
#include <string>
|
||||
#include <SDL_gfxPrimitives.h>
|
||||
#include <cstdlib>
|
||||
#include <sstream>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FontRenderer &font = FontRenderer::NewSingleton();
|
||||
char gimmeitoa[32];
|
||||
Display2D display = Display2D();
|
||||
Game &myGame = Game::NewSingleton();
|
||||
Animation *anim = NULL;
|
||||
Actor animator;
|
||||
Vector velocity;
|
||||
Vector position;
|
||||
SpriteStrip *strip = NULL;
|
||||
|
||||
if ( argc < 9 ) {
|
||||
std::cerr << "animate SCRX SCRY SCRDEPTH IMAGEFILE FRAMEWIDTH FRAMEHEIGHT FPS LOOP [XVEL] [YVEL]\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
myGame.initSDL();
|
||||
myGame.initVideo(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||
//display.initVideo((Vector){0,0,0}, atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), SDL_HWSURFACE);
|
||||
display.shareCanvas(&myGame);
|
||||
display.setActive(1);
|
||||
myGame.windows.push_back(&display);
|
||||
|
||||
strip = myGame.newSpriteStrip("anim");
|
||||
if ( strip->loadFromFile(argv[4], atoi(argv[5]), atoi(argv[6]), (Vector){0,0,0}) ) {
|
||||
std::cerr << "Failed to load sprite from file " << argv[4] << " (framesize " << argv[5] << "x" << argv[6] << "\n";
|
||||
exit(1);
|
||||
}
|
||||
anim = myGame.newAnimation("anim");
|
||||
anim->setStrip(strip, atoi(argv[7]), atoi(argv[8]), (Vector){0,0,0});
|
||||
animator.addAnimation(anim, STATE_DEFAULT);
|
||||
animator.setState(STATE_NONE);
|
||||
if ( argc >= 10) {
|
||||
animator.addState(STATE_MOVEXAXIS);
|
||||
velocity.x = atof(argv[9]);
|
||||
}
|
||||
if ( argc >= 11 ) {
|
||||
animator.addState(STATE_MOVEYAXIS);
|
||||
velocity.y = atof(argv[10]);
|
||||
}
|
||||
animator.setVelocity(velocity);
|
||||
|
||||
animator.setPosition((Vector){
|
||||
(myGame.getCanvas()->w/2)-((animator.nextFrame()->w)/2),
|
||||
(myGame.getCanvas()->h/2)-((animator.nextFrame()->h)/2),
|
||||
0} );
|
||||
|
||||
display.addActor(&animator, LAYER_SPRITE1);
|
||||
font.setColor((SDL_Color){255, 255, 255, 255}, (SDL_Color){0, 0, 0, 255}, 255);
|
||||
myGame.lockFPS(30);
|
||||
std::string msg;
|
||||
|
||||
while ( 1 ) {
|
||||
msg = argv[4];
|
||||
msg += " ";
|
||||
sprintf((char *)&gimmeitoa, "(%dx%d) %s/%d FPS",
|
||||
animator.nextFrame()->w,
|
||||
animator.nextFrame()->h,
|
||||
argv[7],
|
||||
myGame.realfps);
|
||||
msg += (char *)&gimmeitoa;
|
||||
//std::cerr << msg << "\n";
|
||||
myGame.update();
|
||||
font.renderString(msg, myGame.getCanvas(), "", (Vector){-1, 20, 0}, 0);
|
||||
if ( myGame.keyHeldDown(SDLK_ESCAPE) ) {
|
||||
break;
|
||||
}
|
||||
position = animator.getPosition();
|
||||
if ( position.x < 0 || position.x > 640 ) {
|
||||
position.x = (myGame.getCanvas()->w/2)-((animator.nextFrame()->w)/2);
|
||||
}
|
||||
if ( position.y < 0 || position.y > 480 ) {
|
||||
position.y = (myGame.getCanvas()->h/2)-((animator.nextFrame()->h)/2);
|
||||
}
|
||||
animator.setPosition(position);
|
||||
myGame.finishFrame();
|
||||
}
|
||||
}
|
||||
BIN
util/animate/explosion.png
Executable file
|
After Width: | Height: | Size: 75 KiB |