mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
140 lines
5.5 KiB
Plaintext
140 lines
5.5 KiB
Plaintext
/*
|
|
Author: He-Man
|
|
|
|
Contributors:
|
|
|
|
Description: BaseCam Script
|
|
|
|
Licence:
|
|
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
|
|
|
Github:
|
|
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_CamUse.sqf
|
|
*/
|
|
|
|
private ["_mycams","_curcam"];
|
|
|
|
_mycams = EPOCH_BaseCams select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]};
|
|
if (["CfgEpochClient", "BaseCamOnlyHome",true] call EPOCH_fnc_returnConfigEntryV2) then {
|
|
_mycams = _mycams select {
|
|
_cam = _x;
|
|
_jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {_cam distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
|
|
!((_jammer select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]}) isequalto [])
|
|
};
|
|
};
|
|
if !(_mycams isequalto []) then {
|
|
_curcam = _mycams find Epoch_ActiveCam;
|
|
if (_curcam > -1 && (count _mycams) > (_curcam + 1)) then {
|
|
Epoch_ActiveCam = _mycams select (_curcam + 1);
|
|
}
|
|
else {
|
|
Epoch_ActiveCam = _mycams select 0;
|
|
};
|
|
}
|
|
else {
|
|
Epoch_ActiveCam = objnull;
|
|
};
|
|
|
|
if !(isnull (finddisplay -1200)) exitwith {};
|
|
if (isnull Epoch_ActiveCam) exitwith {
|
|
["No Camera found",5] call Epoch_Message;
|
|
};
|
|
|
|
_mycams spawn {
|
|
private ["_mycams","_display","_AutoCam","_ActiveCam","_campos","_CamFov","_CamDir","_CamDist","_EpochCam","_targetheight","_targetpos","_dirs","_intensity","_sharpness","_h","_oldalpha","_newalpha"];
|
|
_mycams = _this;
|
|
createdialog 'Epoch_CamDialog';
|
|
waituntil {!isnull finddisplay -1200};
|
|
_display = finddisplay -1200;
|
|
(_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1];
|
|
(_display displayctrl 1001) ctrlsetstructuredtext parseText format [
|
|
"<t align='center' color='#FFFF00' size='1'>Controls:</t><br/><br/>Cam Up: %1<br/>Cam Down: %2<br/>Cam Left: %3<br/>Cam Right: %4<br/>Zoom In: %5<br/>Zoom Out: %6<br/><br/>AutoCam: %7<br/>NextCam: %8",
|
|
keyName Epoch_KB_BaseCamUp,keyName Epoch_KB_BaseCamDown,keyName Epoch_KB_BaseCamLeft,keyName Epoch_KB_BaseCamRight,keyName Epoch_KB_BaseCamZoomIn,keyName Epoch_KB_BaseCamZoomOut,keyName Epoch_KB_BaseCamAutoCam,keyName Epoch_KB_BaseCamNextCam
|
|
];
|
|
Epoch_AutoCam = true;
|
|
_AutoCam = Epoch_AutoCam;
|
|
Epoch_CamAdjust = [0,0,0];
|
|
_ActiveCam = Epoch_ActiveCam;
|
|
_campos = Epoch_ActiveCam getRelPos [0.2,180];
|
|
_campos set [2,(getposatl Epoch_ActiveCam select 2)];
|
|
if (isnil "Epoch_CamFilmGrain") then {
|
|
Epoch_CamFilmGrain = ppEffectCreate ["FilmGrain", 2000 + 25];
|
|
};
|
|
Epoch_CamFilmGrain ppEffectEnable true;
|
|
_intensity = ((player distance Epoch_ActiveCam) / 4000) min 1;
|
|
_sharpness = 1.25 - _intensity;
|
|
Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true];
|
|
Epoch_CamFilmGrain ppEffectCommit 0;
|
|
_CamFov = 0.7;
|
|
_CamDir = 0;
|
|
_CamDist = 250;
|
|
_EpochCam = 'camera' camCreate _campos;
|
|
showCinemaBorder true;
|
|
_EpochCam cameraEffect ['internal', 'front'];
|
|
_EpochCam camCommit 0;
|
|
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
|
|
_targetpos = Epoch_ActiveCam getRelPos [_CamDist, 180+_CamDir];
|
|
_targetpos set [2,_targetheight];
|
|
if !(surfaceiswater _targetpos) then {
|
|
_targetpos = ASLtoATL _targetpos;
|
|
};
|
|
_EpochCam camSetTarget _targetpos;
|
|
_EpochCam camCommit 0;
|
|
_dirs = [5,10,15,20,25,30,35,40,45,40,35,30,25,20,15,10,5,0,-5,-10,-15,-20,-25,-30,-35,-40,-45,-40,-35,-30,-25,-20,-15,-10,-5,0];
|
|
_GrainUpdateIntervall = 5;
|
|
_nextgrainupdate = diag_ticktime;
|
|
while {!isnull _display} do {
|
|
Epoch_CamAdjust params ["_dir","_height","_zoom"];
|
|
_playerdist = player distance Epoch_ActiveCam;
|
|
_AutoCam = Epoch_AutoCam;
|
|
if !(_ActiveCam isequalto Epoch_ActiveCam) then {
|
|
_ActiveCam = Epoch_ActiveCam;
|
|
camDestroy _EpochCam;
|
|
_campos = Epoch_ActiveCam getRelPos [0.2,180];
|
|
_campos set [2,(getposatl Epoch_ActiveCam select 2)];
|
|
_CamFov = 0.7;
|
|
_CamDir = 0;
|
|
_EpochCam = 'camera' camCreate _campos;
|
|
showCinemaBorder true;
|
|
_EpochCam cameraEffect ['internal', 'front'];
|
|
_EpochCam camCommit 0;
|
|
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
|
|
(_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1];
|
|
};
|
|
if (_nextgrainupdate <= diag_ticktime) then {
|
|
_intensity = (_playerdist / 4000) min 1;
|
|
_sharpness = 1.25 - _intensity;
|
|
Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true];
|
|
Epoch_CamFilmGrain ppEffectCommit _GrainUpdateIntervall;
|
|
_nextgrainupdate = diag_ticktime + _GrainUpdateIntervall;
|
|
};
|
|
if !(Epoch_AutoCam) then {
|
|
_targetheight = ((_targetheight + _height) min 50) max -150;
|
|
_CamDir = ((_CamDir + _dir) max -45) min 45;
|
|
_CamFov = ((_CamFov + _zoom) min 1.25) max 0.35;
|
|
}
|
|
else {
|
|
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
|
|
_CamFov = 0.7;
|
|
_CamDir = _dirs deleteat 0;
|
|
_dirs pushback _CamDir;
|
|
};
|
|
_targetpos = Epoch_ActiveCam getRelPos [_CamDist, 180+_CamDir];
|
|
_targetpos set [2,_targetheight];
|
|
if !(surfaceiswater _targetpos) then {
|
|
_targetpos = ASLtoATL _targetpos;
|
|
};
|
|
_EpochCam camSetTarget _targetpos;
|
|
_EpochCam camSetFov _CamFov;
|
|
_EpochCam camCommit 0.75;
|
|
Epoch_CamAdjust = [0,0,0];
|
|
waitUntil {camCommitted _EpochCam || isnull _display || isnull Epoch_ActiveCam || !(_ActiveCam isequalto Epoch_ActiveCam)};
|
|
if (isnull Epoch_ActiveCam) exitwith {};
|
|
};
|
|
player cameraEffect ['Terminate', 'FRONT'];
|
|
camDestroy _EpochCam;
|
|
_display closedisplay 0;
|
|
Epoch_ActiveCam = objnull;
|
|
Epoch_CamFilmGrain ppEffectEnable false;
|
|
};
|