using Core.Utilities; using DG.Tweening; using System.Collections; using System.Collections.Generic; using TowerDefense.Level; using UnityEngine; using UnityEngine.XR.WSA; public class WaveLineSelMgr : Singleton { /// /// 己方兵线对应的选中效果 /// public List waveLineList; /// /// BOSS警告倒计时界面. /// public GameObject cdBossWarningPrefab; /// /// 己方战场的Boss /// public List selfSkullList; public List oppoSkullList; protected List selfWarningList; protected List selfSkullUIPos; protected GameObject[] selfWarningUI = new GameObject[5]; /// /// 标注战场区域的Object. /// public GameObject battleAreaObject; /// /// 火攻击效果 /// public ParticleSystem skillFirePrefab; /// /// 炸弹攻击效果 /// public ParticleSystem skillBombPrefab; /// /// 停止移动的Buff特效. /// public ParticleSystem bufStopMovePrefab; protected bool zeroState = true; // Start is called before the first frame update void Start() { int wln = waveLineList.Count; for (int ti = 0; ti < wln; ti++) { if (waveLineList[ti]) { Material tmat = waveLineList[ti].GetComponent().material; tmat.color = new Color(1.0f, 1.0f, 1.0f, 0.0f); } } // 处理Skull相关的数据 int skullNum = selfSkullList.Count; selfWarningList = new List(); selfSkullUIPos = new List(); for( int ti =0;ti().material; tmat.color = tzeroc; tmat = oppoSkullList[ti].GetComponent().material; tmat.color = tzeroc; UnityEngine.Camera sceneCam = ViewPortAdj.instance.cachedCamera; Vector3 centPos = sceneCam.WorldToScreenPoint( oppoSkullList[ti].transform.position ); selfSkullUIPos.Add(centPos); } selfWarningList.Add(false); } } /// /// 开启BossWaring倒计时. /// /// public void StartCountDownBossWarning( float cdtime,int waveline ) { // 已经显示直接返回. if (selfWarningUI[waveline] != null ) return; GameObject cdui = Instantiate(cdBossWarningPrefab); GameObject go = GameObject.Find("BattleMainUI"); if (!go) return; Transform tp = go.GetComponent(); cdui.GetComponent().SetParent(tp, true); cdui.transform.position = selfSkullUIPos[waveline]; cdui.transform.SetAsFirstSibling(); BossWarning bw = cdui.GetComponent(); if (bw) bw.setCountDownTime(cdtime); selfWarningUI[waveline] = cdui; } public void StopCountDownBossWarning( int waveline ) { Destroy(selfWarningUI[waveline]); selfWarningUI[waveline] = null; } /// /// 开启某一条兵线的Boss警告. /// /// public void waveLineBossWarning( int waveline,bool warn) { if (selfWarningList[waveline] == warn) return; selfWarningList[waveline] = warn; if ( warn) { if (selfSkullList[waveline]) { Material tmat = selfSkullList[waveline].GetComponent().material; Sequence seq = DOTween.Sequence(); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.4f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); } if( oppoSkullList[waveline]) { Material tmat = oppoSkullList[waveline].GetComponent().material; Sequence seq = DOTween.Sequence(); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.4f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); seq.AppendInterval(0.3f); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); seq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.25f)); } } else { if (selfSkullList[waveline]) { Material tmat = selfSkullList[waveline].GetComponent().material; tmat.DOKill(); tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.8f); tmat = oppoSkullList[waveline].GetComponent().material; tmat.DOKill(); tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.8f); } } } /// /// 在某一兵线上播放技能特效 /// public void PlayWaveLineEffect( int id ) { if ((id >= waveLineList.Count) || (waveLineList[id] == null)) return; ParticleSystem playParticle = Instantiate(skillFirePrefab); playParticle.transform.position = LevelManager.instance.waveManager.GetWaveEndPos( id ); playParticle.Play(); } /// /// 在战场内某一个位置播放特效 /// /// public void PlayBattleAreaBombEffect( Vector3 pos) { if (skillBombPrefab == null) return; ParticleSystem playParticle = Instantiate(skillBombPrefab); playParticle.transform.position = pos; playParticle.Play(); } /// /// 对应兵线发亮. /// /// public void waveLineFlash( int id) { if ((id >= waveLineList.Count) || (waveLineList[id] == null) ) return; //设置一个DOTween队列 Sequence flashSeq = DOTween.Sequence(); Material tmat = waveLineList[id].GetComponent().material; flashSeq.Append( tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.1f)); flashSeq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.2f), 0.08f)); flashSeq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.08f)); flashSeq.AppendInterval(0.05f); flashSeq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.2f), 0.08f)); flashSeq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), 0.08f)); flashSeq.AppendInterval(0.05f); flashSeq.Append(tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), 0.25f)); } /// /// 对某一条兵线显示选中效果 /// /// public void fadeWaveline( int id,bool fadeOut,float ftime = 0.3f ) { if ((id >= waveLineList.Count) || (waveLineList[id] == null)) return; Material tmat = waveLineList[id].GetComponent().material; if( fadeOut) { tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 1.0f), ftime ); } else { tmat.DOColor(new Color(1.0f, 1.0f, 1.0f, 0.0f), ftime ); } } /// /// 某一个位置攻击塔位放下。 /// /// public void attackTowerFixed( int pos) { if ((pos >= waveLineList.Count) || (waveLineList[pos] == null)) return; int subone = pos - 1; int addone = pos + 1; if (subone >= 0) waveLineFlash(subone); waveLineFlash(pos); if (addone < waveLineList.Count) waveLineFlash(addone); } // Update is called once per frame void Update() { if( UnityEngine.Input.GetKeyDown( KeyCode.G )) { //PlayWaveLineEffect(2); /*ParticleSystem MoveStopEffect = Instantiate(WaveLineSelMgr.instance.bufStopMovePrefab); MoveStopEffect.transform.position = this.transform.position; MoveStopEffect.Play();*/ } if( UnityEngine.Input.GetKeyDown( KeyCode.V ) ) { PlayBattleAreaBombEffect(this.battleAreaObject.transform.position); } } }