/** * 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; } } }
/** * 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; }
/// <summary> /// Gets the hash code /// </summary> /// <returns>Hash code</returns> public override int GetHashCode() { // credit: http://stackoverflow.com/a/263416/677735 unchecked // Overflow is fine, just wrap { int hash = 41; // Suitable nullity checks hash = hash * 59 + Id.GetHashCode(); if (Number != null) { hash = hash * 59 + Number.GetHashCode(); } if (Status != null) { hash = hash * 59 + Status.GetHashCode(); } if (Equipment != null) { hash = hash * 59 + Equipment.GetHashCode(); } if (Project != null) { hash = hash * 59 + Project.GetHashCode(); } if (RentalAgreementRates != null) { hash = hash * 59 + RentalAgreementRates.GetHashCode(); } if (RentalAgreementConditions != null) { hash = hash * 59 + RentalAgreementConditions.GetHashCode(); } if (TimeRecords != null) { hash = hash * 59 + TimeRecords.GetHashCode(); } if (Note != null) { hash = hash * 59 + Note.GetHashCode(); } if (EstimateStartWork != null) { hash = hash * 59 + EstimateStartWork.GetHashCode(); } if (DatedOn != null) { hash = hash * 59 + DatedOn.GetHashCode(); } if (EstimateHours != null) { hash = hash * 59 + EstimateHours.GetHashCode(); } if (EquipmentRate != null) { hash = hash * 59 + EquipmentRate.GetHashCode(); } if (RatePeriod != null) { hash = hash * 59 + RatePeriod.GetHashCode(); } if (RateComment != null) { hash = hash * 59 + RateComment.GetHashCode(); } return(hash); } }
/// <summary> /// Returns true if RentalAgreement instances are equal /// </summary> /// <param name="other">Instance of RentalAgreement to be compared</param> /// <returns>Boolean</returns> public bool Equals(RentalAgreement other) { if (other is null) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return (( Id == other.Id || Id.Equals(other.Id) ) && ( Number == other.Number || Number != null && Number.Equals(other.Number) ) && ( Status == other.Status || Status != null && Status.Equals(other.Status) ) && ( Equipment == other.Equipment || Equipment != null && Equipment.Equals(other.Equipment) ) && ( Project == other.Project || Project != null && Project.Equals(other.Project) ) && ( RentalAgreementRates == other.RentalAgreementRates || RentalAgreementRates != null && RentalAgreementRates.SequenceEqual(other.RentalAgreementRates) ) && ( RentalAgreementConditions == other.RentalAgreementConditions || RentalAgreementConditions != null && RentalAgreementConditions.SequenceEqual(other.RentalAgreementConditions) ) && ( TimeRecords == other.TimeRecords || TimeRecords != null && TimeRecords.SequenceEqual(other.TimeRecords) ) && ( Note == other.Note || Note != null && Note.Equals(other.Note) ) && ( EstimateStartWork == other.EstimateStartWork || EstimateStartWork != null && EstimateStartWork.Equals(other.EstimateStartWork) ) && ( DatedOn == other.DatedOn || DatedOn != null && DatedOn.Equals(other.DatedOn) ) && ( EstimateHours == other.EstimateHours || EstimateHours != null && EstimateHours.Equals(other.EstimateHours) ) && ( EquipmentRate == other.EquipmentRate || EquipmentRate != null && EquipmentRate.Equals(other.EquipmentRate) ) && ( RatePeriod == other.RatePeriod || RatePeriod != null && RatePeriod.Equals(other.RatePeriod) ) && ( RateComment == other.RateComment || RateComment != null && RateComment.Equals(other.RateComment) )); }
/** * 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; } } }