Esempio n. 1
0
// check for collision between 'this' sprite and sprite
void Sprite::CheckCollision( Sprite &sprite ) {
	int c;
	
	c = CalculateCollision( GetBitmask(), sprite.GetBitmask(), (int)(sprite.GetX() - x), (int)(sprite.GetY() - y) );
	
	if( c ) {
		if(( &sprite != owner ) && (sprite.owner != this)) { // we can't collide with our owner
			// a collision has occured
			// modify the velocities
			float avx, avy, bvx, bvy;
			// the kinetic energies of the collision
			float ke_him = .5 * sprite.GetMass() * (sprite.velocity.GetMagnitude() * sprite.velocity.GetMagnitude());
			float ke_us = .5 * mass * (velocity.GetMagnitude() * velocity.GetMagnitude());
			
			avx = sprite.velocity.GetX();
			avy = sprite.velocity.GetY();
		
			bvx = velocity.GetX();
			bvy = velocity.GetY();

			// calculate new velocities
			avx = (velocity.GetX() * (( 2. * mass ) / ( sprite.GetMass() + mass ) )) - (sprite.velocity.GetX() * (( mass - sprite.GetMass() )/( sprite.GetMass() + mass )));
			avy = (velocity.GetY() * (( 2. * mass ) / ( sprite.GetMass() + mass ) )) - (sprite.velocity.GetY() * (( mass - sprite.GetMass() )/( sprite.GetMass() + mass )));
		
			bvx = (sprite.velocity.GetX() * (( 2. * sprite.GetMass() ) / ( sprite.GetMass() + mass ) )) - (velocity.GetX() * (( sprite.GetMass() - mass )/( sprite.GetMass() + mass )));
			bvy = (sprite.velocity.GetY() * (( 2. * sprite.GetMass() ) / ( sprite.GetMass() + mass ) )) - (velocity.GetY() * (( sprite.GetMass() - mass )/( sprite.GetMass() + mass )));

			velocity.Set( bvx, bvy );
			sprite.velocity.Set( avx, avy );
		
			// until debugged
			ke_him = 1.;
			ke_us = 1.;
		
			// call the sprite-child's specific collision code
			Collision( ke_him );
			// and the other's collision code
			sprite.Collision( ke_us );
		}
	}
}
Esempio n. 2
0
bitmask *Sprite::GetBitmask( void ) {
	Camera *camera = Camera::Instance();

	return( GetBitmask( ang + (camera->GetAngle() - 1.57) ) );
}
Esempio n. 3
0
void Screen4::Start()
{
    m_sky = new CloudActor("Resources/Images/clouds2.jpg");
    m_ground = new GroundActor("Resources/Images/Levels/Screen2/Screen2.png", GetBitmask("Resources/Images/Levels/Screen2/Screen2Bitmask.png"), 0.0f, MathUtil::GetWorldDimensions());
    m_ground->SetLayered(false);
    m_arth = new CharActor(GetBitmask("Resources/Images/animations/chars/arth/arthBitmask.png"),Vector2(-(MathUtil::GetWorldDimensions().X/2)+2,0));
    
    int i;

#pragma region snakes

    SnakeActor *snake[4];
    Path pos;
    pos.begin = Vector2(-3,3);
    pos.end = Vector2(-5,-3);
    snake[0] = new SnakeActor(GetBitmask("Resources/Images/animations/chars/snake/snakeBitmask.png"), pos,1.2f,3.0f);
    //pos.end = Vector2(0,4);
    //pos.begin = Vector2(0,-4);
    //snake[1]= new SnakeActor(GetBitmask("Resources/Images/animations/chars/snake/snakeBitmask.png"), pos,1.5f,1.0f);
    //pos.end = Vector2(0,4);
    //pos.begin = Vector2(0,-4);
    //snake[2]= new SnakeActor(GetBitmask("Resources/Images/animations/chars/snake/snakeBitmask.png"), pos,1.5f,1.0f);
    //pos.end = Vector2(0,4);
    //pos.begin = Vector2(0,-4);
    //snake[3]= new SnakeActor(GetBitmask("Resources/Images/animations/chars/snake/snakeBitmask.png"), pos,1.5f,1.0f);
    
#pragma endregion snakes
    
#pragma region level

#pragma region buttons

    ButtonActor *button[3];
    
    std::vector<ButtonActor *> buttons;
    button[0] = new ButtonActor("Resources/Images/Button/", GetBitmask("Resources/Images/Button/mask.png"), Vector2(-3.0f,0.0f), Vector2(1.0f), 0.5f);
    button[1] = new ButtonActor("Resources/Images/Button/", GetBitmask("Resources/Images/Button/mask.png"), Vector2(3.0f,4.0f), Vector2(2.0f));
    button[2] = new ButtonActor("Resources/Images/Button/", GetBitmask("Resources/Images/Button/mask.png"), Vector2(5.0f,-4.0f), Vector2(1.0f));
    for(i=0;i<3;++i) buttons.push_back(button[i]);

#pragma endregion buttons
    
    GroundActor* wall[18];
    DoorActor *door[2];

#pragma region left border
    wall[0] = new GroundActor("Resources/Images/Wall/wallNNEE.png", GetBitmask("Resources/Images/Wall/wallNNEE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, (MathUtil::GetWorldDimensions().Y/2)-1.0f), 2.0f);
    wall[1] = new GroundActor("Resources/Images/Wall/wallE.png", GetBitmask("Resources/Images/Wall/wallE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, (MathUtil::GetWorldDimensions().Y/2)-3.0f), 2.0f);
    wall[2] = new GroundActor("Resources/Images/Wall/wallE.png", GetBitmask("Resources/Images/Wall/wallE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, (MathUtil::GetWorldDimensions().Y/2)-5.0f), 2.0f);
    wall[3] = new GroundActor("Resources/Images/Wall/wallE.png", GetBitmask("Resources/Images/Wall/wallE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, (MathUtil::GetWorldDimensions().Y/2)-7.0f), 2.0f);
    wall[4] = new GroundActor("Resources/Images/Wall/wallSSEE.png", GetBitmask("Resources/Images/Wall/wallSSEE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, (MathUtil::GetWorldDimensions().Y/2)-9.0f), 2.0f);

    door[0] = new DoorActor("Resources/Images/Door/",GetBitmask("Resources/Images/Door/maskOpen.png"),GetBitmask("Resources/Images/Door/maskClosed.png"),
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+0.5f, (MathUtil::GetWorldDimensions().Y/2)-10.5f), Vector2(1.0f, 4.0f), true);

    wall[5] = new GroundActor("Resources/Images/Wall/wallNNEE.png", GetBitmask("Resources/Images/Wall/wallNNEE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, -2.0f), 2.0f);
    wall[6] = new GroundActor("Resources/Images/Wall/wallE.png", GetBitmask("Resources/Images/Wall/wallE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, -4.0f), 2.0f);
    wall[7] = new GroundActor("Resources/Images/Wall/wallE.png", GetBitmask("Resources/Images/Wall/wallE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, -6.0f), 2.0f);
    wall[8] = new GroundActor("Resources/Images/Wall/wallSSEE.png", GetBitmask("Resources/Images/Wall/wallSSEE_Bitmask.png"), 
        Vector2(-(MathUtil::GetWorldDimensions().X/2)+1.0f, -8.0f), 2.0f);
#pragma endregion left border

#pragma region right border
    wall[9] = new GroundActor("Resources/Images/Wall/wallNNWW.png", GetBitmask("Resources/Images/Wall/wallNNWW_Bitmask.png"), 
        (MathUtil::GetWorldDimensions()/2)-1.0f, 2.0f);
    wall[10] = new GroundActor("Resources/Images/Wall/wallW.png", GetBitmask("Resources/Images/Wall/wallW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, (MathUtil::GetWorldDimensions().Y/2)-3.0f), 2.0f);
    wall[11] = new GroundActor("Resources/Images/Wall/wallW.png", GetBitmask("Resources/Images/Wall/wallW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, (MathUtil::GetWorldDimensions().Y/2)-5.0f), 2.0f);
    wall[12] = new GroundActor("Resources/Images/Wall/wallW.png", GetBitmask("Resources/Images/Wall/wallW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, (MathUtil::GetWorldDimensions().Y/2)-7.0f), 2.0f);
    wall[13] = new GroundActor("Resources/Images/Wall/wallSSWW.png", GetBitmask("Resources/Images/Wall/wallSSWW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, (MathUtil::GetWorldDimensions().Y/2)-9.0f), 2.0f);

    door[1] = new DoorActor("Resources/Images/Door/", GetBitmask("Resources/Images/Door/maskOpen.png"), GetBitmask("Resources/Images/Door/maskClosed.png"),
        Vector2((MathUtil::GetWorldDimensions().X/2)-0.5f, (MathUtil::GetWorldDimensions().Y/2)-10.5f), Vector2(1.0f, 4.0f) , buttons);

    wall[14] = new GroundActor("Resources/Images/Wall/wallNNWW.png", GetBitmask("Resources/Images/Wall/wallNNWW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, -2.0f), 2.0f);
    wall[15] = new GroundActor("Resources/Images/Wall/wallW.png", GetBitmask("Resources/Images/Wall/wallW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, -4.0f), 2.0f);
    wall[16] = new GroundActor("Resources/Images/Wall/wallW.png", GetBitmask("Resources/Images/Wall/wallW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, -6.0f), 2.0f);
    wall[17] = new GroundActor("Resources/Images/Wall/wallSSWW.png", GetBitmask("Resources/Images/Wall/wallSSWW_Bitmask.png"), 
        Vector2((MathUtil::GetWorldDimensions().X/2)-1.0f, -8.0f), 2.0f);
#pragma endregion right border
    
#pragma endregion level

    for(i=0;i<1;++i) theWorld.Add(snake[i], i+1);
    for(i=0;i<3;++i) theWorld.Add(button[i], 1);
    for(i=0;i<2;++i) theWorld.Add(door[i], 1);
    for(i=1; i<18; ++i) theWorld.Add(wall[i], 1);

    //PixelArth housekeeping below this point. 
    #pragma region PixelArth Housekeeping
    for(i=0;i<1;++i) _objects.push_back(snake[i]);
    for(i=0;i<3;++i) _objects.push_back(button[i]);
    for(i=0;i<2;++i) _objects.push_back(door[i]);
    for(i=0;i<18;++i) _objects.push_back(wall[i]);
    PixelArthScreen::Start();
    #pragma endregion
}