mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/MI-38.git
synced 2026-01-24 01:25:38 +03:00
96 lines
3.2 KiB
C#
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;
|
|
}
|
|
|
|
}
|