HyCodeYourTale
classpublicPriority 3

TargetMemoryCountCondition

com.hypixel.hytale.builtin.npccombatactionevaluator.conditions.TargetMemoryCountCondition

extends ScaledCurveCondition

0

Methods

0

Public Methods

1

Fields

1

Constructors

Constants

BuilderCodec<TargetMemoryCountCondition>CODEC= BuilderCodec.builder( TargetMemoryCountCondition.class, TargetMemoryCountCondition::new,...
ComponentType<EntityStore, TargetMemory>TARGET_MEMORY_COMPONENT_TYPE= TargetMemory.getComponentType()
EnumCodec<TargetMemoryCountCondition.TargetType>TARGET_TYPE_CODEC= new EnumCodec<>(TargetMemoryCountCondition.TargetType.class) .documentKey(TargetMemoryCount...

Constructors

public
TargetMemoryCountCondition()

Fields

Protected Fields (1)

protectedTargetMemoryCountCondition.TargetType targetType

Inheritance

Parent
Current
Interface
Child

Use mouse wheel to zoom, drag to pan. Click nodes to navigate.

Related Classes

Source Code

package com.hypixel.hytale.builtin.npccombatactionevaluator.conditions;

import com.hypixel.hytale.builtin.npccombatactionevaluator.memory.TargetMemory;
import com.hypixel.hytale.codec.KeyedCodec;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.codecs.EnumCodec;
import com.hypixel.hytale.component.ArchetypeChunk;
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.ComponentType;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.server.npc.decisionmaker.core.EvaluationContext;
import com.hypixel.hytale.server.npc.decisionmaker.core.conditions.base.ScaledCurveCondition;
import javax.annotation.Nonnull;

public class TargetMemoryCountCondition extends ScaledCurveCondition {
   public static final EnumCodec<TargetMemoryCountCondition.TargetType> TARGET_TYPE_CODEC = new EnumCodec<>(TargetMemoryCountCondition.TargetType.class)
      .documentKey(TargetMemoryCountCondition.TargetType.All, "All known targets.")
      .documentKey(TargetMemoryCountCondition.TargetType.Friendly, "Known friendly targets.")
      .documentKey(TargetMemoryCountCondition.TargetType.Hostile, "Known hostile targets.");
   public static final BuilderCodec<TargetMemoryCountCondition> CODEC = BuilderCodec.builder(
         TargetMemoryCountCondition.class, TargetMemoryCountCondition::new, ScaledCurveCondition.ABSTRACT_CODEC
      )
      .documentation("A scaled curve condition that returns a utility value based on the number of known targets in the memory.")
      .<TargetMemoryCountCondition.TargetType>appendInherited(
         new KeyedCodec<>("TargetType", TARGET_TYPE_CODEC),
         (condition, e) -> condition.targetType = e,
         condition -> condition.targetType,
         (condition, parent) -> condition.targetType = parent.targetType
      )
      .documentation("The type of targets to count.")
      .add()
      .build();
   protected static final ComponentType<EntityStore, TargetMemory> TARGET_MEMORY_COMPONENT_TYPE = TargetMemory.getComponentType();
   protected TargetMemoryCountCondition.TargetType targetType = TargetMemoryCountCondition.TargetType.Hostile;

   public TargetMemoryCountCondition() {
   }

   @Override
   protected double getInput(
      int selfIndex,
      @Nonnull ArchetypeChunk<EntityStore> archetypeChunk,
      Ref<EntityStore> target,
      CommandBuffer<EntityStore> commandBuffer,
      EvaluationContext context
   ) {
      TargetMemory memory = archetypeChunk.getComponent(selfIndex, TARGET_MEMORY_COMPONENT_TYPE);

      return switch (this.targetType) {
         case Hostile -> (double)memory.getKnownHostiles().size();
         case Friendly -> (double)memory.getKnownFriendlies().size();
         case All -> (double)(memory.getKnownFriendlies().size() + memory.getKnownHostiles().size());
      };
   }

   private static enum TargetType {
      Hostile,
      Friendly,
      All;

      private TargetType() {
      }
   }
}