Difference between revisions of "HUD"
sakura_chan (talk | contribs) |
Lou Montana (talk | contribs) m (Text replacement - ";[ ]+ " to "; ") |
||
(15 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{TOC|side}} | |
− | |||
The idea: 2D elements animated by bones, used for displays inside vehicles. | The idea: 2D elements animated by bones, used for displays inside vehicles. | ||
− | ===Main Structure | + | === Main Structure === |
− | Add class MFD to class | + | Add class MFD to class CfgVehicles/YourVehicle. |
Subclasses of MFD you can name as you want. | Subclasses of MFD you can name as you want. | ||
− | + | <syntaxhighlight lang="cpp"> | |
− | + | class MFD | |
− | + | { | |
− | + | class MFD1 { /* ... */ }; // optional subclasses | |
− | + | class MFD2 { /* ... */ }; | |
− | + | // ... | |
− | + | }; | |
− | + | </syntaxhighlight> | |
+ | |||
+ | with class MFD1 of the following structure: | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | class MFD1 | ||
+ | { | ||
+ | topLeft = "HUD LH"; // Those 3 points define the displayarea. These | ||
+ | topRight = "HUD PH"; // points need to be present in model of vehicle. | ||
+ | bottomLeft = "HUD LD"; | ||
+ | |||
+ | borderLeft = 0.05; // Offsets used to finetune the actual displayarea. | ||
+ | borderRight = 0.05; // The values can vary from 0 - 1. | ||
+ | borderTop = 0.02; | ||
+ | borderBottom = 0.1; | ||
+ | |||
+ | enableParallax = 1; // Parallax simulation. Enables holographic projection effect, | ||
+ | // but only takes eye position from freelook/G-forces into effect (not XYZ offsets (ex. ctrl+NUM4)). | ||
− | + | color[] = { 0, 1, 0, 0.1 }; // Obsolete, done over color values in class Draw, | |
− | + | // but at the moment still required. | |
− | + | ||
− | + | class Bones // List of all bones | |
− | + | { | |
− | + | // ... | |
− | + | }; | |
− | + | class Draw // List of all drawingmethods | |
− | + | { | |
− | + | // ... | |
− | + | }; | |
− | + | }; | |
− | + | </syntaxhighlight> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | === Class Bones === | |
− | ===Class Bones | ||
All bones that are used for positioning and animating of drawings. | All bones that are used for positioning and animating of drawings. | ||
Line 52: | Line 55: | ||
Defined positions are relative to position the bone is binded to (by default {0,0} of display area). | Defined positions are relative to position the bone is binded to (by default {0,0} of display area). | ||
− | Codesamples for each possible bone, with all needed values:</ | + | Codesamples for each possible bone, with all needed values: |
+ | |||
+ | <syntaxhighlight lang="cpp"> | ||
+ | class Bones | ||
+ | { | ||
+ | class Fixed | ||
+ | { | ||
+ | type = fixed; | ||
+ | pos[] = {0.05,0.9}; | ||
+ | }; | ||
+ | class Linear | ||
+ | { | ||
+ | type = linear; | ||
+ | source = fuel; | ||
+ | min = 0; // Min value this bone can display | ||
+ | max = 1; // Max value this bone can display | ||
+ | minPos[] = {0.5,0.2}; | ||
+ | maxPos[] = {0.5,0.5}; | ||
+ | }; | ||
+ | class Rotational | ||
+ | { | ||
+ | type = rotational; | ||
+ | source = targetDist; | ||
+ | center[] = {0,0}; | ||
+ | min = 100; | ||
+ | max = 3000; | ||
+ | minAngle = -120; | ||
+ | maxAngle = +120; | ||
+ | }; | ||
+ | class Vector | ||
+ | { | ||
+ | type = vector; | ||
+ | source = velocity; | ||
+ | pos0[] = {0.5,Pos0Center}; // Position of 0-degree dive line | ||
+ | pos10[] = {0.5+0.9,Pos0Center+0.7}; // Position of 10-degree bank and 10-degree dive (to adjust scale) | ||
− | + | class ILS | |
− | + | { | |
− | + | type = ils; | |
− | + | pos0[] = {0.5,0.4}; // Position when centered | |
− | + | pos3[] = {0.7,0.6}; // Position when 3-degree off in both directions | |
− | + | }; | |
− | + | class Horizont | |
− | + | { | |
− | + | type = horizon; | |
− | + | pos0[] = {0.5,0.27}; // Position of 0-degree dive line | |
− | + | pos10[] = {0.5+0.9,3.4}; // Position of 10-degree bank and 10-degree dive (used to adjust scale) | |
− | + | angle = 0; // Horizon angle to which this line corresponds to | |
− | + | }; | |
− | + | </syntaxhighlight> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | === Class Draw === | |
− | ===Class Draw | ||
The class Draw is a "group", which consist of other groups or classes. | The class Draw is a "group", which consist of other groups or classes. | ||
Line 113: | Line 114: | ||
− | Format for a point ''(for points[], pos[], right[] and down[] entries)'': | + | Format for a point ''(for points[], pos[], right[] and down[] entries)'': |
− | + | {[bone1,] position1, blending weight1[, [bone2,] position2, blending weight2]...} | |
− | + | entries with [] are optional. | |
Points directly defined after each other are linked by a line, in case you don't want to link place an empty point {} between those points. | Points directly defined after each other are linked by a line, in case you don't want to link place an empty point {} between those points. | ||
− | + | <syntaxhighlight lang="cpp"> | |
− | + | class Draw | |
− | + | { | |
− | + | alpha = 0.8; | |
− | + | color[] = {0.2,1,0.1}; | |
− | + | clipTL[] = {0.0,0.05}; // Defines the space in which the bone is drawn | |
− | + | clipBR[] = {1.0,0.90}; // TL = Top Left, BR = Bottom Right | |
− | + | condition = "on"; | |
− | + | ||
− | + | class Line | |
− | + | { | |
− | + | type = line; | |
− | + | points[] = { { Bone1, 1 }, { Bone2, 1 } }; | |
− | + | }; | |
− | + | class Text | |
− | + | { | |
− | + | type = text; | |
− | + | align = left; | |
− | + | scale = 1; // Text size, obsolete (but still required) | |
− | + | source = speed; | |
− | + | sourceScale = 3.6; // Convert from m/s to km/h | |
− | + | pos[] = {SpdMove2,{-0.05,-0.03},1}; // pos[],right[],down[] define the | |
− | + | right[] = {SpdMove2,{0.01,-0.03},1}; // box (size) of the first letter. | |
− | + | down[] = {SpdMove2,{-0.05,0.03},1}; | |
− | + | }; | |
+ | }; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | In order for a hud element to disappear and reappear according to its condition, it must be defined as a subclass. | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | class Draw | ||
+ | { | ||
+ | class arrow | ||
+ | { | ||
+ | Condition = "ils"; | ||
+ | type = "line"; | ||
+ | class Circle | ||
+ | { | ||
+ | points[] = | ||
+ | { | ||
+ | { { 0.489, 0.822 }, 1 }, | ||
+ | { { 0.500, 0.813 }, 1 }, | ||
+ | { { 0.511, 0.822 }, 1 }, | ||
+ | { { 0.489, 0.822 }, 1 }, | ||
+ | {} | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | </syntaxhighlight> | ||
− | + | This graphic will only show when the landing gear is down | |
− | === | + | <syntaxhighlight lang="cpp"> |
+ | class Draw | ||
+ | { | ||
+ | class arrow | ||
+ | { | ||
+ | Condition = "ils"; | ||
+ | type = "line"; | ||
+ | points[] = | ||
+ | { | ||
+ | { { 0.489, 0.822 }, 1 }, | ||
+ | { { 0.500, 0.813 }, 1 }, | ||
+ | { { 0.511, 0.822 }, 1 }, | ||
+ | { { 0.489, 0.822 }, 1 }, | ||
+ | {} | ||
+ | }; | ||
+ | }; | ||
+ | }; | ||
+ | </syntaxhighlight> | ||
− | + | This graphic will always be displayed despite the ils condition. | |
− | + | == Short Reference == | |
− | |||
− | |||
+ | === Available Sources === | ||
− | ==== | + | ==== Vectors ==== |
+ | * velocity: Velocity vector | ||
+ | * weapon: Current weapon aim vector | ||
+ | * target: Vector to current target | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | ==== Scalar ==== |
+ | * altitudeAGL: Above ground level altitude (m) Multiply source by 3.28084 to get (ft) | ||
+ | * altitudeASL: Above sea level altitude (m) Multiply source by 3.28084 to get (ft) | ||
+ | * speed: Speed (m/s) Multiply source by 2.2369356 to get MPH. Multiply by 3.6 to get KPH Multiply by 0.0288 to get (Mach*10) (Hud wont display decimals) Multiply by 1.94384 to get Knots. | ||
+ | * vspeed: Vertical speed (m/s) | ||
+ | * targetDist: Distance to current target | ||
+ | * rpm: Current engine rpm (0..1) | ||
+ | * fuel: Fuel tank state (0..1) | ||
+ | * HorizonDive: Dive angle, multiply source by 57.2958 to get degrees | ||
+ | * HorizonBank: | ||
+ | * Static: No source, always shows | ||
− | + | === Available Bone Types === | |
− | |||
− | |||
− | |||
− | |||
− | |||
+ | * fixed: Non moving bone | ||
+ | * linear: Linear moving bone | ||
+ | * rotational: Rotating bone | ||
+ | * vector: Vector bone | ||
+ | * ils: Instrument landing system | ||
+ | * horizon: Artifical horizon | ||
− | ===Available Draw Types | + | |
+ | === Available Draw Types === | ||
*group: If no type is defined, type is assumed to be group | *group: If no type is defined, type is assumed to be group | ||
Line 189: | Line 236: | ||
− | ===Available Conditions | + | === Available Conditions === |
− | ====Aircraft | + | ==== Aircraft ==== |
− | + | * on: Engine on | |
− | *on: Engine on | + | * ils: Gear down |
− | *ils: Gear down | + | * mgun: Current weapon is gun class |
− | *mgun: Current weapon is gun class | + | * AAMissile: Current weapon is an air locking missile |
− | *AAMissile: Current weapon is an air locking missile | + | * ATMissile: Current weapon is a non-air locking missile |
− | *ATMissile: Current weapon is a non-air locking missile | + | * Bomb: Current weapon is a bomb |
− | *Bomb: Current weapon is a bomb | + | * Rockets: Current weapon is an unguided missile or rocket |
− | *Rockets: Current weapon is an unguided missile or rocket | + | * stall: Aircraft is currently stalling |
+ | * lights: Lights are on? | ||
+ | * collisionlights: Collision lights are on? | ||
+ | * flaps: flaps are down? | ||
− | ====Landvehicles | + | ==== Landvehicles ==== |
+ | {{Wiki|stub}} | ||
− | |||
− | + | {{GameCategory|arma1|Addon Configuration}} |
Latest revision as of 01:53, 8 August 2021
The idea: 2D elements animated by bones, used for displays inside vehicles.
Main Structure
Add class MFD to class CfgVehicles/YourVehicle.
Subclasses of MFD you can name as you want.
class MFD
{
class MFD1 { /* ... */ }; // optional subclasses
class MFD2 { /* ... */ };
// ...
};
with class MFD1 of the following structure:
class MFD1
{
topLeft = "HUD LH"; // Those 3 points define the displayarea. These
topRight = "HUD PH"; // points need to be present in model of vehicle.
bottomLeft = "HUD LD";
borderLeft = 0.05; // Offsets used to finetune the actual displayarea.
borderRight = 0.05; // The values can vary from 0 - 1.
borderTop = 0.02;
borderBottom = 0.1;
enableParallax = 1; // Parallax simulation. Enables holographic projection effect,
// but only takes eye position from freelook/G-forces into effect (not XYZ offsets (ex. ctrl+NUM4)).
color[] = { 0, 1, 0, 0.1 }; // Obsolete, done over color values in class Draw,
// but at the moment still required.
class Bones // List of all bones
{
// ...
};
class Draw // List of all drawingmethods
{
// ...
};
};
Class Bones
All bones that are used for positioning and animating of drawings.
Defined positions are relative to position the bone is binded to (by default {0,0} of display area).
Codesamples for each possible bone, with all needed values:
class Bones
{
class Fixed
{
type = fixed;
pos[] = {0.05,0.9};
};
class Linear
{
type = linear;
source = fuel;
min = 0; // Min value this bone can display
max = 1; // Max value this bone can display
minPos[] = {0.5,0.2};
maxPos[] = {0.5,0.5};
};
class Rotational
{
type = rotational;
source = targetDist;
center[] = {0,0};
min = 100;
max = 3000;
minAngle = -120;
maxAngle = +120;
};
class Vector
{
type = vector;
source = velocity;
pos0[] = {0.5,Pos0Center}; // Position of 0-degree dive line
pos10[] = {0.5+0.9,Pos0Center+0.7}; // Position of 10-degree bank and 10-degree dive (to adjust scale)
class ILS
{
type = ils;
pos0[] = {0.5,0.4}; // Position when centered
pos3[] = {0.7,0.6}; // Position when 3-degree off in both directions
};
class Horizont
{
type = horizon;
pos0[] = {0.5,0.27}; // Position of 0-degree dive line
pos10[] = {0.5+0.9,3.4}; // Position of 10-degree bank and 10-degree dive (used to adjust scale)
angle = 0; // Horizon angle to which this line corresponds to
};
Class Draw
The class Draw is a "group", which consist of other groups or classes.
Every group can have its own alpha, color[], clipTL[], clipBR[] and condition values, which will be valid for all classes/groups inside.
Format for a point (for points[], pos[], right[] and down[] entries):
{[bone1,] position1, blending weight1[, [bone2,] position2, blending weight2]...}
entries with [] are optional.
Points directly defined after each other are linked by a line, in case you don't want to link place an empty point {} between those points.
class Draw
{
alpha = 0.8;
color[] = {0.2,1,0.1};
clipTL[] = {0.0,0.05}; // Defines the space in which the bone is drawn
clipBR[] = {1.0,0.90}; // TL = Top Left, BR = Bottom Right
condition = "on";
class Line
{
type = line;
points[] = { { Bone1, 1 }, { Bone2, 1 } };
};
class Text
{
type = text;
align = left;
scale = 1; // Text size, obsolete (but still required)
source = speed;
sourceScale = 3.6; // Convert from m/s to km/h
pos[] = {SpdMove2,{-0.05,-0.03},1}; // pos[],right[],down[] define the
right[] = {SpdMove2,{0.01,-0.03},1}; // box (size) of the first letter.
down[] = {SpdMove2,{-0.05,0.03},1};
};
};
In order for a hud element to disappear and reappear according to its condition, it must be defined as a subclass.
class Draw
{
class arrow
{
Condition = "ils";
type = "line";
class Circle
{
points[] =
{
{ { 0.489, 0.822 }, 1 },
{ { 0.500, 0.813 }, 1 },
{ { 0.511, 0.822 }, 1 },
{ { 0.489, 0.822 }, 1 },
{}
};
};
};
};
This graphic will only show when the landing gear is down
class Draw
{
class arrow
{
Condition = "ils";
type = "line";
points[] =
{
{ { 0.489, 0.822 }, 1 },
{ { 0.500, 0.813 }, 1 },
{ { 0.511, 0.822 }, 1 },
{ { 0.489, 0.822 }, 1 },
{}
};
};
};
This graphic will always be displayed despite the ils condition.
Short Reference
Available Sources
Vectors
- velocity: Velocity vector
- weapon: Current weapon aim vector
- target: Vector to current target
Scalar
- altitudeAGL: Above ground level altitude (m) Multiply source by 3.28084 to get (ft)
- altitudeASL: Above sea level altitude (m) Multiply source by 3.28084 to get (ft)
- speed: Speed (m/s) Multiply source by 2.2369356 to get MPH. Multiply by 3.6 to get KPH Multiply by 0.0288 to get (Mach*10) (Hud wont display decimals) Multiply by 1.94384 to get Knots.
- vspeed: Vertical speed (m/s)
- targetDist: Distance to current target
- rpm: Current engine rpm (0..1)
- fuel: Fuel tank state (0..1)
- HorizonDive: Dive angle, multiply source by 57.2958 to get degrees
- HorizonBank:
- Static: No source, always shows
Available Bone Types
- fixed: Non moving bone
- linear: Linear moving bone
- rotational: Rotating bone
- vector: Vector bone
- ils: Instrument landing system
- horizon: Artifical horizon
Available Draw Types
- group: If no type is defined, type is assumed to be group
- line: Drawing a line
- text: Drawing text
Available Conditions
Aircraft
- on: Engine on
- ils: Gear down
- mgun: Current weapon is gun class
- AAMissile: Current weapon is an air locking missile
- ATMissile: Current weapon is a non-air locking missile
- Bomb: Current weapon is a bomb
- Rockets: Current weapon is an unguided missile or rocket
- stall: Aircraft is currently stalling
- lights: Lights are on?
- collisionlights: Collision lights are on?
- flaps: flaps are down?