CompositeActionList class
Пакет: com.hypixel.hytale.server.npc.statetransition
Файл: com/hypixel/hytale/server/npc/statetransition/StateTransitionController.java
implements: StateTransitionController.IActionListHolder
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
|
private final List<StateTransitionController.PrioritisedActionList> |
actionLists |
|
private int |
currentIndex |
|
|
return |
|
StateTransitionController.PrioritisedActionList |
var7 |
Методы (21)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
private void |
addActionListprivate void addActionList(int var1, ActionList var2) |
|
public boolean |
canExecutepublic boolean canExecute(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6) |
|
public void |
clearOncepublic void clearOnce() |
|
public boolean |
executepublic boolean execute(@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6) |
|
|
for for(StateTransitionController.PrioritisedActionList var3 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var6 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var3 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var3 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var3 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var3 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var5 : this.actionLists) |
|
|
for for(StateTransitionController.PrioritisedActionList var2 : this.actionLists) |
abstract |
|
for for(int var3 = 0; var3 < this.actionLists.size() |
|
public boolean |
hasCompletedRunpublic boolean hasCompletedRun() |
|
public void |
loadedpublic void loaded(ExecutionSupport var1) |
|
public void |
motionControllerChangedpublic void motionControllerChanged(@Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, MotionController var3, @Nullable ComponentAccessor<EntityStore> var4) |
|
public void |
registerWithSupportpublic void registerWithSupport(ExecutionSupport var1) |
|
public void |
removedpublic void removed(ExecutionSupport var1) |
|
public void |
spawnedpublic void spawned(ExecutionSupport var1) |
|
public void |
teleportedpublic void teleported(ExecutionSupport var1, World var2, World var3) |
|
public void |
unloadedpublic void unloaded(ExecutionSupport var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.statetransition;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderFactory;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderManager;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderSupport;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.StateMappingHelper;
class="kw">import com.hypixel.hytale.server.npc.entities.NPCEntity;
class="kw">import com.hypixel.hytale.server.npc.instructions.ActionList;
class="kw">import com.hypixel.hytale.server.npc.instructions.ExecutionSupport;
class="kw">import com.hypixel.hytale.server.npc.instructions.RoleStateChange;
class="kw">import com.hypixel.hytale.server.npc.movement.controllers.MotionController;
class="kw">import com.hypixel.hytale.server.npc.sensorinfo.InfoProvider;
class="kw">import com.hypixel.hytale.server.npc.statetransition.builders.BuilderStateTransition;
class="kw">import com.hypixel.hytale.server.npc.statetransition.builders.BuilderStateTransitionController;
class="kw">import com.hypixel.hytale.server.npc.statetransition.builders.BuilderStateTransitionEdges;
class="kw">import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectIterator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class StateTransitionController {
class="kw">private class="kw">final Int2ObjectOpenHashMap<StateTransitionController.IActionListHolder> stateTransitionActions = new Int2ObjectOpenHashMap();
@Nullable
class="kw">private StateTransitionController.IActionListHolder runningActions;
class="kw">public StateTransitionController(@Nonnull BuilderStateTransitionController var1, @Nonnull BuilderSupport var2) {
StateMappingHelper var3 = var2.getStateHelper();
for (BuilderStateTransition.StateTransition var6 : var1.getStateTransitionEntries(var2)) {
ActionList var7 = var6.getActions();
for (BuilderStateTransitionEdges.StateTransitionEdges var9 : var6.getStateTransitionEdges()) {
int var10 = var9.getPriority();
int[] var11 = var9.getFromStateIndices() != null ? var9.getFromStateIndices() : var3.getAllMainStates();
int[] var12 = var9.getToStateIndices() != null ? var9.getToStateIndices() : var3.getAllMainStates();
for (int var16 : var11) {
for (int var20 : var12) {
if (var20 != var16) {
int var21 = indexStateTransitionEdge(var16, var20);
StateTransitionController.IActionListHolder var22 = (StateTransitionController.IActionListHolder)this.stateTransitionActions.get(var21);
if (var22 == null) {
this.stateTransitionActions.put(var21, new StateTransitionController.PrioritisedActionList(var10, var7));
} else {
StateTransitionController.CompositeActionList var23;
if (var22 class="kw">instanceof StateTransitionController.CompositeActionList) {
var23 = (StateTransitionController.CompositeActionList)var22;
} else {
var23 = new StateTransitionController.CompositeActionList((StateTransitionController.PrioritisedActionList)var22);
this.stateTransitionActions.put(var21, var23);
}
var23.addActionList(var10, var7);
}
}
}
}
}
}
this.stateTransitionActions.trim();
}
class="kw">public void registerWithSupport(ExecutionSupport var1) {
ObjectIterator var2 = this.stateTransitionActions.values().iterator();
while (var2.hasNext()) {
StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
var3.registerWithSupport(var1);
}
}
class="kw">public void motionControllerChanged(
@Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, @Nullable MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
) {
ObjectIterator var5 = this.stateTransitionActions.values().iterator();
while (var5.hasNext()) {
StateTransitionController.IActionListHolder var6 = (StateTransitionController.IActionListHolder)var5.next();
var6.motionControllerChanged(var1, var2, var3, var4);
}
}
class="kw">public void loaded(ExecutionSupport var1) {
ObjectIterator var2 = this.stateTransitionActions.values().iterator();
while (var2.hasNext()) {
StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
var3.loaded(var1);
}
}
class="kw">public void spawned(ExecutionSupport var1) {
ObjectIterator var2 = this.stateTransitionActions.values().iterator();
while (var2.hasNext()) {
StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
var3.spawned(var1);
}
}
class="kw">public void unloaded(ExecutionSupport var1) {
ObjectIterator var2 = this.stateTransitionActions.values().iterator();
while (var2.hasNext()) {
StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
var3.unloaded(var1);
}
}
class="kw">public void removed(ExecutionSupport var1) {
ObjectIterator var2 = this.stateTransitionActions.values().iterator();
while (var2.hasNext()) {
StateTransitionController.IActionListHolder var3 = (StateTransitionController.IActionListHolder)var2.next();
var3.removed(var1);
}
}
class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
ObjectIterator var4 = this.stateTransitionActions.values().iterator();
while (var4.hasNext()) {
StateTransitionController.IActionListHolder var5 = (StateTransitionController.IActionListHolder)var4.next();
var5.teleported(var1, var2, var3);
}
}
class="kw">public void clearOnce() {
ObjectIterator var1 = this.stateTransitionActions.values().iterator();
while (var1.hasNext()) {
StateTransitionController.IActionListHolder var2 = (StateTransitionController.IActionListHolder)var1.next();
var2.clearOnce();
}
}
class="kw">public void initiateStateTransition(int var1, int var2) {
this.runningActions = (StateTransitionController.IActionListHolder)this.stateTransitionActions.get(indexStateTransitionEdge(var1, var2));
}
class="kw">public boolean isRunningTransitionActions() {
class="kw">return this.runningActions != null;
}
class="kw">public boolean runTransitionActions(Ref<EntityStore> var1, ExecutionSupport var2, double var3, Store<EntityStore> var5) {
if (this.runningActions == null) {
class="kw">return false;
} else if (this.runningActions.canExecute(var1, var2, null, var3, var5)
&& this.runningActions.execute(var1, var2, null, var3, var5)
&& this.runningActions.hasCompletedRun()) {
this.runningActions.clearOnce();
this.runningActions = null;
class="kw">return false;
} else {
class="kw">return true;
}
}
class="kw">public class="kw">static void registerFactories(@Nonnull BuilderManager var0) {
BuilderFactory var1 = new BuilderFactory<>(StateTransitionController.class, "Type", BuilderStateTransitionController::new);
var0.registerFactory(var1);
BuilderFactory var2 = new BuilderFactory<>(BuilderStateTransition.StateTransition.class, "Type", BuilderStateTransition::new);
var0.registerFactory(var2);
BuilderFactory var3 = new BuilderFactory<>(BuilderStateTransitionEdges.StateTransitionEdges.class, "Type", BuilderStateTransitionEdges::new);
var0.registerFactory(var3);
}
class="kw">public class="kw">static int indexStateTransitionEdge(int var0, int var1) {
class="kw">return (var0 << 16) + var1;
}
class="kw">private class="kw">static class CompositeActionList class="kw">implements StateTransitionController.IActionListHolder {
class="kw">private class="kw">final List<StateTransitionController.PrioritisedActionList> actionLists = new ObjectArrayList();
class="kw">private int currentIndex;
class="kw">private CompositeActionList(StateTransitionController.PrioritisedActionList var1) {
this.actionLists.add(var1);
}
class="kw">private void addActionList(int var1, ActionList var2) {
for (int var3 = 0; var3 < this.actionLists.size(); var3++) {
if (var1 > this.actionLists.get(var3).priority) {
this.actionLists.add(var3, new StateTransitionController.PrioritisedActionList(var1, var2));
class="kw">return;
}
}
this.actionLists.add(new StateTransitionController.PrioritisedActionList(var1, var2));
}
@Override
class="kw">public boolean canExecute(
@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
) {
if (this.currentIndex >= this.actionLists.size()) {
this.currentIndex = 0;
}
class="kw">return this.actionLists.get(this.currentIndex).actionList.canExecute(var1, var2, var3, var4, var6);
}
@Override
class="kw">public boolean execute(
@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
) {
StateTransitionController.PrioritisedActionList var7 = this.actionLists.get(this.currentIndex);
if (!var7.actionList.canExecute(var1, var2, var3, var4, var6)) {
class="kw">return false;
} else if (var7.actionList.execute(var1, var2, var3, var4, var6) && var7.actionList.hasCompletedRun()) {
this.currentIndex++;
class="kw">return true;
} else {
class="kw">return false;
}
}
@Override
class="kw">public boolean hasCompletedRun() {
if (this.currentIndex >= this.actionLists.size()) {
this.currentIndex = 0;
class="kw">return true;
} else {
class="kw">return false;
}
}
@Override
class="kw">public void registerWithSupport(ExecutionSupport var1) {
for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
var3.actionList.registerWithSupport(var1);
}
}
@Override
class="kw">public void motionControllerChanged(
@Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
) {
for (StateTransitionController.PrioritisedActionList var6 : this.actionLists) {
var6.actionList.motionControllerChanged(var1, var2, var3, var4);
}
}
@Override
class="kw">public void loaded(ExecutionSupport var1) {
for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
var3.actionList.loaded(var1);
}
}
@Override
class="kw">public void spawned(ExecutionSupport var1) {
for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
var3.actionList.spawned(var1);
}
}
@Override
class="kw">public void unloaded(ExecutionSupport var1) {
for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
var3.actionList.unloaded(var1);
}
}
@Override
class="kw">public void removed(ExecutionSupport var1) {
for (StateTransitionController.PrioritisedActionList var3 : this.actionLists) {
var3.actionList.removed(var1);
}
}
@Override
class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
for (StateTransitionController.PrioritisedActionList var5 : this.actionLists) {
var5.actionList.teleported(var1, var2, var3);
}
}
@Override
class="kw">public void clearOnce() {
for (StateTransitionController.PrioritisedActionList var2 : this.actionLists) {
var2.actionList.clearOnce();
}
}
}
class="kw">private class="kw">interface IActionListHolder class="kw">extends RoleStateChange {
boolean canExecute(Ref<EntityStore> var1, ExecutionSupport var2, InfoProvider var3, double var4, Store<EntityStore> var6);
boolean execute(Ref<EntityStore> var1, ExecutionSupport var2, InfoProvider var3, double var4, Store<EntityStore> var6);
boolean hasCompletedRun();
void clearOnce();
}
class="kw">private record PrioritisedActionList(int priority, ActionList actionList) class="kw">implements StateTransitionController.IActionListHolder {
class="kw">private PrioritisedActionList {
}
@Override
class="kw">public boolean canExecute(
@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
) {
class="kw">return this.actionList.canExecute(var1, var2, var3, var4, var6);
}
@Override
class="kw">public boolean execute(
@Nonnull Ref<EntityStore> var1, @Nonnull ExecutionSupport var2, @Nullable InfoProvider var3, double var4, @Nonnull Store<EntityStore> var6
) {
class="kw">return this.actionList.execute(var1, var2, var3, var4, var6);
}
@Override
class="kw">public boolean hasCompletedRun() {
class="kw">return this.actionList.hasCompletedRun();
}
@Override
class="kw">public void registerWithSupport(ExecutionSupport var1) {
this.actionList.registerWithSupport(var1);
}
@Override
class="kw">public void motionControllerChanged(
@Nullable Ref<EntityStore> var1, @Nonnull NPCEntity var2, MotionController var3, @Nullable ComponentAccessor<EntityStore> var4
) {
this.actionList.motionControllerChanged(var1, var2, var3, var4);
}
@Override
class="kw">public void loaded(ExecutionSupport var1) {
this.actionList.loaded(var1);
}
@Override
class="kw">public void spawned(ExecutionSupport var1) {
this.actionList.spawned(var1);
}
@Override
class="kw">public void unloaded(ExecutionSupport var1) {
this.actionList.unloaded(var1);
}
@Override
class="kw">public void removed(ExecutionSupport var1) {
this.actionList.removed(var1);
}
@Override
class="kw">public void teleported(ExecutionSupport var1, World var2, World var3) {
this.actionList.teleported(var1, var2, var3);
}
@Override
class="kw">public void clearOnce() {
this.actionList.clearOnce();
}
}
}