Difference between revisions of "HUD"

From Bohemia Interactive Community
Jump to navigation Jump to search
m
m (Text replacement - ";[ ]+ " to "; ")
 
(30 intermediate revisions by 7 users not shown)
Line 1: Line 1:
[[Category:Editing]]
+
{{TOC|side}}
[[Category:ArmA Editing]]
+
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.
 +
 
 +
<syntaxhighlight lang="cpp">
 +
class MFD
 +
{
 +
class MFD1 { /* ... */ }; // optional subclasses
 +
class MFD2 { /* ... */ };
 +
// ...
 +
};
 +
</syntaxhighlight>
  
===Introduction:===
+
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";
  
The idea: 2D elements animated by bones, used for displays inside vehicles.  
+
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;
  
===Main Structure:===
+
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)).
  
Add class MFD to class cfgVehicles.Yourvehicle.
+
color[] = { 0, 1, 0, 0.1 }; // Obsolete, done over color values in class Draw,
 +
// but at the moment still required.
  
Subclasses of MFD you can name as you want.
+
class Bones // List of all bones
 +
{
 +
// ...
 +
};
 +
class Draw // List of all drawingmethods
 +
{
 +
// ...
 +
};
 +
};
 +
</syntaxhighlight>
  
  <font color="Blue">class MFD
 
  {
 
    <font color="Sea grey">class MFD1 {...};
 
    class MFD2 {...};
 
    ...
 
    </font><font color="Blue">
 
  };</font>
 
<font color="Seagrey">Optional.</font>
 
  
<font color="Black">with class MFD1 of the following structure:</font>
+
=== Class Bones ===
  <font color="Blue">class MFD1
 
  {
 
    topLeft = "HUD LH"; //Those 3 points define the displayarea. These points need
 
    topRight = "HUD PH"; //to be present in model of vehicle.
 
    bottomLeft = "HUD LD";
 
 
 
    borderLeft = 0.05; //Offsets used to finetune the actual displayarea. The values
 
    borderRight = 0.05; //can vary from 0 - 1.
 
    borderTop = 0.02;
 
    borderBottom = 0.1;
 
 
 
    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
 
    {
 
      ...
 
    };
 
  };</font>
 
  
===Class Bones:===
 
<font color="Black">
 
 
All bones that are used for positioning and animating of drawings.
 
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).
 
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:</font>
+
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 ===
 +
 
 +
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.
 +
 
 +
<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>
  
  <font color="Blue">class Bones
+
This graphic will only show when the landing gear is down
  {
 
    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 (used 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
 
    };
 
  };</font>
 
===Class Draw:===
 
<font color="Black">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 the valid for all classes/groups inside.
+
<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.
  
Format for a point(for points[],pos[],right[] and down[] entries):</font>
+
== Short Reference ==
  
<font color="Blue">{[bone1,] position1, blending weight1[, [bone2,] position2, blending weight2]...}</font>
+
=== Available Sources ===
  
<font color="Black">entries with [] are optional.
+
==== Vectors ====
 +
* velocity: Velocity vector
 +
* weapon: Current weapon aim vector
 +
* target: Vector to current target
  
Points directly defined after each other are linked by a line, incase you don't want to link place an empty point {} between those points.
 
  
  <font color="Blue">class Draw
+
==== Scalar ====
  {
+
* altitudeAGL: Above ground level altitude (m) Multiply source by 3.28084 to get (ft)
    alpha = 0.8;
+
* altitudeASL: Above sea level altitude (m) Multiply source by 3.28084 to get (ft)
    color[] = {0.2,1,0.1};
+
* 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.
    clipTL[] = {0.0,0.05}; //Defines the space in which the bone is drawn TL = Top Left BR = Bottom Right
+
* vspeed: Vertical speed (m/s)
    clipBR[] = {1.0,0.90};
+
* targetDist: Distance to current target
    condition = "on";
+
* rpm: Current engine rpm (0..1)
 
+
* fuel: Fuel tank state (0..1)
    class Line
+
* HorizonDive: Dive angle, multiply source by 57.2958 to get degrees
    {
+
* HorizonBank:
      type = line;
+
* Static: No source, always shows
      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[],right[],down[] define the box (size) of the first letter.
 
      pos[]={SpdMove2,{-0.05,-0.03},1};
 
      right[]={SpdMove2,{0.01,-0.03},1};
 
      down[]={SpdMove2,{-0.05,0.03},1};
 
    };
 
  };</font>
 
  
===Short Reference:===
+
=== Available Bone Types ===
  
<font color="Black">Available Sources:
+
* fixed: Non moving bone
 +
* linear: Linear moving bone
 +
* rotational: Rotating bone
 +
* vector: Vector bone
 +
* ils: Instrument landing system
 +
* horizon: Artifical horizon
  
Vectors:
 
  *velocity: velocity vector
 
  *weapon: current weapon aim vector
 
  *target: vector to current target
 
 
 
Scalar:
 
  *altitudeAGL: above ground level altitude (m)
 
  *altitudeASL: above sea level altitude (m)
 
  *speed: speed (m/s) vspeed: vertical speed (m/s)
 
  *targetDist: distance to current target
 
  *rpm: current engine rpm (0..1)
 
  *fuel: fuel tank state (0..1)
 
  
Available Bone Types:
+
=== Available Draw Types ===
*fixed: non moving bone
 
*linear: linear moving bone
 
*rotational: rotating bone
 
*vector: vector bone
 
*ils: instrumented landing system
 
*horizon: artifical horizont
 
  
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: Drawing a line  
*line: drawing a line  
+
*text: Drawing text  
*text: drawing text  
 
  
Available Conditions:
+
 
Aircrafts:
+
=== Available Conditions ===
  *on: engine on
 
  *ils: gear down
 
  *mgun: current weapon is a mgun
 
  *missile: current weapon is a missile
 
 
   
 
   
Landvehicles:
+
==== 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?
 +
 
 +
==== 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?

Landvehicles