4 float m_fRingLabelOffset = 0.8;
5 int m_fRingLabelFontSize = 20;
6 ResourceName m_AnalogGauge =
"{54F7755D48B394FD}UI/Textures/VehicleInfo/AnalogGaugeImageset.imageset";
7 string m_sRingMarkSection =
"GaugeMarkSection";
8 string m_sRingMarkSubsection =
"GaugeMarkSubsection";
9 string m_sDefaultLayout =
"{00F28F3165DB7C83}UI/layouts/HUD/VehicleInfo/VehicleGauge_Default.layout";
12 string m_sOverlay =
"";
13 string m_sCustomNeedle =
"";
30 [
Attribute(
"",
UIWidgets.EditBox,
"Custom text (e.g. units or gauge name). Hidden if empty.")]
33 [
Attribute(
"0.5",
UIWidgets.Slider,
"Units text anchor X-coordinate %-base of widget width.",
"0 1 0.05")]
36 [
Attribute(
"0.15",
UIWidgets.Slider,
"Units text anchor Y-coordinate %-base of widget height.",
"0 1 0.05")]
39 [
Attribute(
"",
UIWidgets.EditBox,
"Custom text (e.g. units or gauge name). Hidden if empty.")]
42 [
Attribute(
"0.5",
UIWidgets.Slider,
"Units text anchor X-coordinate %-base of widget width.",
"0 1 0.05")]
45 [
Attribute(
"0.85",
UIWidgets.Slider,
"Units text anchor Y-coordinate %-base of widget height.",
"0 1 0.05")]
64 [
Attribute(
"1",
UIWidgets.CheckBox,
"Display label for MIN value; both MIN && ZERO needs to be checked.")]
188 if (!wNeedle || !wNeedleShadow)
193 wNeedle.LoadImageFromSet(0,
m_pGaugeData.m_AnalogGauge, sCustomNeedle);
194 wNeedleShadow.LoadImageFromSet(0,
m_pGaugeData.m_AnalogGauge, sCustomNeedle);
199 wNeedle.SetVisible(bVisible);
200 wNeedleShadow.SetVisible(bVisible);
211 if (sOverlayTexture ==
"")
213 wOverlay.SetVisible(
false);
217 wOverlay.LoadImageFromSet(0,
m_pGaugeData.m_AnalogGauge, sOverlayTexture);
218 wOverlay.SetVisible(bVisible);
227 if (!wInfo || !wAnchor)
232 wInfo.SetVisible(
false);
236 wInfo.SetVisible(bVisible);
237 wInfo.SetText(sText);
239 MovePerc(wAnchor, fPosX, fPosY);
261 fValuePerc = fValuePerc * fScaleValue;
266 fValuePerc =
Math.Clamp(fValuePerc, 0, 1);
270 fValuePerc = fValuePerc -
Math.Floor(fValuePerc);
273 fValuePerc = 1 + fValuePerc;
279 wNeedle.SetRotation(fAngle);
282 wNeedleShadow.SetRotation(fAngle);
325 if (m_LayoutPath ==
"")
341 bool bSuccess =
true;
368 private void MovePerc(
Widget widget,
float x,
float y)
381 private void Scale(ImageWidget widget,
float scale)
388 int image = widget.GetImage();
390 widget.GetImageSize(image, imageWidth, imageHeight);
391 widget.SetSize((
float)imageWidth *
scale, (
float)imageHeight *
scale);
395 private void Scale(TextWidget widget,
float scale)
400 float sizeY = FrameSlot.GetSizeY(widget);
401 FrameSlot.SetSizeY(widget, sizeY *
scale);
405 protected void CreateRingLabel(
WorkspaceWidget workspace,
float angle,
float value,
bool absValues =
true,
float labelValueMultiplier = 1,
int labelValuePrecision = 0)
407 value = value * labelValueMultiplier;
409 if (labelValuePrecision == 0)
411 value =
Math.Round(value);
415 float decimals = labelValuePrecision * 10;
418 decimals = -1 / decimals;
420 value =
Math.Round(value * decimals);
421 value = value / decimals;
428 value =
Math.AbsFloat(value);
430 float rads = angle /
Math.RAD2DEG;
432 float xcoef = -
Math.Sin(rads);
433 float ycoef =
Math.Cos(rads);
441 wText.SetText(value.ToString());
442 wText.SetFont(
"{EABA4FE9D014CCEF}UI/Fonts/RobotoCondensed/RobotoCondensed_Bold.fnt");
445 float alignx = xcoef / 2 + 0.5;
446 float aligny = ycoef / 2 + 0.5;
448 FrameSlot.SetAlignment(wText, alignx, aligny);
461 wImage.LoadImageFromSet(0,
m_pGaugeData.m_AnalogGauge, texture);
463 FrameSlot.SetAnchorMin(wImage, 0.5, 0.5);
464 FrameSlot.SetAnchorMax(wImage, 0.5, 0.5);
465 FrameSlot.SetSizeToContent(wImage,
true);
470 wImage.SetPivot(0.5, 0);
471 wImage.SetRotation(angle);
override void DisplayStopDraw(IEntity owner)
override void DisplayStartDraw(IEntity owner)
float m_fZeroValueRotation
ImageWidget m_wBackground
bool CreateGaugeNeedle(IEntity owner, ImageWidget wNeedle, ImageWidget wNeedleShadow, string sCustomNeedle="", bool bVisible=true)
bool CreateGaugeInfoText(IEntity owner, TextWidget wInfo, string sText, Widget wAnchor, float fPosX, float fPosY, bool bVisible=true)
bool CreateGaugeOverlay(IEntity owner, ImageWidget wOverlay, string sOverlayTexture, bool bVisible=true)
ref SCR_BaseAnalogGaugeData m_pGaugeData
override event void DisplayUpdate(IEntity owner, float timeSlice)
bool CreateGaugeRing(IEntity owner)
ref SCR_BaseAnalogGaugeData GetGaugeData()
void InitGauge(IEntity owner, out bool bSuccess)
float GetValuePerc(float value)
void UpdateGaugeNeedle(IEntity owner, float timeSlice, ImageWidget wNeedle, ImageWidget wNeedleShadow, float fValuePerc, float fScaleValue=1.00, bool bClamp=true)
override bool DisplayStartDrawInit(IEntity owner)
void CreateRingMark(WorkspaceWidget workspace, float angle, string texture)
ImageWidget m_wNeedleShadow
override void DisplayInit(IEntity owner)
int m_iLabelValuePrecision
void UpdateGauge(IEntity owner, float timeSlice, float value)
void CreateGauge(IEntity owner, out bool bSuccess)
void CreateRingLabel(WorkspaceWidget workspace, float angle, float value, bool absValues=true, float labelValueMultiplier=1, int labelValuePrecision=0)
float m_fLabelValueMultiplier
SCR_FieldOfViewSettings Attribute
WidgetFlags
Widget flags. See enf::Widget::SetFlags().