using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace WildAttack
{
///
/// 敌人管理器
///
public class EnemyManager : Singleton
{
///
/// 存放场上存活敌人(不包含初始怪)
///
public List enemyList;
#region Functions
public void Init()
{
enemyList = new List();
CreateWayPoint();
}
///
/// 敌人管理器生成敌人方法
///
///
///
public void CreateEnemy(int monsterId, int spawnGroupId)
{
Enemy enemy;
// 武器权重
MonsterData data = MonsterModule.GetInstance().GetData(monsterId);
int weaponId = WeightRandomUtils.GetInstance().GetRandomId(data.weponWeight);
//int weaponId = 3;
if (weaponId == -1) return;
GameObject obj;
// 判断是否初始怪
if (spawnGroupId <= 0)
{
// 新生成
obj = GameObject.Instantiate(Resources.Load("Enemy/yellow/duyanguai_skin_flag"));
}
else
{
// 从池中取
obj = EnemyPool.GetInstance().GetGameObject(weaponId);
}
obj.SetActive(true);
// 添加脚本
enemy = obj.GetComponent();
if (enemy == null)
{
enemy = obj.AddComponent();
}
// 调用初始化
enemy.Init(monsterId, weaponId, spawnGroupId);
enemyList.Add(enemy);
}
GameObject[] wayPointObjs;
///
/// 读表获取三个出生点
///
public void CreateWayPoint()
{
// 读表get坐标 spawnGroup总数
wayPointObjs = new GameObject[3];
Vector3[] ve3Arr = new Vector3[3];
for (int i = 0; i < ve3Arr.Length; i++)
{
Vector2 ve2 = WayPointModule.GetInstance().GetDataByGroup(i + 1)[0].wayPoint[0];
ve3Arr[i] = new Vector3(ve2.x, 35, ve2.y);
}
// 生成emptyObj set layer collider等
for (int i = 0; i < ve3Arr.Length; i++)
{
GameObject obj = new GameObject();
obj.name = "wayPoint" + (i + 1);
obj.transform.position = ve3Arr[i] + Vector3.up * 2;
obj.layer = LayerMask.NameToLayer("WayPoint");
SphereCollider collider = obj.AddComponent();
collider.radius = 3;
collider.isTrigger = true;
wayPointObjs[i] = obj;
}
// 射线检测地面 getY轴坐标
foreach (var item in wayPointObjs)
{
Ray ray = new Ray(item.transform.position, -item.transform.up);
RaycastHit hitInfo;
if (Physics.Raycast(ray, out hitInfo, 100, 1 << LayerMask.NameToLayer("Plane")))
{
if (hitInfo.collider.gameObject.layer == LayerMask.NameToLayer("Plane"))
{
item.transform.position = new Vector3(item.transform.position.x, hitInfo.point.y, item.transform.position.z);
}
}
}
}
public GameObject[] GetWayPoints()
{
return wayPointObjs;
}
///
/// 游戏结束
///
public void GameOver()
{
// 对场上敌人重新设置新的目标点(城门内建筑)
foreach (var item in enemyList)
{
// set new WayPoint
item.SetNewWayPoint(4);
}
}
#endregion
}
}