2025-05-09 10:20:30 +08:00

160 lines
5.3 KiB
C#

/// <summary>
///********************************************************
/// 作者: DDG
/// 日期: 2024/10/18 13:53:32
/// 功能:
///********************************************************
/// <summary>
using QuickOutline;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ZXKFramework;
public class GameManager : MonoSingleton<GameManager>
{
public Bomb bomb;
GameModel gameModel;
/// <summary>
/// 当前点击的物体高亮使用的OutLine(黄色)
/// </summary>
public OutLineManager outLineManager = new OutLineManager();
/// <summary>
/// 当前点击的物体需要放置的位置的OutLine(绿色)
/// </summary>
OutLineManager greenOutLineManager = new OutLineManager();
Adsorb adsorb = new Adsorb();
[HideInInspector]
public List<MouseMoveObj> allMouseMove;
[HideInInspector]
public List<Collider> allOutLine;
OrderDragManager orderDragManager;
/// <summary>
/// 不需要拖拽的物体(但是需要有介绍)
/// </summary>
[Header("请将需要有介绍文字但不需要拖拽的物体放到这里")]
public List<GameObject> allNoDragGame;
[Header("透明物体")]
public List<GameObject> allAlphaGame;
public void Start()
{
allMouseMove = new List<MouseMoveObj>();
gameModel = MVC.GetModel<GameModel>();
gameModel.Init();
orderDragManager = OrderDragManager.Instance;
orderDragManager.Init();
adsorb.Init(transform);
GameObject parent = transform.FindFirst("OutLineManager");
outLineManager.Init(parent.transform, parent.GetComponent<Outline>());
outLineManager.CloseAllOutLine();
GameObject greenOutLine = transform.FindFirst("GreenOutLineManager");
greenOutLineManager.Init(greenOutLine.transform, greenOutLine.GetComponent<Outline>());
greenOutLineManager.CloseAllOutLine();
List<ShowJieGou> allJieGou = gameModel.excelData.allShowJieGou;
for (int i = 0; i < allJieGou.Count; i++)
{
MouseMoveObj loMouseMoveObj = transform.FindFirst(allJieGou[i].Name).GetOrAddComponent<MouseMoveObj>();
Collider loGameOBJ = transform.FindFirst($"{allJieGou[i].Name}_OutLine").GetOrAddComponent<Collider>();
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<MainWnd>().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;
// }
//}
}
}