//отрисовывает группу юнитов void _drawGroup(RealBattleScript.BattleGroup group, RealBattleScript.RealBattleTroops troop, SkeletonAnimation[] arr) { for (int i = 0; i < group.GetUnitsCount(); i++) { //считает нужную пощицию на поле и размер юнита //повыше - поменьше, пониже - побольше #region SCALE_AND_POSITION float half_side = RealBattleInfoScript.GetUnitSide(troop) / 2.0f; float left = group.GetUnit(i).X - half_side - RealBattleInfoScript.FieldLeft; float top = group.GetUnit(i).Y - half_side - RealBattleInfoScript.FieldTop; arr[i].transform.position = new Vector3(left, top, 0); float scalePer = 1.0f - ((group.GetUnit(i).Y - RealBattleInfoScript.FieldLeft) / (RealBattleInfoScript.FieldWidth - RealBattleInfoScript.FieldLeft)); scalePer *= scalePer; float scaleFactor = troop == RealBattleScript.RealBattleTroops.Inf || troop == RealBattleScript.RealBattleTroops.Art ? 5.0f : 3.2f; float xScale = scaleFactor * scalePer * (group.IsOne ? 1 : -1); float yScale = scaleFactor * scalePer; arr[i].transform.localScale = new Vector3(xScale, yScale, 1.0f); #endregion //выставляет анимацию по информации из логики битвы #region ANIM RealBattleScript.BattleUnit unit = group.GetUnit(i); switch (unit.State) { case RealBattleScript.UnitStates.Stay: SetAnim(arr[i], AnimState.IDLE); break; case RealBattleScript.UnitStates.MoveOne: case RealBattleScript.UnitStates.MoveAll: SetAnim(arr[i], AnimState.WALK); break; case RealBattleScript.UnitStates.Fight: if (troop != RealBattleScript.RealBattleTroops.Art) { SetAnim(arr[i], AnimState.ATTACK); } else if (unit.ArtShoot) { SetAnim(arr[i], AnimState.BOW_SHOOT, false); arr[i].state.Complete += delegate(Spine.TrackEntry entry) { unit.ArtShoot = false; }; } else { SetAnim(arr[i], AnimState.IDLE, true); } break; } #endregion } }
//выставляет анимацию смерти и прозрачность 0.2 для умерших юнитов void _DestroyDead(RealBattleScript.BattleGroup group, SkeletonAnimation[] arr) { for (int i = group.GetUnitsCount(); i < arr.Length; i++) { if (arr[i] != null) { SetAnim(arr[i], AnimState.DEATH, false); arr[i].skeleton.SetColor(new Color(0.0f, 0.0f, 0.0f, 0.2f)); arr[i] = null; } else { break; } } }