Hallo NN,
heute zeige ich euch meine neue Deathscreen GUI.
Das Thema hier soll kein Tutorial werden, sondern euch nur zeigen, wie man eine GUI effektiv animieren kann und wie das dann aussehen kann.
Aus diesem Zweck habe ich euch mal meinen Dialog und die dazugehörige Funktion mit in das Thema gepostet.
Die fertige GUI sieht ungefähr so aus: ShadowOfKlon - DE100 NEW DEATH SCREEN IN ACTION V2 - Plays.tv
Wichtig ist, dass es einige CTRLs gibt die man nicht animieren kann, bzw. die man nicht faden kann, wie z.B. die Map Ctrl.
Mfg.
Lucian
PS:
Das Thema habe ich in Alits Life/Tutorials erstellt, da die im Beitrag gepostete GUI sowie die Funktion für Altis Life entwickelt wurden. Sollte ein Moderator/Admin das Thema verschieben wollen, soll er das gerne machen.
class Respawn_Screen
{
idd = 7000;
movingEnabled = false;
enableSimulation = true;
onLoad = "(_this + [0,0]) spawn life_fnc_deathScreen;";
onKeyDown = "if((_this select 1) == 1) then {true;};";
class controlsBackground
{
class logo: RscPicture
{
idc = 1;
text = "images\ui\ui_logo_full.paa";
x = 0.412344 * safezoneW + safezoneX;
y = 0.181 * safezoneH + safezoneY;
w = 0.175313 * safezoneW;
h = 0.297 * safezoneH;
};
class BG: Life_RscText
{
idc = 2;
colorBackground[] = {0.9,0.9,0.9,0.85};
x = 0.386562 * safezoneW + safezoneX;
y = 0.412 * safezoneH + safezoneY;
w = 0.226875 * safezoneW;
h = 0.363 * safezoneH;
};
};
class Controls
{
class THR_COUNT: Life_RscText
{
idc = 3;
colorText[] = {0, 0, 0, 1};
colorShadow[] = {1, 1, 1, 0.2};
shadow = 1;
text = "THR-Mitglieder im Spiel: 1 Spieler"; //--- ToDo: Localize;
x = 0.391719 * safezoneW + safezoneX;
y = 0.434 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.026 * safezoneH;
sizeEx = 0.026 * safeZoneH;
};
class THR_REQ: THR_COUNT
{
idc = 4;
text = "THR-Mitglied ist auf dem Weg: Nein"; //--- ToDo: Localize;
x = 0.391719 * safezoneW + safezoneX;
y = 0.458 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.026 * safezoneH;
};
class RESPAWN_INFO: THR_COUNT
{
idc = 5;
style = 0x02;
text = "Respawn verfügbar in: 05:30"; //--- ToDo: Localize;
x = 0.391719 * safezoneW + safezoneX;
y = 0.5 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.054 * safezoneH;
sizeEx = 0.033 * safeZoneH;
};
class RESPAWN_BTN: Life_RscButtonMenu
{
onButtonClick = "[findDisplay 7000,1,0] spawn life_fnc_deathScreen;";
idc = 6;
text = "Neues Leben"; //--- ToDo: Localize;
colorText[] = {0, 0, 0, 1};
x = 0.391719 * safezoneW + safezoneX;
y = 0.566 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.055 * safezoneH;
size = 0.042 * safeZoneH;
colorBackground[] = {0,0,0,0};
colorBackgroundActive[] = {0,0,0,0};
colorDisabled[] = {0.5,0.5,0.5,1};
color[] = {0,0,0,1};
color2[] = {0,0,0,1};
colorFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])",1};
animTextureOver = "#(argb,8,8,3)color(0,0,0,0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0)";
animTextureDisabled = "#(argb,8,8,3)color(0.5,0.5,0.5,1)";
class Attributes : Attributes {
align = "center";
};
};
class THR_REQ_BTN: RESPAWN_BTN
{
idc = 7;
onButtonClick = "[0] call life_fnc_thrRequest;";
text = "THR rufen"; //--- ToDo: Localize;
x = 0.391719 * safezoneW + safezoneX;
y = 0.632 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.055 * safezoneH;
};
class DISCONNECT: RESPAWN_BTN
{
idc = 8;
onButtonClick = "[findDisplay 7000,1,1] spawn life_fnc_deathScreen;";
text = "Verlassen"; //--- ToDo: Localize;
x = 0.391719 * safezoneW + safezoneX;
y = 0.698 * safezoneH + safezoneY;
w = 0.216563 * safezoneW;
h = 0.055 * safezoneH;
};
};
};
Alles anzeigen
#include "..\..\script_macros.hpp"
/*
File: fn_deathScreen.sqf
Date: 2016-07-15 13:50:45
Author: Patrick "Lucian" Schmidt
Description:
Take a look for yourself.
*/
#define FADEIN 0
#define FADEOUT 1
#define RESPAWN 0
#define DISCONNECT 1
#define REVIVED 2
disableSerialization;
params[
["_display", displayNull, [displayNull]],
["_mode", 0, [0]],
["_exit", 0, [0]],
"_ctrls",
"_handle",
"_confirm"
];
if (_display getVariable ["exit",false]) exitwith {};
_ctrls = allControls _display;
switch (_mode) do {
case FADEIN : {
life_deathScreen = true;
_handle = ppEffectCreate ["DynamicBlur", 401];
_handle ppEffectForceInNVG true;
_handle ppEffectEnable true;
_handle ppEffectAdjust [4];
_handle ppEffectCommit 1.5;
_display setVariable ["Blur",_handle];
{
_x ctrlSetFade 1;
_x ctrlCommit 0;
} forEach _ctrls;
[] spawn {
disableSerialization;
private _display = findDisplay 7000;
private _time = time + (2 * 60);
private _called = false;
private _finished = false;
life_thr_request = false;
(_display displayCtrl 6) ctrlEnable false;
(_display displayCtrl 8) ctrlEnable false;
while {!isNull _display} do {
if (life_thr_request && !_called) then {
if (_time <= 0) then {
_time = time + (5*60);
} else {
_time = _time + (3*60);
};
_called = true;
_finished = false;
};
private _txt = if (!isNull (player getVariable ["thrClerk",objNull])) then {
"Ja";
} else {
"Nein";
};
(_display displayCtrl 3) ctrlSetText format["THR-Mitglieder im Spiel: %1 Spieler",{side _x isEqualTo independent && _x getVariable["isAlive",true]} count allPlayers];
(_display displayCtrl 4) ctrlSetText format["THR-Mitglied auf dem Weg: %1",_txt];
if (round(_time - time) > 0) then {
(_display displayCtrl 5) ctrlSetText format["Respawn verfügbar in: %1",[round(_time - time),"MM:SS"] call BIS_fnc_secondsToString];
} else {
if (!_finished) then {
(_display displayCtrl 5) ctrlSetText "Du kannst nun respawnen";
(_display displayCtrl 6) ctrlEnable true;
(_display displayCtrl 8) ctrlEnable true;
_finished = true;
};
};
if (!isNull ((missionNamespace getVariable["life_corpse",player]) getVariable ["reviver",objNull])) then {
(_display displayCtrl 5) ctrlSetText "Du wirst wiederbelebt...";
(_display displayCtrl 6) ctrlEnable false;
(_display displayCtrl 8) ctrlEnable false;
_finished = false;
};
uiSleep 1;
};
};
uiSleep 2;
{
_x ctrlSetFade 0;
_x ctrlCommit 1;
uiSleep 0.25;
} forEach _ctrls;
};
case FADEOUT : {
if (_display getVariable ["exit",false]) exitwith {};//DoubleCheck to be SURE that it cant be executed 2 times
_display setVariable ["exit",true];
reverse _ctrls;
{
_x ctrlSetFade 1;
_x ctrlCommit 1;
uiSleep 0.35;
} forEach _ctrls;
waitUntil {ctrlCommitted (_ctrls select (count _ctrls -1))};
uiSleep 0.3;
_handle = _display getVariable ["Blur",0];
_display closeDisplay 2;
switch (_exit) do {
case RESPAWN : {
life_respawned = true;
[] call life_fnc_spawnMenu;
};
case DISCONNECT : {
if (!isNil "_handle") then {
_handle ppEffectAdjust [0];
_handle ppEffectCommit 3;
};
life_firstSpawn = true;
bank_obj setVariable [(format["DE100_UID_%2_%1",(getPlayerUID player),playerSide]),nil,true];
if (!isNull (missionNamespace getVariable ["life_corpse",objNull])) then {
hideBody life_corpse;
};
[]spawn life_fnc_logout;
(findDisplay 49)closeDisplay 2;
};
case REVIVED : {
if (!isNil "_handle") then {
_handle ppEffectAdjust [0];
_handle ppEffectCommit 3;
};
};
};
life_deathScreen = false;
if (!isNil "_handle") then {
waitUntil {ppEffectCommitted _handle};
_handle ppEffectEnable false;
ppEffectDestroy _handle;
};
};
};
Alles anzeigen