fix(sar): align hoist timing with winch audio
This commit is contained in:
+17
-14
@@ -2,23 +2,26 @@
|
|||||||
|
|
||||||
## 2026-06-24
|
## 2026-06-24
|
||||||
|
|
||||||
### braf_air
|
### braf_optics_air
|
||||||
|
|
||||||
- Adicionada dependência de `BRAF_Optics_Air` em `braf_air/config.cpp`.
|
- Criado o novo modulo standalone `braf_optics_air` para concentrar o sistema FLIR das aeronaves.
|
||||||
- Integrado o FLIR standalone nas duas variantes do Fennec com torreta (`BRAF_Fennec_dynamicLoadout_base` e `BRAF_Fennec_SAR_base`).
|
- O novo modulo traz uma interface propria de optics com HUD customizado, funcoes dedicadas e modelos `StarSaphire` para `WFOV`, `MFOV`, `NFOV`, `NFOV 2X` e `NFOV 4X`.
|
||||||
- Integrado o FLIR standalone no Caracal SAR pela base `BRAF_Caracal_2`, propagando para as variantes herdadas `BRAF_Caracal_5` e `BRAF_Caracal_8`.
|
- Essa mudanca permite reutilizar o mesmo sistema entre multiplas aeronaves sem manter copias internas separadas em cada PBO.
|
||||||
- Padronizados os limites de câmera usados no optics para o mesmo conjunto adotado no A-29 e no Fennec: `minElev=-120`, `maxElev=30`, `initElev=0`, `minTurn=-180`, `maxTurn=180`, `initTurn=0`.
|
|
||||||
- Substituído o optics vanilla `RscOptics_Heli_Attack_01_gunner` por `BRAF_RscOptics_Air_FLIR`.
|
|
||||||
- Substituídos os modelos vanilla de optics pelos modelos standalone `StarSaphire` em `WFOV`, `MFOV`, `NFOV`, `NFOV 2X` e `NFOV 4X`.
|
|
||||||
|
|
||||||
### braf_air2
|
### braf_air2
|
||||||
|
|
||||||
- O A-29 deixou de usar o optics como módulo interno e passou a consumir o addon standalone `braf_optics_air`.
|
- O A-29 deixou de usar o optics como modulo interno e passou a consumir o sistema centralizado de `braf_optics_air`.
|
||||||
- Removidos de `braf_air2` os scripts, funções, assets, `p3d`, `paa`, include de config e referências legadas do optics interno.
|
- Foram removidos do `braf_air2` os scripts, funcoes, assets, modelos e referencias antigas ligados ao optics interno do A-29.
|
||||||
- Atualizada a torreta do A-29 para usar `BRAF_RscOptics_Air_FLIR` e os modelos externos de `braf_optics_air`.
|
- A torreta do A-29 foi atualizada para usar o novo `BRAF_RscOptics_Air_FLIR` e os modelos externos de `braf_optics_air`.
|
||||||
- Resultado: `braf_air2` deixou de ser dono do runtime de optics e passou a depender do módulo independente, facilitando o reuso por outras aeronaves.
|
- Esta atualizacao leva para o BRAF um sistema FLIR mais completo, moderno e reutilizavel para substituir esse arranjo antigo.
|
||||||
|
|
||||||
### Referências
|
### braf_air
|
||||||
|
|
||||||
- `5df0649` `refactor(air2): move A-29 optics to standalone addon`
|
- O novo FLIR standalone foi integrado nas variantes do Fennec e do Caracal com torreta.
|
||||||
- `4da55a1` `fix(optics): keep standalone air FLIR module independent`
|
|
||||||
|
### braf_sar
|
||||||
|
|
||||||
|
- Ajustada a logica do guincho para que a extensao do cabo dure os mesmos 16 segundos do audio do motor do winch.
|
||||||
|
- Ajustada tambem a velocidade de recolhimento do cabo para seguir a mesma duracao de 16 segundos.
|
||||||
|
- Os scripts de deploy, descida, subida, corte e recuperacao do rescue seat foram padronizados para uso geral em helicopteros, sem referencia direta a uma aeronave especifica.
|
||||||
|
- O fluxo atual foi consolidado funcionalmente para Fennec, Pantera e Caracal, preparando o sistema para a futura expansao com novos payloads de resgate.
|
||||||
|
|||||||
@@ -1,27 +1,21 @@
|
|||||||
// Declaração de variáveis:
|
// Declaracao de variaveis:
|
||||||
params ["_heli"];
|
params ["_heli"];
|
||||||
|
|
||||||
// Criação e posicionamento do assento:
|
|
||||||
|
|
||||||
// Espera de 1 segundo
|
// Espera de 1 segundo
|
||||||
sleep 1;
|
sleep 1;
|
||||||
|
|
||||||
// Texto que aparece no side channel
|
// Texto que aparece no side channel
|
||||||
_heli vehicleChat "Deploying Rescue Seat";
|
_heli vehicleChat "Deploying Rescue Seat";
|
||||||
|
|
||||||
// Criação do veículo _rescueseat
|
// Criacao e posicionamento do assento
|
||||||
private _rescueseat = "BRAF_Rescue_Seat" createVehicle [0, 0, 0];
|
private _rescueSeat = "BRAF_Rescue_Seat" createVehicle [0, 0, 0];
|
||||||
|
_rescueSeat setDir (getDir _heli);
|
||||||
|
_rescueSeat setPosASL (_heli modelToWorld [0, 0, -1.5]);
|
||||||
|
|
||||||
// Mudança de Orientação do _rescueseat
|
// Criacao do cabo
|
||||||
_rescueseat setDir (getDir _heli);
|
private _hoistRope = ropeCreate [_heli, "rope_start", _rescueSeat, "hoist_point", 0.25];
|
||||||
|
|
||||||
// Mudança de posição do _rescueseat
|
_heli setVariable ["rescueseat", _rescueSeat];
|
||||||
_rescueseat setPosASL (_heli modelToWorld [0, 0, -1.5]);
|
_heli setVariable ["hoistrope", _hoistRope];
|
||||||
|
|
||||||
// Criação do Cabo
|
|
||||||
private _hoistrope = ropeCreate [_heli, "rope_start", _rescueseat, "hoist_point", 0.25];
|
|
||||||
|
|
||||||
_heli setVariable ["rescueseat", _rescueseat];
|
|
||||||
_heli setVariable ["hoistrope", _hoistrope];
|
|
||||||
|
|
||||||
_heli;
|
_heli;
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
// Declaração de variáveis
|
// Declaracao de variaveis
|
||||||
params ["_panther"];
|
params ["_heli"];
|
||||||
// Corte do Cabo
|
|
||||||
private _rope = _panther getVariable ["hoistrope", objNull];
|
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||||
if (isNull _rope) then {
|
|
||||||
_panther vehicleChat "no rope!";
|
if (isNull _rope) exitWith {
|
||||||
|
_heli vehicleChat "no rope!";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Corte do cabo
|
||||||
ropeCut [_rope, 0];
|
ropeCut [_rope, 0];
|
||||||
ropeDestroy _rope;
|
ropeDestroy _rope;
|
||||||
_panther setVariable ["hoistrope", nil];
|
_heli setVariable ["hoistrope", nil];
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
// Declaração de variáveis:
|
// Declaracao de variaveis:
|
||||||
params ["_panther"];
|
params ["_heli"];
|
||||||
|
|
||||||
// Extensão do Cabo
|
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||||
ropeUnwind [_panther getVariable "hoistrope", 1.15, 25, false];
|
|
||||||
|
if (isNull _rope) exitWith {};
|
||||||
|
|
||||||
|
private _targetLength = 25;
|
||||||
|
private _duration = 16;
|
||||||
|
private _currentLength = ropeLength _rope;
|
||||||
|
private _speed = ((_targetLength - _currentLength) max 0.01) / _duration;
|
||||||
|
|
||||||
|
// Extensao do cabo com duracao alinhada ao audio do guincho.
|
||||||
|
ropeUnwind [_rope, _speed, _targetLength, false];
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
// Declaração de variáveis
|
// Declaracao de variaveis
|
||||||
params ["_panther"];
|
params ["_heli"];
|
||||||
|
|
||||||
// Recuperação do Cabo
|
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||||
ropeUnwind [_panther getVariable "hoistrope", 1.15, 0.25, false];
|
|
||||||
|
if (isNull _rope) exitWith {};
|
||||||
|
|
||||||
|
private _targetLength = 0.25;
|
||||||
|
private _duration = 16;
|
||||||
|
private _currentLength = ropeLength _rope;
|
||||||
|
private _speed = ((_currentLength - _targetLength) max 0.01) / _duration;
|
||||||
|
|
||||||
|
// Recuperacao do cabo com duracao alinhada ao audio do guincho.
|
||||||
|
ropeUnwind [_rope, _speed, _targetLength, false];
|
||||||
|
|||||||
@@ -1,25 +1,27 @@
|
|||||||
// Declaração de variáveis
|
// Declaracao de variaveis
|
||||||
params ["_heli", "_player"];
|
params ["_heli"];
|
||||||
|
|
||||||
// Récupération des victimes (thx to Tetet)
|
|
||||||
private _basket = _heli getVariable ["rescueseat", objNull];
|
private _basket = _heli getVariable ["rescueseat", objNull];
|
||||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||||
private _length = ropeLength _rope;
|
|
||||||
|
|
||||||
if (isNull _rope) then {
|
if (isNull _rope) exitWith {
|
||||||
_heli vehicleChat "no rope!";
|
_heli vehicleChat "no rope!";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private _length = ropeLength _rope;
|
||||||
|
|
||||||
if (_length <= 3.1) then {
|
if (_length <= 3.1) then {
|
||||||
{
|
{
|
||||||
if (!isNil "_x") then {
|
if (!isNil "_x") then {
|
||||||
_x leaveVehicle _basket;
|
_x leaveVehicle _basket;
|
||||||
_x action["GetOut", _basket];
|
_x action ["GetOut", _basket];
|
||||||
sleep 0.1;
|
sleep 0.1;
|
||||||
_basket lock 0;
|
_basket lock 0;
|
||||||
[_x, _heli] remoteExec ["moveInCargo", _x];
|
[_x, _heli] remoteExec ["moveInCargo", _x];
|
||||||
_x assignAsCargo _heli;
|
_x assignAsCargo _heli;
|
||||||
};
|
};
|
||||||
} forEach crew _basket;
|
} forEach crew _basket;
|
||||||
|
|
||||||
ropeDestroy _rope;
|
ropeDestroy _rope;
|
||||||
deleteVehicle _basket;
|
deleteVehicle _basket;
|
||||||
_heli setVariable ["rescueseat", nil];
|
_heli setVariable ["rescueseat", nil];
|
||||||
@@ -29,6 +31,5 @@ if (_length <= 3.1) then {
|
|||||||
_heli vehicleChat "First Raise The Basket To Cabin Door";
|
_heli vehicleChat "First Raise The Basket To Cabin Door";
|
||||||
};
|
};
|
||||||
|
|
||||||
// Corte do Cabo
|
|
||||||
// ropeCut [_heli getVariable "hoistrope", 0];
|
// ropeCut [_heli getVariable "hoistrope", 0];
|
||||||
// deleteVehicle (_heli getVariable "rescueseat");
|
// deleteVehicle (_heli getVariable "rescueseat");
|
||||||
Reference in New Issue
Block a user