AviaSkins.Forums

AviaSkins.Forums (http://forum.aviaskins.com/index.php)
-   W.I.P. (http://forum.aviaskins.com/forumdisplay.php?f=48)
-   -   "Лучше хоть что-то, чем ничего" (http://forum.aviaskins.com/showthread.php?t=4195)

Molva 21.10.2025 20:48

Вложений: 1
Гроховский Г-37 WIP



https://disk.yandex.ru/d/RAUb13V7oojpJQ

air.ini
G-37 air.G_37 1 NOINFO r01 SUMMER

Спасибо всем, помогавшим словом и делом.
Отдельное спасибо Дмитрию 'Asura' Шабанову.

fdelre 21.10.2025 21:55

Air.ini?

Vasya 21.10.2025 23:23

Цитата:

Сообщение от Molva (Сообщение 232474)

У нас не скачивается, забанено. :cry:
Может кто положит на гугл-диск???

Toobone 21.10.2025 23:36

Цитата:

Сообщение от Vasya (Сообщение 232476)
У нас не скачивается, забанено. :cry:
Может кто положит на гугл-диск???

https://dropmefiles.com.ua/ua/fhH7MW8

злой 22.10.2025 03:38

Спасибо Олег!

andrey65 22.10.2025 04:30

Красота!

andrey65 22.10.2025 14:36

Вложений: 9
Это нечто! Подвесную кабину сбросить не смог))

Molva 23.10.2025 09:51

Что надо сделать для передачи управления второму пилоту? И чтобы он выполнял функции бомбардира.

Asura 23.10.2025 12:42

Сделать класс кабины бомбардира, в кабине пилота передвинуть камеру на место второго пилота и новый хир хим прицепить в класс кабины бомбардира. Я обычно делаю копию Body (камеры чаще всего именно к этому мешу зацеплены), обзываю например BodyB. В новом меше делаю нужные камеры. Делаю копию хир хим типа hierB.him, внутри переобзываю мешь Body

[Body]
Mesh BodyB

и в классе кабины бомбардира указываю hierB.him. Вобщем то все. Сам класс повторяет класс пилота только в секцию статик надо добавить:

Property.set(CLASS.THIS(), "astatePilotIndx", 1);
Property.set(CLASS.THIS(), "aiTuretNum", BOMBARDIER_INDEX);
Property.set(CLASS.THIS(), "weaponControlNum", 3);

Ну и если класс под 4.13 и выше в начале класса

public class CockpitB_17G_Bombardier extends CockpitBombardier

Molva 24.10.2025 23:53

Цитата:

Сообщение от Asura (Сообщение 232489)
Сделать класс кабины бомбардира...

Спасибо за пояснения. Класс сделал, второй пилот появился. А вот бомбардир прицела не видит. Камера смотрит только вперед как ни крутил хук.

Asura 25.10.2025 11:16

Надо еще добавить обработку "прильнуть к прицелу":

Код:

    protected boolean doFocusEnter()
    {
        if(super.doFocusEnter())
        {
          HookPilot hook = HookPilot.cur();
          hook.doAim(false);
          Point3d p3d = new Point3d();
          p3d.set(0.15F, 0F, -0.10F);
          hook.setTubeSight(p3d);
         
          return true;
        }else {
          return false;
        }
    }
   
    protected void    doFocusLeave()
    {
            if(!isFocused()) return;
        leave();
        super.doFocusLeave();
    }

    private void prepareToEnter()
    {
        HookPilot hook = HookPilot.cur();
        if(hook.isPadlock())
          hook.stopPadlock();
        hook.doAim(true);
        hook.setSimpleAimOrient(0F,-33F,0F);
        enteringAim = true;
    }
     
    private void enter()
    {
        saveFov = Main3D.FOVX;
        CmdEnv.top().exec("fov "+saveBSFov);
        Main3D.cur3D().aircraftHotKeys.enableBombSightFov();
        HookPilot hook = HookPilot.cur();
        hook.setInstantOrient(aAim,tAim,0);
        hook.setSimpleUse(true);
        hook.setStabilizedBSUse(true);
        doSetSimpleUse(true);
        HotKeyEnv.enable("PanView",false);
        HotKeyEnv.enable("SnapView",false);
        bEntered = true;
    }
     
    private void leave()
    {
        if(enteringAim)
        {
          HookPilot hook = HookPilot.cur();
          hook.setInstantOrient(0F,-33F,0F);
          hook.doAim(false);
          hook.setSimpleAimOrient(0.0f, 0.0f, 0.0f);
          return;
        }
       
        if(!bEntered) return;
       
        saveBSFov = Main3D.FOVX;
        Main3D.cur3D().aircraftHotKeys.setEnableChangeFov(true);
        CmdEnv.top().exec("fov "+saveFov);
        HookPilot hook = HookPilot.cur();
        hook.setInstantOrient(0F,-33F,0F);
        hook.doAim(false);
        hook.setSimpleAimOrient(0,0,0);
        hook.setSimpleUse(false);
        hook.setStabilizedBSUse(false);
        doSetSimpleUse(false);
        boolean bEnable = HotKeyEnv.isEnabled("aircraftView");
        HotKeyEnv.enable("PanView",bEnable);
        HotKeyEnv.enable("SnapView",bEnable);
        bEntered = false;
    }
 
    public void destroy()
    {
          super.destroy();
          leave();
    }

    public void doToggleAim( boolean bToggleAim )
    {
        if(!isFocused()) return;
        if(isToggleAim() == bToggleAim) return;
        if(bToggleAim) prepareToEnter();
        else          leave();
    }

    public CockpitXXXXX_Bombardier()
    {
        super("3DO/Cockpit/XXXXX_Bombardier/hier.him", "bf109");   
       
        try {
            Loc l = new Loc();
            Hook hook = new HookNamed(mesh, "CAMERAAIM");
            hook.computePos(this,new Loc(),l);
            aAim = l.getOrient().getAzimut();
            tAim = l.getOrient().getTangage();
          }catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
          }
    }

Хук CAMERAAIM должен смотреть в меш прицела (вниз на сетку). Еслши прицел как то управляется то в в процедуре public void reflectWorldToInstruments(float delta) надо прописать код управления (просто взять из класса самолета где используется аналогичный).

Molva 25.10.2025 15:05

Цитата:

Сообщение от Asura (Сообщение 232492)
Надо еще добавить обработку "прильнуть к прицелу"

Добавил. Переключение к прицелу есть.
Цитата:

Хук CAMERAAIM должен смотреть в меш прицела (вниз на сетку).
CAMERAAIM смотрит всегда вперед, как не крутил хук.

andrey65 26.10.2025 12:52

У Г-37 фм от чего?

Molva 26.10.2025 13:16

Ли-2.

carsmaster 26.10.2025 23:02

Цитата:

Сообщение от Molva (Сообщение 232494)
CAMERAAIM смотрит всегда вперед, как не крутил хук.

Сам хук или его пивот крутить в меше бесполезно, хуки крутятся и выставляется наклон хука в классе, см пост Дмитрия №1311.

Asura 27.10.2025 09:12

Вот этот кусок в часть где хир хим прописан добавил?

Код:

try {
            Loc l = new Loc();
            Hook hook = new HookNamed(mesh, "CAMERAAIM");
            hook.computePos(this,new Loc(),l);
            aAim = l.getOrient().getAzimut();
            tAim = l.getOrient().getTangage();
          }catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
          }


Molva 27.10.2025 21:02

Вложений: 1
Цитата:

Сообщение от Asura (Сообщение 232521)
Вот этот кусок в часть где хир хим прописан добавил?

Добавил. Сейчас получается такая картинка. Прицел брал от ТБ-3. Но прицела не видно.

Asura 29.10.2025 09:26

Тогда надо добавить еще вот что;

Код:

  private float curAlt = 300.0f;
  private float curSpd = 50.0f;

 
  class Interpolater extends InterpolateRef
  {
    public boolean tick() {
      resetYPRmodifier();
      float v = ((G_37)aircraft()).fSightCurSpeed;
      float h = ((G_37)aircraft()).fSightCurAltitude;
      curAlt = (19.0f*curAlt+h)/20.0f;
      curSpd = (19.0f*curSpd+v)/20.0f;
      mesh.chunkSetAngles("zScaleKM", 0.04f*curAlt, 0.0f, 0.0f);
      mesh.chunkSetAngles("zScaleM", 0.36f*curAlt, 0.0f, 0.0f);
      mesh.chunkSetAngles("zScaleKMH", -0.8f*(curSpd-50.0f), 0.0f, 0.0f);
      float m300 = 0.5f*(float)Math.tan(Math.atan( (300.0f/3.6f)*(Math.sqrt(2.0f*curAlt/Atmosphere.g()))/(curAlt) ));
      float m = (float)Math.tan(Math.atan( (curSpd/3.6f)*(Math.sqrt(2.0f*curAlt/Atmosphere.g()))/(curAlt) ));
      xyz[0] = -0.0005f*curAlt;
      xyz[1] = -1.0f*(m300 - m);
      mesh.chunkSetLocate("zScaleCurve", xyz, ypr);

      if (bEntered)
      {
              float tan = aircraft().FM.Or.getTangage();
              if (tan > 5f)
                      tan = 5f;
              else if (tan < -5f)
                      tan = -5f;
              mesh.chunkSetAngles("BlackBox", 0.0f, 0f, tan);
              HookPilot hook = HookPilot.cur();
          hook.setInstantOrient(aAim, tAim-tan, 0f);
      }
     
      return true;
    }
  }
 
    public void reflectWorldToInstruments ( float delta )
        {
                if(bEntered) {
                  mesh.chunkVisible("BlackBox", true);
                  mesh.chunkVisible("zReticle", true);
                  mesh.chunkVisible("zScaleCurve", true);
                  mesh.chunkVisible("zScaleM", true);
                  mesh.chunkVisible("zScaleKM", true);
                  mesh.chunkVisible("zScaleKMH", true);
                }else {
                  mesh.chunkVisible("BlackBox", false);
                  mesh.chunkVisible("zReticle", false);
                  mesh.chunkVisible("zScaleCurve", false);
                  mesh.chunkVisible("zScaleM", false);
                  mesh.chunkVisible("zScaleKM", false);
                  mesh.chunkVisible("zScaleKMH", false);
                }
        }

И в класс самолета добавить если нет:

Код:

        public float fSightCurAltitude = 300.0f; // 300 - 5000 m
        public float fSightCurSpeed = 50.0f; // 50 - 350 km/h

        private Point3d endPoint = new Point3d();
        private Point3d hitPoint = new Point3d();
        private Vector3d vTemp = new Vector3d();
        private Orient oTemp = new Orient();

        public boolean typeBomberToggleAutomation()
        {
                return false;
        }

        public void typeBomberAdjDistanceReset()
        {
        }

        public void typeBomberAdjDistancePlus()
        {
        }

        public void typeBomberAdjDistanceMinus()
        {
        }

        public void typeBomberAdjSideslipReset()
        {
        }

        public void typeBomberAdjSideslipPlus()
        {
        }

        public void typeBomberAdjSideslipMinus()
        {
        }

        public void typeBomberAdjAltitudeReset()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude = 300.0f;
        }

        public void typeBomberAdjAltitudePlus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude += 50.0f;
                if (fSightCurAltitude > 5000.0f)
                {
                        fSightCurAltitude = 5000.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightAltitude",
                                new Object[]
                                { new Integer((int) fSightCurAltitude) });
        }

        public void typeBomberAdjAltitudeMinus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude -= 50.0f;
                if (fSightCurAltitude < 300.0f)
                {
                        fSightCurAltitude = 300.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightAltitude",
                                new Object[]
                                { new Integer((int) fSightCurAltitude) });
        }

        public void typeBomberAdjSpeedReset()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurSpeed = 50.0f;
        }

        public void typeBomberAdjSpeedPlus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurSpeed += 5.0f;
                if (fSightCurSpeed > 350.0f)
                {
                        fSightCurSpeed = 350.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightSpeed", new Object[]
                { new Integer((int) fSightCurSpeed) });
        }

        public void typeBomberAdjSpeedMinus()
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurSpeed -= 5.0f;
                if (fSightCurSpeed < 50.0f)
                {
                        fSightCurSpeed = 50.0f;
                }
                HUD.log(AircraftHotKeys.hudLogWeaponId, "BombsightSpeed", new Object[]
                { new Integer((int) fSightCurSpeed) });
        }

        public void typeBomberUpdate(float dt)
        {
                if (!World.cur().diffCur.RealisticBombSights){

                        fSightCurAltitude = (float)World.getPlayerAircraft().FM.getAltitude()-(float)hitPoint.z;
                        fSightCurSpeed = (float)World.getPlayerAircraft().getSpeed(null)*3.6f;
                        double bombDist = getBombDist(fSightCurAltitude,
                                        (double) (fSightCurSpeed / 3.6000000000000001D));

                        //measure the exact ground height at the point where the bombsight is pointing.
                        if (FM.isTick(4, 0))
                        {
                                oTemp.setYaw(FM.Or.getYaw());
                                oTemp.setRoll(0);
                                oTemp.setPitch(30f);
                                vTemp.set(1,0,0);
                                oTemp.transform(vTemp);
                                vTemp.scale(100000);
                                endPoint.set(this.pos.getAbsPoint());
                                endPoint.add(vTemp);
                                Landscape.rayHitHQ(this.pos.getAbsPoint(), endPoint, hitPoint);
                        }
                }
        }

        public void typeBomberReplicateToNet(NetMsgGuaranted out)
                        throws IOException
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                out.writeFloat(fSightCurAltitude);
                out.writeFloat(fSightCurSpeed);
        }

        public void typeBomberReplicateFromNet(NetMsgInput in) throws IOException
        {
                if (!World.cur().diffCur.RealisticBombSights)
                        return;
                fSightCurAltitude = in.readFloat();
                fSightCurSpeed = in.readFloat();
        }
  }

Весь код под версию 4.13, для 4.12 возможно потребуется поправить.

Molva 29.10.2025 14:02

Вложений: 1
Цитата:

Сообщение от Asura (Сообщение 232545)
Тогда надо добавить еще вот что;

Не получилось сделать класс. Вот такие ошибки:
http://forum.aviaskins.com/attachmen...1&d=1761735716

Molva 29.10.2025 16:09

Вложений: 1
Осталась одна ошибка:
http://forum.aviaskins.com/attachmen...1&d=1761743300


Текущее время: 16:24. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot