using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using vnxbqy.UI;
|
using System;
|
|
public class DropItem : HUDBehaviour
|
{
|
|
public static event Action<Vector3> onDropItemDisappear;
|
|
public static DropItem Drop(int _id, Vector3 _position, Camera _camera)
|
{
|
var dropItemType = ItemToDropType(_id);
|
var _validPos = _position;
|
GActor.TryGetValidPos(_position, ref _validPos);
|
_validPos.y = _position.y;
|
var dropItem = DropItemPool.RequireDropItem(dropItemType);
|
dropItem.transform.SetParentEx(HUDCenter.hudRoot.dropItemCanvas.transform, Vector3.zero, Quaternion.identity, Vector3.one);
|
dropItem.DropAt(_id, _validPos, _camera);
|
return dropItem;
|
}
|
|
public static DropItem DropJia(int _id, Vector3 _position, Camera _camera, float time = 2f)
|
{
|
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, time, _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 = ItemConfig.Get(_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;
|
public bool AutoPickUp
|
{
|
get
|
{
|
return autoPickUp;
|
}
|
}
|
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 = ItemConfig.Get(_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 = ItemConfig.Get(_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 mapId = PlayerDatas.Instance.baseData.MapID;
|
var dataMapId = ModelCenter.Instance.GetModel<DungeonModel>().GetDataMapIdByMapId(mapId);
|
switch (dataMapId)
|
{
|
default:
|
var dropTrace = DropItemPool.RequireDropItemTrace();
|
dropTrace.transform.position = this.transform.position;
|
dropTrace.Trace(PlayerDatas.Instance.hero, new Vector3(0, 0.5f, 0), () => { DropItemPool.ReycleDropItemTrace(dropTrace); });
|
break;
|
}
|
|
ClientDropItemUtility.Instance.RemoveDropItem(this);
|
|
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 (GeneralDefine.DropItemEffectMapID.ContainsKey(id))
|
{
|
if (!GeneralDefine.DropItemEffectMapID[id].Contains(PlayerDatas.Instance.baseData.MapID))
|
{
|
return;
|
}
|
}
|
|
if (hasAppearCount < GeneralDefine.maxItemDropEffectCount)
|
{
|
var _itemConfig = ItemConfig.Get(id);
|
|
if (_itemConfig == null)
|
{
|
return;
|
}
|
|
int _playerlevel = PlayerDatas.Instance.baseData.LV;
|
|
// 确定是否播放掉落特效
|
bool _doPlay = false;
|
|
if (_itemConfig.Type == (int)ItemType.Equip_Neck)
|
{
|
foreach (var _level in GeneralDefine.xllyDropEffect.Keys)
|
{
|
if (_playerlevel < _level)
|
{
|
if (_itemConfig.LV >= GeneralDefine.xllyDropEffect[_level][0]
|
&& _itemConfig.ItemColor >= GeneralDefine.xllyDropEffect[_level][1]
|
&& _itemConfig.StarLevel >= GeneralDefine.xllyDropEffect[_level][2])
|
{
|
_doPlay = true;
|
break;
|
}
|
}
|
}
|
}
|
else if (_itemConfig.Type == (int)ItemType.Equip_FairyCan1 || _itemConfig.Type == (int)ItemType.Equip_FairyCan2)
|
{
|
foreach (var _level in GeneralDefine.xqryDropEffect.Keys)
|
{
|
if (_playerlevel < _level)
|
{
|
if (_itemConfig.LV >= GeneralDefine.xqryDropEffect[_level][0]
|
&& _itemConfig.ItemColor >= GeneralDefine.xqryDropEffect[_level][1]
|
&& _itemConfig.StarLevel >= GeneralDefine.xqryDropEffect[_level][2])
|
{
|
_doPlay = true;
|
break;
|
}
|
}
|
}
|
}
|
else
|
{
|
foreach (var _level in GeneralDefine.itemDropEffect.Keys)
|
{
|
if (_playerlevel < _level)
|
{
|
if (_itemConfig.LV >= GeneralDefine.itemDropEffect[_level][0]
|
&& _itemConfig.ItemColor >= GeneralDefine.itemDropEffect[_level][1]
|
&& _itemConfig.StarLevel >= GeneralDefine.itemDropEffect[_level][2])
|
{
|
_doPlay = true;
|
break;
|
}
|
}
|
}
|
|
foreach (var _level in GeneralDefine.customDropEffect.Keys)
|
{
|
if (_playerlevel < _level)
|
{
|
foreach (var _ids in GeneralDefine.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 (GeneralDefine.dropEffectQuality.TryGetValue(_itemConfig.ItemColor, out _effectID))
|
{
|
_itemDropEffect = SFXPlayUtility.Instance.PlayBattleEffect(_effectID, transform);
|
hasAppearCount += 1;
|
}
|
}
|
}
|
}
|
|
public struct JiaDropInfo
|
{
|
public int itemId;
|
public float dropTime;
|
}
|
|
}
|