/// ///******************************************************** /// 作者: DDG /// 日期: 2024/10/18 13:53:32 /// 功能: ///******************************************************** /// using QuickOutline; using System.Collections; using System.Collections.Generic; using UnityEngine; using ZXKFramework; public class GameManager : MonoSingleton { public Bomb bomb; GameModel gameModel; /// /// 当前点击的物体高亮使用的OutLine(黄色) /// public OutLineManager outLineManager = new OutLineManager(); /// /// 当前点击的物体需要放置的位置的OutLine(绿色) /// OutLineManager greenOutLineManager = new OutLineManager(); Adsorb adsorb = new Adsorb(); [HideInInspector] public List allMouseMove; [HideInInspector] public List allOutLine; OrderDragManager orderDragManager; /// /// 不需要拖拽的物体(但是需要有介绍) /// [Header("请将需要有介绍文字但不需要拖拽的物体放到这里")] public List allNoDragGame; [Header("透明物体")] public List allAlphaGame; public void Start() { allMouseMove = new List(); gameModel = MVC.GetModel(); gameModel.Init(); orderDragManager = OrderDragManager.Instance; orderDragManager.Init(); adsorb.Init(transform); GameObject parent = transform.FindFirst("OutLineManager"); outLineManager.Init(parent.transform, parent.GetComponent()); outLineManager.CloseAllOutLine(); GameObject greenOutLine = transform.FindFirst("GreenOutLineManager"); greenOutLineManager.Init(greenOutLine.transform, greenOutLine.GetComponent()); greenOutLineManager.CloseAllOutLine(); List allJieGou = gameModel.excelData.allShowJieGou; for (int i = 0; i < allJieGou.Count; i++) { MouseMoveObj loMouseMoveObj = transform.FindFirst(allJieGou[i].Name).GetOrAddComponent(); Collider loGameOBJ = transform.FindFirst($"{allJieGou[i].Name}_OutLine").GetOrAddComponent(); allMouseMove.Add(loMouseMoveObj); allOutLine.Add(loGameOBJ); loMouseMoveObj.enabled = false; loMouseMoveObj.isMove = true; loMouseMoveObj.down += m => { gameModel.isMouseMove = false; outLineManager.OpenHightLightAndCloseOther(m.name); greenOutLineManager.OpenHightLightAndCloseOther($"{m.name}_OutLine"); ///可以拖拽说明现在是拆开状态,所以可以记录初始位置 orderDragManager.AddDragGame(loMouseMoveObj.name, loMouseMoveObj.transform.localPosition); }; loMouseMoveObj.up += m => { gameModel.isMouseMove = true; outLineManager.CloseAllOutLine(); greenOutLineManager.CloseAllOutLine(); AdsorbItem loAdsorbItem; adsorb.allAds.TryGetValue(m.name, out loAdsorbItem); if (loAdsorbItem != null) { if (orderDragManager.isDragRight(loMouseMoveObj.gameObject))//是否拖拽正确 { if (orderDragManager.NextDrag()) { orderDragManager.AddOrderID();//增加顺序ID } loAdsorbItem.CheakHoming();//拼装物体 if (orderDragManager.IsPieceTogetherFinish())//所有物体是否拼装完毕 { //把模型状态更改为合并 Game.Instance.uiManager.GetUI().ChangeIsBomb(false); //初始化拖拽顺序 orderDragManager.InitDragOrder(); } } else { orderDragManager.ReturnToStartPos(loMouseMoveObj.gameObject); } } }; } for (int i = 0; i < allMouseMove.Count; i++) { if (allNoDragGame.Contains(allMouseMove[i].gameObject)) { allMouseMove.RemoveAt(i); i--; } } } public void MergeAdsorb(string name) { AdsorbItem loAdsorbItem; adsorb.allAds.TryGetValue(name, out loAdsorbItem); if (loAdsorbItem != null) { loAdsorbItem.CheakHoming(); } else { Debug.Log("拼装错误 " + name); } } private void Update() { //if (Input.GetKeyDown(KeyCode.K)) //{ // bomb.Move(); // for (int i = 0; i < allMouseMove.Count; i++) // { // allMouseMove[i].enabled = true; // } //} //if (Input.GetKeyDown(KeyCode.L)) //{ // bomb.Back(); // for (int i = 0; i < allMouseMove.Count; i++) // { // allMouseMove[i].enabled = false; // } //} } }