Пример #1
0
        /// <summary>
        /// 初始化士兵
        /// </summary>
        private void InitAllSoldiers(uint count, TroopAnimState nState, float deg = 0f)
        {
            m_BaseCount = count;
            if (soldierArray == null)
            {
                soldierArray = new SoldierObject[mData.line, mData.row];
            }
            if (soldierIndexList == null)
            {
                soldierIndexList = new List <int>();
            }

            for (int i = 0; i < soldierArray.GetLength(0); i++)
            {
                for (int j = 0; j < soldierArray.GetLength(1); j++)
                {
                    if (soldierArray[i, j] != null)
                    {
                        continue;
                    }
                    SoldierData soldierData = new SoldierData(mData, i, j);
                    var         soldier     = MainBattleManager.Instance.CreateSoldierObject(soldierData.type, transform);
                    soldier.Init(soldierData);
                    soldierArray[i, j] = soldier;
                    soldierIndexList.Add(GetIndexValue(i, j));
                }
            }
        }
Пример #2
0
 void OnPlayEnd(string name)
 {
     if (m_CurrentState == TroopAnimState.Attack)
     {
         m_CurrentState = TroopAnimState.Idle;
     }
     Play();
 }
Пример #3
0
 public void SetState(TroopAnimState state)
 {
     if (m_CurrentState == state)
     {
         return;
     }
     if (state == TroopAnimState.Die)
     {
         m_CurrentState = state;
         //执行
         Play();
         //渐隐
         NeatlyTimer.AddClock(this, f => { this.SetActive(false); }, 2, true);
         return;
     }
     if (m_CurrentState == TroopAnimState.Attack)
     {
         return;
     }
     m_CurrentState = state;
     Play();
 }
Пример #4
0
        public void Doing(float x, float y, float dir_x, float dir_y, TroopData data)
        {
            m_CurrentState = (TroopAnimState)data.state;
            //士兵已死
            if (m_BaseCount == 0 && data.count == 0)
            {
                return;
            }
            //复活(从出生点)
            if (m_BaseCount == 0)
            {
                InitPosition(x, y);
            }
            //初始化显示
            if (!m_IsInit)
            {
                Show(true);
            }
            float deg = CalcRad(dir_x, dir_y);

            //有其他玩家加入,士兵刷新
            if (data.addTroop && data.count > 0)
            {
                InitAllSoldiers(data.count, (TroopAnimState)data.state, deg);
                //不影响移动
                if (m_CurrentState == TroopAnimState.Move)
                {
                    SetTweenPosition(x, y);
                }
                return;
            }
            //判断死亡数
            uint allObject        = data.row * data.line;
            int  remainIndexCount = soldierIndexList == null ? 0 : soldierIndexList.Count;
            int  loseCount        = (int)((m_BaseCount - data.count) * allObject / m_BaseCount + remainIndexCount - allObject);

            for (int i = 0; i < loseCount; i++)
            {
                DieOne(deg);
            }

            for (int i = 0; i < soldierArray.GetLength(0); i++)
            {
                for (int j = 0; j < soldierArray.GetLength(1); j++)
                {
                    if (soldierArray[i, j] != null)
                    {
                        soldierArray[i, j].SetState(m_CurrentState);
                    }
                }
            }
            if (m_CurrentState == TroopAnimState.Move)
            {
                //如果状态是移动则播放
                SetTweenPosition(x, y);
            }
            SetSoldierLocalRotation(deg);
            if (data.count == 0)
            {
                m_BaseCount = 0;
                //ShowUI(false);
            }
        }