Beispiel #1
0
void UnitMng::generateInputs()
{
	BWAPI::Unit *enemyUnit=0;
	BWAPI::Unit *tempUnit=getUnit();
	
	//Units position

	//mapWidth() is in TilePosition Units which is 32 pixels
	inputs[0]=((tempUnit->getPosition().x())/(BWAPI::Broodwar->mapWidth()*32.0));
	inputs[1]=(tempUnit->getPosition().y())/(BWAPI::Broodwar->mapHeight()*32.0);
	//Group leader position
	inputs[2]=(UnitGroup->getPosition().x())/(BWAPI::Broodwar->mapWidth()*32.0);
	inputs[3]=(UnitGroup->getPosition().y())/(BWAPI::Broodwar->mapHeight()*32.0);
	//How many hit points?
	inputs[4]=getHitPoints();
	// Is there an enemy within the unit's seek range?
	enemyUnit=enemyExists(tempUnit);
	inputs[5]=enemyUnit?1.0:0;
	// Find closest enemy
	enemyUnit=closestEnemy();
	inputs[6]=enemyUnit?(UnitGroup->getPosition().x())/(BWAPI::Broodwar->mapWidth()*32.0):1.0;
	inputs[7]=enemyUnit?(UnitGroup->getPosition().y())/(BWAPI::Broodwar->mapHeight()*32.0):1.0;
	inputs[8]=underAttack();
	//check surroundings
	//east
	inputs[9]=getBlocked(0,1);
	//north-east
	inputs[10]=getBlocked(1,1);
	//north
	inputs[11]=getBlocked(1,0);
	//north-west
	inputs[12]=getBlocked(1,-1);
	//west
	inputs[13]=getBlocked(0,-1);
	//south-west
	inputs[14]=getBlocked(-1,-1);
	//south
	inputs[15]=getBlocked(-1,0);
	//south-east
	inputs[16]=getBlocked(-1,1);
	//Get Group Command;
	inputs[17]=GroupCommand();
	//get last Command or not maybe useless
	inputs[18]=getLastCommand();	
	//bias
	inputs[19]=1.0;
	//return inputs;
}
bool TileButton::handleEvent( SDL_Event e, int &coordI, int &coordJ )
{
    bool temp = false;
	//If mouse event happened
	if( e.type == SDL_MOUSEMOTION || e.type == SDL_MOUSEBUTTONDOWN || e.type == SDL_MOUSEBUTTONUP )
	{
		//Get mouse position
		int x, y;
		SDL_GetMouseState( &x, &y );

		//Check if mouse is in button
		bool inside = true;

		//Mouse is left of the button
		if( x < getPositionX() )
		{
			inside = false;
		}
		//Mouse is right of the button
		else if( x > getPositionX() + getWidth() )
		{
			inside = false;
		}
		//Mouse above the button
		else if( y < getPositionY() )
		{
			inside = false;
		}
		//Mouse below the button
		else if( y > getPositionY() + getHeight() )
		{
			inside = false;
		}

		//Mouse is outside button
		if( !inside )
		{
		    Texture::setTexture(getTextureBase());
		}
		//Mouse is inside button
		else
		{
		    //Set mouse over sprite
			switch( e.type )
			{
				case SDL_MOUSEMOTION:
				    if(getBlocked())
                    {
                        Texture::setTexture(getTextureMotion());
                    }
                    break;

				case SDL_MOUSEBUTTONDOWN:
				    if(getBlocked())
                    {
                        Texture::setTexture(getTextureDown());
                    }
                    break;

				case SDL_MOUSEBUTTONUP:
				    if(getBlocked())
                    {
                        Texture::setTexture(getTextureUp());
                        coordI = coordinates.i;
                        coordJ = coordinates.j;
                        temp = true;
                    }
                    break;
			}
		}
	}
	return temp;
}
Beispiel #3
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;
}