using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityGameFramework.Runtime;
using GameFramework.Event;
using BattleDefine;
///
/// 描述:
/// 作者:WJ
///
public class AIManager : MonoBehaviour
{
///
/// 单键
///
private static AIManager m_Instance;
///
/// 刷怪点MO
///
private Dictionary mPointMos = new Dictionary();
///
/// 近战攻击角色
///
private List mNearAttackRoles = new List();
///
/// 远程攻击角色
///
private List mFarAttackRoles = new List();
private List mAreaLocks = new List();
///
/// 当前所在刷怪点索引
///
public int mCurPoint = 0;
public Transform playerPoint;
///
/// 检测朝玩家移动
///
private bool mCheckMoveToPlayer = true;
///
/// 单键
///
public static AIManager Instance
{
get
{
if (m_Instance == null)
{
m_Instance = GameObject.Find("AIManager").AddComponent();
}
return m_Instance;
}
}
///
/// 初始化
///
public void Init()
{
mPointMos.Clear();
// 关卡数据
sm_gate gateMo = sm_gate.GetMoById(GameDateManager.Instance.GateID);
// 出生点
playerPoint = this.transform.Find("Area1/0");
// 刷怪点数据
List levels = gateMo.GetMonsterLevels();
for (int i = 0; i < levels.Count; i++)
{
Transform tran = transform.Find("Area1/" + (i + 1).ToString());
if (tran)
{
WJBirthPointMo pointMO = new WJBirthPointMo();
pointMO.point = i + 1;
pointMO.pointTran = tran;
pointMO.monsters = levels[i].GetMonsterList();
pointMO.bossID = levels[i].boss1;
if(tran.CompareTag("NoRandom"))
{
pointMO.randomPos = false;
}
mPointMos.Add(i + 1, pointMO);
}
}
// 创建怪物
switch((EBattleSceneType)int.Parse(gateMo.battleType))
{
case EBattleSceneType.EBattleType_Default:
while (CreateNextPointMonster(Vector3.zero))
{
}
break;
case EBattleSceneType.EBattleType_Boss:
CreatPointMonster(1, Vector3.zero);
break;
case EBattleSceneType.EBattleType_Guide:
CreatPointMonster(1, Vector3.zero);
break;
case EBattleSceneType.EBattleType_Arena:
break;
case EBattleSceneType.EBattleType_Safe:
break;
}
}
public Transform GetPlayerCreatePoint()
{
return GameObject.Find("AIManager/Area1/0").transform;
}
public Transform GetPointMOByIndex(int index)
{
return playerPoint;
}
///
/// 创建怪物点
///
public bool CreatPointMonster(int point, Vector3 livePos)
{
if (mPointMos.ContainsKey(point))
{
mCurPoint = point;
// 怪物
for (int i = 0; i < mPointMos[point].monsters.Count; i++)
{
if (livePos == Vector3.zero)
{
livePos = mPointMos[point].pointTran.position;
}
float radius = mPointMos[point].randomDis;
// 在出生位置小范围随机
if (mPointMos[point].randomPos)
{
livePos += new Vector3(Random.Range(-radius, radius), 0, Random.Range(-radius, radius));
}
//if (mPointMos[point].monsters[i].heroId == mPointMos[point].bossID)
//{
// RoleManager.Instance.CreateMonster(point, mPointMos[point].monsters[i], null, livePos, livePos, radius, true);
//}
//else
//{
// RoleManager.Instance.CreateMonster(point, mPointMos[point].monsters[i], null, livePos, livePos, radius, false);
//}
}
EventComponent nowEvent = GameEntry.GetComponent();
nowEvent.FireNow(this, new NoviceEventSpawnerIndex(point));
mCheckMoveToPlayer = true;
return true;
}
return false;
}
///
/// 获取场景所有怪物数量
///
///
public int GetMonsterMaxNumber()
{
int nodeIndex = 1;
int maxNumber = 0;
foreach (var item in mPointMos)
{
maxNumber += GetPointMonsterNumber(nodeIndex);
}
return maxNumber;
}
///
/// 获取单一出生点 怪物数量
///
///
///
public int GetPointMonsterNumber(int point)
{
int number = 0;
if (mPointMos.ContainsKey(point))
{
number += mPointMos[point].monsters.Count;
}
return number;
}
///
/// 创建下一个怪物点
///
/// 是否创建成功
public bool CreateNextPointMonster(Vector3 livePos)
{
mCurPoint++;
if (mPointMos.ContainsKey(mCurPoint))
{
// 解除区域限制
RemoveAreaLockCmpt(mCurPoint);
return CreatPointMonster(mCurPoint, livePos);
}
return false;
}
///
/// 添加禁止区域
///
///
public void AddAreaLockCmpt(SceneEventAreaLockLogic al)
{
mAreaLocks.Add(al);
}
public SceneEventAreaLockLogic GetAreaLockCmpt(int id)
{
foreach(var item in mAreaLocks)
{
if(item.areaIndex == id)
{
return item;
}
}
return null;
}
///
/// 移除禁止区域
///
///
public void RemoveAreaLockCmpt(int index)
{
foreach(var item in mAreaLocks)
{
if(item.areaIndex == index)
{
item.AreaUnlock();
mAreaLocks.Remove(item);
UI_TipsWindow.InitFloatWaringDialog("前方结界屏障已消失,可以通行!");
break;
}
}
}
}
///
/// 怪物出生点MO
///
public class WJBirthPointMo
{
///
/// 怪物
///
public List monsters;
///
/// BOSS ID
///
public int bossID = 0;
///
/// 出生点
///
public int point = 0;
///
/// 是否小范围随机
///
public bool randomPos = true;
///
/// 随机的距离
///
public float randomDis = 5.0f;
///
/// 点坐标
///
public Transform pointTran = null;
}