Skip to content

Социальный планировщик и система событий

КомпонентКласс
Движок планировщикаnet.dasik.social.core.EntitySocialScheduler
Реестр событийnet.dasik.social.api.SocialEventRegistry
Уровни приоритетаPriorityTier (CRITICAL, HIGH, NORMAL, LOW)
Типы сигналовSignalType (DANGER, OWNER_ACTION, THUNDER, DEATH_CRY, FOOD_DETECTED, SOCIAL_INVITE)

🔄 Двухколейная модель планирования

Каждая социальная сущность содержит EntitySocialScheduler, обрабатывающий задачи в двух независимых колеях:

  1. Mood Track (Долгосрочные поведенческие состояния): Оценивается на низкой частоте (например, каждые 20-100 тиков) для обновления эмоционального фона, уровня агрессии или выносливости.
  2. Ambient Track (Краткосрочные тактические сигналы): Оценивается на высокой частоте (каждые 1-5 тиков) для немедленной реакции на внешние раздражители, угрозы или стайные маневры.
ascii
                      ┌───────────────────────────────┐
                      │    EntitySocialScheduler      │
                      └───────────────┬───────────────┘

              ┌───────────────────────┴───────────────────────┐
              ▼                                               ▼
   ┌─────────────────────┐                         ┌─────────────────────┐
   │     Mood Track      │                         │    Ambient Track    │
   │ (Low Frequency Ticks)│                         │(High Frequency Ticks)│
   │ - Pack Hierarchy   │                         │ - Obstacle Avoidance│
   │ - Hunger / Fatigue  │                         │ - Signal Response   │
   └─────────────────────┘                         └─────────────────────┘

📢 SocialEventRegistry и реализация событий

Моды реализуют интерфейс SocialEvent и регистрируют экземпляры через SocialEventRegistry во время инициализации:

java
public class HowlEvent implements SocialEvent {
    @Override public String getId() { return "betterdogs:howl"; }
    @Override public int getPriorityValue() { return 80; }
    @Override public String getTrackId() { return "pack_command"; }
    @Override public boolean canPreempt(SocialEvent other) { return other.getPriorityValue() < 80; }
    @Override public void onStart(TickContext context) {}
    @Override public boolean tick(TickContext context) { return false; }
    @Override public void onEnd(SocialEntity entity, EndReason reason) {}
}

// Register during mod initialization (frozen on first pulse)
SocialEventRegistry.register(new HowlEvent());

📊 Матрица приоритетов PriorityTier

УровеньМакс. число трековПолитика распределенияТипичное применение
CRITICAL2Мгновенный перехват, высший приоритетБегство от опасности, бой
HIGH8Вытесняет обычные/низкие задачиТактические команды, зов стаи
NORMAL16Стандартный бюджет тиковСоциальные взаимодействия, прогулка
LOW32Максимальная емкость, фоновый приоритетФоновый осмотр окружения

🔗 Связанные страницы

Official documentation & web portal for Dasik Igaijinn mods.