IGameObject* DoSpawnGameObject( const GameObjectSpawnParams& params )
	{
		IGameObject* pGameObject = 0;
		EGameObject type = params.type;

		if (type < EGO_COUNT)
		{
			std::string name = m_GlobalParameters.go[type].base_name;
			char buff[16];
            _snprintf_s(buff, sizeof(buff), _TRUNCATE, "%d",++(m_NextGameObjectNumber[type]));
			name += buff;

			IObject* pObj = IObjectUtils::CreateObjectAndEntity( "GameObject", name.c_str() );
			IObjectUtils::GetObject( &pGameObject, pObj->GetObjectId() );

			AUVec3f pos = (params.spawnPosition.IsInfinite()) ? GetSpawnPosition(type) : params.spawnPosition;
			pGameObject->Init(type, pos);
			m_GameObjects[type].insert(pGameObject);
		}

		// Notify any listeners that object was created
		for (size_t i=0; i<m_Listeners.size(); ++i)
		{
			m_Listeners[i]->OnGameObjectCreated(pGameObject);
		}

		return pGameObject;
	}
Beispiel #2
0
// Updating
void EnemySpawner::Update(float dt)
{
	m_canSpawn = (m_numSpawnedEnemies < m_maxNumEnemiesToHaveActive);

	// Update timers
	UpdateTimers(dt);

	if(m_spawning && m_canSpawn)
	{
		if(m_spawnCountdownTimer <= 0.0f)
		{
			vec3 spawnPos = GetSpawnPosition();

			vec3 toPlayer = spawnPos - m_pPlayer->GetCenter();
			if(length(toPlayer) > m_minDistanceFromPlayer)
			{
				eEnemyType enemyType = GetEnemyTypeToSpawn();

				Enemy* pEnemy = m_pEnemyManager->CreateEnemy(spawnPos, enemyType, 0.08f);
				pEnemy->SetSpawningParams(spawnPos, spawnPos, 2.0f);
				pEnemy->SetTargetForwardToLookAtPoint(spawnPos + m_spawnFacingDirection);
				pEnemy->SetEnemySpawner(this);

				m_numSpawnedEnemies += 1;

				m_spawnCountdownTimer = m_spawnTime;
			}
		}
	}
}
Beispiel #3
0
// Updating
void ItemSpawner::Update(float dt)
{
	m_canSpawn = (m_numSpawnedItems < m_maxNumItemsToHaveActive);

	// Update timers
	UpdateTimers(dt);

	if(m_spawning && m_canSpawn)
	{
		if(m_spawnCountdownTimer <= 0.0f)
		{
			vec3 spawnPos;
			bool spawnGood = GetSpawnPosition(&spawnPos);

			if (spawnGood)
			{
				vec3 toPlayer = spawnPos - m_pPlayer->GetCenter();
				if (length(toPlayer) > m_minDistanceFromPlayer)
				{
					eItem itemType = GetItemTypeToSpawn();
					string itemFilename = GetItemFilenameForType(itemType);

					Item* pItem = m_pItemManager->CreateItem(spawnPos, vec3(0.0f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), itemFilename.c_str(), itemType, "SpawnedItem", true, false, m_spawnScale);
					pItem->SetItemSpawner(this);
					
					if (itemType == eItem_CopperVein || itemType == eItem_IronVein || itemType == eItem_SilverVein || itemType == eItem_GoldVein)
					{
						pItem->SetMaxtInteractCount(4);
					}
					pItem->SetRotation(vec3(0.0f, GetRandomNumber(0, 360, 2), 0.0f));

					m_numSpawnedItems += 1;

					m_spawnCountdownTimer = m_spawnTime;
				}
			}
			else
			{
				// Can't spawn an item at a good position, wait a while before we try again
				m_spawnCountdownTimer = 0.5f;
			}
		}
	}
}