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);
}
}
}