using System.Collections.Generic;
using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.Hero;
using GameLogic.Combat.Hero.State;
using UnityEngine;
namespace GameLogic.Combat.CombatTool
{
///
/// 法宝战斗场景
///
public class MagicWeaponCombatSence
{
private BetterList _enemyMagicWeaponList = new BetterList();
private BetterList _playerMagicWeaponList = new BetterList();
///
/// 战斗包围盒 minX miny maxx maxy
///
public Vector4 combatBox;
///
/// 我方法宝入场点
///
public Vector3 myEnterCombatPos;
///
/// 地方法宝入场点
///
public Vector3 enemyEnterCombatPos;
private BetterList magicWeaponCollisionInfoList =
new BetterList();
public void Init()
{
CombatEventManager.Instance.AddEventListener(CombatEventType.MagicWeaponDie, MagicWeaponDie);
}
private void MagicWeaponDie(IEventData iEventData)
{
HeroDieEventData heroDieEventData = iEventData as HeroDieEventData;
CombatMagicWeaponEntity combatMagicWeaponEntity =
heroDieEventData.combatHeroEntity as CombatMagicWeaponEntity;
_enemyMagicWeaponList.Remove(combatMagicWeaponEntity);
_playerMagicWeaponList.Remove(combatMagicWeaponEntity);
for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++)
{
if (magicWeaponCollisionInfoList[i].a == combatMagicWeaponEntity ||
magicWeaponCollisionInfoList[i].b == combatMagicWeaponEntity)
{
RemoveCollisionMagicWeapon(magicWeaponCollisionInfoList[i]);
}
}
}
public void SetMagicWeaponCombatSence(Vector3 myHeroPos, Vector3 fangXiang)
{
myEnterCombatPos = myHeroPos + fangXiang * 2 + new Vector3(0, 10, 0);
myEnterCombatPos = myHeroPos + fangXiang * 18 + new Vector3(0, 10, 0);
}
///
/// 将法宝添加导战斗场景
///
///
public void AddMagicWeaponToSence(CombatMagicWeaponEntity combatMagicWeaponEntity)
{
if (combatMagicWeaponEntity.IsEnemy)
{
_enemyMagicWeaponList.Add(combatMagicWeaponEntity);
combatMagicWeaponEntity.useIndex= _enemyMagicWeaponList.Count;
}
else
{
_playerMagicWeaponList.Add(combatMagicWeaponEntity);
combatMagicWeaponEntity.useIndex= _playerMagicWeaponList.Count;
}
combatMagicWeaponEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Active);
}
public void TriggerMagicWeapon(CombatMagicWeaponEntity a,CombatMagicWeaponEntity b)
{
}
public void Update(float t)
{
// for (int i = 0; i < _enemyMagicWeaponList.Count; i++)
// {
// _enemyMagicWeaponList[i].Update(t);
// }
//
// for (int i = 0; i < _playerMagicWeaponList.Count; i++)
// {
// _playerMagicWeaponList[i].Update(t);
// }
for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++)
{
magicWeaponCollisionInfoList[i].Update(t);
}
}
public CombatMagicWeaponEntity FindCollidingTarget(CombatMagicWeaponEntity combatMagicWeaponEntity)
{
bool isEnemy = combatMagicWeaponEntity.IsEnemy;
BetterList magicWeaponList =
isEnemy ? _playerMagicWeaponList : _enemyMagicWeaponList;
if (magicWeaponList == null)
{
return null;
}
List nullTarget = new List();
for (int i = 0; i < magicWeaponList.Count; i++)
{
if (magicWeaponList[i].CollidingTarget == combatMagicWeaponEntity)
{
return magicWeaponList[i];
}
if (magicWeaponList[i].CollidingTarget == null)
{
nullTarget.Add(magicWeaponList[i]);
}
}
if (nullTarget.Count > 0)
{
int index = CombatCalculateTool.Instance.GetOdd(0, nullTarget.Count);
return nullTarget[index];
}
return null;
}
public void AddCollisionMagicWeapon(CombatMagicWeaponEntity a, CombatMagicWeaponEntity b)
{
MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData =
CObjectPool.Instance.Fetch();
rollingStateData.target = b;
a.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
rollingStateData);
MagicWeaponPingDouState.MagicWeaponPingDouData rollingStateData2 =
CObjectPool.Instance.Fetch();
rollingStateData.target = a;
b.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
rollingStateData2);
MagicWeaponCollisionInfo magicWeaponCollisionInfo = CObjectPool.Instance.Fetch();
magicWeaponCollisionInfo.a = a;
magicWeaponCollisionInfo.b = b;
magicWeaponCollisionInfoList.Add(magicWeaponCollisionInfo);
}
public void RemoveCollisionMagicWeapon(MagicWeaponCollisionInfo collisionInfo)
{
magicWeaponCollisionInfoList.Remove(collisionInfo);
collisionInfo.Finish();
CObjectPool.Instance.Recycle(collisionInfo);
}
}
}