mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/MI-38.git
synced 2026-01-23 15:25:44 +03:00
257 lines
9.9 KiB
C#
257 lines
9.9 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using System;
|
||
using System.Linq;
|
||
|
||
public class MakeActive : MonoBehaviour //, IPointerEnterHandler
|
||
{
|
||
// public Color _defaultRender;
|
||
|
||
Material activeMaterial;
|
||
|
||
|
||
public Dictionary<string, GameObject> switchesList3D = new Dictionary<string, GameObject>(); // Обычные переключатели 3D
|
||
public Dictionary<string, GameObject> switchesList3Dh = new Dictionary<string, GameObject>(); // Переключатели 3D горизонтальные
|
||
|
||
public List<Material> materials = new List<Material>();
|
||
public List<Material> greenMaterials = new List<Material>();
|
||
public Renderer[] renderers;
|
||
public bool materialsReplaced = false;
|
||
Manager man;
|
||
public Material door_03_rend;
|
||
public Material door_03_mat;
|
||
//**** для подсказок
|
||
private GameObject hint3D;
|
||
public GameObject go;
|
||
private string t;
|
||
private GameObject canvasM;
|
||
//****
|
||
|
||
//void Start() // Вернуть потом назад
|
||
public void Start()
|
||
{
|
||
activeMaterial = Resources.Load<Material>("materials/Зелен");
|
||
man = GameObject.Find("Manager").GetComponent<Manager>();
|
||
|
||
//Debug.Log(activeMaterial);
|
||
renderers = this.transform.parent.GetComponentsInChildren<Renderer>();
|
||
|
||
RecordChildrenMaterials();
|
||
|
||
FindAndAddCoverVertical(); //Ищем крышки которые поворачиваются вертикально по тегу и вешаем скрипт поворота
|
||
FindAndAddCoverHorizontal(); //Ищем крышки которые поворачиваются горизонтально по тегу и вешаем скрипт поворота
|
||
FindAndAddSwitchVertikal(); //Ищем переключатели, вешаем скрипт поворота Switch3DRotate.cs
|
||
FindAndAddSwitchHorizontal();
|
||
|
||
canvasM = GameObject.Find("CanvasMenu");
|
||
go = man.prefabHint;
|
||
t = "";
|
||
foreach (KeyValuePair<string, string> p in panelName.allPanelsList)
|
||
{
|
||
if (String.Compare(p.Key, this.transform.parent.name) == 0)
|
||
{
|
||
t = panelName.allPanelsList[this.transform.parent.name];
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
//private void OnMouseEnter()
|
||
public void OnMouseEnter()
|
||
{
|
||
/* foreach (Transform child in this.transform.parent) //получить всех детей
|
||
{
|
||
|
||
//_defaultRender = child.GetComponent<Renderer>().material.color;
|
||
// child.GetComponent<Renderer>().material.color = Color.green;
|
||
}*/
|
||
ReplaceMaterialsWithActive();
|
||
//if (man.mode == "scedit" || man.mode == "play") return;
|
||
if (hint.IsHint && t != "")
|
||
{
|
||
|
||
hint3D = OnHint(this.gameObject, go, t);
|
||
}
|
||
}
|
||
public GameObject OnHint(GameObject btn, GameObject objGo, string t)
|
||
{
|
||
Vector3 mousePos = Input.mousePosition;
|
||
Vector2 hintPos = new Vector2(mousePos.x, mousePos.y);
|
||
GameObject hintObj = Instantiate(objGo, canvasM.transform);
|
||
hintObj.transform.position = hintPos;
|
||
Text txt = hintObj.GetComponentInChildren<Text>();
|
||
txt.text = t;
|
||
|
||
var hintBase = hintObj.GetComponentInChildren<Image>();
|
||
var s = txt.text.Length;
|
||
var upper = 0;
|
||
foreach (char letter in t.Where(char.IsUpper))
|
||
upper++;
|
||
var sizeX = (s- upper) * 11.2f+(upper*15.5f);
|
||
if ((sizeX + hintBase.transform.position.x) > 1920)
|
||
{
|
||
float pos = hintObj.transform.localPosition.x - sizeX;
|
||
if (pos < 0) pos = -30;
|
||
hintObj.transform.localPosition = new Vector2(pos, hintObj.transform.localPosition.y);
|
||
}
|
||
|
||
return hintObj;
|
||
}
|
||
//private void OnMouseExit()
|
||
public void OnMouseExit()
|
||
{
|
||
if (!hlight.l)
|
||
{
|
||
RestoreChildrenMaterials();
|
||
}
|
||
Destroy(hint3D);
|
||
}
|
||
|
||
private void RecordChildrenMaterials()
|
||
{
|
||
materials.Clear(); greenMaterials.Clear();
|
||
|
||
foreach (var renderer in renderers)
|
||
{
|
||
materials.Add(renderer.material);
|
||
if (this.name == "door_03")
|
||
{
|
||
Material[] door_03_rend = GameObject.Find("Copter/Fuzeliazh/Door_03/door_03").GetComponent<Renderer>().materials;
|
||
Material greenMat = new Material(door_03_rend[1]);
|
||
greenMat.SetColor("_EmissionColor", new Color(9f / 255f, 82f / 255f, 4f / 255f));
|
||
greenMaterials.Add(greenMat);
|
||
}
|
||
else if (this.name == "door_04")
|
||
{
|
||
Material[] door_04_rend = GameObject.Find("Copter/Fuzeliazh/Door_04/door_04").GetComponent<Renderer>().materials;
|
||
Material greenMat = new Material(door_04_rend[1]);
|
||
greenMat.SetColor("_EmissionColor", new Color(9f / 255f, 82f / 255f, 4f / 255f));
|
||
greenMaterials.Add(greenMat);
|
||
}
|
||
else
|
||
{
|
||
Material greenMat = new Material(renderer.material); //activeMaterial // renderer.material
|
||
greenMat.SetColor("_EmissionColor", new Color(9f / 255f, 82f / 255f, 4f / 255f));
|
||
greenMaterials.Add(greenMat);
|
||
}
|
||
}
|
||
}
|
||
|
||
public void RestoreChildrenMaterials()
|
||
{
|
||
for (int i = 0; i < renderers.Length; i++)
|
||
{
|
||
renderers[i].material = materials[i];
|
||
}
|
||
materialsReplaced = false;
|
||
}
|
||
|
||
public void ReplaceMaterialsWithActive()
|
||
{
|
||
//Debug.Log("ReplaceMaterialsWithActive: " + this.name);
|
||
if (activeMaterial != null)
|
||
{
|
||
for (int i = 0; i < renderers.Length; i++)
|
||
renderers[i].material = greenMaterials[i]; // = activeMaterial;
|
||
}
|
||
else
|
||
{
|
||
Debug.LogError("Active Material is not set!");
|
||
}
|
||
materialsReplaced = true;
|
||
}
|
||
|
||
|
||
void OnMouseDown()
|
||
{
|
||
if (man.mode == "scedit" || man.mode == "play") return;
|
||
// Скрываем люки под которыми спрятаны панели. Еще не решили нужно ли
|
||
if (this.transform.parent.gameObject.name == "Group019" || this.transform.parent.gameObject.name == "Group020") this.transform.parent.gameObject.SetActive(false);
|
||
|
||
//if (man.mode == "scedit") return;
|
||
//Debug.Log(this.transform.parent.name + " кликаю панель");
|
||
//Здесь проверку на not null сделать. Не все активные области являются панелями.
|
||
if (string.Compare(this.transform.parent.name.Substring(this.transform.parent.name.Length - 2), "3D") == 0 && this.transform.parent.name != null)
|
||
{
|
||
string panel2d = this.transform.parent.name.Substring(0, this.transform.parent.name.Length - 3);
|
||
//Debug.Log("MakeActive: " + panel2d);
|
||
|
||
// Может тут подвязать наш канвас и обзорку Максима
|
||
|
||
//man.cabines2d.SetActive(true);
|
||
//man.canvas.SetActive(true);
|
||
//man.fusel.SetActive(false);
|
||
man.SwitchTo2D(panel2d);
|
||
}
|
||
}
|
||
|
||
private void FindAndAddCoverVertical()
|
||
{
|
||
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
|
||
string s2 = "Cover";
|
||
GameObject[] cover3Dv = GameObject.FindGameObjectsWithTag("cover3Dv");
|
||
foreach (GameObject _cover3Dv in cover3Dv)
|
||
{
|
||
if (_cover3Dv.name.EndsWith(s1) && _cover3Dv.name.StartsWith(s2))
|
||
{
|
||
//Debug.Log(_cover3Dv.name);
|
||
_cover3Dv.AddComponent<Cover3DVrotate>();
|
||
//switchesList3D.Add(sw.name, sw);
|
||
}
|
||
}
|
||
|
||
}
|
||
private void FindAndAddCoverHorizontal()
|
||
{
|
||
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
|
||
string s2 = "Cover";
|
||
GameObject[] cover3Dh = GameObject.FindGameObjectsWithTag("cover3Dh");
|
||
foreach (GameObject _cover3Dh in cover3Dh)
|
||
{
|
||
if (_cover3Dh.name.EndsWith(s1) && _cover3Dh.name.StartsWith(s2))
|
||
{
|
||
//Debug.Log(_cover3Dh.name);
|
||
_cover3Dh.AddComponent<Cover3DHrotate>();
|
||
//_cover3Dh.AddComponent<Animation>();
|
||
//switchesList3D.Add(sw.name, sw);
|
||
}
|
||
}
|
||
}
|
||
|
||
private void FindAndAddSwitchVertikal()
|
||
{
|
||
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
|
||
string s2 = "Tumbler";
|
||
GameObject[] switches3D = GameObject.FindGameObjectsWithTag("toggle3D");
|
||
foreach (GameObject sw in switches3D)
|
||
{
|
||
if (sw.name.EndsWith(s1) && sw.name.StartsWith(s2))
|
||
{
|
||
//Debug.Log(sw.name);
|
||
sw.AddComponent<Switch3DRotate>();
|
||
switchesList3D.Add(sw.name, sw);
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
private void FindAndAddSwitchHorizontal()
|
||
{
|
||
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
|
||
string s2 = "Tumbler";
|
||
GameObject[] switches3Dh = GameObject.FindGameObjectsWithTag("toggle3Dh");
|
||
foreach (GameObject _switches3Dh in switches3Dh)
|
||
{
|
||
if (_switches3Dh.name.EndsWith(s1) && _switches3Dh.name.StartsWith(s2))
|
||
{
|
||
//Debug.Log(sw.name);
|
||
_switches3Dh.AddComponent<Switch3DHRotate>();
|
||
switchesList3Dh.Add(_switches3Dh.name, _switches3Dh);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|