HUD: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
mNo edit summary
 
m (Some wiki formatting)
 
(36 intermediate revisions by 9 users not shown)
Line 1: Line 1:
[[Category: Editing]]
{{TOC|side}}
[[Category: ArmA]]
The idea: 2D elements animated by bones, used for displays inside vehicles.


===Introduction:===


The idea: 2D elements animated by bones, used for displays inside vehicles.
== Main Structure ==


===Main Structure:===
Add class MFD to class CfgVehicles/YourVehicle.


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>
 
with class MFD1 of the following structure:
<syntaxhighlight lang="cpp">
class MFD1
{
topLeft = "HUD LH"; // Those 3 points define the displayarea and need to be present in model of vehicle.
topRight = "HUD PH";
bottomLeft = "HUD LD";
 
borderLeft = 0.05; // Offsets used to finetune the actual displayarea.
borderRight = 0.05; // The values can be in range 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
{
// ...
};


Subclasses of MFD you can name as you want.
class Draw // List of all drawingmethods
{
// ...
};
};
</syntaxhighlight>


  <font color="Blue">class MFD
  {
    <font color="Seagrey">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 box (size) of the first letter.
right[] = { SpdMove2, { 0.01, -0.03 }, 1 };
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.


  <font color="Blue">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 (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.
== Short Reference ==


=== Available Sources ===


Format for a point(for points[],pos[],right[] and down[] entries):</font>
==== Vectors ====
* velocity: Velocity vector
* weapon: Current weapon aim vector
* target: Vector to current target


<font color="Blue">{[bone1,] position1, blending weight1[, [bone2,] position2, blending weight2]...}</font>
==== 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 by 3.6 to get KPH
** Multiply by 0.0288 to get (Mach * 10) (Hud wont display decimals)
** Multiply source by 2.2369356 to get MPH.
** 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 in radians
** Multiply source by 57.2958 to get degrees
* HorizonBank: -
* Static: No source, always shows


<font color="Black">entries with [] are optional.
=== Available Bone Types ===


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.
* fixed: Non moving bone
* linear: Linear moving bone
* rotational: Rotating bone
* vector: Vector bone
* ils: Instrument landing system
* horizon: Artificial horizon


  <font color="Blue">class Draw
=== Available Draw Types ===
  {
    alpha = 0.8;
    color[] = {0.2,1,0.1};
    clipTL[] = {0.0,0.05}; //Defines the space in which the bone is drawn TL = Top Left BR = Bottom Right
    clipBR[] = {1.0,0.90};
    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[],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:===
* group: If no type is defined, type is assumed to be group
* line: Drawing a line
* text: Drawing text


<font color="Black">Available Sources:
=== Available Conditions ===


Vectors:
==== Aircraft ====
  *velocity: velocity vector
* on: Engine on
  *weapon: current weapon aim vector
* ils: Gear down
  *target: vector to current target
* mgun: Current weapon is gun class
 
* AAMissile: Current weapon is an air locking missile
Scalar:
* ATMissile: Current weapon is a non-air locking missile
  *altitudeAGL: above ground level altitude (m)
* Bomb: Current weapon is a bomb
  *altitudeASL: above sea level altitude (m)
* Rockets: Current weapon is an unguided missile or rocket
  *speed: speed (m/s) vspeed: vertical speed (m/s)
* stall: Aircraft is currently stalling
  *targetDist: distance to current target
* lights: Lights are on?
  *rpm: current engine rpm (0..1)
* collisionLights: Collision lights are on?
  *fuel: fuel tank state (0..1)
* flaps: Flaps are down?


Available Bone Types:
==== Landvehicles ====
*fixed: non moving bone
{{Wiki|stub}}
*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
*line: drawing a line
*text: drawing text


Available Conditions:
{{GameCategory|arma1|Addon Configuration}}
Aircrafts:
  *on: engine on
  *ils: gear down
  *mgun: current weapon is a mgun
  *missile: current weapon is a missile
Landvehicles:

Latest revision as of 18:23, 4 March 2024

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 and need to be present in model of vehicle.
	topRight = "HUD PH";
	bottomLeft = "HUD LD";

	borderLeft = 0.05;		// Offsets used to finetune the actual displayarea.
	borderRight = 0.05;		// The values can be in range 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 box (size) of the first letter.
		right[] = { SpdMove2, { 0.01, -0.03 }, 1 };
		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 by 3.6 to get KPH
    • Multiply by 0.0288 to get (Mach * 10) (Hud wont display decimals)
    • Multiply source by 2.2369356 to get MPH.
    • 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 in radians
    • 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: Artificial 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