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 switchesList3D = new Dictionary(); // Обычные переключатели 3D public Dictionary switchesList3Dh = new Dictionary(); // Переключатели 3D горизонтальные public List materials = new List(); public List greenMaterials = new List(); 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("materials/Зелен"); man = GameObject.Find("Manager").GetComponent(); //Debug.Log(activeMaterial); renderers = this.transform.parent.GetComponentsInChildren(); RecordChildrenMaterials(); FindAndAddCoverVertical(); //Ищем крышки которые поворачиваются вертикально по тегу и вешаем скрипт поворота FindAndAddCoverHorizontal(); //Ищем крышки которые поворачиваются горизонтально по тегу и вешаем скрипт поворота FindAndAddSwitchVertikal(); //Ищем переключатели, вешаем скрипт поворота Switch3DRotate.cs FindAndAddSwitchHorizontal(); canvasM = GameObject.Find("CanvasMenu"); go = man.prefabHint; t = ""; foreach (KeyValuePair 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().material.color; // child.GetComponent().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(); txt.text = t; var hintBase = hintObj.GetComponentInChildren(); 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().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().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(); //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(); //_cover3Dh.AddComponent(); //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(); 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(); switchesList3Dh.Add(_switches3Dh.name, _switches3Dh); } } } }