123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
- Name: cTab_fnc_createUavCam
-
- Author(s):
- Gundy
- Description:
- Set up UAV camera and display on supplied render target
- Modified to include lessons learned from KK's excellent tutorial: http://killzonekid.com/arma-scripting-tutorials-uav-r2t-and-pip/
-
- Parameters:
- 0: STRING - Name of UAV (format used from `str uavObject`)
- 1: ARRAY - List of arrays with seats with render targets
- 0: INTEGER - Seat
- 0 = DRIVER
- 1 = GUNNER
- 1: STRING - Name of render target
-
- Returns:
- BOOLEAN - If UAV cam could be set up or not
-
- Example:
- [str _uavVehicle,[[0,"rendertarget8"],[1,"rendertarget9"]]] call cTab_fnc_createUavCam;
- */
- private ["_renderTarget","_data","_seat","_uav","_uavCams","_seatName","_camPosMemPt","_camDirMemPt","_cam"];
- _uav = objNull;
- _data = _this select 0;
- // see if given UAV name is still in the list of valid UAVs
- {
- if (_data == str _x) exitWith {_uav = _x;};
- } count cTabUAVlist;
- // remove exisitng UAV cameras
- [] call cTab_fnc_deleteUAVcam;
- // exit if requested UAV could not be found
- if (isNull _uav) exitWith {false};
- // exit if requested UAV is not alive
- if (!alive _uav) exitWith {false};
- _uavCams = _this select 1;
- {
- _seat = _x select 0;
- _renderTarget = _x select 1;
- // check existing cameras
- _cam = objNull;
- _camPosMemPt = "";
- _camDirMemPt = "";
-
- _seatName = call {
- if (_seat == 0) exitWith {"Driver"};
- if (_seat == 1) exitWith {"Gunner"};
- ""
- };
- if (_seatName != "") then {
- // retrieve memory point names from vehicle config
- _camPosMemPt = getText (configFile >> "CfgVehicles" >> typeOf _uav >> "uavCamera" + _seatName + "Pos");
- _camDirMemPt = getText (configFile >> "CfgVehicles" >> typeOf _uav >> "uavCamera" + _seatName + "Dir");
- };
- // If memory points could be retrieved, create camera
- if ((_camPosMemPt != "") && (_camDirMemPt != "")) then {
- _cam = "camera" camCreate [0,0,0];
- _cam attachTo [_uav,[0,0,0],_camPosMemPt];
- // set up cam on render target
- _cam cameraEffect ["INTERNAL","BACK",_renderTarget];
- call {
- if (_seat == 1) exitWith {
- _renderTarget setPiPEffect [2]; // IR mode
- _cam camSetFov 0.1; // set zoom
- };
- _cam camSetFov 0.5; // set default zoom
- };
- 0 = cTabUAVcams pushBack [_uav,_renderTarget,_cam,_camPosMemPt,_camDirMemPt];
- };
- } count _uavCams;
- // set up event handler
- if !(cTabUAVcams isEqualTo []) exitWith {
- if (isNil "cTabUavEventHandle") then {
- cTabUavEventHandle = addMissionEventHandler ["Draw3D",{
- {
- if !(isNil "_x") then {
- _uav = _x select 0;
- _cam = _x select 2;
- if (alive _uav) then {
- _dir = (_uav selectionPosition (_x select 3)) vectorFromTo (_uav selectionPosition (_x select 4));
- _cam setVectorDirAndUp [_dir,_dir vectorCrossProduct [-(_dir select 1), _dir select 0, 0]];
- } else {
- [_cam] call cTab_fnc_deleteUAVcam;
- };
- };
- } count cTabUAVcams;
- }];
- };
- cTabActUav = _uav;
- true
- };
- false
|