示例#1
0
void CLiteObjectMgr::AddObject(GameBaseLite *pObject)
{
	if (!pObject)
	{
		ASSERT(!"NULL lite object insertion encountered");
		return;
	}

	// Add it to the name map
	if (FindObjectByName(pObject->GetName()) != 0)
	{
		Warn("Duplicate lite object name %s encountered", pObject->GetName());
		if (IsObjectInList(m_aActiveObjects, pObject) ||
			IsObjectInList(m_aInactiveObjects, pObject))
		{
			ASSERT(!"Double-insertion encountered in lite object mgr");
			return;
		}
	}
	m_aNameMap[pObject->GetName()] = pObject;

	// Add it to the proper list
	if (pObject->IsActive())
		AddActiveObject(pObject);
	else
		AddInactiveObject(pObject);

	// Queue up an initial update
	m_aInitialUpdateObjects.push_back(pObject);

	// Your serialization IDs are dirty
	SetDirty(eDirty_SerializeIDs);
}
示例#2
0
void cMouseCursor :: Copy( cSprite *nCopyObject, double x, double y )
{		
	cSprite *new_Sprite = Copy_Object( nCopyObject, x, y );

	if( !new_Sprite ) 
	{
		printf( "MouseCursor CopyObject invald source Object\n" );
		return;
	}

	if( new_Sprite->array == ARRAY_MASSIVE ) 
	{
		AddMassiveObject( new_Sprite );
	}
	else if( new_Sprite->array == ARRAY_PASSIVE ) 
	{
		AddPassiveObject( new_Sprite );
	}
	else if( new_Sprite->array == ARRAY_ACTIVE ) 
	{
		AddActiveObject( new_Sprite );
	}
	else if( new_Sprite->array == ARRAY_ENEMY ) 
	{
		AddEnemyObject( new_Sprite );
	}
	else
	{
		printf( "MouseCursor CopyObject unknown Array : %d\n", new_Sprite->array );
		delete new_Sprite;
		new_Sprite = NULL;
	}
}
示例#3
0
void CLiteObjectMgr::ActivateObject(GameBaseLite *pObject)
{
	// Make sure we're going about this the right way
	if (!pObject->IsActive())
	{
		pObject->Activate();
		return;
	}

	// Remove them from the inactive list
	if (!RemoveObjectFromList(m_aInactiveObjects, pObject))
	{
		ASSERT(IsObjectInList(m_aActiveObjects, pObject));
		return;
	}
	--m_nNumInactiveObjects;

	// Put it in the active list
	AddActiveObject(pObject);

	SetDirty();
}
示例#4
0
void cMouseCursor :: Leveleditor_Update( void )
{
	if( !Leveleditor_CollsionCheck( posx, posy ) )
	{
		string type;
		
		type.reserve( 60 );

		if( iCollisionType == 1 )	// Massive
		{
			if( !MousePressed_left || !MouseObject )
			{
				MouseObject = MassiveObjects[iCollisionNumber];
			}

			if( MouseObject->halfmassive )
			{
				type = "Halfmassive";
			}
			else
			{
				type = "Massive";
			}
		}
		else if( iCollisionType == 2 )	// Active
		{
			if( !MousePressed_left || !MouseObject )
			{
				MouseObject = ActiveObjects[iCollisionNumber];
			}

			if( MouseObject->type == TYPE_ENEMYSTOPPER )
			{
				type = "Enemystopper";
			}
			else if( MouseObject->type == TYPE_GOLDPIECE )
			{
				type = "Goldpiece";
			}
			else if( MouseObject->type == TYPE_MOON )
			{
				type = "Moon (3-UP)";
			}
			else if( MouseObject->type == TYPE_CLOUD )
			{
				type = "Moving Cloud";
			}
			else if( MouseObject->type == TYPE_HALFMASSIVE )
			{
				if( !MouseObject->climbable )
				{
					type = "Halfmassive";
				}
				else
				{
					type = "Climbable";
				}
			}
			else if( MouseObject->type == TYPE_GOLDBOX )
			{
				type = "Gold box";
			}
			else if( MouseObject->type == TYPE_BONUSBOX_MUSHROOM_FIRE )
			{
				type = "Bonus box Mushroom - Fire";
			}
			else if( MouseObject->type == TYPE_BONUSBOX_LIVE )
			{
				type = "Bonus box Level-UP";
			}
			else if( MouseObject->type == TYPE_SPINBOX )
			{
				type = "Spin box";
			}
			else if( MouseObject->type == TYPE_LEVELEXIT )
			{
				cLevelExit *active = (cLevelExit*)MouseObject;

				if( active->levelchange == LVLCHANGE_WARP )
				{
					type = "Levelexit (Warp)";
				}
				else
				{
					type = "Levelexit (Beam)";
				}
			}
			else
			{
				type = "Active";
			}
		}
		else if( iCollisionType == 3 )	// Enemy
		{
			if( !MousePressed_left || !MouseObject )
			{
				MouseObject = EnemyObjects[iCollisionNumber];
			}

			if( MouseObject->type == TYPE_TURTLE )
			{
				type = "Red Rurtle";
			}
			else if( MouseObject->type == TYPE_GOOMBA )
			{
				cGoomba *enemy = (cGoomba*)MouseObject;

				if( enemy->color == 1 ) // Red
				{
					type = "Blue Goomba";
				}
				else
				{
					type = "Brown Goomba";
				}
			}
			else if( MouseObject->type == TYPE_JPIRANHA )
			{
				type = "Jumping Piranha";
			}
			else if( MouseObject->type == TYPE_BANZAI_BILL )
			{
				type = "Banzai Bill";
			}
			else if( MouseObject->type == TYPE_REX )
			{
				type = "Rex";
			}
			else 
			{
				type = "Enemy";
			}
		}
		else if( iCollisionType == 4 )	// Player
		{
			if( !MousePressed_left || !MouseObject )
			{
				MouseObject = (cSprite*)pPlayer;
			}
			
			type = "Maryo";
		}
		else if( iCollisionType == 5 )	// Passive
		{
			if( !MousePressed_left || !MouseObject )
			{
				MouseObject = PassiveObjects[iCollisionNumber];
			}
			
			type = "Passive";
		}
		else if( iCollisionType == 6 ) // Leveleditor Item Object
		{
			Menu_Item_Object *item = pLeveleditor->Get_Item_Object( iCollisionNumber + 1 );

			if( item && !MousePressed_left ) 
			{
				type = item->name;
			}
			else
			{
				type = "";
			}

			if( !MouseObject ) 
			{
				if( MousePressed_left ) 
				{
					cSprite *new_Sprite = Copy_Object( item->Sprite_type, posx, posy );

					if( !new_Sprite ) 
					{
						printf( "Sprite copying Error\n" );
						return;
					}

					if( new_Sprite->array == ARRAY_MASSIVE ) 
					{
						AddMassiveObject( new_Sprite );
					}
					else if( new_Sprite->array == ARRAY_PASSIVE ) 
					{
						AddPassiveObject( new_Sprite );
					}
					else if( new_Sprite->array == ARRAY_ACTIVE ) 
					{
						AddActiveObject( new_Sprite );
					}
					else if( new_Sprite->array == ARRAY_ENEMY ) 
					{
						AddEnemyObject( new_Sprite );
					}

					new_Sprite->posx = posx;
					new_Sprite->posy = posy;

					mouse_H = new_Sprite->rect.h/2;
					mouse_W = new_Sprite->rect.w/2;

					MouseObject = new_Sprite;
				}
			}
			else if( !MousePressed_left ) 
			{
				MouseObject = NULL;
			}
		}
		else if( iCollisionType == 7 ) // Leveleditor Main Menu Object
		{
			Menu_Main_Object *item = pLeveleditor->Get_Main_Object( iCollisionNumber + 1 );

			if( item && !MousePressed_left ) 
			{
				type = item->name;
			}
			else
			{
				type = "";
			}

			if( !MouseObject ) 
			{
				if( MousePressed_left ) 
				{
					if( item->Item_Menu_Id != MENU_FUNCTION ) 
					{
						pLeveleditor->Load_Item_Menu( item->Item_Menu_Id );
						pLeveleditor->Set_Main_Active( iCollisionNumber );
					}
					else
					{
						item->pfunction();
						MousePressed_left = 0;
					}
				}
			}
			else
			{
				MouseObject = NULL;
			}
		}
		else if( iCollisionType == 8 ) // Leveleditor Item Object Scroller
		{
			type = "Object Scroller";

			if( !MouseObject && MousePressed_left ) 
			{
				if( col_dir == DIR_LEFT )
				{
					pLeveleditor->Item_scroller_left->active = 1;
				}
				else if( col_dir == DIR_RIGHT )
				{
					pLeveleditor->Item_scroller_right->active = 1;
				}
			}
			else if( !MousePressed_left ) 
			{
				MouseObject = NULL;
			}

		}
		else if( iCollisionType == 10 ) // A Dialog Box
		{
			if( iCollisionNumber >= 0 && ( pDialogManager->Get_Size() >= (unsigned int)iCollisionNumber ) )
			{
				type = pDialogManager->Objects[iCollisionNumber]->identifier;

				if( MousePressed_left ) 
				{
					pDialogManager->Objects[iCollisionNumber]->Get_Focus();
					MousePressed_left = 0;
				}
			}
		}

		if( iCollisionType > 0 && iCollisionType < 6 && MouseObject )
		{
			if( !MousePressed_left )
			{
				if( iCollisionType == 4 || iCollisionType == 3 ) // If Player or Enemy !
				{
					mouse_W = (int)( posx - MouseObject->startposx );
					mouse_H = (int)( posy - MouseObject->startposy );
				}
				else
				{
					mouse_W = (int)( posx - MouseObject->posx );
					mouse_H = (int)( posy - MouseObject->posy );
				}
			}
			
			SDL_Rect rect_pos;
			SDL_Surface *Position_info = NULL;
			char info[50];

			rect_pos.x = mouseX + 20;
			rect_pos.y = mouseY + 35;
			
			sprintf( info ,"X : %d  Y : %d", (int)MouseObject->posx, (int)MouseObject->posy );
			Position_info = TTF_RenderText_Blended( font_16, info, colorBlack );
			
			SDL_BlitSurface( Position_info, NULL, screen, &rect_pos );

			SDL_FreeSurface( Position_info );
			Position_info = TTF_RenderText_Blended( font_16, info, colorWhite );

			rect_pos.x -= 2;
			rect_pos.y -= 2;

			SDL_BlitSurface( Position_info, NULL, screen, &rect_pos );
			SDL_FreeSurface( Position_info );
		}
		
		if( debugdisplay->counter <= 0 )
		{
			sprintf( debugdisplay->text, "%s", type.c_str() );
			debugdisplay->counter = 1;
		}
	}
	else
	{
		if( !MousePressed_left )
		{
			MouseObject = NULL;

			if( !iCollisionType )
			{
				mouse_W = 0;
				mouse_H = 0;
			}
		}
	}
}