Français Caméra management

29/1/20
125
7
27
950
Bonjour aujourd'hui je release un script que j'ai fait cette nuit car je n'avais rien de mieux a faire

Crédits : Moi (Daniels Morris)
Difficulté d'installation : Ez (facile)

A quoi ressemble le script ?


Pret ? C'est parti !

Etape 1 :
Dans le fichier config_master.hpp du dossier config rajoutez cette ligne à la fin du fichier :
[CODE title="Master"]#include "Config_camera.hpp"[/CODE]


Puis créez un fichier dans le dosser config que vous nommerez Config_camera.hpp
Et rajoutez ces lignes dans le fichier que vous venez de créer

[CODE lang="http" title="Config_camera.hpp"]/*
Fichier: Config_camera.hpp
Auteur : Daniels Morris

Description :
Permet d'ajouter des caméras
*/

/*
class Exemple { //Iici met un nom pour te repérer
Nom = "Place de Kavala"; // Le nom qui apparaitra dans la listbox
icon = "\A3\ui_f\data\IGUI\cfg\simpleTasks\letters\k_ca.paa"; //L'icon que tu veux mettre
pos[] = {{3612.12,13149.1,10}, {3648.66,13108.1,0.00144291}};//Array 1 = Endroit ou spawn la caméra , Array 2 = Endroit ou la caméra doit regarder
};
*/
class CameraTarget {

class PlaceKavala {
Nom = "Place de Kavala";
icon = "\A3\ui_f\data\IGUI\cfg\simpleTasks\letters\k_ca.paa";
pos[] = {{3612.12,13149.1,10}, {3648.66,13108.1,0.00144291}};
};

class PlaceAthira {
Nom = "Place d'Athira";
icon = "\A3\ui_f\data\IGUI\cfg\simpleTasks\letters\a_ca.paa";
pos[] = {{14007.9,18718.9,20.7253}, {14050.1,18753.4,0.00148582}};
};

class Aeroport {
Nom = "Aéroport";
icon = "\A3\ui_f\data\IGUI\cfg\simpleTasks\letters\a_ca.paa";
pos[] = {{14603.4,16788,17.7987}, {14528.1,16854.2,0.00144768}};
};
};[/CODE]

Etape 2:
Rendez vous dans le core/configuration.sqf et ajoutez à la fin du fichier (comme sur l'image) :
[CODE title="Configuration.sqf"]life_camManager = objNull;
[/CODE]
6a2055f39cdbee3926793ae2c7b0f715.png

https://gyazo.com/6a2055f39cdbee3926793ae2c7b0f715

Etape 3:
Dans le dialog/MasterHandler.hpp ajoutez à la fin cette ligne :
[CODE title="Dialog"]#include "CameraManager.hpp"[/CODE]

Une fois fait, créez le fichier CameraManager.hpp dans le dossier dialog et mettez ceci à l'intérieur :

[CODE lang="php" title="Dialog"]/*
Fichier: CameraManager.hpp
Auteur : Daniels Morris
*/

/* Positions */
#define Xd_PositionX(X) #((((X * (getResolution select 0)) / 1920) * safeZoneW) / (getResolution select 0) + safeZoneX)
#define Xd_PositionY(Y) #((((Y * (getResolution select 1)) / 1080) * safeZoneH) / (getResolution select 1) + safeZoneY)
#define Xd_PositionW(W) #((((W * (getResolution select 0)) / 1920) * safeZoneW) / (getResolution select 0))
#define Xd_PositionH(H) #((((H * (getResolution select 1)) / 1080) * safeZoneH) / (getResolution select 1))
#define Xd_PositionXGroup(X) #((((X * (getResolution select 0)) / 1920) * safeZoneW) / (getResolution select 0))
#define Xd_PositionYGroup(Y) #((((Y * (getResolution select 1)) / 1080) * safeZoneH) / (getResolution select 1))
#define Xd_FontSize(H) #(((H * 0.00222222) * (getResolution select 1)) / 1080)

/* Colors */
#define Xd_toColor_RGBA(R,G,B,A) { R / 255, G / 255, B / 255, A / 255 }
#define Xd_Color_ffffff Xd_toColor_RGBA(255,255,255,255)

/* IDXs */
#define Xd_IdBaseline 18981
#define Xd_IdControl_Web_1920___1_Background Xd_IdBaseline + 1
#define Xd_IdControl_Web_1920___1_Image Xd_IdBaseline + 2
#define Xd_IdControl_Web_1920___1_ListBox Xd_IdBaseline + 3
#define Xd_IdControl_Web_1920___1_Titre Xd_IdBaseline + 4

class CameraManager {
idd = 6676;
name= "CameraManager";
movingEnable = 0;
enableSimulation = 1;

class Controls {
class Background: IGUIBack {
idc = -1;
x = Xd_PositionX(691);
y = Xd_PositionY(295);
w = Xd_PositionW(538);
h = Xd_PositionH(490);
colorBackground[] = {0,0,0,0.7};
};

class Image: life_RscPicture {
idc = 6677;
x = Xd_PositionX(705);
y = Xd_PositionY(311);
w = Xd_PositionW(511);
h = Xd_PositionH(395);
text = "";
};

class ListBox: life_RscXListBox {
idc = 6678;
x = Xd_PositionX(754);
y = Xd_PositionY(720);
w = Xd_PositionW(413);
h = Xd_PositionH(44);
colorBackground[] = {0,0,0,0.7};
sizeEx = 0.035;
tooltip = "Clique ici pour changer de caméra";
onLBSelChanged = "[]spawn life_fnc_cameraPos;";
};

class Titre: Life_RscTitle {
idc = -1;
x = Xd_PositionX(691);
y = Xd_PositionY(265);
w = Xd_PositionW(538);
h = Xd_PositionH(25);
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
text = "Management des caméras";
};

class Credits: Life_RscTitle {
idc = -1;
x = Xd_PositionX(949);
y = Xd_PositionY(794);
w = Xd_PositionW(280);
h = Xd_PositionH(31);
colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
text = "Crée par : Daniels Morris"
};
};
};
[/CODE]

Etape 4:
On y est presque !
Dans votre dossier core, créez un dossier camera_manager
Dans ce dossier mettez ces 2 fichiers :

[CODE lang="php" title="fn_cameraChange.sqf"]/*
Fichier: fn_cameraChange.sqf
Auteur : Daniels Morris

Description :
Permet de load les caméra depuis la config
*/
disableSerialization;
createDialog "CameraManager";
private _dialog = findDisplay 6676;
private _listbox = _dialog displayCtrl 6678;
private _config = missionConfigFile >> "CameraTarget";

private _config = "true" configClasses (missionConfigFile >> "CameraTarget");
{
private _index = _listbox lbAdd format ["%1",getText(_x >> "Nom")];
private _pos = getArray(_x >> "pos");
_listbox lbSetPicture [_index,getText(_x >> "icon")];
_listbox lbSetData [_index,str (_pos)];
}forEach _config;

_listbox lbSetCurSel 0;
[/CODE]

[CODE lang="cpp" title="fn_cameraPos.sqf"]/*
Fichier: fn_cameraPos.sqf
Auteur : Daniels Morris

Description :
Permet le switch des cameras
*/

private _dialog = findDisplay 6676;
private _picture = _dialog displayCtrl 6677;
private _listbox = _dialog displayCtrl 6678;
private _index = lbCurSel _listbox;
private _data = _listbox lbData _index;
private _parse = parseSimpleArray _data;
if !(isPipEnabled) exitWith {hint "Vous devez activer le 'Picture in Picture' (PiP) dans vos paramètres vidéo pour utilser ceci !"};
if (_index isEqualTo -1) exitWith {};

private _poscreate = (_parse #0);
private _rotate = (_parse #1);

if !(life_camManager isEqualTo objNull) then {
life_camManager cameraEffect ["terminate","back"];
camDestroy life_camManager;
life_camManager = objNull;
};

_picture ctrlSetText "";
_picture ctrlSetText "#(argb,512,512,1)r2t(rtt1,1.0)";
life_camManager = "camera" camCreate _poscreate;
life_camManager setPos _poscreate;
life_camManager camSetTarget _rotate;
life_camManager camSetFov 0.5;
life_camManager cameraEffect ["Internal", "Back", "rtt1"];
if (daytime >= 20 && daytime >= 5) then {
"rtt1" setPiPEffect [1];
} else {
"rtt1" setPiPEffect [0];
};
life_camManager camCommit 0;[/CODE]

Etape 5:
En fin , allez dans votre functions.hpp et déclarez comme ceci vos nouveaux fichiers en rajoutant ces lignes en dessous de

Code:
tag = "life";

[CODE lang="csharp" title="Functions.hpp"] class camera_manager {
file = "core\camera_manager";
class cameraChange {};
class cameraPos {};
};[/CODE]

Tips : Si vous souhaitez activer le menu à partir d'un panneau utilisez :
[CODE lang="csharp" title="addaction"]this addAction["<t color='#ff0000'>Caméras</t>",life_fnc_cameraChange,"",0,false,false,"",'vehicle player == player && player distance _target < 4 '];
[/CODE]

Tips 2 : Si vous souhaitez activiter le menu à partir d'un bouton utilisez :
Code:
 onButtonClick = "call life_fnc_cameraChange";

Voila le tuto est fini, si vous avez des questions , n'hésitez pas.
Merci de laisser les crédits !
 
Dernière édition:
Daniels Morris Daniels Morris

A tu créer tes propres listbox ? Car la du coup ça reste figé et ce n'est pas la même listbox que dans ta vidéo =)

 
Dernière édition:
Dans ton common.hpp r'ajoute :

[CODE lang="php" title="IGUI"]class IGUIBack
{
type = 0;
idc = 124;
style = 128;
text = "";
colorText[] =
{
0,
0,
0,
0
};
font = "RobotoCondensed";
sizeEx = 0;
shadow = 0;
x = 0.1;
y = 0.1;
w = 0.1;
h = 0.1;
colorbackground[] =
{
"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])",
"(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])",
"(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])",
"(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])"
};
};[/CODE]

et r'ajoute

[CODE lang="php" title="RscxListbox"]class life_RscXListBox
{
access = 0;
idc = CT_XLISTBOX;
type = CT_XLISTBOX;
style = SL_HORZ + ST_CENTER + LB_TEXTURES;
default = 0;
blinkingPeriod = 0;
x = 12 * GUI_GRID_CENTER_W + GUI_GRID_CENTER_X;
y = 17 * GUI_GRID_CENTER_H + GUI_GRID_CENTER_Y;
w = 10 * GUI_GRID_CENTER_W;
h = 1 * GUI_GRID_CENTER_H;
color[] = {1,1,1,1};
colorActive[] = {1,1,1,1};
sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
font = "PuristaMedium";
shadow = 0;
colorText[] = {1,1,1,1}; // Text color
colorSelect[] = {1,1,1,1}; // Selected text color
colorDisabled[] = {1,1,1,0.5}; // Disabled text color
tooltip = ""; // Tooltip text
tooltipColorShade[] = {0,0,0,0}; // Tooltip background color
tooltipColorText[] = {1,1,1,0}; // Tooltip text color
tooltipColorBox[] = {1,1,1,0}; // Tooltip frame color
colorPicture[] = {1,1,1,1};
colorPictureSelected[] = {1,1,1,1};
colorPictureDisabled[] = {1,1,1,1};
arrowEmpty = "\A3\ui_f\data\gui\cfg\slider\arrowEmpty_ca.paa"; // Arrow
arrowFull = "\A3\ui_f\data\gui\cfg\slider\arrowFull_ca.paa"; // Arrow when clicked on
border = "\A3\ui_f\data\gui\cfg\slider\border_ca.paa"; // Fill texture
soundSelect[] = {"\A3\ui_f\data\sound\RscListbox\soundSelect",0.09,1};
};
[/CODE]

Tu ajoute ces 2 trucs n'importe ou dans ton common.hpp
 
Ah, merci =)

Pour la fenêtre qui resté grisé, elle se débloque avec la touche tab, je ne sais pas si c'est voulu ?
 


Voila encore un shlag xD

Je laisse ça de côté pour le moment, il faudrait que tu imagine partir sur une mission vierge pour faire les tutos je pense =) tu bosse sur un framework bien à toi et donc des paramètres que nous n'avons pas nous bloque =)

Merci pour ce partage tout de même, J'attendrais que ton script soit plus "vierge" :giggle: