Example #1
0
void TentacleLogicCmp::checkPlayerInRange()
{
	int nbr = 0;
	TentacleGearCmp* tmp = _start;
	PositionComponent* player = _boss->getPlayer()->GET_CMP(PositionComponent);
	PositionComponent* me = this->getEntity()->GET_CMP(PositionComponent);
	int xP = player->getX();
	int yP = player->getY();
	int xMe = me->getX();
	int yMe = me->getY();
	while (tmp != NULL)
	{
		tmp = tmp->getNext();
		nbr++;
	}
	if (pow((pow((xP - xMe), 2) + pow((yP - yMe), 2)), 0.5) <= 64 * nbr)
		setInRange(true);
	else
	{
		_inRange = false;
		_hasBeenReset = false;
	}


	getBoss()->getPlayer();
}
Example #2
0
void TentacleLogicCmp::update(float dt_)
{
	TentacleGearCmp* tmp;
	_stateMachine->update(dt_);

	TentacleGearCmp* tmpDest;
	tmp = NULL;
	//this->
	if (_start != NULL)
	_start->update(dt_, getBoss()->getPlayer(), _action);//uupdate recursivly the tentacle
	checkPlayerInRange();//check if player are in range and se true/false
	if (_start != NULL)
	if (_start->getLife() <= 0)//check if first tentacle should be dead
	{
		//std::cout << "starting destruction tentacle" << std::endl;
		//if (_start->getNext() == NULL)
		//	std::cout << "alone" << std::endl;
		tmp = _start->getNext();
		_start->getEntity()->setIsDead(true);//...
		if (tmp != NULL)
		{
			_start = tmp;
			_start->setPrev(NULL);
		}
		else
			_start = NULL;
	}
	tmp = _start;
	while (tmp != NULL && tmp->getNext() != NULL)
	{
		if (tmp->getNext()->getLife() <= 0)//check for every tentacle if their should be destroy
		{
			
			if (tmp->getNext()->getNext() != NULL)
			{
				tmp->getNext()->getNext()->setPrev(tmp);
				tmpDest = tmp->getNext()->getNext();
				tmp->getNext()->getEntity()->setIsDead(true);
				tmp->setNext(tmpDest);
			}
			else
			{
				tmp->getNext()->getEntity()->setIsDead(true);
				tmp->setNext(NULL);
			}
		}
		tmp = tmp->getNext();
	}
}
Example #3
0
void CColossNormal::run()
{
	getInput();
	scaleButtons();
	drawButtons();

	if(!getBoss())
	{
		drawScore();
	}
	
	tweenBlock();

	// Check for block collision
	hasBlockFinished();

	glGraphics->Draw(this);
	CColoss::run(); // Call to super function

	// Boss interface functionality
	manageBossInterface();
}
Example #4
0
bool CColossNormal::hasBlockStarted(int _layer)
{
	bool blocked = false;
	float fDistance;

	int red;
	int green;
	int blue;
	int alpha;

	for(unsigned int i = 0; i < getProjectileVector().size(); i++)
	{
		switch(_layer)
		{
			case TOP_COLOSS:
				if((m_vLayerCollision[0].Collides(getProjectileVector()[i]->getCollisionObject()) || getProjectileVector()[i]->getCollisionObject()->Collides(&m_vLayerCollision[0])) && !getProjectileVector()[i]->getDead() && !getProjectileVector()[i]->getBounced() && getProjectileVector()[i]->getBlocked() == -1) // Check if small object collides with big one and the other way round
				{
					// Play sound
					if(CLevelData::getCurrentLevelString() == "darkage")
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer0")), 0);
					}
					else
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer0_future")), 0);
					}

					// Calculate animation speed so block will be at correct position
					startBlockAnimation(m_vBlockCollision[0].getPosition().x, getProjectileVector()[i]->getPosition().x, getProjectileVector()[i]->GetStartVelocity().x, 0);
					m_bTopBlock_active = true;

					// Distance to center
					fDistance = pwHelper::math::sqrt(pow((getProjectileVector()[i]->getPosition().x - m_vLayerCollision[0].getPosition().x), 2) + pow((getProjectileVector()[i]->getPosition().y - m_vLayerCollision[0].getPosition().y), 2));
					
					// Button color
					red = (int)((fDistance/50 * 255) > 255 ? 255 : (fDistance/50 * 255));
					green = (int)(200 + (55 - (fDistance/150 * 55)));
					blue = 0;
					alpha = 200;

					m_vButton[0].setColor(sf::Color(red, green, blue, alpha));
					m_vButton[0].SetCurrentAnimation(C_ANIM_BUTTON_NORMAL);
					m_vButton[0].RestartAnimation();

					if(!getBoss())
					{
						calculateScore(fDistance, 0);
					}
					else
					{
						if(m_vLayerCollision[0].getPosition().x > getProjectileVector()[i]->getPosition().x)
						{
							getProjectileVector()[i]->setBlockDistance(-fDistance);
						}
						else
						{
							getProjectileVector()[i]->setBlockDistance(fDistance);
						}
					}

					// Projectile blocked
					getProjectileVector()[i]->setBlocked(0);
					blocked = true;

					if(!getBoss())
					{
						modBlocked(1);
						modSteps(1);
					}
				}
				break;
			case MIDDLE_HIGHER_COLOSS:
				if((m_vLayerCollision[1].Collides(getProjectileVector()[i]->getCollisionObject()) || getProjectileVector()[i]->getCollisionObject()->Collides(&m_vLayerCollision[1])) && !getProjectileVector()[i]->getDead() && !getProjectileVector()[i]->getBounced() && getProjectileVector()[i]->getBlocked() == -1)
				{
					if(CLevelData::getCurrentLevelString() == "darkage")
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer1")), 1);
					}
					else
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer1_future")), 1);
					}

					startBlockAnimation(m_vBlockCollision[1].getPosition().x, getProjectileVector()[i]->getPosition().x, getProjectileVector()[i]->GetStartVelocity().x, 1);
					m_bMiddleHigherBlock_active = true;

					fDistance = pwHelper::math::sqrt(pow((getProjectileVector()[i]->getPosition().x - m_vLayerCollision[1].getPosition().x), 2) + pow((getProjectileVector()[i]->getPosition().y - m_vLayerCollision[1].getPosition().y), 2));
					
					red = (int)((fDistance/50 * 255) > 255 ? 255 : (fDistance/50 * 255));
					green = (int)(200 + (55 - (fDistance/150 * 55)));
					blue = 0;
					alpha = 200;

					m_vButton[1].setColor(sf::Color(red, green, blue, alpha));
					m_vButton[1].SetCurrentAnimation(C_ANIM_BUTTON_NORMAL);
					m_vButton[1].RestartAnimation();

					if(!getBoss())
					{
						calculateScore(fDistance, 1);
					}
					else
					{
						if(m_vLayerCollision[1].getPosition().x > getProjectileVector()[i]->getPosition().x)
						{
							getProjectileVector()[i]->setBlockDistance(-fDistance);
						}
						else
						{
							getProjectileVector()[i]->setBlockDistance(fDistance);
						}
					}

					getProjectileVector()[i]->setBlocked(1);
					blocked = true;

					if(!getBoss())
					{
						modBlocked(1);
						modSteps(1);
					}
				}
				break;
			case MIDDLE_LOWER_COLOSS:
				if((m_vLayerCollision[2].Collides(getProjectileVector()[i]->getCollisionObject()) || getProjectileVector()[i]->getCollisionObject()->Collides(&m_vLayerCollision[2])) && !getProjectileVector()[i]->getDead() && !getProjectileVector()[i]->getBounced() && getProjectileVector()[i]->getBlocked() == -1)
				{
					if(CLevelData::getCurrentLevelString() == "darkage")
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer2")), 2);
					}
					else
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer2_future")), 2);
					}

					startBlockAnimation(m_vBlockCollision[2].getPosition().x, getProjectileVector()[i]->getPosition().x, getProjectileVector()[i]->GetStartVelocity().x, 2);
					m_bMiddleLowerBlock_active = true;

					fDistance = pwHelper::math::sqrt(pow((getProjectileVector()[i]->getPosition().x - m_vLayerCollision[2].getPosition().x), 2) + pow((getProjectileVector()[i]->getPosition().y - m_vLayerCollision[2].getPosition().y), 2));

					red = (int)((fDistance/50 * 255) > 255 ? 255 : (fDistance/50 * 255));
					green = (int)(200 + (55 - (fDistance/150 * 55)));
					blue = 0;
					alpha = 200;

					m_vButton[2].setColor(sf::Color(red, green, blue, alpha));
					m_vButton[2].SetCurrentAnimation(C_ANIM_BUTTON_NORMAL);
					m_vButton[2].RestartAnimation();

					if(!getBoss())
					{
						calculateScore(fDistance, 2);
					}
					else
					{
						if(m_vLayerCollision[2].getPosition().x > getProjectileVector()[i]->getPosition().x)
						{
							getProjectileVector()[i]->setBlockDistance(-fDistance);
						}
						else
						{
							getProjectileVector()[i]->setBlockDistance(fDistance);
						}
					}

					getProjectileVector()[i]->setBlocked(2);
					blocked = true;

					if(!getBoss())
					{
						modBlocked(1);
						modSteps(1);
					}
				}
				break;
			case BOTTOM_COLOSS:
				if((m_vLayerCollision[3].Collides(getProjectileVector()[i]->getCollisionObject()) || getProjectileVector()[i]->getCollisionObject()->Collides(&m_vLayerCollision[3])) && !getProjectileVector()[i]->getDead() && !getProjectileVector()[i]->getBounced() && getProjectileVector()[i]->getBlocked() == -1)
				{
					if(CLevelData::getCurrentLevelString() == "darkage")
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer3")), 3);
					}
					else
					{
						glAudio->PlaySound(glDataBox->GetSoundBuffer(data->GetString("layer3_future")), 3);
					}

					startBlockAnimation(m_vBlockCollision[3].getPosition().x, getProjectileVector()[i]->getPosition().x, getProjectileVector()[i]->GetStartVelocity().x, 3);
					m_bBottomBlock_active = true;

                    fDistance = pwHelper::math::sqrt(pow((getProjectileVector()[i]->getPosition().x - m_vLayerCollision[3].getPosition().x), 2) + pow((getProjectileVector()[i]->getPosition().y - m_vLayerCollision[3].getPosition().y), 2));

					red = (int)((fDistance/50 * 255) > 255 ? 255 : (fDistance/50 * 255));
					green = (int)(200 + (55 - (fDistance/150 * 55)));
					blue = 0;
					alpha = 200;

					m_vButton[3].setColor(sf::Color(red, green, blue, alpha));
					m_vButton[3].SetCurrentAnimation(C_ANIM_BUTTON_NORMAL);
					m_vButton[3].RestartAnimation();

					if(!getBoss())
					{
						calculateScore(fDistance, 3);
					}
					else
					{
						if(m_vLayerCollision[3].getPosition().x > getProjectileVector()[i]->getPosition().x)
						{
							getProjectileVector()[i]->setBlockDistance(-fDistance);
						}
						else
						{
							getProjectileVector()[i]->setBlockDistance(fDistance);
						}
					}

					getProjectileVector()[i]->setBlocked(3);
					blocked = true;

					if(!getBoss())
					{
						modBlocked(1);
						modSteps(1);
					}
				}
				break;
		}

		// Blocked 15 projectiles in a row? Earn a modifier!
		if(getBlocked() >= m_iMultiplierDuration)
		{
			modModifier(1);
			setBlocked(0);
		}
	}

	return blocked;
}