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 angles; private List angleArray; float[] NewArrayAngle; public int count = -1, countAngle = 0; bool reverse = true; Manager man; void Start() { man = GameObject.Find("Manager").GetComponent(); //transform.localRotation = Quaternion.Euler(0f, 0f, -defaultAngle); string n = gameObject.name; angles = new List(); angleArray = new List(); foreach (CircleCollider2D gr in this.transform.parent.GetComponentsInChildren()) { 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().countA = count; gr.gameObject.GetComponent().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(); 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; } }