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;
}
}