7erra/Sandbox – User

From Bohemia Interactive Community
Jump to navigation Jump to search
(Overhaul of GUI coordinates)
(bis_fnc_arsenal variables)
 
(44 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{wip}}
=== Variables ===
== Example ==
This is a list of all the variables that are used by the Virtual Arsenal.
{{GVI|arma3|1.66}}
{| class="wikitable"
You can check some of the grid systems in interactive test menu in game:
|-
# Open [[Eden Editor]]
! colspan=3 | [[missionNamespace]]
# Open debug console (Tools > Debug Console)
|-
# Execute this code: <syntaxhighlight lang="cpp">finddisplay 313 createdisplay "RscTestGrids";</syntaxhighlight>
! Variable !! Data Type !! Explanation
 
|-
A menu where you can see how all grid systems react to specific resolution, aspect ratio and interface size.
| BIS_fnc_arsenal_data || [[Array]] of arrays of [[String|strings]] || All available items that can be accessed in the Arsenal (not the actual content!). Format:<br>
 
[[File:a3_GUI_grids.png|320px]]
* Hovering over each grid will show detailed description in tooltip.
* Data for each grid show the current size and max number of grids horizontally and vertically. Useful to making sure your menu proportions will work in all combinations.
* Click COPY TO CLIPBOARD button to copy a code with example that can be used directly in [[Config.cpp]] or [[Description.ext]].


== Grids ==
=== [[safeZone]] ===
To keep the dialog on screen the safeZone values were introduced. Here is a quick overview over the six commands:
{| class="wikitable"
{| class="wikitable"
|-
|-
! Command !! Explanation
! Index !! Content
|-
| 0 || Primary Weapons
|-
| 1 || Secondary Weapons
|-
| 2 || Handguns
|-
| 3 || Uniforms
|-
| 4 || Vests
|-
| 5 || Backpacks
|-
| 6 || Headgear
|-
| 7 || Goggles
|-
| 8 || NVGs
|-
| 9 || Binoculars
|-
| 10 || Maps
|-
| 11 || GPS
|-
| 12 || Radio
|-
| 13 || Compass
|-
|-
| [[safeZoneX]] || The left edge of the screen on SINGLE monitor settings.
| 14 || Watch
|-
|-
| [[safeZoneXAbs]] || The left edge of the screen on MULTIPLE monitors (Triple Head, three screens).
| 15 || Face (empty)
|-
|-
| [[safeZoneY]] || The top edge of the screen.
| 16 || Voice (empty)
|-
|-
| [[safeZoneW]] || The width of of the screen in a SINGLE monitor setup (or the center one in case of triple head).
| 17 || Insignia (empty)
|-
|-
| [[safeZoneWAbs]] || The width of a triple head setup. In case of a single monitor this is equal to safeZoneW.
| 18 || Optic attachments (empty)
|-
|-
| [[safeZoneH]] || The height of the screen
| 19 || Side attachments (empty)
|}
 
<syntaxhighlight lang="cpp">
//--- Text box which covers the top left quarter of the (center) screen
class TextboxTopLeftQuarter: RscText
{
x = safezoneX;
y = safezoneY;
w = 0.5 * safezoneW;
h = 0.5 * safezoneH;
};
//--- Textbox which covers the entire screen on a triple head setup
class TextboxFullTripleScreen: RscText
{
x = safeZoneXAbs;
y = safeZoneY;
w = safeZoneWAbs;
h = safeZoneH;
};
</syntaxhighlight >
 
=== GUI_GRID ===
The GUI_GRID is based on the safeZone grid and is used by the majority of the game's dialogs. The additional functionality is the possibility to stay on screen even with different user settings such as aspect ratio or UI scale. It also helps to keep a uniform style between dialogs. If you are using the base classes starting with "Rsc" then it is advisable to use this grid. The defines for use in configs and scripts can be accessed by adding the following line to your config:
<code>#include "\a3\ui_f\hpp\definecommongrids.inc"</code>
The following table will list the most commonly used grids which are defined in said file. To use them add the appropiate suffix _X, _Y, _W or _H to the variable name, eg GUI_GRID includes GUI_GRID_X, GUI_GRID_Y, GUI_GRID_W and GUI_GRID_H. The centering refers to the position in which the UI will stay even for different UI sizes. X means horizontally, Y is vertically.
{| class="wikitable"
|-
|-
! Variable !! X !! Y !! Notes
| 20 || Muzzle attachments (empty)
|-
|-
| GUI_GRID || Left || Bottom || Example: Escape menu (RscDisplayInterrupt)
| 21 || Compatible magazines (empty)
|-
|-
| GUI_GRID_CENTER || Center || Middle || Example: RscDisplayTeamSwitch
| 22 || Grenades
|-
|-
| GUI_GRID_TOPCENTER || Center || Top ||  
| 23 || Placeables
|-
|-
| GUI_GRID_BOTTOMCENTER || Center || Bottom || Example: Revive UI
| 24 || Miscellaneous
|-
|-
| GUI_GRID_CENTER_BOTTOM || Center || Bottom || Same as GUI_GRID_BOTTOMCENTER
| 25 || Bipod attachments (empty)
|-
|-
| GUI_GRID_TOPLEFT || Left || Top || Diary (the top left part of the map)
| 26 || All magazines
|}
|}


The GUI_GRID divides the screen into 40 parts on the horizontal axis and into 25 vertically. Therefore no content should have negative x or y values nor should it exceed a width of 40 or a height of 25. Using a height of 25 or width of 40 is not the same as using screen height or width because the GUI_GRID will get smaller with smaller UI sizes as it should be. Examples:
|}
<syntaxhighlight lang="cpp">
//--- Okay, will use entire available space:
x = GUI_GRID_CENTER_X + 0 * GUI_GRID_CENTER_W;
y = GUI_GRID_CENTER_Y + 0 * GUI_GRID_CENTER_H;
w = 40 * GUI_GRID_CENTER_W;
h = 25 * GUI_GRID_CENTER_H;
</syntaxhighlight >
<syntaxhighlight lang="cpp">
//--- NOT okay:
x = GUI_GRID_CENTER_X - 1 * GUI_GRID_CENTER_W;
y = GUI_GRID_CENTER_Y - 1 * GUI_GRID_CENTER_H;
w = 50 * GUI_GRID_CENTER_W;
h = 30 * GUI_GRID_CENTER_H;
</syntaxhighlight >
The second example will dissapear on certain settings on the left and top edge as well as exceed the screen's width and height.
 
=== [[Pixel Grid System|Pixel Grid]] ===
====  [[pixelW]] / [[pixelH]] ====
Actual pixel size, remains constant. On displays with too fine resolution (e.g., 4K), it can get too small for practical use.
 
<syntaxhighlight lang="cpp">class MyControl: RscText
{
x = safezoneX + 100 * pixelW;
y = safezoneY + 100 * pixelH;
w = 100 * pixelW;
h = 100 * pixelH;
};</syntaxhighlight >
 
==== [[pixelGrid]] ====
Pixel accurate grid introduced to replace GUI_GRID. Respects both resolution and interface size, but always returns whole number which can be divided by up to 4 and still be a whole number. Due to this rounding, some interface sizes may use the same value.
 
<syntaxhighlight lang="cpp">class MyControl: RscText
{
x = safezoneX + 10 * pixelGrid  * pixelW;
y = safezoneY + 10 * pixelGrid  * pixelH;
w = 20 * pixelGrid * pixelW;
h = 20 * pixelGrid * pixelH;
};</syntaxhighlight >
 
==== [[pixelGridNoUIScale]] ====
Similar to pixelGrid, but affected only by resolution, not interface size. Usually used to keep some important elements, e.g., spotlight buttons in the main menu.
 
<syntaxhighlight lang="cpp">class MyControl: RscText
{
x = safezoneX + 10 * pixelGridNoUIScale * pixelW;
y = safezoneY + 10 * pixelGridNoUIScale * pixelH;
w = 20 * pixelGridNoUIScale * pixelW;
h = 20 * pixelGridNoUIScale * pixelH;
};</syntaxhighlight >
 
[[Category: Dialogs|GUI Coordinates]]

Latest revision as of 01:11, 6 September 2021

Variables

This is a list of all the variables that are used by the Virtual Arsenal.

missionNamespace
Variable Data Type Explanation
BIS_fnc_arsenal_data Array of arrays of strings All available items that can be accessed in the Arsenal (not the actual content!). Format:
Index Content
0 Primary Weapons
1 Secondary Weapons
2 Handguns
3 Uniforms
4 Vests
5 Backpacks
6 Headgear
7 Goggles
8 NVGs
9 Binoculars
10 Maps
11 GPS
12 Radio
13 Compass
14 Watch
15 Face (empty)
16 Voice (empty)
17 Insignia (empty)
18 Optic attachments (empty)
19 Side attachments (empty)
20 Muzzle attachments (empty)
21 Compatible magazines (empty)
22 Grenades
23 Placeables
24 Miscellaneous
25 Bipod attachments (empty)
26 All magazines