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; }
/*==================================================================================================================== \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ====================================================================================================================*/ CollisionNode::~CollisionNode() { ClearCollisions(); }