Code : Tout sélectionner
/*
SATELLITE.SQF
=============
version 2.0 (11.10.2009) © Pumpkin of M.O.S
Vue satellite avec déplacement par touches-flèches, sortie par "x" et zoome/dézoome par "+"/"-"
Paramètres :
------------
nul = [délai_de_clareté, délai_de_brouillage (, heure_de_visibilité_déterminée)] execVM "Satellite.sqf"
remarques :
® script "lib\GetGPSCoords.sqf" nécessaire pour afficher les coordonnées type GPS
® l'heure de départ doit s'inscrire sous forme fractionnaire avec décimal égale aux minutes : 8.30 = 8h30, 8.55 = 8h55,...
® le délai de visibilité est lié / calculé par rapport à l'heure de départ, par défaut 0.0 (recalculé si 3ème paramètre existe)
® Si on veut une heure précise d'affichage ou de brouillage, il suffit de fixer ou décaler l'heure de départ grâce au 3ème paramètre (facultatif)
*/
// Fonction pour calculer les coordonnées GPS
_func_coords = compile preprocessFile "lib\GetGPSCoords.sqf";
// Tous les paramètres recalculés en 1/100ème de minute
_delayvisible = (_this select 0) / 60;
_delaydown = (_this select 1) / 60;
_ttime = 0; // => _satvisible = true
if (count _this > 2) then { _ttime = _this select 2 };
_ttime = (floor _ttime) + (_ttime - (floor _ttime)) / 60 * 100;
// Modulo permettant de déterminé l'heure de départ pour heure de visibilité fixée
_nexttime = _ttime mod (_delayvisible + _delaydown);
_phases = true;
if ((_delayvisible + _delaydown) == 0) then { _phases = false };
// Un seul sat dispo par joueur
if (isnil "MOSOnlyOneSat") then {MOSOnlyOneSat = false};
if (MOSOnlyOneSat) exitwith {hint "Annulation satellite"};
hint "Cliquer 1X sur la carte\n(Click once on the map)";
// Timeout en secondes
_initialtime = daytime;
_timelimit = 30;
clickok = false;
while {not clickok} do {
_timeout = (daytime - _initialtime) * 3600;
if (_timeout > _timelimit) exitWith {clickok=false};
if (not alive player) exitWith {clickok=false};
onMapSingleClick "clickok = true;satpos=[_pos select 0,_pos select 1,0];";
sleep 0.01;
};
hint format ["Init Satellite... %1\n(Sortie du mode carte nécessaire avant affichage de la vue satellite)\n\nCommandes :\n Fleches = déplacements\n +/- = Zoom/Dezoom\n X = sortie",clickok];
if (clickok) then {
MOSOnlyOneSat = true;
publicVariable "MOSOnlyOneSat";
// Mise en place du handler du clavier
disableserialization;
keyspressed = compile preprocessFile "satellite\keyspressed.sqf";
_displayID = (findDisplay 46) displaySetEventHandler ["KeyDown","_this call keyspressed"];
// Détermine si le sat est visible en fonction de l'heure de départ (cf. init _nexttime)
_oldtime = 0;
// Init _satvisible à "false" pour entrer dans les effets "visibilité du sat" au moins une fois
_satvisible = false;
if (_phases) then {
while {_nexttime < daytime} do {
_satvisible = false;
_oldtime = _nexttime;
_nexttime = _nexttime + _delayvisible;
if (_nexttime >= daytime) exitwith {};
_satvisible = true;
_oldtime = _nexttime;
_nexttime = _nexttime + _delaydown;
};
_nexttime = _oldtime;
};
// Attendre que le joueur sorte de la vue map
if (visibleMap) then { waituntil {not visibleMap} };
// Créer l'objet cible de la caméra
_sattgt = "InvisibleFence2" createvehicle [satpos select 0, satpos select 1, -10];
_sattgt setpos [satpos select 0, satpos select 1, 0];
sleep 0.1;
// Position de la caméra, le décalage de -20 évite les rotations parasites de la caméra lors du déplacement
_sathipos = [satpos select 0, (satpos select 1) - 20, 250];
sleep 0.1;
// Création de la caméra
camera = "camera" camcreate satpos ;
camera cameraeffect ["external", "back"];
showCinemaBorder false;
camera camPreparePos _sathipos;
camera camPrepareTarget _sattgt;
camera camPrepareFOV 1;
camera camCommitPrepared 0;
waituntil{camCommitted camera};
// Effets visuels
_ppColor = ppEffectCreate ["colorCorrections", 500];
_ppColor ppEffectEnable true;
_ppColor ppEffectAdjust [-1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 0.0], [1, 1, 1, 1.0]]; // ppEffectAdjust [brightness, contrast, gamma, [R, G, B, multiplier], [R, G, B, multiplier], [R, G, B, multiplier]]
_ppColor ppEffectCommit 0;
_ppBlur = ppEffectCreate ["dynamicBlur", 400];
_ppBlur ppEffectEnable true;
_ppBlur ppEffectAdjust [.1]; // ppEffectAdjust [blur]
_ppBlur ppEffectCommit 0;
_ppGrain = ppEffectCreate ["filmGrain", 600];
_ppGrain ppEffectEnable true;
_ppGrain ppEffectAdjust [0.4, 1, 1, 0, 1]; // ppEffectAdjust [strength, alpha, scale, blend-light, blend-dark, ?]
_ppGrain ppEffectCommit 0;
waituntil{camCommitted camera};
keyout = 0;
movesatx = 0;
movesaty = 0;
zoom = 0;
_zoominout = 1;
_timer = 100;
_once = true;
for [{_infinite=0},{_infinite<=1},{_infinite=_infinite+1}] do {
if (not alive player) exitWith {};
if (keyout > 0) exitwith {};
if (_satvisible) then {
if ((movesatx != 0) or (movesaty != 0) or (zoom != 0)) then {
satpos = [(getpos _sattgt select 0) + movesatx, (getpos _sattgt select 1) + movesaty, 0];
_sattgt setpos [satpos select 0, satpos select 1, 50];
_sathipos = [satpos select 0, (satpos select 1) - 20, 250];
_zoominout = _zoominout + zoom;
if (_zoominout < 0.4) then {_zoominout = 0.4};
if (_zoominout > 1) then {_zoominout = 1};
camera camPreparePos _sathipos;
camera camPrepareTarget _sattgt;
camera camPrepareFOV _zoominout;
camera camCommitPrepared 0;
waituntil{camCommitted camera};
movesatx = 0;
movesaty = 0;
zoom = 0;
};
};
// Heure de changement de phase atteinte => bascule sur un autre affichage
if ((daytime >= _nexttime) and _phases) then { _once = true };
// Satellite visible
if ((not _satvisible) and _once) then {
_once = false;
_satvisible = true;
_nexttime = _nexttime + _delayvisible;
_ppColor ppEffectAdjust [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 1, 1]]; // ppEffectAdjust [brightness, contrast, gamma, [R, G, B, multiplier], [R, G, B, multiplier], [R, G, B, multiplier]]
_ppColor ppEffectCommit 2;
_ppBlur ppEffectAdjust [.1]; // ppEffectAdjust [blur]
_ppBlur ppEffectCommit 2;
_ppGrain ppEffectAdjust [0.4, 1, 1, 0, 1]; // ppEffectAdjust [strength, alpha, scale, blend-light, blend-dark, ?]
_ppGrain ppEffectCommit 2;
waituntil{camCommitted camera};
};
// Satellite non visible
if (_satvisible and _once and _phases) then {
_once = false;
_satvisible = false;
_nexttime = _nexttime + _delaydown;
_ppColor ppEffectAdjust [1.2, 0.2, 0, [1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 1, 1]]; // ppEffectAdjust [brightness, contrast, gamma, [R, G, B, multiplier], [R, G, B, multiplier], [R, G, B, multiplier]]
_ppColor ppEffectCommit 2;
_ppBlur ppEffectAdjust [20]; // ppEffectAdjust [blur]
_ppBlur ppEffectCommit 2;
_ppGrain ppEffectAdjust [0.5, 1, 2, 0.3, 0]; // ppEffectAdjust [strength, alpha, scale, blend-light, blend-dark, ?]
_ppGrain ppEffectCommit 2;
waituntil{camCommitted camera};
};
// Infos texte mis à jour ~ toutes les secondes
_timer = _timer + 1;
if (_timer > 100) then {
_timer = 0;
_gpsc = satpos call _func_coords;
_htime = daytime;
_ht = floor _htime;
_hm = floor ((_htime - _ht) * 6000) / 100;
_htime = _ht + (_htime - (floor _htime)) / 100 * 60;
_vtime = 0;
if (_phases) then { _vtime = floor ((_nexttime - daytime) * 60) };
cuttext [format ["%1 / GPS %2 / timeV: -%3mn / timeH: %4:%5",worldName,_gpsc,_vtime,_ht,_hm], "PLAIN DOWN"];
};
setMousePosition [0,0];
sleep 0.01;
_infinite = 0;
};
ppEffectDestroy _ppColor;
ppEffectDestroy _ppBlur;
ppEffectDestroy _ppGrain;
player cameraEffect ["terminate","back"];
camdestroy camera;
deletevehicle _sattgt;
(findDisplay 46) displayRemoveAllEventHandlers "KeyDown";
cuttext ["Fermeture connection satellite...", "BLACK IN",3];
};
MOSOnlyOneSat = false;
publicVariable "MOSOnlyOneSat";
hint "Fermeture connection satellite...";
Code : Tout sélectionner
_params = (_this select 3);
_params execVM "satellite\Satellite.sqf";
Code : Tout sélectionner
//disableserialization;
/*
private['_handled'];
_handled = false;
switch (_this select 1) do
{
//F key
case 33:
{
// code here
_handled = true;
hint "ca marche";
};
};
_handled;
*/
_key = _this select 1;
_left = actionKeys "TurnLeft";
_right = actionKeys "TurnRight";
_up = actionKeys "MoveForward";
_down = actionKeys "MoveBack";
_zin = actionKeys "ZoomIn";
_zout = actionKeys "ZoomOut";
//player globalchat format ["%1",_key];
_step = 2;
if (_key in _right) then { movesatx = _step };
if (_key in _left) then { movesatx = -1 * _step };
if (_key in _up) then { movesaty = _step };
if (_key in _down) then { movesaty = -1 * _step };
if (_key in _zin) then { zoom = -0.01 };
if (_key in _zout) then { zoom = 0.01};
// touche "x" pour sortir
if (_key == 45) then { keyout = _key };
EDIT : j'avais oublié le script de coordonnées qui va avec, vu que s'est l'utilité de départ autant le mettre.
Code : Tout sélectionner
/*
GetGPSCoords.sqf © Pumpkin of M.O.S
Paramètres :
------------
1. Accés dans le script :
_func_coords = compile preprocessFile "GetGPSCoords.sqf";
2. Résultats :
_retourcoords = [délai_de_clareté, délai_de_brouillage (, heure_de_visibilité_déterminée)] execVM "Satellite.sqf"
® variables "_func_coords" et "_retourcoords" arbitraires
® cadran 000000 en 0,5200 pour Utes
® cadran 000000 en 0,15260 pour Chernarus
*/
_xmap = _this select 0;
_ymap = _this select 1;
_gpsX = floor (_xmap / 100);
_compX = "";
if (_gpsX < 100) then {_compX = "0" };
if (_gpsX < 10) then {_compX = "00" };
_wd = worldName;
_zeroY = 15260; // Chernarus
if (_wd == "Utes") then {_zeroY = 5020};
_gpsY = floor ((_zeroY - _ymap + 100) / 100);
_compY = "";
if (_gpsY < 100) then {_compY = "0" };
if (_gpsY < 10) then {_compY = "00" };
_gpscoords = format["%1%2%3%4",_compX,_gpsX,_compY,_gpsY];
_gpscoords;