/**
     * Kalkuluje ocenę przedmiotu ekwipunku przy braniu pod uwagę priorytet przedmiotu w ekwipunku i konsekwencję w wyborze tego samego celu.
     * originalTargetRate- to jest polecane w takim stopniu
     * equipmentPiece- to jest ten który wydaje polecenie
     * */
    private EquipmentRate calculateEquipmentRate(TargetRate originalTargetRate, EquipmentPieceAI equipmentPiece)
    {
        if (originalTargetRate == null || originalTargetRate.getTarget() == null || equipmentPiece == null)
        {
            return(null);
        }
        EquipmentRate equipmentRatePostScaling = new EquipmentRate(equipmentPiece, originalTargetRate.getTargetRate(), originalTargetRate.getTarget());

        equipmentRatePostScaling.setRate(equipmentRatePostScaling.getEquipmentRate() * equipmentPiece.priority);
        if (equipmentPiece == lastUsedEquipmentPiece)
        {
            equipmentRatePostScaling.setRate(equipmentRatePostScaling.getEquipmentRate() + consequenceBonus);
        }
        return(equipmentRatePostScaling);
    }
Ejemplo n.º 2
0
        private async void ConvertMoney()
        {
            double sourceRateW = 0;
            double targetRateW = 0;

            try
            {
                sourceRateW = double.Parse(SourceRate.Substring(3));
                targetRateW = double.Parse(TargetRate.Substring(3));
            }
            catch (Exception)
            {
                sourceRateW = 0;
                targetRateW = 0;
            }


            if (Amount <= 0)
            {
                await App.Current.MainPage.DisplayAlert("Error", "Debes ingresar un valor a convertir", "Aceptar");

                return;
            }

            if (sourceRateW == 0)
            {
                await App.Current.MainPage.DisplayAlert("Error", "Debes seleccionar la moneda origen", "Aceptar");

                return;
            }

            if (targetRateW == 0)
            {
                await App.Current.MainPage.DisplayAlert("Error", "Debes seleccionar la moneda destino", "Aceptar");

                return;
            }

            decimal amountConverted = Amount / (decimal)sourceRateW * (decimal)targetRateW;

            Message = string.Format("{0:N2} = {1:N2}", Amount, amountConverted);
        }
Ejemplo n.º 3
0
    public override List <TargetRate> rateTargets(List <GameObject> detectedGameObjects)
    {
        List <TargetRate> targetRateList = new List <TargetRate> ();

        privateTarget = null;
        if (weapon != null)
        {
            if (detectedGameObjects != null && detectedGameObjects.Count > 0)
            {
                //Wstępna filtracja obiektów
                List <GameObject> tempDetectedObjects = new List <GameObject>();
                for (int i = 0; i < detectedGameObjects.Count; i++)
                {
                    if (CheckTargetValidity(detectedGameObjects[i]))
                    {
                        tempDetectedObjects.Add(detectedGameObjects[i]);
                    }
                }

                //Rating wybranych obiektów
                if (tempDetectedObjects.Count > 0)
                {
                    float rate = 0f;
                    float rateNormalization = 1f;
                    float currentHealth     = 0f;
                    for (int i = 0; i < tempDetectedObjects.Count; i++)
                    {
                        //sprawdzenie poziomu życia
                        currentHealth = tempDetectedObjects[i].GetComponent <Health>().getCurrentHealth() / tempDetectedObjects[i].GetComponent <Health>().MAX_HEALTH;
                        if (currentHealth < 0.5)
                        {
                            rate = 5;
                        }
                        else
                        {
                            rate = 0;
                        }
                        rateNormalization = 5;

                        //sprawdzenie czy poprzednio to był nasz cel
                        EquipmentAI equipmentAI = GetComponent <EquipmentAI>();
                        if (equipmentAI != null && equipmentAI.lastTarget != null && equipmentAI.lastTarget == tempDetectedObjects[i])
                        {
                            rate += 10;
                            rateNormalization += 10;
                        }

                        //sprawdzenie odległości
                        if (Vector3.Distance(transform.position, tempDetectedObjects[i].transform.position) < personalSpaceRadius)
                        {
                            rate += 10;
                            rateNormalization += 10;
                        }

                        //sprawdzenie czy możemy do niego strzelać
                        if (RayTargetCheck(tempDetectedObjects[i]))
                        {
                            rate += 30;
                            rateNormalization += 30;
                        }

                        //normalizacja i zapisanie wyniku
                        rate = rate / rateNormalization;
                        targetRateList.Add(new TargetRate(tempDetectedObjects[i], rate));
                    }
                }

                //Wybranie własnego celu
                TargetRate maxTargetRate = new TargetRate(null, 0);
                for (int i = 0; i < targetRateList.Count; i++)
                {
                    if (targetRateList[i].getTargetRate() > maxTargetRate.getTargetRate())
                    {
                        maxTargetRate = targetRateList[i];
                    }
                }
                privateTarget = maxTargetRate.getTarget();
            }
        }
        return(targetRateList);
    }
Ejemplo n.º 4
0
	public override List<TargetRate> rateTargets(List<GameObject> detectedGameObjects)
	{
		List<TargetRate> targetRateList = new List<TargetRate> ();
		privateTarget = null;
		if(weapon != null)
		{
			if(detectedGameObjects != null && detectedGameObjects.Count > 0)
			{
				//Wstępna filtracja obiektów
				List<GameObject> tempDetectedObjects = new List<GameObject>();
				for(int i = 0; i < detectedGameObjects.Count; i++)
				{
					if(CheckTargetValidity(detectedGameObjects[i]))
					{
						tempDetectedObjects.Add(detectedGameObjects[i]);
					}
				}

				//Rating wybranych obiektów
				if(tempDetectedObjects.Count > 0)
				{
					float rate = 0f;
					float rateNormalization = 1f;
					float currentHealth = 0f;
					for(int i = 0; i < tempDetectedObjects.Count; i++)
					{
						//sprawdzenie poziomu życia
						currentHealth = tempDetectedObjects[i].GetComponent<Health>().getCurrentHealth() / tempDetectedObjects[i].GetComponent<Health>().MAX_HEALTH;
						if(currentHealth < 0.5)
						{
							rate = 5;
						}
						else
						{
							rate = 0;
						}
						rateNormalization = 5;

						//sprawdzenie czy poprzednio to był nasz cel
						EquipmentAI equipmentAI = GetComponent<EquipmentAI>();
						if(equipmentAI != null && equipmentAI.lastTarget != null && equipmentAI.lastTarget == tempDetectedObjects[i])
						{
							rate += 10;
							rateNormalization += 10;
						}

						//sprawdzenie odległości
						if(Vector3.Distance(transform.position, tempDetectedObjects[i].transform.position) < personalSpaceRadius)
						{
							rate += 10;
							rateNormalization += 10;
						}

						//sprawdzenie czy możemy do niego strzelać
						if(RayTargetCheck(tempDetectedObjects[i]))
						{
							rate += 30;
							rateNormalization += 30;
						}

						//normalizacja i zapisanie wyniku
						rate = rate/rateNormalization;
						targetRateList.Add(new TargetRate(tempDetectedObjects[i], rate));
					}
				}

				//Wybranie własnego celu
				TargetRate maxTargetRate = new TargetRate(null, 0);
				for(int i=0; i < targetRateList.Count; i++)
				{
					if(targetRateList[i].getTargetRate() > maxTargetRate.getTargetRate())
					{
						maxTargetRate = targetRateList[i];
					}
				}
				privateTarget = maxTargetRate.getTarget();
			}
		}
		return targetRateList;
	}
Ejemplo n.º 5
0
	/**
	 * Wyznaczenie nowego używanego ekwipunku i zalecanego celu.
	 * */
	public void determineNewFavourites()
	{
		lastTarget = currentTarget;
		lastUsedEquipmentPiece = currentlyUsedEquipmentPiece;
		if(sense != null && equipmentPieces != null && equipmentPieces.Length > 0 && sense.getObjectsInRange()!= null)
		{
			if(sense.getObjectsInRange().Count > 0)
			{
				EquipmentRate maxEquipmentRate = new EquipmentRate(null, 0, null);	//obecny maksymalny rating przedmiotu
				for(int i=0; i < equipmentPieces.Length; i++)
				{
					equipmentPieces[i].setPermissionToOperate(false);
					List<TargetRate> ratingList = equipmentPieces[i].rateTargets(sense.getObjectsInRange());	//żądanie by przedmiot ocenił cele
					TargetRate maxTargetRate = new TargetRate(null, 0);	//obecny maksymalny rating konkretnego celu
					
					//Wyznaczanie celu najbardziej zalecanego przez ten przedmiot
					if(ratingList != null && ratingList.Count > 0)
					{
						for(int j=0; j < ratingList.Count; j++)
						{
							if(maxTargetRate.getTargetRate() < ratingList[j].getTargetRate())
							{
								maxTargetRate = ratingList[j];	//przypisanie większej wartości jako maksimum
							}
						}
					}
					//equipmentPieces[i] najbardziej poleca maxTargetRate, wyliczanie oceny przedmotu ekwipunku
					EquipmentRate calculatedEquipmentRate = calculateEquipmentRate(maxTargetRate, equipmentPieces[i]);
					
					//wybranie przedmiotu faworyta w ekwipunku
					if(calculatedEquipmentRate != null && maxEquipmentRate.getEquipmentRate() < calculatedEquipmentRate.getEquipmentRate())
					{
						maxEquipmentRate = calculatedEquipmentRate;	//przypisanie większego faworyta-przedmiotu w ekwipunku
					}
				}
				
				//zakończenie wybierania, maxEquipmentRate- najbardziej polecany przedmiot
				currentTarget = maxEquipmentRate.getTarget();
				currentlyUsedEquipmentPiece = maxEquipmentRate.getEquipmentPiece();
				if(currentlyUsedEquipmentPiece != null)
				{
					currentlyUsedEquipmentPiece.setPermissionToOperate(true);
				}
				if(maxEquipmentRate.getEquipmentPiece() != null)
				{
					optimalDistanceToTarget = maxEquipmentRate.getEquipmentPiece().getOptimalRange();
					maximalDistanceToTarget = maxEquipmentRate.getEquipmentPiece().getOptimalRange();
				}
				else
				{
					optimalDistanceToTarget = 0f;
					maximalDistanceToTarget = 0f;
				}
			}
			else
			{
				currentTarget = null;
				currentlyUsedEquipmentPiece = null;
				optimalDistanceToTarget = 0;
				maximalDistanceToTarget = 0;
			}
		}
	}
Ejemplo n.º 6
0
	/**
	 * Kalkuluje ocenę przedmiotu ekwipunku przy braniu pod uwagę priorytet przedmiotu w ekwipunku i konsekwencję w wyborze tego samego celu.
	 * originalTargetRate- to jest polecane w takim stopniu
	 * equipmentPiece- to jest ten który wydaje polecenie
	 * */
	private EquipmentRate calculateEquipmentRate(TargetRate originalTargetRate, EquipmentPieceAI equipmentPiece)
	{
		if (originalTargetRate == null || originalTargetRate.getTarget() == null || equipmentPiece == null) 
		{
			return null;
		}
		EquipmentRate equipmentRatePostScaling = new EquipmentRate (equipmentPiece, originalTargetRate.getTargetRate (), originalTargetRate.getTarget ());
		equipmentRatePostScaling.setRate(equipmentRatePostScaling.getEquipmentRate() * equipmentPiece.priority);
		if(equipmentPiece == lastUsedEquipmentPiece)
		{
			equipmentRatePostScaling.setRate(equipmentRatePostScaling.getEquipmentRate() + consequenceBonus);
		}
		return equipmentRatePostScaling;
	}
    /**
     * Wyznaczenie nowego używanego ekwipunku i zalecanego celu.
     * */
    public void determineNewFavourites()
    {
        lastTarget             = currentTarget;
        lastUsedEquipmentPiece = currentlyUsedEquipmentPiece;
        if (sense != null && equipmentPieces != null && equipmentPieces.Length > 0 && sense.getObjectsInRange() != null)
        {
            if (sense.getObjectsInRange().Count > 0)
            {
                EquipmentRate maxEquipmentRate = new EquipmentRate(null, 0, null);                      //obecny maksymalny rating przedmiotu
                for (int i = 0; i < equipmentPieces.Length; i++)
                {
                    equipmentPieces[i].setPermissionToOperate(false);
                    List <TargetRate> ratingList    = equipmentPieces[i].rateTargets(sense.getObjectsInRange()); //żądanie by przedmiot ocenił cele
                    TargetRate        maxTargetRate = new TargetRate(null, 0);                                   //obecny maksymalny rating konkretnego celu

                    //Wyznaczanie celu najbardziej zalecanego przez ten przedmiot
                    if (ratingList != null && ratingList.Count > 0)
                    {
                        for (int j = 0; j < ratingList.Count; j++)
                        {
                            if (maxTargetRate.getTargetRate() < ratingList[j].getTargetRate())
                            {
                                maxTargetRate = ratingList[j];                                  //przypisanie większej wartości jako maksimum
                            }
                        }
                    }
                    //equipmentPieces[i] najbardziej poleca maxTargetRate, wyliczanie oceny przedmotu ekwipunku
                    EquipmentRate calculatedEquipmentRate = calculateEquipmentRate(maxTargetRate, equipmentPieces[i]);

                    //wybranie przedmiotu faworyta w ekwipunku
                    if (calculatedEquipmentRate != null && maxEquipmentRate.getEquipmentRate() < calculatedEquipmentRate.getEquipmentRate())
                    {
                        maxEquipmentRate = calculatedEquipmentRate;                             //przypisanie większego faworyta-przedmiotu w ekwipunku
                    }
                }

                //zakończenie wybierania, maxEquipmentRate- najbardziej polecany przedmiot
                currentTarget = maxEquipmentRate.getTarget();
                currentlyUsedEquipmentPiece = maxEquipmentRate.getEquipmentPiece();
                if (currentlyUsedEquipmentPiece != null)
                {
                    currentlyUsedEquipmentPiece.setPermissionToOperate(true);
                }
                if (maxEquipmentRate.getEquipmentPiece() != null)
                {
                    optimalDistanceToTarget = maxEquipmentRate.getEquipmentPiece().getOptimalRange();
                    maximalDistanceToTarget = maxEquipmentRate.getEquipmentPiece().getOptimalRange();
                }
                else
                {
                    optimalDistanceToTarget = 0f;
                    maximalDistanceToTarget = 0f;
                }
            }
            else
            {
                currentTarget = null;
                currentlyUsedEquipmentPiece = null;
                optimalDistanceToTarget     = 0;
                maximalDistanceToTarget     = 0;
            }
        }
    }