using System.Collections; using System.Collections.Generic; using UnityEngine; using TableConfig; using UnityEngine.UI; using Snxxz.UI; public class DropItem : HUDBehaviour { public static DropItem Drop(int _id, Vector3 _position, Camera _camera) { var dropItemType = ItemToDropType(_id); var dropItem = DropItemPool.RequireDropItem(dropItemType); dropItem.transform.SetParentEx(HUDCenter.hudRoot.dropItemCanvas.transform, Vector3.zero, Quaternion.identity, Vector3.one); dropItem.DropAt(_id, _position, _camera); return dropItem; } public static DropItem DropFake(int _id, Vector3 _position, Camera _camera) { var dropItemType = ItemToDropType(_id); var dropItem = DropItemPool.RequireDropItem(dropItemType); dropItem.transform.SetParentEx(HUDCenter.hudRoot.dropItemCanvas.transform, Vector3.zero, Quaternion.identity, Vector3.one); dropItem.DropAt(_id, _position, 2f, _camera); return dropItem; } public static void Reycle(DropItem _dropItem) { if (_dropItem == null) { return; } _dropItem.RecyleEffect(); DropItemPool.ReycleDropItem(_dropItem); } public static DropItemType ItemToDropType(int _id) { var itemConfig = ConfigManager.Instance.GetTemplate(_id); if (itemConfig != null) { return (DropItemType)itemConfig.DropItemPattern; } else { return DropItemType.Pattern0; } } DropItemType m_DropItemType = DropItemType.Pattern1; public DropItemType dropItemType { get { return m_DropItemType; } set { m_DropItemType = value; } } public int itemId { get; private set; } [Header("DropItemName")] [SerializeField] Text m_ItemName; Camera m_TargetCamera; public Camera targetCamera { get { return m_TargetCamera; } set { m_TargetCamera = value; if (m_TargetCamera != null && facingCamera != null) { facingCamera.camera = m_TargetCamera; } } } bool autoPickUp = false; float dispearTime = 0f; public void DropAt(int _id, Vector3 _position, Camera _camera) { itemId = _id; targetCamera = _camera; this.transform.position = _position; camera = _camera; autoPickUp = false; var itemConfig = ConfigManager.Instance.GetTemplate(_id); m_ItemName.text = itemConfig.ItemName; m_ItemName.color = UIHelper.GetUIColor(itemConfig.ItemColor); CheckPlayEffect(_id); } public void DropAt(int _id, Vector3 _position) { itemId = _id; this.transform.position = _position; autoPickUp = false; } public void DropAt(int _id, Vector3 _position, float _disapearDelay, Camera _camera) { targetCamera = _camera; this.transform.position = _position; camera = _camera; autoPickUp = true; dispearTime = Time.time + _disapearDelay; var itemConfig = ConfigManager.Instance.GetTemplate(_id); m_ItemName.text = itemConfig.ItemName; m_ItemName.color = UIHelper.GetUIColor(itemConfig.ItemColor); CheckPlayEffect(_id); } protected override void LateUpdate() { base.LateUpdate(); if (autoPickUp && Time.time > dispearTime) { var dropTrace = DropItemPool.RequireDropItemTrace(); dropTrace.transform.position = this.transform.position; dropTrace.Trace(PlayerDatas.Instance.hero, new Vector3(0, 0.5f, 0), () => { DropItemPool.ReycleDropItemTrace(dropTrace); }); DropItemPool.ReycleDropItem(this); RecyleEffect(); } } public void RecyleEffect() { if (_itemDropEffect) { SFXPlayUtility.Instance.Release(_itemDropEffect); _itemDropEffect = null; hasAppearCount -= 1; } } private static int hasAppearCount = 0; SFXController _itemDropEffect = null; private void CheckPlayEffect(int id) { if (hasAppearCount < GeneralConfig.Instance.maxItemDropEffectCount) { var _itemConfig = ConfigManager.Instance.GetTemplate(id); if (_itemConfig == null) { return; } int _playerlevel = PlayerDatas.Instance.baseData.LV; // 确定是否播放掉落特效 bool _doPlay = false; if (_itemConfig.Type == 108) { foreach (var _level in GeneralConfig.Instance.xllyDropEffect.Keys) { if (_playerlevel < _level) { if (_itemConfig.LV >= GeneralConfig.Instance.xllyDropEffect[_level][0] && _itemConfig.ItemColor >= GeneralConfig.Instance.xllyDropEffect[_level][1] && _itemConfig.StarLevel >= GeneralConfig.Instance.xllyDropEffect[_level][2]) { _doPlay = true; break; } } } } else if (_itemConfig.Type == 109) { foreach (var _level in GeneralConfig.Instance.xqryDropEffect.Keys) { if (_playerlevel < _level) { if (_itemConfig.LV >= GeneralConfig.Instance.xqryDropEffect[_level][0] && _itemConfig.ItemColor >= GeneralConfig.Instance.xqryDropEffect[_level][1] && _itemConfig.StarLevel >= GeneralConfig.Instance.xqryDropEffect[_level][2]) { _doPlay = true; break; } } } } else { foreach (var _level in GeneralConfig.Instance.itemDropEffect.Keys) { if (_playerlevel < _level) { if (_itemConfig.LV >= GeneralConfig.Instance.itemDropEffect[_level][0] && _itemConfig.ItemColor >= GeneralConfig.Instance.itemDropEffect[_level][1] && _itemConfig.StarLevel >= GeneralConfig.Instance.itemDropEffect[_level][2]) { _doPlay = true; break; } } } foreach (var _level in GeneralConfig.Instance.customDropEffect.Keys) { if (_playerlevel < _level) { foreach (var _ids in GeneralConfig.Instance.customDropEffect[_level]) { if (_ids.Length == 1) { if (_itemConfig.ID == _ids[0]) { _doPlay = true; break; } } else { if (_itemConfig.ID >= _ids[0] && _itemConfig.ID <= _ids[1]) { _doPlay = true; break; } } } } } } if (_doPlay) { int _effectID = 0; if (GeneralConfig.Instance.dropEffectQuality.TryGetValue(_itemConfig.ItemColor, out _effectID)) { _itemDropEffect = SFXPlayUtility.Instance.PlayBattleEffect(_effectID, transform); hasAppearCount += 1; } } } } }