Ejemplo n.º 1
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;
}
Ejemplo n.º 2
0
	/*====================================================================================================================
	\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	====================================================================================================================*/
	CollisionNode::~CollisionNode()
	{
		ClearCollisions();
	}