// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-12-24 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using System.Collections; using System.Collections.Generic; using UnityEngine; namespace G { /// /// 特效 /// public class Cha_Effect : MonoBehaviour { #region Field public Transform ef_arrow_multy; public Transform ef_arrow_single; public Transform pt_heal; public Transform pt_skill_up; public Transform pt_rising; public Transform ef_riseattack; public Transform ef_swordExtreme; public Transform ef_linehit; public Transform ef_thump; public Transform ef_splash; /// /// /// public Transform ef_stepfog; /// /// 刺 /// public Transform ef_thrustfog; /// /// 转 /// public Transform ef_rotfog; public Transform ef_blur; public Transform ef_block; public Transform ef_blockbreak; public Transform ef_super; public Transform ef_punch; public Transform ef_firesplash; public Transform guide_circle; public Transform txtef; private Transform[] c_stepfog = new Transform[4]; private Transform[] c_thrustfog = new Transform[4]; private Txt_effect script_txtef; private int _nowstep; private int _nowthrust; private Ef_twirl script_getitem; private EntityMainPlayer _scriptCha; private GameObject _suitFx; #endregion #region Method public void Init() { script_getitem = transform.Find("ef_getitem").GetComponent(); script_txtef = txtef.GetComponent(); for (int i = 0; i < 4; i++) { c_stepfog[i] = Instantiate(ef_stepfog, Vector3.one * 4f, this.transform.root.rotation); c_thrustfog[i] = Instantiate(ef_thrustfog, Vector3.one * 4f, ef_thrustfog.localRotation); } var suitFxAsset = PlayerProxy.Instance.GetCurrEquipmentSuit().suitFxAsset; if (!string.IsNullOrEmpty(suitFxAsset)) AssetProxy.Instance.TryGetTemporaryAssetAsync($"effect/{suitFxAsset}.prefab").Completed += (handle) => { if (handle.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded) { _suitFx = Instantiate(handle.Result, this.transform); } }; } public void ShowGetItemEffect() { script_getitem.TwirlOn(4, 4, 20, false); } public void PlayEffect(string ef_name) { var ef = transform.Find(ef_name); if (ef) { ef.gameObject.SetActive(true); } } public void PlayEffect(string ef_name, Vector3 position, Quaternion rotaion) { var ef = transform.Find(ef_name); if (ef) { ef.SetPositionAndRotation(position, rotaion); ef.gameObject.SetActive(true); } } public void PlayEffect(string ef_name, float duration) { var ef = transform.Find(ef_name); if (ef) { StartCoroutine(StopEffectCO(ef.gameObject, duration, 0f)); } } public void PlayEffect(string ef_name, float duration, float delay) { var ef = transform.Find(ef_name); if (ef) { StartCoroutine(StopEffectCO(ef.gameObject, duration, delay)); } } private IEnumerator StopEffectCO(GameObject go, float duration, float delay) { if (delay > 0f) yield return new WaitForSeconds(delay); go.SetActive(true); yield return new WaitForSeconds(duration); go.SetActive(false); } public void FogOn(int kind) { switch (kind) { case 0: c_stepfog[_nowstep].gameObject.SetActive(true); c_stepfog[_nowstep].position = transform.position; c_stepfog[_nowstep].rotation = transform.rotation; _nowstep = (_nowstep + 1) % 3; break; case 1: c_thrustfog[_nowthrust].gameObject.SetActive(true); c_thrustfog[_nowthrust].position = transform.position + transform.forward * 0.2f + Vector3.up * 0.075f; c_thrustfog[_nowthrust].forward = transform.forward; //c_thrustfog[_nowthrust].Rotate(transform.forward, Random.Range(0, 360), Space.World); _nowthrust = (_nowthrust + 1) % 3; break; case 2: c_thrustfog[_nowthrust].gameObject.SetActive(true); c_thrustfog[_nowthrust].position = transform.position + transform.forward * 0.2f + Vector3.up * 0.075f; c_thrustfog[_nowthrust].up = transform.forward; c_thrustfog[_nowthrust].Rotate(transform.forward, GlobalUtils.RndAngle, Space.World); _nowthrust = (_nowthrust + 1) % 3; break; } } public void EvadeText() { //GlobalNotifier.PostNotification(GlobalDefine.EVENT_SHOW_TEXT_EFFECT, 1); script_txtef.TxtEfOn(1); } public void BlockedText() { //GlobalNotifier.PostNotification(GlobalDefine.EVENT_SHOW_TEXT_EFFECT, 3); script_txtef.TxtEfOn(3); } public void CriticalText() { script_txtef.TxtEfOn(2); } public void OneHitKillText() { script_txtef.TxtEfOn(0); } public void Flash() { StopCoroutine("FlashCO"); StartCoroutine("FlashCO"); } IEnumerator FlashCO() { float ft = Time.time; var mb = new MaterialPropertyBlock(); while (Time.time - ft < 0.4f) { mb.SetFloat("_Flash", 1.2f + (ft - Time.time) * 2f); _scriptCha.entityView.mainRenderer.SetPropertyBlock(mb); yield return null; } mb.SetFloat("_Flash", 0f); _scriptCha.entityView.mainRenderer.SetPropertyBlock(mb); yield return null; } #endregion #region Unity // Use this for initialization private void Awake() { _scriptCha = GetComponent(); Init(); } //private float _last; //private void Update() //{ // if (Time.time - _last > 3f) // { // _last = Time.time; // script_txtef.TxtEfOn(Random.Range(0, 4)); // } //} #endregion } }