Evaluator class
Пакет: com.hypixel.hytale.server.npc.decisionmaker.core
Файл: com/hypixel/hytale/server/npc/decisionmaker/core/Evaluator.java
Поля (26)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
break |
|
|
break |
|
protected long |
lastUsedNanos |
|
protected final OptionType |
option |
|
protected double |
utility |
|
int |
var10 |
|
|
var10 |
|
HytaleLogger.Api |
var11 |
|
Evaluator.OptionHolder |
var13 |
|
double |
var14 |
|
double |
var15 |
|
Evaluator.OptionHolder |
var18 |
|
Evaluator.OptionHolder |
var20 |
|
float |
var21 |
|
double |
var22 |
|
double |
var23 |
|
|
var23 |
|
NPCEntity |
var5 |
|
|
var5 |
|
UUIDComponent |
var6 |
|
|
var6 |
|
Evaluator.OptionHolder |
var7 |
|
|
var7 |
|
|
var7 |
|
double |
var8 |
Методы (23)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public |
OptionHolderpublic OptionHolder(OptionType nullx) |
abstract |
public abstract double |
calculateUtilitypublic abstract double calculateUtility(int var1, ArchetypeChunk<EntityStore> var2, CommandBuffer<EntityStore> var3, EvaluationContext var4) |
|
|
for for(Evaluator.OptionHolder var2 : this.options) |
|
|
for for(Evaluator.OptionHolder var3 : this.options) |
|
|
for for(Evaluator.OptionHolder var3 : this.options) |
|
|
for for(int var17 = 0; var17 < var10; var17++) |
|
|
for for(int var19 = 0; var19 < var10; var19++) |
abstract |
|
for for(int var12 = 0; var12 < this.options.size() |
|
public OptionType |
getOptionpublic OptionType getOption() |
|
public double |
getTotalUtilitypublic double getTotalUtility(double var1) |
|
public double |
getWeightpublic double getWeight() |
|
public double |
getWeightCoefficientpublic double getWeightCoefficient() |
|
|
if if(var5 == null) |
|
|
if if(var6 == null) |
|
|
if if(var7 == null) |
|
|
if if(var21 == 1.0F) |
|
|
if if(var18.utility >= var22) |
|
|
if if(var23 <= 0.0) |
public |
void |
initialisevoid initialise() |
|
public void |
setLastUsedNanospublic void setLastUsedNanos(long var1) |
public |
void |
setupNPCvoid setupNPC(ExecutionSupport var1) |
public |
void |
setupNPCvoid setupNPC(Holder<EntityStore> var1) |
|
public double |
tryPickpublic double tryPick(double var1, double var3) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.decisionmaker.core;
class="kw">import com.hypixel.hytale.common.map.IWeightedElement;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.ThreadLocalRandom;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class="kw">abstract class Evaluator<OptionType class="kw">extends Option> {
class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">public class="kw">static long NOT_USED = 0L;
class="kw">protected List<Evaluator<OptionType>.OptionHolder> options;
class="kw">public Evaluator() {
}
class="kw">public void initialise() {
this.options.sort(Comparator.comparingDouble(Evaluator.OptionHolder::getWeightCoefficient).reversed());
for (Evaluator.OptionHolder var2 : this.options) {
var2.option.sortConditions();
}
}
class="kw">public void setupNPC(ExecutionSupport var1) {
for (Evaluator.OptionHolder var3 : this.options) {
var3.option.setupNPC(var1);
}
}
class="kw">public void setupNPC(Holder<EntityStore> var1) {
for (Evaluator.OptionHolder var3 : this.options) {
var3.option.setupNPC(var1);
}
}
@Nullable
class="kw">public Evaluator<OptionType>.OptionHolder evaluate(
int var1, @Nonnull ArchetypeChunk<EntityStore> var2, CommandBuffer<EntityStore> var3, @Nonnull EvaluationContext var4
) {
NPCEntity var5 = null;
UUIDComponent var6 = null;
Evaluator.OptionHolder var7 = null;
double var8 = var4.getMinimumWeightCoefficient();
int var10 = this.options.size();
HytaleLogger.Api var11 = LOGGER.at(Level.FINE);
for (int var12 = 0; var12 < this.options.size(); var12++) {
Evaluator.OptionHolder var13 = this.options.get(var12);
if (var13.getWeightCoefficient() < var8) {
var10 = var12;
break;
}
double var14 = var13.calculateUtility(var1, var2, var3, var4);
if (var11.isEnabled()) {
if (var5 == null) {
var5 = var2.getComponent(var1, NPCEntity.getComponentType());
assert var5 != null;
}
if (var6 == null) {
var6 = var2.getComponent(var1, UUIDComponent.getComponentType());
assert var6 != null;
}
var11.log("%s with uuid %s: Scored option %s at %s", var5.getRoleName(), var6.getUuid(), var13.option, var14);
}
if (!(var14 <= 0.0) && (var7 == null || var14 > var7.utility)) {
var7 = var13;
}
}
if (var7 == null) {
class="kw">return null;
}
float var21 = var4.getPredictability();
if (var21 == 1.0F) {
class="kw">return var7;
}
double var22 = var7.utility * var21;
double var15 = 0.0;
for (int var17 = 0; var17 < var10; var17++) {
Evaluator.OptionHolder var18 = this.options.get(var17);
if (var18.utility >= var22) {
var15 += var18.getTotalUtility(var22);
}
}
double var23 = ThreadLocalRandom.current().nextDouble(var15);
for (int var19 = 0; var19 < var10; var19++) {
Evaluator.OptionHolder var20 = this.options.get(var19);
if (!(var20.utility < var22)) {
var23 = var20.tryPick(var23, var22);
if (var23 <= 0.0) {
var7 = var20;
break;
}
}
}
class="kw">return var7;
}
class="kw">public class="kw">abstract class OptionHolder class="kw">implements IWeightedElement {
class="kw">protected class="kw">final OptionType option;
class="kw">protected double utility;
class="kw">protected long lastUsedNanos = Evaluator.NOT_USED;
class="kw">public OptionHolder(OptionType nullx) {
this.option = nullx;
}
class="kw">public void setLastUsedNanos(long var1) {
this.lastUsedNanos = var1;
}
@Override
class="kw">public double getWeight() {
class="kw">return this.utility;
}
class="kw">public double getWeightCoefficient() {
class="kw">return this.option.getWeightCoefficient();
}
class="kw">public OptionType getOption() {
class="kw">return this.option;
}
class="kw">public double getTotalUtility(double var1) {
class="kw">return this.utility;
}
class="kw">public double tryPick(double var1, double var3) {
class="kw">return var1 - this.utility;
}
class="kw">public class="kw">abstract double calculateUtility(int var1, ArchetypeChunk<EntityStore> var2, CommandBuffer<EntityStore> var3, EvaluationContext var4);
}
}