Показать сообщение отдельно
Старый 25.10.2025, 11:16   #1311
Asura
Модератор
 
Аватар для Asura
 
Регистрация: 28.02.2007
Адрес: Тула, Россия
Сообщений: 1,892
По умолчанию

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

Код:
    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) надо прописать код управления (просто взять из класса самолета где используется аналогичный).
__________________
Их восемь — нас двое. Расклад перед боем
Не наш, но мы будем играть!
Серёжа! Держись, нам не светит с тобою,
Но козыри надо равнять.

© В. Высоцкий
__________________

Asura вне форума   Ответить с цитированием