/// <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)); } } }
void OnPlayEnd(string name) { if (m_CurrentState == TroopAnimState.Attack) { m_CurrentState = TroopAnimState.Idle; } Play(); }
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(); }
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); } }