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();
      }
   }
}