276 lines
10 KiB
Plaintext
276 lines
10 KiB
Plaintext
if ( isNil "active_sectors" ) then { active_sectors = [] };
|
|
if ( isNil "GRLIB_all_fobs" ) then { GRLIB_all_fobs = [] };
|
|
|
|
cinematic_camera_started = true;
|
|
private _last_transition = -1;
|
|
private _last_position = [ -1, -1, -1 ];
|
|
|
|
showCinemaBorder true;
|
|
private _cinematic_camera = "camera" camCreate [0,0,0];
|
|
private _cinematic_pointer = "Sign_Arrow_Blue_F" createVehicleLocal [0,0,0];
|
|
_cinematic_pointer hideObject true;
|
|
_cinematic_camera camSetTarget _cinematic_pointer;
|
|
_cinematic_camera cameraEffect ["internal","back"];
|
|
_cinematic_camera camcommit 0;
|
|
if ( isNil "first_camera_round" ) then { first_camera_round = true; };
|
|
|
|
while { cinematic_camera_started } do {
|
|
|
|
waitUntil { !cinematic_camera_started || camCommitted _cinematic_camera };
|
|
|
|
if ( cinematic_camera_started ) then {
|
|
camUseNVG false;
|
|
|
|
private _positions = [ getpos startbase ];
|
|
if ( !first_camera_round ) then {
|
|
|
|
if ( count GRLIB_all_fobs > 0 ) then {
|
|
for [ {_idx=0},{_idx < 2},{_idx=_idx+1} ] do {
|
|
_positions pushback (selectRandom GRLIB_all_fobs);
|
|
};
|
|
};
|
|
|
|
if ( count active_sectors > 0 ) then {
|
|
for [ {_idx=0},{_idx < 5},{_idx=_idx+1} ] do {
|
|
_positions pushback (getmarkerpos (selectRandom active_sectors));
|
|
};
|
|
} else {
|
|
for [ {_idx=0},{_idx < 5},{_idx=_idx+1} ] do {
|
|
_positions pushback (getmarkerpos (selectRandom sectors_allSectors));
|
|
};
|
|
};
|
|
|
|
if ( GRLIB_endgame == 0 ) then {
|
|
_activeplayers = ( [ allPlayers , { alive _x && ( _x distance ( getmarkerpos GRLIB_respawn_marker ) ) > 100 } ] call BIS_fnc_conditionalSelect );
|
|
if ( count _activeplayers > 0 ) then {
|
|
for [ {_idx=0},{_idx < 3},{_idx=_idx+1} ] do {
|
|
_positions pushback (getpos (selectRandom _activeplayers));
|
|
};
|
|
};
|
|
};
|
|
|
|
};
|
|
_position = selectRandom (_positions - [_last_position]);
|
|
_last_position = _position;
|
|
_cinematic_pointer setpos [ _position select 0, _position select 1, (_position select 2) + 7 ];
|
|
private _nearentities = _position nearEntities [ "Man", 100 ];
|
|
private _camtarget = _cinematic_pointer;
|
|
if ( first_camera_round ) then {
|
|
_camtarget = startbase;
|
|
} else {
|
|
if ( count ( [ _nearentities , { alive _x && isPlayer _x } ] call BIS_fnc_conditionalSelect ) != 0 ) then {
|
|
_camtarget = selectRandom ([_nearentities, {alive _x && isPlayer _x}] call BIS_fnc_conditionalSelect);
|
|
} else {
|
|
if ( count ( [ _nearentities , { alive _x } ] call BIS_fnc_conditionalSelect ) != 0 ) then {
|
|
_camtarget = selectRandom ([_nearentities, {alive _x}] call BIS_fnc_conditionalSelect);
|
|
};
|
|
};
|
|
};
|
|
|
|
_cinematic_camera camSetTarget _camtarget;
|
|
private _startpos = [ ((getpos _camtarget) select 0) - 60, ((getpos _camtarget) select 1) + 350, 5 ];
|
|
private _endpos = [ ((getpos _camtarget) select 0) - 60, ((getpos _camtarget) select 1) - 230, 5 ];
|
|
private _startfov = 0.5;
|
|
private _endfov = 0.5;
|
|
|
|
if ( !first_camera_round ) then {
|
|
_startfov = 0.8;
|
|
_endfov = 0.8;
|
|
|
|
_next_transition = selectRandom ([0, 1, 2, 3, 4, 5, 6, 7 ,8 ,9 ,10, 11 ,12 ,13 ,14, 15] - [_last_transition]);
|
|
_last_transition = _next_transition;
|
|
|
|
switch ( _next_transition ) do {
|
|
case 0: {
|
|
_startpos = [ ((getpos _camtarget) select 0) - 30, ((getpos _camtarget) select 1) - 50, 15 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) - 30, ((getpos _camtarget) select 1) + 50, 15 ];
|
|
_endfov = 0.8;
|
|
};
|
|
|
|
case 1: {
|
|
_startpos = [ ((getpos _camtarget) select 0) + 5, ((getpos _camtarget) select 1) - 100, 1 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 5, ((getpos _camtarget) select 1) + 100, 40 ];
|
|
_endfov = 0.55;
|
|
};
|
|
|
|
case 2: {
|
|
_startpos = [ ((getpos _camtarget) select 0) + 50, ((getpos _camtarget) select 1) - 50, 100 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 50, ((getpos _camtarget) select 1) + 50, 100 ];
|
|
_startfov = 0.5;
|
|
_endfov = 0.3;
|
|
};
|
|
|
|
case 3: {
|
|
_startpos = [ ((getpos _camtarget) select 0) + 50, ((getpos _camtarget) select 1) - 80, 2 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 50, ((getpos _camtarget) select 1) + 80, 20 ];
|
|
};
|
|
|
|
case 4: {
|
|
_startpos = [ ((getpos _camtarget) select 0) - 400, ((getpos _camtarget) select 1) + 400, 50 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 400, ((getpos _camtarget) select 1) + 400, 50 ];
|
|
_startfov = 0.25;
|
|
_endfov = 0.25;
|
|
};
|
|
|
|
case 5: {
|
|
_startpos = [ ((getpos _camtarget) select 0) + 300, ((getpos _camtarget) select 1) - 100, 15 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) -300, ((getpos _camtarget) select 1) - 120, 15 ];
|
|
};
|
|
|
|
case 6: {
|
|
_startpos = [ ((getpos _camtarget) select 0) + 100, ((getpos _camtarget) select 1) - 100, 1 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 100, ((getpos _camtarget) select 1) - 100, 50 ];
|
|
};
|
|
|
|
case 7: {
|
|
_startpos = [ ((getpos _camtarget) select 0) + 50, ((getpos _camtarget) select 1) - 50, 150 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 20, ((getpos _camtarget) select 1) - 20, 5 ];
|
|
_startfov = 0.6;
|
|
_endfov = 0.9;
|
|
};
|
|
|
|
case 8: {
|
|
_startpos = [ ((getpos _camtarget) select 0) - 300, ((getpos _camtarget) select 1) - 80, 20 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 300, ((getpos _camtarget) select 1) + 120, 20 ];
|
|
_startfov = 0.55;
|
|
_endfov = 0.55;
|
|
};
|
|
|
|
case 9: {
|
|
_startpos = [ ((getpos _camtarget) select 0) - 80, ((getpos _camtarget) select 1) - 300, 30 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 120, ((getpos _camtarget) select 1) + 300, 30 ];
|
|
_startfov = 0.65;
|
|
_endfov = 0.65;
|
|
};
|
|
|
|
case 10: {
|
|
_startpos = [ ((getpos _camtarget) select 0) - 5, ((getpos _camtarget) select 1) + 30, 5 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) - 25, ((getpos _camtarget) select 1) -30, 150 ];
|
|
};
|
|
|
|
case 11 : {
|
|
_cinematic_camera cameraEffect ["Terminate", "BACK"];
|
|
camDestroy _cinematic_camera;
|
|
_cinematic_camera = "camera" camCreate [0,0,0];
|
|
_cinematic_camera cameraEffect ["internal","back"];
|
|
_cinematic_camera camcommit 0;
|
|
_startpos = [ ((getpos _camtarget) select 0) + 2, ((getpos _camtarget) select 1) -200, 25 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 2, ((getpos _camtarget) select 1) +200, 25 ];
|
|
_cinematic_camera setDir 0;
|
|
[ _cinematic_camera, -30, 0 ] call BIS_fnc_setPitchBank;
|
|
};
|
|
|
|
case 12 : {
|
|
_cinematic_camera cameraEffect ["Terminate", "BACK"];
|
|
camDestroy _cinematic_camera;
|
|
_cinematic_camera = "camera" camCreate [0,0,0];
|
|
_cinematic_camera cameraEffect ["internal","back"];
|
|
_cinematic_camera camcommit 0;
|
|
_startpos = [ ((getpos _camtarget) select 0) + 302 , ((getpos _camtarget) select 1) + 300, 50 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) - 198, ((getpos _camtarget) select 1) - 200, 50 ];
|
|
_cinematic_camera setDir 225;
|
|
[ _cinematic_camera, -25, 0 ] call BIS_fnc_setPitchBank;
|
|
};
|
|
|
|
case 13 : {
|
|
_cinematic_camera cameraEffect ["Terminate", "BACK"];
|
|
camDestroy _cinematic_camera;
|
|
_cinematic_camera = "camera" camCreate [0,0,0];
|
|
_cinematic_camera cameraEffect ["internal","back"];
|
|
_cinematic_camera camcommit 0;
|
|
_startpos = [ ((getpos _camtarget) select 0) - 80 , ((getpos _camtarget) select 1) + 150, 20 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) - 80, ((getpos _camtarget) select 1) - 150, 20 ];
|
|
_cinematic_camera setDir 90;
|
|
[ _cinematic_camera, -15, 0 ] call BIS_fnc_setPitchBank;
|
|
};
|
|
|
|
case 14 : {
|
|
_cinematic_camera cameraEffect ["Terminate", "BACK"];
|
|
camDestroy _cinematic_camera;
|
|
_cinematic_camera = "camera" camCreate [0,0,0];
|
|
_cinematic_camera cameraEffect ["internal","back"];
|
|
_cinematic_camera camcommit 0;
|
|
_startpos = [ ((getpos _camtarget) select 0) - 50 , ((getpos _camtarget) select 1) + 2, 30 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 150, ((getpos _camtarget) select 1) - 2, 30 ];
|
|
_cinematic_camera setDir 270;
|
|
[ _cinematic_camera, -20, 0 ] call BIS_fnc_setPitchBank;
|
|
_startfov = 0.55;
|
|
_endfov = 0.55;
|
|
};
|
|
|
|
case 15 : {
|
|
_cinematic_camera cameraEffect ["Terminate", "BACK"];
|
|
camDestroy _cinematic_camera;
|
|
_cinematic_camera = "camera" camCreate [0,0,0];
|
|
_cinematic_camera cameraEffect ["internal","back"];
|
|
_cinematic_camera camcommit 0;
|
|
_startpos = [ ((getpos _camtarget) select 0) - 150 , ((getpos _camtarget) select 1) + 5, 250 ];
|
|
_endpos = [ ((getpos _camtarget) select 0) + 150, ((getpos _camtarget) select 1) + 5, 250 ];
|
|
_cinematic_camera setDir 0;
|
|
[ _cinematic_camera, -88, 0 ] call BIS_fnc_setPitchBank;
|
|
_startfov = 0.3;
|
|
_endfov = 0.3;
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
if ( surfaceIsWater _position ) then {
|
|
_startpos = [ _startpos select 0, _startpos select 1, (_startpos select 2) + 25 ];
|
|
_endpos = [ _endpos select 0, _endpos select 1, (_endpos select 2) + 25 ];
|
|
};
|
|
|
|
while { terrainIntersect [ _startpos, _endpos ] } do {
|
|
_startpos = [ _startpos select 0, _startpos select 1, (_startpos select 2) + 30 ];
|
|
_endpos = [ _endpos select 0, _endpos select 1, (_endpos select 2) + 30 ];
|
|
};
|
|
|
|
_cinematic_camera camSetPos _startpos;
|
|
_cinematic_camera camSetFov _startfov;
|
|
_cinematic_camera camCommit 0;
|
|
_cinematic_camera camSetPos _endpos;
|
|
_cinematic_camera camSetFov _endfov;
|
|
|
|
if ( isNil "howtoplay" ) then { howtoplay = 0; };
|
|
|
|
if ( first_camera_round ) then {
|
|
_cinematic_camera camcommit 18;
|
|
} else {
|
|
if ( howtoplay == 0 ) then {
|
|
_cinematic_camera camcommit 10;
|
|
} else {
|
|
_cinematic_camera camcommit 20;
|
|
};
|
|
};
|
|
first_camera_round = false;
|
|
|
|
if ( !isNil "showcaminfo" ) then {
|
|
if ( showcaminfo && howtoplay == 0 ) then {
|
|
private _unitname = "";
|
|
if ( isPlayer _camtarget ) then { _unitname = name _camtarget };
|
|
private _nearest_sector = "";
|
|
if ( _position distance startbase < 300 ) then {
|
|
_nearest_sector = "BEGIN OF OPERATION";
|
|
} else {
|
|
_nearest_sector = [300, _position ] call F_getNearestSector;
|
|
if ( _nearest_sector != "" ) then {
|
|
_nearest_sector = markertext _nearest_sector;
|
|
} else {
|
|
_nearfobs = [ GRLIB_all_fobs, { _x distance _position < 300 } ] call BIS_fnc_conditionalSelect;
|
|
if ( count _nearfobs > 0 ) then {
|
|
_nearest_sector = format [ "FOB %1", military_alphabet select ( GRLIB_all_fobs find ( _nearfobs select 0 ) ) ];
|
|
};
|
|
};
|
|
};
|
|
|
|
[ format [ "<t size='0.7' align='left'>%1<br/>%2</t>", _unitname, _nearest_sector ],1,0.8,6,1 ] spawn BIS_fnc_dynamictext;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
_cinematic_camera cameraEffect ["Terminate", "BACK"];
|
|
camDestroy _cinematic_camera;
|
|
camUseNVG false;
|
|
cinematic_camera_stop = true;
|