Beispiel #1
0
// load a 32-bit RGBA TGA file into sprite 's', and add colors to the palette
// as needed so that it can be shown exactly as found in the file.
// returns nonzero on failure.
char CEGASprit::LoadTGASprite( const std::string &filename, CSprite &sprite )
{
	byte *image, *base;
	int x,y;
	Uint16 w,h;
	unsigned char r,g,b,a;
	int c;
	Uint8 *pixel, *maskpx;
	
	// Look in local location than in global, if tga was not found!
	if (!LoadTGA(filename, &image, w, h))
		return 1;

	base = image;
	sprite.setSize(w, h);
	sprite.createSurface( g_pVideoDriver->mp_VideoEngine->getBlitSurface()->flags, g_pGfxEngine->Palette.m_Palette );
	
	SDL_Surface *sfc = sprite.getSDLSurface();
	SDL_Surface *msksfc = sprite.getSDLMaskSurface();
	
	if(SDL_MUSTLOCK(sfc))	SDL_LockSurface(sfc);
	if(SDL_MUSTLOCK(msksfc))	SDL_LockSurface(msksfc);
	
	pixel = (Uint8*) sfc->pixels;
	maskpx = (Uint8*) msksfc->pixels;
	
	for(y=h-1;y>=0;y--)
	{
		for(x=0;x<w;x++)
		{
			b = *image++; g = *image++; r = *image++; a = *image++;
			if (a & 128)
			{
				c = g_pGfxEngine->Palette.getcolor(r, g, b);
				if (c==-1) c = g_pGfxEngine->Palette.addcolor(r, g, b);
				if (c==-1) return 1;
				
				pixel[y*w + x] = c;
				maskpx[y*w + x] = 15;
			}
			else
				maskpx[y*w + x] = 0;
		}
	}
	
	if(SDL_MUSTLOCK(msksfc)) SDL_UnlockSurface(msksfc);
	if(SDL_MUSTLOCK(sfc))	 SDL_UnlockSurface(sfc);
	
	sprite.m_bboxX1=0;
	sprite.m_bboxY1=0;
	sprite.m_bboxX2=sprite.getWidth();
	sprite.m_bboxY2=sprite.getHeight();
	
	delete [] base;
	
	return 0;
}
void PlayFisicaState::InitFisica() {



	// inicializa a classe de física e a Box2D
	Fisica = CPhysics::instance();
	b2Vec2 g(0,10);
	Fisica->setGravity(g);
	Fisica->setConvFactor(10);

	CSprite *s;
	s = spriteCao;
	fisicaCao = Fisica->newBoxImage(CAO_ID,    //int id,
	                                s,				// CImage* sprite,
	                                1,				// float density,
	                                1.0,			// float friction,
	                                0.0,			// float restitution
	                                false);		// bool staticObj=false
	
	fisicaCao= Fisica->newBox(WALL_ID,
		               s->getX(), s->getY(), // posicao
		               s->getWidth(), s->getHeight(), // tamanho X e Y
					   s->getRotation(),
		               1,   //densidade
		               0.5,    // float friction,
		               0.1,    // float restitution
		               false);  // bool staticObj=false

	//b2Vec2 pos(20,0);
	//Fisica->setPosition(fisicaCao, pos);
	//fisicaCao->SetFixedRotation(true);
	s = spriteCacador;
	fisicaPiso = Fisica->newBoxImage(WALL_ID,    //int id,
	                    s,				// CImage* sprite,
	                    1,						// float density,
	                    0,					// float friction,
	                    0.5,					// float restitution
	                    true);					// bool staticObj=false


	//Fisica->setAngle(fisicaCao, 45);
	//Fisica->setAngle(fisicaPiso, 45);
	//b2Vec2 pos(spriteCao->getX()/10, 100/10);
	//Fisica->setPosition(fisicaPiso, pos);

	//spriteCao->xOffset(spriteCao->getX()/2);

	Fisica->setDrawOffset(spriteCao->getWidth()/2, spriteCao->getHeight()/2);

}
void PlayFisicaState::InitFisica() {
	// inicializa a classe de física e a Box2D
	Fisica = CPhysics::instance();
	b2Vec2 g(0,10);
	Fisica->setGravity(g);
	Fisica->setConvFactor(10);

	CSprite *s;
#define CAO
#ifdef CAO
	s = spriteCao;
	fisicaCao = Fisica->newBoxImage(CAO_ID,    //int id,
	                                s,                // CImage* sprite,
	                                1,                // float density,
	                                0.2,            // float friction,
	                                0.0,            // float restitution
	                                0.5,			 // float linearDamping
	                                0.5,			 // float angularDamping
	                                false);        // bool staticObj=false
#endif

#define COBRA
#ifdef COBRA
	s = spriteCobra;
	fisicaCobra = Fisica->newBoxImage(COBRA_ID,    //int id,
	                                  s,                // CImage* sprite,
	                                  1,                // float density,
	                                  0.3,            // float friction,
	                                  0.0,            // float restitution
	                                  0.5,			 // float linearDamping
	                                  0.5,			 // float angularDamping
	                                  false);        // bool staticObj=false
#endif
	Fisica->newBox(OBSTACULO1,    //int id,
	               s->getX() + s->getWidth()*1.4, //pos x
	               s->getY() ,            // pos y
	               s->getWidth()/2,                // width
	               s->getHeight(),            // height
	               0,                // rotation
	               1,              // float density,
	               0.2,            // float friction,
	               0.5,            // float restitution
	               0.5,                // float linearDamping
	               0.5,                // float angularDamping
	               false);          // bool staticObj=false

	Fisica->newCircle(BOLA,
	                  s->getX() + s->getWidth(),
	                  s->getY() + s->getHeight()+ 100,
	                  15, 			   // float radius
	                  1,              // float density,
	                  1.0,            // float friction,
	                  0.5,            // float restitution
	                  0.5,            // float linearDamping
	                  0.5,            // float angularDamping
	                  false);         // bool staticObj=false

	CriaMapDeColisao();
	

	b2RevoluteJointDef jointDef;	

	jointDef.Initialize(fisicaCobra, fisicaCao, fisicaCao->GetWorldCenter());
	Fisica->world->CreateJoint(&jointDef);

}