调整代码

main
刘涛 2023-12-14 19:10:53 +08:00
parent 3283e6a19d
commit 517aae5ebc
7 changed files with 400 additions and 360 deletions

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@ namespace Code.Scripts.Gameplay.BT.Task
public override void OnStart()
{
_owner = GameUnitManager.instance.characterManager.Get(SharedBattleInfo.Value.ownerId);
_owner = GameUnitManager.instance.infightUnits.Search(SharedBattleInfo.Value.ownerId) as Character;
if (_owner != null)
_bornCellIndex = LevelManager.Instance.CurrentLevel.Map.BlockPosition2TGSCellIndex(_owner.runtimeData.characterLevelData.BornPosition);
SharedBattleInfo.Value.PartolPointIndex = -1;

View File

@ -38,7 +38,7 @@ namespace Gameplay.Character
{
return;
}
var bt = await AIManager.Instance.RegisterAI(Node.GameObject, AIBehavior);
bt.SetVariable("battleInfo", new SharedBattleInfo()
{
@ -59,9 +59,9 @@ namespace Gameplay.Character
{
AIManager.Instance.UnRegisterAI(Node.GameObject);
}
BuffManager.instance.RemoveCharacter(this);
SkillManager.instance.RemoveCharacter(this);
BuffManager.instance?.RemoveCharacter(this);
SkillManager.instance?.RemoveCharacter(this);
}
protected override void _OnUseSkill(int cellIndex,

View File

@ -4,31 +4,18 @@ using Gameplay.Unit;
namespace Gameplay.Character
{
public class CharacterManager : IDisposable
public class CharacterManager
{
private readonly List<Character> _characterList = new List<Character>();
private readonly Dictionary<int, Troops> _troopDict = new Dictionary<int, Troops>();
public void Dispose()
{
foreach (var charactor in _characterList)
{
charactor.Dispose();
}
_characterList.Clear();
}
public void AddCharacter(Character character)
{
_characterList.Add(character);
_AddToTroop(character);
}
public void RemoveCharacter(Character c)
{
var index = _characterList.IndexOf(c);
_characterList.RemoveAt(index);
_RemoveFromTroop(c);
}
@ -56,6 +43,11 @@ namespace Gameplay.Character
}
}
public bool Contains(uint id)
{
return GameUnitManager.instance.infightUnits.Contains(id);
}
public Character Get(uint id)
{
var c = GameUnitManager.instance.infightUnits.Search(id) as Character;
@ -102,17 +94,22 @@ namespace Gameplay.Character
public void ForEach(Action<Character> action)
{
foreach (var charactor in _characterList)
foreach (var unit in GameUnitManager.instance.infightUnits.unitList)
{
action(charactor);
var charactor = unit as Character;
if (charactor != null)
{
action(charactor);
}
}
}
public List<Character> FindAll(Func<Character, bool> conditions)
{
List<Character> result = new List<Character>();
foreach (var charactor in _characterList)
foreach (var unit in GameUnitManager.instance.infightUnits.unitList)
{
var charactor = unit as Character;
if (conditions(charactor))
{
result.Add(charactor);
@ -124,8 +121,9 @@ namespace Gameplay.Character
public Character FindOne(Func<Character, bool> conditions)
{
foreach (var charactor in _characterList)
foreach (var unit in GameUnitManager.instance.infightUnits.unitList)
{
var charactor = unit as Character;
if (conditions(charactor))
{
return charactor;

View File

@ -13,378 +13,381 @@ using Utils;
using Constants = Framework.Constants;
using Image = UnityEngine.UI.Image;
public class UIFightSceneController : UIWindow{
public class UIFightSceneController : UIWindow
{
//UI GameObj
private GameObject GoBloods;
private GameObject GoActionStates;
private GameObject GoNumbers;
//UI GameObj
private GameObject GoBloods;
private GameObject GoActionStates;
private GameObject GoNumbers;
private List<uint> m_fightIDs = new List<uint>();
private Dictionary<uint, GameObject> m_goBloodsMap = new Dictionary<uint, GameObject>();
private Dictionary<uint, GameObject> m_goActionStatesMap = new Dictionary<uint, GameObject>();
private Dictionary<uint, GameObject> m_goNumbersMap = new Dictionary<uint, GameObject>();
private List<uint> m_fightIDs = new List<uint>();
private Dictionary<uint, GameObject> m_goBloodsMap = new Dictionary<uint, GameObject>();
private Dictionary<uint, GameObject> m_goActionStatesMap = new Dictionary<uint, GameObject>();
private Dictionary<uint, GameObject> m_goNumbersMap = new Dictionary<uint, GameObject>();
private List<List<int>> _damageL = new List<List<int>>(10);
private Dictionary<int, float> _numbersMap = new Dictionary<int, float>();
private List<List<int>> _damageL = new List<List<int>>(10);
private Dictionary<int, float> _numbersMap = new Dictionary<int, float>();
[Range(1, 2.5f)]
public float bloodOffsetY = 1.8f;
[Range(0, 1.5f)]
public float stateOffsetY = 1f;
[Range(1, 2.5f)]
public float bloodOffsetY = 1.8f;
[Range(-2.5f, 0)]
public float stateOffsetX = -1f;
// Use this for initialization
public override void OnAwake()
{
//bind UI GameObj
GoBloods = transform.Find("Content/Bloods").gameObject;
GoActionStates = transform.Find("Content/ActionStates").gameObject;
GoNumbers = transform.Find("Content/Numbers").gameObject;
}
[Range(0, 1.5f)]
public float stateOffsetY = 1f;
private void Update()
{
if (!LevelManager.Instance.CurrentLevel.IsInBattle())
{
foreach (var uid in m_fightIDs)
{
ClearGo(uid);
}
[Range(-2.5f, 0)]
public float stateOffsetX = -1f;
return;
}
// Use this for initialization
public override void OnAwake()
{
//bind UI GameObj
GoBloods = transform.Find("Content/Bloods").gameObject;
GoActionStates = transform.Find("Content/ActionStates").gameObject;
GoNumbers = transform.Find("Content/Numbers").gameObject;
}
foreach (var uid in TeamManager.Instance.GetDeadList())
{
ClearGo(uid);
}
private void Update()
{
if (!LevelManager.Instance.CurrentLevel.IsInBattle())
{
foreach (var uid in m_fightIDs)
{
ClearGo(uid);
}
return;
}
foreach (var uid in TeamManager.Instance.GetDeadList())
{
ClearGo(uid);
}
//<2F><><EFBFBD>Ѫ<EFBFBD><D1AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>˺<EFBFBD>Ʈ<EFBFBD><C6AE>
foreach (var uid in m_fightIDs)
{
if (!m_goBloodsMap.ContainsKey(uid))
{
AddBloodGo(uid);
}
if (!m_goActionStatesMap.ContainsKey(uid))
{
AddActionStateImg(uid);
}
if (!m_goNumbersMap.ContainsKey(uid))
{
AddDamageGo(uid);
}
}
{
if (!m_goBloodsMap.ContainsKey(uid))
{
AddBloodGo(uid);
}
if (!m_goActionStatesMap.ContainsKey(uid))
{
AddActionStateImg(uid);
}
if (!m_goNumbersMap.ContainsKey(uid))
{
AddDamageGo(uid);
}
}
UpdateBloods();
UpdateActionStates();
}
UpdateBloods();
UpdateActionStates();
}
//ˢ<><CBA2>Ѫ<EFBFBD><D1AA>
void UpdateBloods()
{
foreach (var item in m_goBloodsMap)
{
var go = item.Value;
uint uid = item.Key;
//Character character = LevelManager.Instance.CurrentLevel.CharacterManager.Get(uid);
GameUnit character = GameUnitManager.instance.totalUnits.Search(uid);
if (character != null)
{
SetBloodPos(go, character);
}
}
}
{
foreach (var item in m_goBloodsMap)
{
var go = item.Value;
uint uid = item.Key;
//Character character = LevelManager.Instance.CurrentLevel.CharacterManager.Get(uid);
GameUnit character = GameUnitManager.instance.totalUnits.Search(uid);
if (character != null)
{
SetBloodPos(go, character);
}
}
}
//ˢ<><CBA2>״̬ͼ<CCAC><CDBC>
void UpdateActionStates()
{
foreach (var item in m_goActionStatesMap)
{
var go = item.Value;
uint uid = item.Key;
if (TeamManager.Instance.IsCharacter(uid))
{
Character character = GameUnitManager.instance.characterManager.Get(uid);
if (character != null)
{
var img = go.GetComponent<Image>();
if (character.statusData.isRetreat)
{
img.sprite = AssetManager.Instance.LoadAsset<Sprite>(Constants.UI_RETREATE_STATE_MAP);
SetActionStatesPos(go, character);
go.SetActive(true);
img.SetNativeSize();
CommonUtils.SetScaleWithCameraOrgSize(go);
}
else if (character.runtimeData.isInSuppressed)
{
img.sprite = AssetManager.Instance.LoadAsset<Sprite>(Constants.UI_SUPPRESS_STATE_MAP);
SetActionStatesPos(go, character);
go.SetActive(true);
img.SetNativeSize();
CommonUtils.SetScaleWithCameraOrgSize(go);
}
else
{
go.SetActive(false);
}
}
}
}
}
void UpdateActionStates()
{
foreach (var item in m_goActionStatesMap)
{
var go = item.Value;
uint uid = item.Key;
if (TeamManager.Instance.IsCharacter(uid))
{
if (GameUnitManager.instance.characterManager.Contains(uid))
{
Character character = GameUnitManager.instance.characterManager.Get(uid);
var img = go.GetComponent<Image>();
if (character.statusData.isRetreat)
{
img.sprite = AssetManager.Instance.LoadAsset<Sprite>(Constants.UI_RETREATE_STATE_MAP);
SetActionStatesPos(go, character);
go.SetActive(true);
img.SetNativeSize();
CommonUtils.SetScaleWithCameraOrgSize(go);
}
else if (character.runtimeData.isInSuppressed)
{
img.sprite = AssetManager.Instance.LoadAsset<Sprite>(Constants.UI_SUPPRESS_STATE_MAP);
SetActionStatesPos(go, character);
go.SetActive(true);
img.SetNativeSize();
CommonUtils.SetScaleWithCameraOrgSize(go);
}
else
{
go.SetActive(false);
}
}
}
}
}
async void AddBloodGo(uint uid)
{
var unit = GameUnitManager.instance.totalUnits.Search(uid);
if (unit != null)
{
if (unit.statusData.isOnVehicle)
{
return;
}
}
List<uint> myFightIDs = TeamManager.Instance.GetFightList();
GameObject prefab;
if (myFightIDs.Contains(uid))
{
if (TeamManager.Instance.IsCharacter(uid))
{
prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UI_CharacterState_Bar.prefab");
}
else
{
prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UI_VehicleState_Bar.prefab");
}
}
else
{
prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UI_EnemyState_Bar.prefab");
}
var go = Instantiate(prefab, GoBloods.transform);
var comp = go.GetComponent<UIUnitStateBar>();
comp.SetUid(uid);
GameUnit character = GameUnitManager.instance.infightUnits.Search(uid);
if (character != null)
{
SetBloodPos(go, character);
}
m_goBloodsMap.Add(uid, go);
}
async void AddBloodGo(uint uid)
{
var unit = GameUnitManager.instance.totalUnits.Search(uid);
if (unit != null)
{
if (unit.statusData.isOnVehicle)
{
return;
}
}
void AddActionStateImg(uint uid)
{
var unit = GameUnitManager.instance.infightUnits.Search(uid);
if (unit == null)
{
return;
}
if (unit.statusData.isOnVehicle)
{
return;
}
List<uint> myFightIDs = TeamManager.Instance.GetFightList();
GameObject prefab;
if (myFightIDs.Contains(uid))
{
if (TeamManager.Instance.IsCharacter(uid))
{
prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UI_CharacterState_Bar.prefab");
}
else
{
prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UI_VehicleState_Bar.prefab");
}
}
else
{
prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UI_EnemyState_Bar.prefab");
}
var go = Instantiate(prefab, GoBloods.transform);
var comp = go.GetComponent<UIUnitStateBar>();
comp.SetUid(uid);
GameUnit character = GameUnitManager.instance.infightUnits.Search(uid);
if (character != null)
{
SetBloodPos(go, character);
}
m_goBloodsMap.Add(uid, go);
}
if (unit.statusData.isDead)
{
return;
}
if(GameUnitManager.instance.infightUnits.Search(uid).gameunitType == EGameUnitType.Character)
{
Character character = GameUnitManager.instance.characterManager.Get(uid);
if (character != null)
{
GameObject Image_State = new GameObject("Image_State");
RectTransform rect = Image_State.AddComponent<RectTransform>();
Image_State.AddComponent<Image>();
Image_State.SetActive(false);
m_goActionStatesMap.Add(uid, Image_State);
Image_State.transform.SetParent(GoActionStates.transform);
}
}
}
void AddActionStateImg(uint uid)
{
var unit = GameUnitManager.instance.infightUnits.Search(uid);
if (unit == null)
{
return;
}
if (unit.statusData.isOnVehicle)
{
return;
}
void AddDamageGo(uint uid)
{
var unit = GameUnitManager.instance.infightUnits.Search(uid);
if (unit != null)
{
if (unit.statusData.isOnVehicle)
{
return;
}
}
if (!m_goNumbersMap.ContainsKey(uid))
{
var prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UICharacterDamage.prefab");
var go = Instantiate(prefab);
go.transform.SetParent(GoNumbers.transform);
m_goNumbersMap.Add(uid, go);
go.transform.localScale = new Vector3(1, 1, 1);
}
}
if (unit.statusData.isDead)
{
return;
}
void SetBloodPos(GameObject go, GameUnit character)
{
var charPos = character.Node.transform.position;//character.transData.pos;
var originPos = new Vector3(charPos.x , charPos.y, charPos.z);
originPos.y += bloodOffsetY;
var pos = PhxhSDK.Utils.WorldPos2ScreenPos(originPos, CameraManager.Instance.MainCamera);
if (GameUnitManager.instance.infightUnits.Search(uid).gameunitType == EGameUnitType.Character)
{
Character character = GameUnitManager.instance.characterManager.Get(uid);
if (character != null)
{
GameObject Image_State = new GameObject("Image_State");
RectTransform rect = Image_State.AddComponent<RectTransform>();
Image_State.AddComponent<Image>();
Image_State.SetActive(false);
m_goActionStatesMap.Add(uid, Image_State);
Image_State.transform.SetParent(GoActionStates.transform);
}
}
}
pos = PhxhSDK.Utils.ScreenPos2WorldPos(pos, CameraManager.Instance.UICamera);
void AddDamageGo(uint uid)
{
var unit = GameUnitManager.instance.infightUnits.Search(uid);
if (unit != null)
{
if (unit.statusData.isOnVehicle)
{
return;
}
}
pos = new Vector3(pos.x, pos.y, 0);
if (!m_goNumbersMap.ContainsKey(uid))
{
var prefab = AssetManager.Instance.LoadAsset<GameObject>("Assets/Art/UI/Prefab/LevelSceneUI/UICharacterDamage.prefab");
var go = Instantiate(prefab);
go.transform.SetParent(GoNumbers.transform);
m_goNumbersMap.Add(uid, go);
go.transform.localScale = new Vector3(1, 1, 1);
}
}
go.transform.position = pos;
//go.transform.localScale = new Vector3(1, 1, 1);
CommonUtils.SetScaleWithCameraOrgSize(go);
}
void SetActionStatesPos(GameObject go, Character character)
{
var originPos = character.transData.pos;
originPos.y += stateOffsetY;
originPos.x += stateOffsetX;
var pos = PhxhSDK.Utils.WorldPos2ScreenPos(originPos, CameraManager.Instance.MainCamera);
void SetBloodPos(GameObject go,
GameUnit character)
{
var charPos = character.Node.transform.position; //character.transData.pos;
var originPos = new Vector3(charPos.x, charPos.y, charPos.z);
originPos.y += bloodOffsetY;
var pos = PhxhSDK.Utils.WorldPos2ScreenPos(originPos, CameraManager.Instance.MainCamera);
pos = PhxhSDK.Utils.ScreenPos2WorldPos(pos, CameraManager.Instance.UICamera);
pos = PhxhSDK.Utils.ScreenPos2WorldPos(pos, CameraManager.Instance.UICamera);
pos = new Vector3(pos.x, pos.y, 0);
pos = new Vector3(pos.x, pos.y, 0);
go.transform.position = pos;
go.transform.localScale = new Vector3(1, 1, 1);
}
go.transform.position = pos;
//go.transform.localScale = new Vector3(1, 1, 1);
CommonUtils.SetScaleWithCameraOrgSize(go);
}
//invoke when open window
protected override void OnOpenWindow()
{
EventManager.Instance.Register(EventManager.EventName.INFIGHT_GET_DAMAGED, (Action<EventDataGetDamaged>)OnInjured);
EventManager.Instance.Register(EventManager.EventName.LevelBattleBegin, OnBattleBegin);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UNIT_REMOVE, (Action<Character>)OnBattleCharRemove);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_SKILL_START_PAUSE, OnSkillPutting);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_SKILL_END_PAUSE, OnSkillPutEnd);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UP_VEHICLE, (Action<GameUnit>)OnUpVehicle);
EventManager.Instance.Register(EventManager.EventName.LevelFightUIHPInit, (Action<GameUnit>)OnHPInit);
}
//invoke when reload window
protected override void OnReloadWindow()
{
}
//invoke when close window
protected override void OnCloseWindow()
{
foreach (var uid in m_fightIDs)
{
ClearGo(uid);
}
void SetActionStatesPos(GameObject go,
Character character)
{
var originPos = character.transData.pos;
originPos.y += stateOffsetY;
originPos.x += stateOffsetX;
var pos = PhxhSDK.Utils.WorldPos2ScreenPos(originPos, CameraManager.Instance.MainCamera);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_GET_DAMAGED, (Action<EventDataGetDamaged>)OnInjured);
EventManager.Instance.Unregister(EventManager.EventName.LevelBattleBegin, OnBattleBegin);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UNIT_REMOVE, (Action<Character>)OnBattleCharRemove);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_SKILL_START_PAUSE, OnSkillPutting);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_SKILL_END_PAUSE, OnSkillPutEnd);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UP_VEHICLE, (Action<GameUnit>)OnUpVehicle);
EventManager.Instance.Unregister(EventManager.EventName.LevelFightUIHPInit, (Action<GameUnit>)OnHPInit);
}
pos = PhxhSDK.Utils.ScreenPos2WorldPos(pos, CameraManager.Instance.UICamera);
pos = new Vector3(pos.x, pos.y, 0);
go.transform.position = pos;
go.transform.localScale = new Vector3(1, 1, 1);
}
//invoke when open window
protected override void OnOpenWindow()
{
EventManager.Instance.Register(EventManager.EventName.INFIGHT_GET_DAMAGED, (Action<EventDataGetDamaged>)OnInjured);
EventManager.Instance.Register(EventManager.EventName.LevelBattleBegin, OnBattleBegin);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UNIT_REMOVE, (Action<Character>)OnBattleCharRemove);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_SKILL_START_PAUSE, OnSkillPutting);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_SKILL_END_PAUSE, OnSkillPutEnd);
EventManager.Instance.Register(EventManager.EventName.INFIGHT_UP_VEHICLE, (Action<GameUnit>)OnUpVehicle);
EventManager.Instance.Register(EventManager.EventName.LevelFightUIHPInit, (Action<GameUnit>)OnHPInit);
}
//invoke when reload window
protected override void OnReloadWindow()
{
}
//invoke when close window
protected override void OnCloseWindow()
{
foreach (var uid in m_fightIDs)
{
ClearGo(uid);
}
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_GET_DAMAGED, (Action<EventDataGetDamaged>)OnInjured);
EventManager.Instance.Unregister(EventManager.EventName.LevelBattleBegin, OnBattleBegin);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UNIT_REMOVE, (Action<Character>)OnBattleCharRemove);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_SKILL_START_PAUSE, OnSkillPutting);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_SKILL_END_PAUSE, OnSkillPutEnd);
EventManager.Instance.Unregister(EventManager.EventName.INFIGHT_UP_VEHICLE, (Action<GameUnit>)OnUpVehicle);
EventManager.Instance.Unregister(EventManager.EventName.LevelFightUIHPInit, (Action<GameUnit>)OnHPInit);
}
/********** <20><><EFBFBD><EFBFBD> **********/
private void OnInjured(EventDataGetDamaged damageData)
{
uint uid = damageData.owner.GetID();
//Character character = GameUnitManager.instance.characterManager.Get(uid);
GameUnit character = GameUnitManager.instance.infightUnits.Search(uid);
if (!m_goNumbersMap.ContainsKey(uid))
{
AddDamageGo(uid);
}
var go = m_goNumbersMap[uid];
var comp = go.GetComponent<UICharacterDamage>();
comp.Injured(damageData, character);
}
{
uint uid = damageData.owner.GetID();
//Character character = GameUnitManager.instance.characterManager.Get(uid);
GameUnit character = GameUnitManager.instance.infightUnits.Search(uid);
private void OnBattleBegin()
{
var allCharac = GameUnitManager.instance.infightUnits;
var waitIDs = TeamManager.Instance.GetWaitList();
var fightIDs = TeamManager.Instance.GetFightList();
for (int i = 0; i < fightIDs.Count; i++)
{
m_fightIDs.Add(fightIDs[i]);
}
for (var i = 0; i < allCharac.count; ++i)
{
var c = allCharac.GetByIndex(i);
if (!fightIDs.Contains(c.GetID()) && !waitIDs.Contains(c.GetID()))
{
m_fightIDs.Add(c.GetID());
}
}
}
if (!m_goNumbersMap.ContainsKey(uid))
{
AddDamageGo(uid);
}
var go = m_goNumbersMap[uid];
var comp = go.GetComponent<UICharacterDamage>();
comp.Injured(damageData, character);
}
private void OnBattleCharRemove(Character character)
{
m_fightIDs.Remove(character.GetID());
ClearGo(character.GetID());
}
private void OnBattleBegin()
{
var allCharac = GameUnitManager.instance.infightUnits;
var waitIDs = TeamManager.Instance.GetWaitList();
var fightIDs = TeamManager.Instance.GetFightList();
for (int i = 0; i < fightIDs.Count; i++)
{
m_fightIDs.Add(fightIDs[i]);
}
for (var i = 0; i < allCharac.count; ++i)
{
var c = allCharac.GetByIndex(i);
if (!fightIDs.Contains(c.GetID()) && !waitIDs.Contains(c.GetID()))
{
m_fightIDs.Add(c.GetID());
}
}
}
private void OnSkillPutting()
{
UITipsManager.ShowClickShield();
}
private void OnBattleCharRemove(Character character)
{
m_fightIDs.Remove(character.GetID());
ClearGo(character.GetID());
}
private void OnSkillPutEnd()
{
UITipsManager.CloseClickShield();
}
private void OnSkillPutting()
{
UITipsManager.ShowClickShield();
}
private void ClearGo(uint uid)
{
if (m_goBloodsMap.ContainsKey(uid))
{
Destroy(m_goBloodsMap[uid]);
m_goBloodsMap.Remove(uid);
}
if (m_goActionStatesMap.ContainsKey(uid))
{
Destroy(m_goActionStatesMap[uid]);
m_goActionStatesMap.Remove(uid);
}
if (m_goNumbersMap.ContainsKey(uid))
{
Destroy(m_goNumbersMap[uid]);
m_goNumbersMap.Remove(uid);
}
}
private void OnSkillPutEnd()
{
UITipsManager.CloseClickShield();
}
private void OnUpVehicle(GameUnit unit)
{
ClearGo(unit.GetID());
}
private void ClearGo(uint uid)
{
if (m_goBloodsMap.ContainsKey(uid))
{
Destroy(m_goBloodsMap[uid]);
m_goBloodsMap.Remove(uid);
}
private void OnHPInit(GameUnit character)
{
if (LevelManager.Instance.CurrentLevel.IsInBattle())
{
var fightIDs = TeamManager.Instance.GetFightList();
for (int i = 0; i < fightIDs.Count; i++)
{
if (!m_fightIDs.Contains(fightIDs[i]))
{
m_fightIDs.Add(fightIDs[i]);
}
}
}
}
}
if (m_goActionStatesMap.ContainsKey(uid))
{
Destroy(m_goActionStatesMap[uid]);
m_goActionStatesMap.Remove(uid);
}
if (m_goNumbersMap.ContainsKey(uid))
{
Destroy(m_goNumbersMap[uid]);
m_goNumbersMap.Remove(uid);
}
}
private void OnUpVehicle(GameUnit unit)
{
ClearGo(unit.GetID());
}
private void OnHPInit(GameUnit character)
{
if (LevelManager.Instance.CurrentLevel.IsInBattle())
{
var fightIDs = TeamManager.Instance.GetFightList();
for (int i = 0; i < fightIDs.Count; i++)
{
if (!m_fightIDs.Contains(fightIDs[i]))
{
m_fightIDs.Add(fightIDs[i]);
}
}
}
}
}

View File

@ -6,6 +6,14 @@ namespace Gameplay.Unit.Data
private List<GameUnit> _unitList = new List<GameUnit>();
private Dictionary<uint, GameUnit> _unitDict = new Dictionary<uint, GameUnit>();
public List<GameUnit> unitList
{
get
{
return _unitList;
}
}
public int count { get; private set; }
public void Add(GameUnit unit)
@ -46,6 +54,11 @@ namespace Gameplay.Unit.Data
count--;
}
public bool Contains(uint guid)
{
return _unitDict.ContainsKey(guid);
}
public GameUnit Search(uint guid)
{
if (_unitDict.TryGetValue(guid, out var unit))

View File

@ -191,6 +191,14 @@ namespace Gameplay.Unit
infightUnits.Remove(unit);
prepareUnits.Add(unit);
switch (unit.gameunitType)
{
case EGameUnitType.Character:
if (unit is Character.Character character)
characterManager.RemoveCharacter(character);
break;
}
DebugUtil.LogG($"单位:{unit.GetID()} 从战斗列表回到备战席");
}
@ -267,6 +275,14 @@ namespace Gameplay.Unit
unit.ExitBattle();
infightUnits.Remove(unit);
deadUnits.Add(unit);
switch (unit.gameunitType)
{
case EGameUnitType.Character:
if (unit is Character.Character character)
characterManager.RemoveCharacter(character);
break;
}
}
private void _UpdateTargets()
@ -295,8 +311,18 @@ namespace Gameplay.Unit
{
var unit = infightUnits.GetByIndex(i);
unit.ExitBattle();
unit.Dispose();
}
for (int i = 0; i < prepareUnits.count; i++)
{
var unit = prepareUnits.GetByIndex(i);
unit.Dispose();
}
for (int i = 0; i < deadUnits.count; i++)
{
var unit = deadUnits.GetByIndex(i);
unit.Dispose();
}
characterManager.Dispose();
instance = null;
}