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