using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 场景组件 机关/道具 管理者 /// public class SceneCmptManager : MonoSingleton { /// /// 所有宝箱 /// private List _allTreasureBox; /// /// 追踪的宝箱 /// private List _allTrackBox; /// /// 打开的宝箱 /// private List _openTreasureBox; /// /// 可破坏物体 /// private List _damageCmpt; private List _mapSwitchList; private List _backDoorList; /// /// 机关 装置 /// private List _allMechanism; private List _openMechanism; private void Awake() { _allTreasureBox = new List(); _allTrackBox = new List(); _openTreasureBox = new List(); _allMechanism = new List(); _openMechanism = new List(); _damageCmpt = new List(); _mapSwitchList = new List(); _backDoorList = new List(); } // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } public void Reset() { _allTreasureBox.Clear(); _allTrackBox.Clear(); _openTreasureBox.Clear(); _allMechanism.Clear(); _openMechanism.Clear(); _damageCmpt.Clear(); _mapSwitchList.Clear(); _backDoorList.Clear(); } public List GetAllTreasureBox() { return _allTreasureBox; } /// /// 添加宝箱 /// /// public void AddTreasureBox(GameObject obj) { _allTreasureBox.Add(obj); // 网格优化分配 if(GameObject.Find("GridMap")) { MyGridMap gridMap = GameObject.Find("GridMap").GetComponent(); gridMap.AddOneObjToGrid(obj); } } /// /// 移除宝箱 /// /// public void RemoveTreasureBox(GameObject obj) { _allTreasureBox.Remove(obj); } /// /// 打开宝箱 /// /// public void OpenTreasureBox(GameObject obj) { _openTreasureBox.Add(obj); } public List GetAllTrackBox() { return _allTrackBox; } /// /// 添加宝箱 /// /// public void AddTrackBox(GameObject obj) { _allTrackBox.Add(obj); } public void RemoveTrackBox(GameObject obj) { _allTrackBox.Remove(obj); } /// /// 获取打开宝箱数量 /// /// public int GetOpenBoxNum() { return _openTreasureBox.Count; } /// /// 获取宝箱总数 /// /// public int GetAllBoxNum() { return _allTreasureBox.Count; } /// /// 所有宝箱是否开启 /// /// public bool IsAllTreasureBoxFinish() { return _allTreasureBox.Count == _openTreasureBox.Count; } /// /// 添加机关 /// /// public void AddMechanism(GameObject obj) { _allMechanism.Add(obj); // 网格优化分配 if (GameObject.Find("GridMap") != null) { MyGridMap gridMap = GameObject.Find("GridMap").GetComponent(); gridMap.AddOneObjToGrid(obj); } } /// /// 移除机关 /// /// public void RemoveMechanism(GameObject obj) { _allMechanism.Remove(obj); } /// /// 触发机关 /// /// public void OpenMechanism(GameObject obj) { _openMechanism.Add(obj); } /// /// 获取触发机关数量 /// /// public int GetMechanismNumber() { return _openMechanism.Count; } /// /// 是否避让所有机关? /// /// public bool IsAllMechanismFinish() { return _openMechanism.Count == 0; } /// /// 获取所有可破坏组件 /// /// public List GetAllDamageCmpt() { return _damageCmpt; } public void AddDamageCmpt(GameObject obj) { this._damageCmpt.Add(obj); // 网格优化分配 GameObject gridMap = GameObject.Find("GridMap"); if(gridMap) { gridMap.GetComponent().AddOneObjToGrid(obj); } } public void RemoveDamageCmpt(GameObject obj) { this._damageCmpt.Remove(obj); } public void AddMapSwitchCmpt(GameObject obj) { this._mapSwitchList.Add(obj); //// 网格优化分配 //if(GameObject.Find("GridMap")) //{ // MyGridMap gridMap = GameObject.Find("GridMap").GetComponent(); // gridMap.AddOneObjToGrid(obj); //} } public void RemoveMapSwitchCmpt(GameObject obj) { this._mapSwitchList.Remove(obj); } public SceneEventMapSwitchLogic GetMapSwitchCmptByIndex(int index) { if(_mapSwitchList == null) { return null; } for(int i = 0; i < _mapSwitchList.Count; ++i) { SceneEventMapSwitchLogic mapSwitch = _mapSwitchList[i].GetComponent(); if(mapSwitch.info.switchIndex == index) { return mapSwitch; } } return null; } public List GetAllMapSwitchCmpt() { return this._mapSwitchList; } public void AddBackDoorCmpt(GameObject obj) { this._backDoorList.Add(obj); // 网格优化分配 MyGridMap gridMap = GameObject.Find("GridMap").GetComponent(); gridMap.AddOneObjToGrid(obj); } public void RemoveBackDoorCmpt(GameObject obj) { this._backDoorList.Remove(obj); } public SceneEventBackDoorLogic GetBackDoorCmptByIndex(int index) { if (_backDoorList == null) { return null; } for (int i = 0; i < _backDoorList.Count; ++i) { SceneEventBackDoorLogic bd = _backDoorList[i].GetComponent(); if (bd.info.Index == index) { return bd; } } return null; } public List GetAllBackDoorCmpt(GameObject obj) { return this._backDoorList; } /// /// 获取离指定玩家最近 且距离小于10米的 可破坏组件 /// /// /// public GameObject GetDistanceMinDamageObj(Role player) { float minDis = 10; GameObject cmptObj = null; foreach(var item in _damageCmpt) { if (item == null) { continue; } float dis = Vector3.Distance(item.transform.position, player.transform.position); if(dis < minDis) { cmptObj = item; dis = minDis; } } return cmptObj; } }