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; }
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; }