|
@@ -4,6 +4,7 @@ using Fort23.Core;
|
|
|
using GameLogic.Combat.Hero;
|
|
|
using GameLogic.Combat.Hero.State;
|
|
|
using UnityEngine;
|
|
|
+using Utility;
|
|
|
|
|
|
namespace GameLogic.Combat.CombatTool
|
|
|
{
|
|
@@ -15,7 +16,7 @@ namespace GameLogic.Combat.CombatTool
|
|
|
private BetterList<CombatMagicWeaponEntity> _enemyMagicWeaponList = new BetterList<CombatMagicWeaponEntity>();
|
|
|
private BetterList<CombatMagicWeaponEntity> _playerMagicWeaponList = new BetterList<CombatMagicWeaponEntity>();
|
|
|
|
|
|
-
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 战斗包围盒 minX miny maxx maxy
|
|
|
/// </summary>
|
|
@@ -31,8 +32,10 @@ namespace GameLogic.Combat.CombatTool
|
|
|
/// </summary>
|
|
|
public Vector3 enemyEnterCombatPos;
|
|
|
|
|
|
- private BetterList<MagicWeaponCollisionInfo> magicWeaponCollisionInfoList =
|
|
|
- new BetterList<MagicWeaponCollisionInfo>();
|
|
|
+ private Map<int, MagicWeaponCollisionInfo> magicWeaponCollisionInfoList =
|
|
|
+ new Map<int, MagicWeaponCollisionInfo>();
|
|
|
+
|
|
|
+ private int MagicWeaponCollisionID;
|
|
|
|
|
|
public void Init()
|
|
|
{
|
|
@@ -46,20 +49,13 @@ namespace GameLogic.Combat.CombatTool
|
|
|
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]);
|
|
|
- }
|
|
|
- }
|
|
|
+ RemoveCollisionMagicWeapon(combatMagicWeaponEntity.MagicWeaponCollisionId);
|
|
|
}
|
|
|
|
|
|
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);
|
|
|
+ enemyEnterCombatPos = myHeroPos + fangXiang * 18 + new Vector3(0, 10, 0);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -71,20 +67,20 @@ namespace GameLogic.Combat.CombatTool
|
|
|
if (combatMagicWeaponEntity.IsEnemy)
|
|
|
{
|
|
|
_enemyMagicWeaponList.Add(combatMagicWeaponEntity);
|
|
|
- combatMagicWeaponEntity.useIndex= _enemyMagicWeaponList.Count;
|
|
|
+ combatMagicWeaponEntity.useIndex = _enemyMagicWeaponList.Count;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
_playerMagicWeaponList.Add(combatMagicWeaponEntity);
|
|
|
- combatMagicWeaponEntity.useIndex= _playerMagicWeaponList.Count;
|
|
|
+ combatMagicWeaponEntity.useIndex = _playerMagicWeaponList.Count;
|
|
|
}
|
|
|
|
|
|
+ FindCollidingTarget(combatMagicWeaponEntity);
|
|
|
combatMagicWeaponEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Active);
|
|
|
}
|
|
|
|
|
|
- public void TriggerMagicWeapon(CombatMagicWeaponEntity a,CombatMagicWeaponEntity b)
|
|
|
+ public void TriggerMagicWeapon(CombatMagicWeaponEntity a, CombatMagicWeaponEntity b)
|
|
|
{
|
|
|
-
|
|
|
}
|
|
|
|
|
|
public void Update(float t)
|
|
@@ -98,32 +94,47 @@ namespace GameLogic.Combat.CombatTool
|
|
|
// {
|
|
|
// _playerMagicWeaponList[i].Update(t);
|
|
|
// }
|
|
|
+ for (magicWeaponCollisionInfoList.Begin(); magicWeaponCollisionInfoList.Next();)
|
|
|
+ {
|
|
|
+ magicWeaponCollisionInfoList.Value.Update(t);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- for (int i = 0; i < magicWeaponCollisionInfoList.Count; i++)
|
|
|
+ public MagicWeaponCollisionInfo FindMagicWeaponCollisionInfo(int id)
|
|
|
+ {
|
|
|
+ if (magicWeaponCollisionInfoList.TryGetValue(id, out var info))
|
|
|
{
|
|
|
- magicWeaponCollisionInfoList[i].Update(t);
|
|
|
+ return info;
|
|
|
}
|
|
|
+
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
- public CombatMagicWeaponEntity FindCollidingTarget(CombatMagicWeaponEntity combatMagicWeaponEntity)
|
|
|
+ private void FindCollidingTarget(CombatMagicWeaponEntity combatMagicWeaponEntity)
|
|
|
{
|
|
|
bool isEnemy = combatMagicWeaponEntity.IsEnemy;
|
|
|
BetterList<CombatMagicWeaponEntity> magicWeaponList =
|
|
|
isEnemy ? _playerMagicWeaponList : _enemyMagicWeaponList;
|
|
|
if (magicWeaponList == null)
|
|
|
{
|
|
|
- return null;
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
List<CombatMagicWeaponEntity> nullTarget = new List<CombatMagicWeaponEntity>();
|
|
|
for (int i = 0; i < magicWeaponList.Count; i++)
|
|
|
{
|
|
|
- if (magicWeaponList[i].CollidingTarget == combatMagicWeaponEntity)
|
|
|
+ if (magicWeaponList[i].CombatAIBasic.stateControl.CurrStateName != CombatHeroStateType.idle &&
|
|
|
+ magicWeaponList[i].CombatAIBasic.stateControl.CurrStateName != CombatHeroStateType.Active)
|
|
|
{
|
|
|
- return magicWeaponList[i];
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
- if (magicWeaponList[i].CollidingTarget == null)
|
|
|
+ // if (magicWeaponList[i].CollidingTarget == combatMagicWeaponEntity)
|
|
|
+ // {
|
|
|
+ // return magicWeaponList[i];
|
|
|
+ // }
|
|
|
+
|
|
|
+ if (magicWeaponList[i].MagicWeaponCollisionId < 0)
|
|
|
{
|
|
|
nullTarget.Add(magicWeaponList[i]);
|
|
|
}
|
|
@@ -132,10 +143,15 @@ namespace GameLogic.Combat.CombatTool
|
|
|
if (nullTarget.Count > 0)
|
|
|
{
|
|
|
int index = CombatCalculateTool.Instance.GetOdd(0, nullTarget.Count);
|
|
|
- return nullTarget[index];
|
|
|
+ CombatMagicWeaponEntity target = nullTarget[index];
|
|
|
+ MagicWeaponCollisionInfo magicWeaponCollisionInfo =
|
|
|
+ CObjectPool.Instance.Fetch<MagicWeaponCollisionInfo>();
|
|
|
+ magicWeaponCollisionInfo.Init(combatMagicWeaponEntity, target, MagicWeaponCollisionID);
|
|
|
+ magicWeaponCollisionInfoList.Add(MagicWeaponCollisionID, magicWeaponCollisionInfo);
|
|
|
+ MagicWeaponCollisionID++;
|
|
|
}
|
|
|
|
|
|
- return null;
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
public void AddCollisionMagicWeapon(CombatMagicWeaponEntity a, CombatMagicWeaponEntity b)
|
|
@@ -151,15 +167,26 @@ namespace GameLogic.Combat.CombatTool
|
|
|
rollingStateData.target = a;
|
|
|
b.CombatAIBasic.ChangeState(CombatHeroStateType.MagicWeaponPingDou,
|
|
|
rollingStateData2);
|
|
|
- MagicWeaponCollisionInfo magicWeaponCollisionInfo = CObjectPool.Instance.Fetch<MagicWeaponCollisionInfo>();
|
|
|
- magicWeaponCollisionInfo.a = a;
|
|
|
- magicWeaponCollisionInfo.b = b;
|
|
|
- magicWeaponCollisionInfoList.Add(magicWeaponCollisionInfo);
|
|
|
+ magicWeaponCollisionInfoList[a.MagicWeaponCollisionId].SetState(2);
|
|
|
+ // MagicWeaponCollisionInfo magicWeaponCollisionInfo = CObjectPool.Instance.Fetch<MagicWeaponCollisionInfo>();
|
|
|
+ // magicWeaponCollisionInfo.a = a;
|
|
|
+ // magicWeaponCollisionInfo.b = b;
|
|
|
+ // magicWeaponCollisionInfoList.Add(magicWeaponCollisionInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void RemoveCollisionMagicWeapon(int id)
|
|
|
+ {
|
|
|
+ magicWeaponCollisionInfoList.Remove(id, out var collisionInfo);
|
|
|
+ if (collisionInfo != null)
|
|
|
+ {
|
|
|
+ collisionInfo.Finish();
|
|
|
+ CObjectPool.Instance.Recycle(collisionInfo);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void RemoveCollisionMagicWeapon(MagicWeaponCollisionInfo collisionInfo)
|
|
|
{
|
|
|
- magicWeaponCollisionInfoList.Remove(collisionInfo);
|
|
|
+ magicWeaponCollisionInfoList.Remove(collisionInfo.id);
|
|
|
collisionInfo.Finish();
|
|
|
CObjectPool.Instance.Recycle(collisionInfo);
|
|
|
}
|