Синтаксис:
Используется csharp
public GeneratePacient StatusSctipt;
[Header("Debug")]
[SerializeField]
private bool debug = true;
[Header("Графики EKG")]
public AnimationCurve pulsCurve, fibrilationCurve, asistoliaCurve, defibrilationCurve;
private float timeElapsed = 0;
private bool started;
[Header("Скорость графика и монитора")]
public float speed = 5f, speed_mon = 0.4f;
private Rigidbody body;
private Vector3 startPosition;
[Header("График пульса")]
public int IndexPulse;
private int returnPoc;
[Header("Шансы дефибрилляции")]
[SerializeField]
private int LowStatus = 50;
[SerializeField]
private int ExtraStatus = 40;
[SerializeField]
private int HardStatus = 30;
[SerializeField]
private int VeryHardStatus = 20;
[SerializeField]
private int ImposibleStatus = 10;
[Header("Сложность состояния пациента")]
[SerializeField]
private int _statePoc;
[Header("Скорость фибрилляции")]
[SerializeField]
public float fibrilationSpeed = 1f;
[Header("Индексы графиков")]
[SerializeField]
private int NormalStatus = 0;
[SerializeField]
private int FibrilationStatus = 1;
[SerializeField]
private int AsistolStatus = 2;
[SerializeField]
private int DefibrilateStatus = 3;
private int tempPulsCurveStatus;
public int _Puls;
private void Update()
{
if (fibrilationSpeed > 1)
fibrilationSpeed = 1;
else if (fibrilationSpeed < 0)
fibrilationSpeed = 0;
if (debug)
{
if (Input.GetKeyDown(KeyCode.W))
{
tempPulsCurveStatus = IndexPulse;
IndexPulse = DefibrilateStatus;
}
}
}
IEnumerator ReturnDeff()
{
switch (_statePoc)
{
case 0:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(LowStatus);
break;
case 1:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(ExtraStatus);
break;
case 2:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(HardStatus);
break;
case 3:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(VeryHardStatus);
break;
case 4:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(ImposibleStatus);
break;
}
}
void DefibrilateGenerator()
{
started = false;
returnPoc = Random.Range(1, 100);
}
void StatusDefibrilate(int Status)
{
returnPoc = Random.Range(1, 100);
if (returnPoc <= Status && tempPulsCurveStatus == FibrilationStatus)
IndexPulse = NormalStatus;
else if (returnPoc >= LowStatus && tempPulsCurveStatus == NormalStatus)
IndexPulse = FibrilationStatus;
else
IndexPulse = tempPulsCurveStatus;
if (debug)
Debug.Log(returnPoc);
}
private void Awake()
{
body = GetComponent<Rigidbody>();
startPosition.y = gameObject.transform.position.y;
startPosition.z = gameObject.transform.position.z;
_statePoc = StatusSctipt.PStatus;
}
private void FixedUpdate()
{
if (tempPulsCurveStatus == DefibrilateStatus)
tempPulsCurveStatus = AsistolStatus;
if (!started)
{
started = true;
timeElapsed = 0;
}
switch (IndexPulse)
{
case 0:
MovePoss (gameObject.transform.position.x + speed_mon * Time.deltaTime, startPosition.y + pulsCurve.Evaluate(timeElapsed), startPosition.z);
break;
case 1:
MovePoss (gameObject.transform.position.x + speed * Time.deltaTime, startPosition.y + fibrilationCurve.Evaluate(timeElapsed) * fibrilationSpeed, startPosition.z);
break;
case 2:
MovePoss (gameObject.transform.position.x + speed * Time.deltaTime, startPosition.y + asistoliaCurve.Evaluate(timeElapsed), startPosition.z);
break;
case 3:
MovePoss (gameObject.transform.position.x + speed_mon * Time.deltaTime, startPosition.y + defibrilationCurve.Evaluate(timeElapsed), startPosition.z);
if (returnPoc == 0)
StartCoroutine(ReturnDeff());
break;
}
void MovePoss(float x, float y, float z)
{
if (IndexPulse != DefibrilateStatus)
returnPoc = NormalStatus;
timeElapsed += Time.deltaTime * speed;
body.MovePosition(new Vector3(x, y, z));
}
}
[Header("Debug")]
[SerializeField]
private bool debug = true;
[Header("Графики EKG")]
public AnimationCurve pulsCurve, fibrilationCurve, asistoliaCurve, defibrilationCurve;
private float timeElapsed = 0;
private bool started;
[Header("Скорость графика и монитора")]
public float speed = 5f, speed_mon = 0.4f;
private Rigidbody body;
private Vector3 startPosition;
[Header("График пульса")]
public int IndexPulse;
private int returnPoc;
[Header("Шансы дефибрилляции")]
[SerializeField]
private int LowStatus = 50;
[SerializeField]
private int ExtraStatus = 40;
[SerializeField]
private int HardStatus = 30;
[SerializeField]
private int VeryHardStatus = 20;
[SerializeField]
private int ImposibleStatus = 10;
[Header("Сложность состояния пациента")]
[SerializeField]
private int _statePoc;
[Header("Скорость фибрилляции")]
[SerializeField]
public float fibrilationSpeed = 1f;
[Header("Индексы графиков")]
[SerializeField]
private int NormalStatus = 0;
[SerializeField]
private int FibrilationStatus = 1;
[SerializeField]
private int AsistolStatus = 2;
[SerializeField]
private int DefibrilateStatus = 3;
private int tempPulsCurveStatus;
public int _Puls;
private void Update()
{
if (fibrilationSpeed > 1)
fibrilationSpeed = 1;
else if (fibrilationSpeed < 0)
fibrilationSpeed = 0;
if (debug)
{
if (Input.GetKeyDown(KeyCode.W))
{
tempPulsCurveStatus = IndexPulse;
IndexPulse = DefibrilateStatus;
}
}
}
IEnumerator ReturnDeff()
{
switch (_statePoc)
{
case 0:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(LowStatus);
break;
case 1:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(ExtraStatus);
break;
case 2:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(HardStatus);
break;
case 3:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(VeryHardStatus);
break;
case 4:
DefibrilateGenerator();
yield return new WaitForSeconds(1.5f);
StatusDefibrilate(ImposibleStatus);
break;
}
}
void DefibrilateGenerator()
{
started = false;
returnPoc = Random.Range(1, 100);
}
void StatusDefibrilate(int Status)
{
returnPoc = Random.Range(1, 100);
if (returnPoc <= Status && tempPulsCurveStatus == FibrilationStatus)
IndexPulse = NormalStatus;
else if (returnPoc >= LowStatus && tempPulsCurveStatus == NormalStatus)
IndexPulse = FibrilationStatus;
else
IndexPulse = tempPulsCurveStatus;
if (debug)
Debug.Log(returnPoc);
}
private void Awake()
{
body = GetComponent<Rigidbody>();
startPosition.y = gameObject.transform.position.y;
startPosition.z = gameObject.transform.position.z;
_statePoc = StatusSctipt.PStatus;
}
private void FixedUpdate()
{
if (tempPulsCurveStatus == DefibrilateStatus)
tempPulsCurveStatus = AsistolStatus;
if (!started)
{
started = true;
timeElapsed = 0;
}
switch (IndexPulse)
{
case 0:
MovePoss (gameObject.transform.position.x + speed_mon * Time.deltaTime, startPosition.y + pulsCurve.Evaluate(timeElapsed), startPosition.z);
break;
case 1:
MovePoss (gameObject.transform.position.x + speed * Time.deltaTime, startPosition.y + fibrilationCurve.Evaluate(timeElapsed) * fibrilationSpeed, startPosition.z);
break;
case 2:
MovePoss (gameObject.transform.position.x + speed * Time.deltaTime, startPosition.y + asistoliaCurve.Evaluate(timeElapsed), startPosition.z);
break;
case 3:
MovePoss (gameObject.transform.position.x + speed_mon * Time.deltaTime, startPosition.y + defibrilationCurve.Evaluate(timeElapsed), startPosition.z);
if (returnPoc == 0)
StartCoroutine(ReturnDeff());
break;
}
void MovePoss(float x, float y, float z)
{
if (IndexPulse != DefibrilateStatus)
returnPoc = NormalStatus;
timeElapsed += Time.deltaTime * speed;
body.MovePosition(new Vector3(x, y, z));
}
}