Files
MI-38/Heli_with_panels/Assets/Scripts/Panel2D/RotateAngle.cs
2022-07-04 13:15:35 +03:00

96 lines
3.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro;
public class RotateAngle : MonoBehaviour
{
public float defaultAngle = 0; // угол устанавливаемый по дефолту. угол 0 по часам
private List<GameObject> angles;
private List<float> angleArray;
float[] NewArrayAngle;
public int count = -1, countAngle = 0;
bool reverse = true;
Manager man;
void Start()
{
man = GameObject.Find("Manager").GetComponent<Manager>();
//transform.localRotation = Quaternion.Euler(0f, 0f, -defaultAngle);
string n = gameObject.name;
angles = new List<GameObject>();
angleArray = new List<float>();
foreach (CircleCollider2D gr in this.transform.parent.GetComponentsInChildren<CircleCollider2D>())
{
string s = gr.name;
if ((!s.Equals(n)) && s.StartsWith(n))
{
count++;
angles.Add(gr.gameObject);
var at = Mathf.Atan2(gr.gameObject.transform.position.x - transform.position.x, gr.gameObject.transform.position.y - transform.position.y) * Mathf.Rad2Deg;
angleArray.Add(at);
gr.gameObject.AddComponent<AngleCollider>().countA = count;
gr.gameObject.GetComponent<AngleCollider>().parObject = this.gameObject;
}
}
NewArrayAngle = angleArray.ToArray();
OnCollider(0);
}
public void OnCollider(int c)
{
if (!tryNewAngle(c)) return;
transform.localRotation = Quaternion.Euler(0f, 0f, -NewArrayAngle[c]);
countAngle=c;
}
public void OnMouseDown()
{
if (man.mode == "scedit" || man.mode == "play")
return;
bool newReverse = reverse;
int newcountAngle = countAngle;
if (countAngle == count)
{
newReverse = true;
}else if(countAngle == 0)
{
newReverse = false;
}
//reverse = (countAngle == count|| countAngle == 0) ? !reverse:reverse;
newcountAngle = (!newReverse) ? countAngle+1 : countAngle - 1;
if (!tryNewAngle(newcountAngle))
{
newReverse = reverse;
return;
}
countAngle = newcountAngle; reverse = newReverse;
OnCollider(countAngle);
}
bool tryNewAngle(int c)
{
// частные случаи работы крышек, переключателей и др., не предусматриваемые механикой файла objects.xml - короче "костыли"
if (this.gameObject.name == "Handle2_0511") // Panel0511
{
Handler H1 = man.objects.Find("Handle1_0511").gameObject.GetComponent<Handler>();
if (c == 1 && H1.currentAngle <= 11 && H1.currentAngle > -18)
return false;
if (c == 2 && H1.currentAngle <= 11 && H1.currentAngle > -47)
return false;
switch(c) {
case 0: H1.endDragMin = 11; break;
case 1: H1.endDragMin = -18; break;
case 2: H1.endDragMin = -47; break;
}
}
return true;
}
}