Показать сообщение отдельно
Старый 04.09.2020, 11:19   #149
ildar
Чёрный бомбер
 
Аватар для ildar
 
Регистрация: 26.11.2018
Адрес: Бишкек, Кыргызстан
Сообщений: 329
По умолчанию

Итак, как импортировать 3D-модель радар в мой мод.

Для начала несколько слов о требовании к самой модели. Модель должна состоять как минимум из двух частей: вращающейся части антенны и остального. Антенна должна состоять из одного меша, его мы потом пропишем в специальный класс, остальная часть радара может состоять из любого числа мешей. На примере П-12 (см. скриншоты), модель состоит из 4-х мешей, меш вращающаяся части антенны выделен синим.

Теперь создаем специальный class файл, у каждой модели радара он свой, в нем хранятся параметры: скорость вращения антенны, интервал показа команд наведения и название меша вращающейся части антенны

Код:
package com.maddox.il2.objects.vehicles.radars;

import com.maddox.il2.engine.Interpolate;
import com.maddox.rts.Message;
import com.maddox.rts.Time;
import com.maddox.il2.ai.World;

public class RadarP_12 extends RotatingRadarGeneric {
   public RadarP_12() {
      this.startRotate();
   }

   public void startRotate() {
      this.interpPut(new RadarP_12.Move(), "move", Time.current(), (Message)null);
   }

   public void interpolateTick() {
      super.interpolateTick();
      if (World.getPlayerAircraft() != null && this.dying == 0 && (float)Time.current() > (float)this.RefreshInterval + 30000.0F) {
         this.PlayerAircraftSearch();
      }

   }

   class Move extends Interpolate {
      public boolean tick() {
         if (RadarP_12.this.isAlive()) {
            float var1 = RotatingRadarGeneric.cvt((float)Time.current() % 15000.0F, 0.0F, 15000.0F, 0.0F, 360.0F);
            RadarP_12.this.hierMesh().chunkSetAngles("DipoleArray", -var1 - RadarP_12.this.pos.getAbsOrient().getYaw(), 0.0F, 0.0F);
         }

         return true;
      }
   }
}
Обращаем внимание на следующее:
RadarP_12 - название класса, оно может быть любым, какое вам будет удобно.
30000.0F - это интервал показа команд наведение в миллисекундах, в нашем случае это 30 секунд
15000.0F - это период обращения антенны в миллисекундах, в нашем случае это 15 секунд или 4 оборота в минуту. Обратите внимание, что это число должно быть прописано дважды в указанных выше местах.
DipoleArray - название меша вращающейся части антенны. Именно она будет анимирована.


Далее стандартно создаем слот под свой радар в классе RotatingRadar. Единственное, обращаем свое внимание на выделенное место, там мы прописываем название своего класса, что мы создали ранее.

Код:
package com.maddox.il2.objects.vehicles.radars;

import com.maddox.il2.ai.ground.TgtFlak;
import com.maddox.il2.objects.vehicles.artillery.AAA;

public abstract class RotatingRadar {
   static Class class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$Freya;
   static Class class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$P_12;

   static Class class$(String var0) {
      try {
         return Class.forName(var0);
      } catch (ClassNotFoundException var2) {
         throw new NoClassDefFoundError(var2.getMessage());
      }
   }

   static {
      new RotatingRadarGeneric.SPAWN(class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$Freya == null ? (class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$Freya = class$("com.maddox.il2.objects.vehicles.radars.RotatingRadar$Freya")) : class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$Freya);
      new RotatingRadarGeneric.SPAWN(class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$P_12 == null ? (class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$P_12 = class$("com.maddox.il2.objects.vehicles.radars.RotatingRadar$P_12")) : class$com$maddox$il2$objects$vehicles$radars$RotatingRadar$P_12);
   }

   public static class P_12 extends RadarP_12 implements TgtFlak, AAA {
   }

   public static class Freya extends RadarFreya implements TgtFlak, AAA {
   }
}
А дальше осталось только прописать нужные нам параметры своего радара в ini файлах:

stationary.ini

Код:
[Radars]
P-12            vehicles.radars.RotatingRadar$P_12               1
technics.ini

Код:
[P_12]
Description        Early Warning Radar P-12
Icon               rotating_radar

MeshSummer         3do/Radars/P-12/Dipole.him

PanzerType         Car
PanzerSubtype      3
PanzerBodyFront    0.040

MaxRange           200
MaxAltitude        25000
AntennaHeight      10

// Display
RadarID            P-12
RangeUnit          1
RangeAccuracy      1
AltitudeUnit       1
AltitudeAccuracy   1000
AzimuthAccuracy    2
Подробнее о них рассказано здесь http://forum.aviaskins.com/showpost....&postcount=140

Последний раз редактировалось ildar; 26.12.2021 в 15:39.
ildar вне форума   Ответить с цитированием