mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/MI-38.git
synced 2026-01-24 00:25:38 +03:00
226 lines
7.3 KiB
C#
226 lines
7.3 KiB
C#
<<<<<<< HEAD
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using TMPro;
|
||
using System;
|
||
|
||
public class mfiArrowNumber : MonoBehaviour
|
||
{
|
||
[SerializeField]
|
||
private int[] rangeColor; //массив int с кратностью 5 {min на шкале (цифрами int), max на шкале (цифрами int), min на слайдере (цифрами int), max на слайдере (цифрами int), для удобства форматирования}
|
||
private string formatText = "{0}";
|
||
private TextMeshPro _number;
|
||
private Handler _arrow;
|
||
[SerializeField]
|
||
//private bool _float = false;
|
||
void Awake()
|
||
{
|
||
Init();
|
||
ChangeNumber();
|
||
}
|
||
void Init() // так надо. Awake не всегда вызывается до начала работы с объектом
|
||
{
|
||
_number = GetComponentInParent<TextMeshPro>();
|
||
_arrow = GetComponent<Handler>();
|
||
}
|
||
private void ChangeIndicator(float val)
|
||
{
|
||
float num = TransformAngleToState(val);
|
||
if(_number != null)
|
||
_number.text = string.Format(formatText, (int)Mathf.Round(num));
|
||
}
|
||
public void ChangeNumber()
|
||
{
|
||
if (_arrow == null) Init();
|
||
ChangeIndicator(_arrow.currentAngle);
|
||
}
|
||
// На случай вращения против часовой
|
||
/* static void Swap<T>(ref T lhs, ref T rhs)
|
||
{
|
||
T temp;
|
||
temp = lhs;
|
||
lhs = rhs;
|
||
rhs = temp;
|
||
}*/
|
||
public float TransformAngleToState(float val)
|
||
{
|
||
int count = 0;
|
||
for (int i = 0; i < rangeColor.Length / 5; i++)
|
||
{
|
||
int min = rangeColor[count++];
|
||
int max = rangeColor[count++];
|
||
int kmin = rangeColor[count++];
|
||
int kmax = rangeColor[count++];
|
||
count++;
|
||
//if (max < min) Swap(ref max, ref min); //На случай вращения против часовой
|
||
//Debug.Log($"min = {min}, max = {max}, kmin = {kmin}, kmax = {kmax}");
|
||
if ((val >= kmin && val <= kmax) || (count >= rangeColor.Length))
|
||
{
|
||
float coef = (max - min + 0f) / (kmax - kmin);
|
||
float num = (val - kmin) * coef + min;
|
||
if ((val <= (kmax + 1) && val >= (kmax - 1)) || num > max)
|
||
{
|
||
num = max;
|
||
}
|
||
else if (val < rangeColor[2])
|
||
{
|
||
num = rangeColor[0];
|
||
}
|
||
|
||
return num;
|
||
}
|
||
}
|
||
return val;
|
||
}
|
||
|
||
public float TransformStateToAngle(int val)
|
||
{
|
||
if (_arrow == null) Init();
|
||
float newstate = val;
|
||
|
||
int count = 0;
|
||
for (int i = 0; i < rangeColor.Length / 5; i++)
|
||
{
|
||
int min = rangeColor[count++];
|
||
int max = rangeColor[count++];
|
||
int kmin = rangeColor[count++];
|
||
int kmax = rangeColor[count++];
|
||
count++;
|
||
if ((val >= min && val <= max)) //|| (count >= rangeColor.Length)
|
||
{
|
||
float coef = (kmax - kmin + 0f) / (max - min);
|
||
newstate = (val - min) * coef + kmin;
|
||
if ((val <= (max + 1) && val >= (max - 1)) || newstate > kmax)
|
||
{
|
||
newstate = kmax;
|
||
}
|
||
else if (val < rangeColor[2])
|
||
{
|
||
newstate = rangeColor[0];
|
||
}
|
||
}
|
||
}
|
||
return newstate;
|
||
}
|
||
|
||
public void setState(float newstate) {
|
||
_arrow.currentAngle = newstate;
|
||
ChangeNumber();
|
||
}
|
||
}
|
||
=======
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using TMPro;
|
||
using System;
|
||
|
||
public class mfiArrowNumber : MonoBehaviour
|
||
{
|
||
[SerializeField]
|
||
private int[] rangeColor; //массив int с кратностью 5 {min на шкале (цифрами int), max на шкале (цифрами int), min на слайдере (цифрами int), max на слайдере (цифрами int), для удобства форматирования}
|
||
private string formatText = "{0}";
|
||
private TextMeshPro _number;
|
||
private Handler _arrow;
|
||
[SerializeField]
|
||
//private bool _float = false;
|
||
void Awake()
|
||
{
|
||
Init();
|
||
ChangeNumber();
|
||
}
|
||
void Init() // так надо. Awake не всегда вызывается до начала работы с объектом
|
||
{
|
||
_number = GetComponentInParent<TextMeshPro>();
|
||
_arrow = GetComponent<Handler>();
|
||
}
|
||
private void ChangeIndicator(float val)
|
||
{
|
||
float num = TransformAngleToState(val);
|
||
if(_number != null)
|
||
_number.text = string.Format(formatText, (int)Mathf.Round(num));
|
||
}
|
||
public void ChangeNumber()
|
||
{
|
||
if (_arrow == null) Init();
|
||
ChangeIndicator(_arrow.currentAngle);
|
||
}
|
||
// На случай вращения против часовой
|
||
/* static void Swap<T>(ref T lhs, ref T rhs)
|
||
{
|
||
T temp;
|
||
temp = lhs;
|
||
lhs = rhs;
|
||
rhs = temp;
|
||
}*/
|
||
public float TransformAngleToState(float val)
|
||
{
|
||
int count = 0;
|
||
for (int i = 0; i < rangeColor.Length / 5; i++)
|
||
{
|
||
int min = rangeColor[count++];
|
||
int max = rangeColor[count++];
|
||
int kmin = rangeColor[count++];
|
||
int kmax = rangeColor[count++];
|
||
count++;
|
||
//if (max < min) Swap(ref max, ref min); //На случай вращения против часовой
|
||
//Debug.Log($"min = {min}, max = {max}, kmin = {kmin}, kmax = {kmax}");
|
||
if ((val >= kmin && val <= kmax) || (count >= rangeColor.Length))
|
||
{
|
||
float coef = (max - min + 0f) / (kmax - kmin);
|
||
float num = (val - kmin) * coef + min;
|
||
if ((val <= (kmax + 1) && val >= (kmax - 1)) || num > max)
|
||
{
|
||
num = max;
|
||
}
|
||
else if (val < rangeColor[2])
|
||
{
|
||
num = rangeColor[0];
|
||
}
|
||
|
||
return num;
|
||
}
|
||
}
|
||
return val;
|
||
}
|
||
|
||
public float TransformStateToAngle(int val)
|
||
{
|
||
if (_arrow == null) Init();
|
||
float newstate = val;
|
||
|
||
int count = 0;
|
||
for (int i = 0; i < rangeColor.Length / 5; i++)
|
||
{
|
||
int min = rangeColor[count++];
|
||
int max = rangeColor[count++];
|
||
int kmin = rangeColor[count++];
|
||
int kmax = rangeColor[count++];
|
||
count++;
|
||
if ((val >= min && val <= max)) //|| (count >= rangeColor.Length)
|
||
{
|
||
float coef = (kmax - kmin + 0f) / (max - min);
|
||
newstate = (val - min) * coef + kmin;
|
||
if ((val <= (max + 1) && val >= (max - 1)) || newstate > kmax)
|
||
{
|
||
newstate = kmax;
|
||
}
|
||
else if (val < rangeColor[2])
|
||
{
|
||
newstate = rangeColor[0];
|
||
}
|
||
}
|
||
}
|
||
return newstate;
|
||
}
|
||
|
||
public void setState(float newstate) {
|
||
_arrow.currentAngle = newstate;
|
||
ChangeNumber();
|
||
}
|
||
}
|
||
>>>>>>> 3b1b9479a46e90d056b92897ea9f8422b25fc052
|