using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityGameFramework.Runtime; public class SceneEventCollectLogic : MonoBehaviour { public enum CollectDropType { /// /// 掉落 拾取获得 /// Drop, /// /// 更改 修改数据 /// Alter, } GameObject interactiveObj; Button btnInteractive; Scrollbar collectBar; Text collectDescText; float nowCollectTime = 0; bool isCollect = false; private bool isLive = true; /// /// 采集类型 功能 名称 /// /// [Header("机关组件")] public string collectName = ""; /// /// 采集类型 功能 描述 /// public string collectDesc = ""; /// /// 采集完成时 tips 描述 /// public string completeTips = ""; /// /// 机关自身 播放动画名称 /// public string collectAnim = ""; /// /// 机关动画是否循环 /// public bool isCollectLoop = false; [Header("掉落类型")] public CollectDropType dropType = CollectDropType.Alter; /// /// 道具ID /// public int itemDropId; /// /// 最小数量 /// [Tooltip("DropType为Drop时生效")] public int mindNumber; /// /// 最大数量 /// [Tooltip("DropType为Drop时生效")] public int maxNumber; /// /// 给予概率 /// [Tooltip("DropType为Drop时生效")] public float probability = 1; public float collectTime = 1.0f; public int dialogIndex = 0; // 完成后是否销毁 bool isDestroy = false; /// /// 角色播放动画 /// [Header("角色控制")] string palyAnim = ""; /// /// 是否循环 /// bool isLoop = false; /// /// 是否可以移动 /// bool isMove = false; /// /// 是否可以用技能 /// bool isSkill = false; private void Awake() { } // Start is called before the first frame update void Start() { SceneEventCollect info = this.gameObject.GetComponent(); this.collectName = info.collectName; this.collectDesc = info.collectDesc; this.completeTips = info.completeTips; this.collectAnim = info.collectAnim; this.isCollectLoop = info.isCollectLoop; this.dropType = (CollectDropType)info.dropType; this.itemDropId = info.itemDropId; this.mindNumber = info.mindNumber; this.maxNumber = info.maxNumber; this.probability = info.probability; this.collectTime = info.collectTime; this.dialogIndex = info.dialogIndex; } // Update is called once per frame void Update() { if(isCollect) { nowCollectTime += Time.deltaTime; collectBar.size = nowCollectTime / collectTime; if (collectBar.size >= 1) { collectBar.size = 1; Collecting(); } } } public void OnCollisionEnter(Collision collision) { } public void OnCollisionExit(Collision collision) { } public void OnCollisionStay(Collision collision) { } public void OnTriggerEnter(Collider collider) { if(!isLive) { return; } Role role = collider.GetComponent(); BattleCanvas battlePanel = UI_BaseMainWindow.Instance().battleCanvas; interactiveObj = battlePanel.transform.Find("Main/Interactive").gameObject; interactiveObj.SetActive(true); collectBar = battlePanel.transform.Find("Main/Interactive/collectBar").gameObject.GetComponent(); collectDescText = collectBar.transform.Find("desc").GetComponent(); collectDescText.text = collectDesc; UI_BaseMainWindow.Instance().ShowInteractiveIcon(UI_BaseMainWindow.InteractiveType.NpcDialog, (_btn) => { OnClickInteractive(); }); collectBar.gameObject.SetActive(false); collectBar.size = 0; isCollect = false; nowCollectTime = 0; } public void OnTriggerExit(Collider collider) { UI_BaseMainWindow.Instance().HideInteractive(); } public void OnClickInteractive() { collectBar.gameObject.SetActive(true); isCollect = true; } public void Collecting() { isCollect = false; isLive = false; nowCollectTime = 0; collectBar.size = 0; collectBar.gameObject.SetActive(false); switch(dropType) { case CollectDropType.Alter: if (itemDropId != 0 && Random.Range(probability, 1) >= 1.0f) { ItemProxy.Instance.AddItem(itemDropId, Random.Range(mindNumber, maxNumber)); } break; case CollectDropType.Drop: DropManager.Instance.DropItems(itemDropId, this.transform.position); break; } btnInteractive.onClick.RemoveAllListeners(); btnInteractive.gameObject.SetActive(false); interactiveObj.gameObject.SetActive(false); UI_TipsWindow.InitStaticDialog(this.collectName, this.completeTips, null); if (isDestroy) { Destroy(this.gameObject); } } }