/** * 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); }
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); }
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; }
/** * 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; }