Beispiel #1
0
void TaktikMeny::isNotClicked(){

	//om mCurrentAnimal är över en spot
	if(mCurrentDragAnimal != 0){

		mCurrentDragAnimal->getSprite()->setScale(1,1);
		mSpeedVector = mCurrentDragAnimal->getSpeedVector();

		for(SpeedVector::size_type i = 0; i < mSpeedVector.size(); i++){
			//om speedvector inte har ngn nolla i sig
			if(mSpeedVector[i] != 0){
				//går igenom de olika spotsen
				std::vector<Spot*> intersectingSpots;
				for(SpotVector::size_type j = 0; j < mSpotVector.size(); j++){
					int level = mSpotVector[j]->getLevel();
					//om positionen på nummret i speedvectorn är detsamma som spottens position

					//crashar utan mCurrentDragAnimal != 0
					if(level == i && mCurrentDragAnimal != 0){
						//sparar alla spots djuret intersectar med /Robin
						
						if(mSpotVector[j]->getActSpot() == true && mSpotVector[j]->getPrototypeAnimal() == 0 && mCurrentDragAnimal->getSprite()->getGlobalBounds().intersects(mSpotVector[j]->getSprite()->getGlobalBounds())){
							
							intersectingSpots.push_back(mSpotVector[j]);

						}
					}	
				}
				// om den intersecar med nån spot /Robin
				if(!intersectingSpots.empty()){
					//kolla vilken som är närmast /Robin
					Spot* closestSpot = intersectingSpots[0];
					float closestDistance = 512;

					for(SpotVector::size_type k = 0; k  < intersectingSpots.size(); k++){
						sf::Vector2f v1 = mCurrentDragAnimal->getSprite()->getPosition();
						sf::Vector2f v2 = intersectingSpots[k]->getSprite()->getPosition();
						float distance = getDistance(v1,v2);

						if(distance < closestDistance){
							closestDistance = distance;
							closestSpot = intersectingSpots[k];
									
						}
					}
					//sätt djuret på den platsen /Robin
					closestSpot->setPrototypeAnimal(mCurrentDragAnimal);
					mCurrentDragAnimal->setPos(closestSpot->getSprite()->getPosition());
					mCurrentDragAnimal->setStandardSpeed(mSpeedVector[i]);

					mCurrentDragAnimal = 0;

					SoundManager::getInst().play(mPlaceAnimal);
				}
			}
		}
		if(mCurrentDragAnimal != 0){
			mCurrentDragAnimal->setPos(mCurrentDragAnimal->getStartPos());
		}
		
		mCurrentDragAnimal = 0;

		for(SpotVector::iterator i = mSpotVector.begin(); i != mSpotVector.end(); i++){
			if((*i)->getPrototypeAnimal() == 0){
				(*i)->setAfraidAnimal(false);
				(*i)->setActSpot(false);
				(*i)->setColorSpot(sf::Color(255,255,255,255));
			}
		}

		for(SpotVector::size_type i = 0; i < mSpotVector.size(); i++){
			//kollar alla spots och ser om växtdjur har tomma platser bakom sig så ska inte de de står på vara rodjursplatsde
			if(mSpotVector[i]->getPrototypeAnimal() != 0 && i >= 1){
				if(mSpotVector[i]->getPrototypeAnimal()->getAnimalType() == "plant" && mSpotVector[i-1]->getPrototypeAnimal() == 0 && mSpotVector[i]->getLevel() == mSpotVector[i-1]->getLevel()){ // måste ta bort på samma rad

					//måste egentligen kolla igenom och sätta rätt färg här.
					mSpotVector[i]->resetColor();
					mSpotVector[i]->setAfraidAnimal(false);
				}
			}
		}

	}
}