Пример #1
0
int cDialogManager :: Get_Collision( int x, int y )
{
	for( unsigned int i = 0; i < Get_Size(); i++ )
	{
		if( !Objects[i] )
		{
			continue;
		}
		
		if( Objects[i]->visible ) 
		{
			SDL_Rect rect1, rect2;

			rect1 = Objects[i]->Get_Rect();

			rect2.x = x;
			rect2.y = y;
			rect2.w = 1;
			rect2.h = 1;

			if( CollideBoundingBox( &rect1, &rect2 ) ) 
			{
				return i;
			}
		}
	}

	return -1;
}
Пример #2
0
void cFirePlant :: Update( void )
{
	if( !visible )
	{
		return;
	}

	counter += Framerate.speedfactor;
	
	if( (int)counter < (int)( DESIRED_FPS/2 ) )
	{
		SetImage( images[1] );
	}
	else if( (int)counter < DESIRED_FPS )
	{
		SetImage( images[0] );
	}
	else
	{
		counter = 0;
	}

	if( CollideBoundingBox( &rect, &pPlayer->rect ) )
	{
		visible = 0;
		pPlayer->Get_Item( TYPE_FIREPLANT );

		pointsdisplay->AddPoints( 700, (int)posx + image->w/2,(int)posy );
	}

	Draw( screen );
}
Пример #3
0
void cMushroom :: Update( void )
{
	if( !visible )
	{
		return;
	}

	if( CollideBoundingBox( &rect, &pPlayer->rect ) )
	{
		visible = 0;
		pPlayer->Get_Item( type );
		
		if( type == TYPE_MUSHROOM_DEFAULT ) 
		{
			pointsdisplay->AddPoints( 500, (int)posx + image->w/2, (int)posy + 3 );
		}
		else if( type == TYPE_MUSHROOM_LIVE_1 ) 
		{
			pointsdisplay->AddPoints( 1000, (int)posx + image->w/2,(int)posy + 3 );
		}
	}

	onGround = !PosValid( (int)posx, (int)posy + 1 );

	if( !onGround && vely < 50 )
	{
		if( vely > 0 )
		{
			AddVel( 0, 0.5 + vely*0.05 );
		}
		else
		{
			AddVel( 0, 2.5 );
		}
	}
	else
	{
		vely = 0;
	}
	
	if( CollideMove() != DIR_NOTHING )
	{
		SDL_Rect r2 = Get_Collision_rect();
		
		if( ( iCollisionType == 1 || iCollisionType == 2 ) && ( col_dir == DIR_LEFT || col_dir == DIR_RIGHT ) )
		{
			velx *= -1;
			Move( velx, vely );
		}
		else if( posx == 0 && col_dir == DIR_LEFT ) 
		{
			velx *= -1;
			Move( velx, vely );
		}
	}

   	Draw( screen );
}
Пример #4
0
void cMoon :: Update( void )
{
	if( !visible )
	{
		return;
	}

	counter += Framerate.speedfactor;
	
	if( (int)counter > DESIRED_FPS*3 )
	{
		SetImage( images[2] );
	}
	else if( (int)counter > DESIRED_FPS*2.5 )
	{
		SetImage( images[1] );
	}
	else if( (int)counter > 0 )
	{
		SetImage( images[0] );
	}
	
	if( counter > DESIRED_FPS*3.3 ) 
	{
		counter = 0;
	}

	if( CollideBoundingBox( &rect, &pPlayer->rect ) )
	{
		visible = 0;
		pPlayer->Get_Item( TYPE_MOON );

		pointsdisplay->AddPoints( 4000, (int)posx + image->w/2, (int)posy );
	}

	Draw( screen );
}
Пример #5
0
bool cMouseCursor :: Leveleditor_CollsionCheck( double x, double y )
{
	if( mover_mode ) 
	{
		ClearCollisions();
		return 1;
	}

	SDL_Rect rect1;
	SDL_Rect rect2;
	
	rect1.x = (Sint16)x;
	rect1.y = (Sint16)y;
	rect1.w = 1;
	rect1.h = 1;
	
	HoveredObject.x = 0;
	HoveredObject.y = 0;
	HoveredObject.w = 0;
	HoveredObject.h = 0;

	// The Leveleditor Objects
	if( Leveleditor_Mode && !MouseObject )
	{
		// Item Menu
		if( pLeveleditor->wItem.y == screen->h - pLeveleditor->wItem.h ) 
		{
			for( unsigned int i = 0; i < pLeveleditor->wItem_Count; i++ )
			{
				Menu_Item_Object *item = pLeveleditor->Get_Item_Object( i + 1 );

				if( !item || !item->visible ) 
				{
					continue;
				}

				rect2 = item->ColRect;
				rect2.x += (Sint16)cameraposx;
				rect2.y += (Sint16)cameraposy;
				
				if( CollideBoundingBox( &rect1, &rect2 ))
				{
					iCollisionNumber = i;
					iCollisionType = 6; // Leveleditor Item Object

					HoveredObject = item->ColRect;

					pLeveleditor->wItem_timer = ( DESIRED_FPS * 3 );

					return 0;
				}
			}
		}
		
		// Main menu
		if( pLeveleditor->wMain_open == 150 ) 
		{
			for( unsigned int i = 0; i < pLeveleditor->wMenu_Count; i++ )
			{
				Menu_Main_Object *item = pLeveleditor->Get_Main_Object( i + 1 );

				if( !item ) 
				{
					continue;
				}

				rect2 = item->ColRect;
				rect2.x = pLeveleditor->wMain.x + 15;
				rect2.w = pLeveleditor->wMain.w - 22;
				rect2.x += (Sint16)cameraposx;
				rect2.y += (Sint16)cameraposy;
				
				if( CollideBoundingBox( &rect1, &rect2 ))
				{
					iCollisionNumber = i;
					iCollisionType = 7; // Leveleditor Main Menu Object

					rect2.x -= (Sint16)cameraposx;
					rect2.y -= (Sint16)cameraposy;
					HoveredObject = rect2;

					if( item->state == 0 ) 
					{
						item->state = 1;
					}
					
					pLeveleditor->wMain_timer = ( DESIRED_FPS*3 );

					return 0;
				}
				else
				{
					if( item->state == 1 )
					{
						item->state = 0;
					}
				}
			}
		}

	}
	// The Leveleditor Main Menu
	rect2 = pLeveleditor->wMain;
	rect2.x += (Sint16)cameraposx;
	rect2.y += (Sint16)cameraposy;

	if( Leveleditor_Mode && CollideBoundingBox( &rect1, &rect2 ) ) 
	{
		pLeveleditor->wMain_timer = ( DESIRED_FPS*3 );
		iCollisionType = 0;
		iCollisionNumber = 0;
		return 1;
	}
	
	// The Leveleditor Item Menu
	if( pLeveleditor->wItem_Count && Leveleditor_Mode ) 
	{
		if( pLeveleditor->wItem.y == screen->h - pLeveleditor->wItem.h ) 
		{
			rect2 = pLeveleditor->Item_scroller_left->rect;
			rect2.x += (Sint16)cameraposx;
			rect2.y += (Sint16)cameraposy;

			// The left Item Object Scroller
			if( CollideBoundingBox( &rect1, &rect2 ) ) 
			{
				pLeveleditor->wItem_timer = ( DESIRED_FPS*3 );
				iCollisionType = 8;
				iCollisionNumber = 0;
				col_dir = DIR_LEFT;

				HoveredObject = pLeveleditor->Item_scroller_left->rect;

				return 0;	
			}

			rect2 = pLeveleditor->Item_scroller_right->rect;
			rect2.x += (Sint16)cameraposx;
			rect2.y += (Sint16)cameraposy;

			// The right Item Object Scroller
			if( CollideBoundingBox( &rect1, &rect2 ) ) 
			{
				pLeveleditor->wItem_timer = ( DESIRED_FPS*3 );
				iCollisionType = 8;
				iCollisionNumber = 0;
				col_dir = DIR_RIGHT;

				HoveredObject = pLeveleditor->Item_scroller_right->rect;
				
				return 0;	
			}
		}

		rect2 = pLeveleditor->wItem;
		rect2.x += (Sint16)cameraposx;
		rect2.y += (Sint16)cameraposy;

		if( CollideBoundingBox( &rect1, &rect2 ) ) 
		{
			pLeveleditor->wItem_timer = ( DESIRED_FPS*3 );
			iCollisionType = 0;
			iCollisionNumber = 0;
			return 1;
		}
	}


	if( pDialogManager->Get_Collision( (int)x, (int)y ) >= 0 ) // Check the Dialog Boxes
	{
		iCollisionType = 10;
		iCollisionNumber = pDialogManager->Get_Collision( (int)x, (int)y );
		return 0;
	}


	for( int i = ActiveObjects.size() - 1; i >= 0; i-- ) // only Enemystopper and Levelexit
	{
		if( !ActiveObjects[i] )
		{
			continue;
		}
		
		if( !( ActiveObjects[i]->type == TYPE_ENEMYSTOPPER || ActiveObjects[i]->type == TYPE_LEVELEXIT ) ) 
		{
			continue;
		}

		rect2 = ActiveObjects[i]->rect;

		if( CollideBoundingBox( &rect1, &rect2 ))
		{
			iCollisionNumber = i;
			iCollisionType = 2; // Active Obj
			return 0;
		}
	}
	
	for( int i = EnemyObjects.size() - 1; i >= 0; i-- ) // only non jPiranha
	{
		if( !EnemyObjects[i] || EnemyObjects[i]->type != TYPE_JPIRANHA )
		{
			continue;
		}
		rect2 = EnemyObjects[i]->rect;

		if( CollideBoundingBox( &rect1, &rect2 ))
		{
			iCollisionNumber = i;
			iCollisionType = 3; // Enemy Obj
			return 0;
		}
	}
	
	for( int i = MassiveObjects.size() - 1; i >= 0; i-- )
	{
		if( !MassiveObjects[i] || !MassiveObjects[i]->massive )
		{
			continue;
		}

		rect2 = MassiveObjects[i]->rect;

		if( CollideBoundingBox( &rect1, &rect2 ) )
		{
			iCollisionNumber = i;
			iCollisionType = 1; // Massive Obj
			return 0;
		}
	}

	for( int i = ActiveObjects.size() - 1; i >= 0; i-- ) // All non Enemystopper
	{
		if( !ActiveObjects[i] || ActiveObjects[i]->type == TYPE_ENEMYSTOPPER || ActiveObjects[i]->type == TYPE_LEVELEXIT )
		{
			continue;
		}

		rect2 = ActiveObjects[i]->rect;

		if( CollideBoundingBox( &rect1, &rect2 ))
		{
			iCollisionNumber = i;
			iCollisionType = 2; // Active Obj
			return 0;
		}
	}
	
	for( int i = EnemyObjects.size() - 1; i >= 0; i-- ) // only jPiranha
	{
		if( !EnemyObjects[i] || EnemyObjects[i]->type == TYPE_JPIRANHA )
		{
			continue;
		}

		rect2 = EnemyObjects[i]->rect;

		if( CollideBoundingBox( &rect1, &rect2 ))
		{
			iCollisionNumber = i;
			iCollisionType = 3; // Enemy Obj
			return 0;
		}
	}
	
	if( !pPlayer->invincible ) // player
	{
		rect2 = pPlayer->rect;

		if( CollideBoundingBox( &rect1, &rect2 ))
		{
			iCollisionNumber = 0;
			iCollisionType = 4; // Player Obj
			return 0;
		}
	}
	
	for( int i = PassiveObjects.size() - 1; i >= 0; i-- )
	{
		if( !PassiveObjects[i] )
		{
			continue;
		}

		rect2 = PassiveObjects[i]->rect;

		if( CollideBoundingBox( &rect1, &rect2 ) )
		{
			iCollisionNumber = i;
			iCollisionType = 5; // Passive Obj
			return 0;
		}
	}
	
	
	ClearCollisions();
	return 1;
}