[Timeout(25)] //Assert public void GetModel_ValidLevel_FastRecalculations() { for (var i = 1; i <= 10; i++) { WarshipPowerScale.GetModel(i); } }
public bool CanAPurchaseBeMade(int softCurrency, int warshipPowerLevel, int warshipPowerPoints, out FaultReason?faultReason) { // Console.WriteLine($"{nameof(warshipPowerLevel)} {warshipPowerLevel} {nameof(warshipPowerPoints)} {warshipPowerPoints}"); //Достать цену улучшения WarshipImprovementModel improvementModel = WarshipPowerScale.GetModel(warshipPowerLevel); if (improvementModel == null) { Console.WriteLine("У корабля уже максимальный уровень"); faultReason = FaultReason.MaximumLevelAlreadyReached; return(false); } if (softCurrency < improvementModel.SoftCurrencyCost) { faultReason = FaultReason.InsufficientSoftCurrency; return(false); } if (warshipPowerPoints < improvementModel.PowerPointsCost) { faultReason = FaultReason.InsufficientWarshipPowerPoints; return(false); } faultReason = null; return(true); }
private async Task <ShopModel> InitWppModel(ShopModel shopModel) { // log.Debug("Ожидание спавна кораблей"); await MyTaskExtensions.WaitUntil(lobbyEcsController.IsWarshipsCreationCompleted); // log.Debug(lobbyEcsController.GetCountOfSpawnedWarships()); // log.Debug("Ожидание спавна закончено"); var products = shopModel.UiSections.Select(section => section.UiItems) .SelectMany(item => item) .SelectMany(item => item) .ToList() ; // log.Debug("Кол-во продуктов "+products.Count()); foreach (ProductModel productModel in products) { if (productModel.ResourceTypeEnum == ResourceTypeEnum.WarshipPowerPoints) { // log.Debug("Упаковка вспомогательной информации для продукта с id "+productModel.Id); try { WarshipPowerPointsProductModel model = ZeroFormatterSerializer .Deserialize <WarshipPowerPointsProductModel>(productModel.SerializedModel); // log.Debug($"{nameof(model.Increment)} {model.Increment}" + // $"{nameof(model.WarshipId)} {model.WarshipId}"+ // $"{nameof(model.SupportClientModel)} {model.SupportClientModel}"+ // $"{nameof(model.WarshipTypeEnum)} {model.WarshipTypeEnum}"+ // ""); int powerLevel = lobbyEcsController.GetWarshipPowerLevel(model.WarshipTypeEnum); var powerModel = WarshipPowerScale.GetModel(powerLevel); var supportModel = new WppSupportClientModel() { StartValue = lobbyEcsController.GetWarshipPowerPoints(model.WarshipTypeEnum), WarshipSkinName = lobbyEcsController.GetSkinName(model.WarshipTypeEnum), MaxValueForLevel = powerModel.PowerPointsCost }; model.SupportClientModel = supportModel; productModel.SerializedModel = ZeroFormatterSerializer.Serialize(model); } catch (Exception e) { log.Error(e.Message + " " + e.StackTrace); return(null); } } } return(shopModel); }
public void GetModel_ValidLevel_OkResult(int powerLevel, int expectedPowerPoints, int expectedSoftCurrency) { //Arrange WarshipImprovementModel model; //Act model = WarshipPowerScale.GetModel(powerLevel); //Assert Assert.AreEqual(expectedPowerPoints, model.PowerPointsCost, "Wrong power points."); Assert.AreEqual(expectedSoftCurrency, model.SoftCurrencyCost, "Wrong soft currency."); }
public WarshipImprovementModel GetImprovementModel(int warshipPowerLevel) { WarshipImprovementModel improvementModel = WarshipPowerScale.GetModel(warshipPowerLevel); return(improvementModel); }
private void UpdateData(WarshipDto warshipDto) { //Установить название корабля warshipsUiStorage.warshipName.text = warshipDto.WarshipName.ToUpper(); //Установить тип корабля warshipsUiStorage.warshipTypeName.text = warshipDto.CombatRoleName; //Установить ранг корабля WarshipRankModel rankModel = WarshipRatingScaleStorage.Instance.GetRankModel(warshipDto.Rating); warshipsUiStorage.warshipRank.text = rankModel.currentRank.ToString(); //Установить слайдер для рейтинга warshipsUiStorage.trophySlider.value = rankModel.rankProgress; //Установить рейтинг корабля warshipsUiStorage.trophyText.text = rankModel.ToString(); //Установить описание корабля warshipsUiStorage.warshipDescription.text = warshipDto.Description; //Установить уровень силы warshipsUiStorage.warshipPowerLevel.text = "POWER " + warshipDto.PowerLevel; //TODO Установить характеристики корабля (атаку, защиту, скорость или что там) // log.Debug($"attack name "+warshipDto.WarshipCharacteristics.AttackName); // log.Debug($"ultimate name "+warshipDto.WarshipCharacteristics.UltimateName); var healthParameter = warshipDto.WarshipCharacteristics.DefenceParameters .SingleOrDefault(p => p.Name == "Health"); warshipsUiStorage.healthText.text = healthParameter != null?healthParameter.GetCurrentValue(warshipDto.PowerLevel).ToString("0.###") : "undefined"; var movementSpeed = warshipDto.WarshipCharacteristics.DefenceParameters .SingleOrDefault(p => p.Name == "Movement speed"); warshipsUiStorage.velocityText.text = movementSpeed != null?movementSpeed.GetCurrentValue(warshipDto.PowerLevel).ToString("0.###") : "undefined"; warshipsUiStorage.attackNameText.text = warshipDto.WarshipCharacteristics.AttackName; warshipsUiStorage.ultimateNameText.text = warshipDto.WarshipCharacteristics.UltimateName; //Проверить на кол-во ресурсов для перехода на новый уровень int softCurrency = lobbyEcsController.GetSoftCurrency(); var model = WarshipPowerScale.GetModel(warshipDto.PowerLevel); int improvementCost = model.SoftCurrencyCost; int maxPowerPoints = model.PowerPointsCost; bool showGreenScale = softCurrency >= improvementCost && warshipDto.PowerPoints >= maxPowerPoints; Text powerPointsValueText; //Показать нужную шкалу. (Красную или зелёную) if (showGreenScale) { powerPointsValueText = warshipsUiStorage.greenPowerPointsValueText; warshipsUiStorage.redScale.SetActive(false); warshipsUiStorage.greenScale.SetActive(true); } else { warshipsUiStorage.redScale.SetActive(true); warshipsUiStorage.greenScale.SetActive(false); powerPointsValueText = warshipsUiStorage.powerValueText; } //Установить кол-во очков силы для текущего уровня powerPointsValueText.text = warshipDto.PowerPoints + "/" + maxPowerPoints; //Установить слайдер для кол-ва очков силы warshipsUiStorage.powerSlider.maxValue = maxPowerPoints; warshipsUiStorage.powerSlider.value = warshipDto.PowerPoints; //Установить цену улучшения warshipsUiStorage.improveButtonCost.text = improvementCost.ToString(); //Установить слушатель для кнопки улучшения warshipsUiStorage.improveButton.onClick.RemoveAllListeners(); warshipsUiStorage.improveButton.onClick.AddListener(() => { if (warshipDto.PowerPoints < maxPowerPoints) { UiSoundsManager.Instance().PlayError(); string message = "The warship doesn't have enough power points."; textTooltip.Show(message); } else if (softCurrency < improvementCost) { UiSoundsManager.Instance().PlayError(); string message = "There's not enough coins to improve the spaceship."; textTooltip.Show(message); } else { UiSoundsManager.Instance().PlayClick(); //показать окно покупки улучшения lobbyEcsController.ShowWarshipImprovementModalWindow(warshipDto); } }); string oldSkinName = warshipDto.GetCurrentSkinName(); //Установить слушатель для кнопки выбора корабля warshipsUiStorage.chooseButton.onClick.RemoveAllListeners(); warshipsUiStorage.chooseButton.onClick.AddListener(() => { CurrentWarshipTypeStorage.WriteWarshipType(warshipDto.WarshipTypeEnum); // log.Debug("Слушатель работает"); UiSoundsManager.Instance().PlayClick(); //заменить скин если нужно int actualSkinIndex = lobbyUiContext.warshipOverviewCurrentSkinModel.skinIndex; string newSkinName = warshipDto.GetCurrentSkinName(); if (oldSkinName != newSkinName) { warshipDto.CurrentSkinIndex = actualSkinIndex; int warshipId = warshipDto.Id; var task = new SkinChangingNotifier().ChangeSkinOnServerAsync(warshipId, newSkinName); } else { log.Info("Скин не был изменён"); } //изменить тип текущего корабля lobbyUiContext.ReplaceCurrentWarshipTypeEnum(warshipDto.WarshipTypeEnum); //заменть компонент корабля lobbyUiContext.CreateEntity().AddWarship(warshipDto); //выключить меню обзора корабля lobbyUiContext.CreateEntity().messageDisableWarshipOverviewUiLayer = true; //выключить меню со списком кораблей lobbyUiContext.CreateEntity().messageDisableWarshipListUiLayer = true; }); //Установить стоимость для кнопки покупки улучшения warshipsUiStorage.popupWindowCostText.text = improvementCost.ToString(); //Установить слушатель для кнопки покупки улучшения warshipsUiStorage.popupWindowBuyButton.onClick.RemoveAllListeners(); warshipsUiStorage.popupWindowBuyButton.onClick.AddListener(() => { //todo показать окно подтверждения }); //Установить слушатель для меню с характеристиками корабля warshipsUiStorage.warshipCharacteristicsButton.onClick.RemoveAllListeners(); warshipsUiStorage.warshipCharacteristicsButton.onClick.AddListener(() => { if (warshipDto.PowerPoints < maxPowerPoints || softCurrency < improvementCost) { UiSoundsManager.Instance().PlayClick(); lobbyEcsController.ShowWarshipCharacteristics(warshipDto); } else { UiSoundsManager.Instance().PlayClick(); //показать окно покупки улучшения lobbyEcsController.ShowWarshipImprovementModalWindow(warshipDto); } }); }
private void CreateItems(List <WarshipDto> warshipDtos) { for (int index = 0; index < warshipDtos.Count; index++) { GameObject prefab = Resources.Load <GameObject>("Prefabs/LobbyWarshipsList/Image_WarshipListItem") ?? throw new Exception("Не удалось найти префаб"); Transform parent = warshipsUiStorage.warshipsListBackgroundGameObject.transform; GameObject item = Object.Instantiate(prefab, parent, false); //Взять элемент WarshipDto warshipDto = warshipDtos[index]; //Установить картинку string skinName = warshipDto.GetCurrentSkinName(); Image image = item.transform.Find("Image_WarshipPreview").GetComponent <Image>(); image.sprite = Resources.Load <Sprite>($"SkinPreview/{skinName}"); if (image.sprite == null) { log.Error($"Не найден скин skinName {skinName}"); } //Установить название корабля Text warshipNameText = item.transform.Find("Image_WarshipPreview/Text_WarshipName").GetComponent <Text>(); warshipNameText.text = warshipDto.WarshipName.ToUpper(); //Установить уровень силы Text warshipPowerText = item.transform.Find("Image_WarshipPreview/Text_Power").GetComponent <Text>(); warshipPowerText.text = "POWER " + warshipDto.PowerLevel; //Проверить на кол-во ресурсов для перехода на новый уровень int softCurrency = lobbyEcsController.GetSoftCurrency(); var model = WarshipPowerScale.GetModel(warshipDto.PowerLevel); int improvementCost = model.SoftCurrencyCost; int maxPowerPoints = model.PowerPointsCost; bool showImproveAnimation = softCurrency >= improvementCost && warshipDto.PowerPoints >= maxPowerPoints; if (showImproveAnimation) { item.transform.Find("Empty_PowerValueRoot").gameObject.SetActive(false); item.transform.Find("Empty_FilledPowerScale").gameObject.SetActive(true); } else { item.transform.Find("Empty_PowerValueRoot").gameObject.SetActive(true); item.transform.Find("Empty_FilledPowerScale").gameObject.SetActive(false); //Установить кол-во баллов текущего уровня силы на шкале прогресса Slider slider = item.transform.Find("Empty_PowerValueRoot/Slider").GetComponent <Slider>(); slider.maxValue = maxPowerPoints; slider.value = warshipDto.PowerPoints; //Установить текст кол-ва баллов текущего уровня силы Text sliderText = item.transform.Find("Empty_PowerValueRoot/Text").GetComponent <Text>(); sliderText.text = warshipDto.PowerPoints + "/" + maxPowerPoints; } //Подготовка к показу ранга WarshipRankModel warshipRankModel = WarshipRatingScaleStorage.Instance.GetRankModel(warshipDto.Rating); //Установить текст уровеня ранга Text rankText = item.transform.Find("Empty_WarshipExperienceScale/Image_LeftCircle/Text_RankValue") .GetComponent <Text>(); rankText.text = warshipRankModel.currentRank.ToString(); //Установить текст кол-ва трофеев Text trophyCountText = item.transform.Find("Empty_WarshipExperienceScale/Image_RightRect/Text") .GetComponent <Text>(); trophyCountText.text = warshipDto.Rating.ToString(); //Установить значение шкалы прогресса кол-ва трофеев Slider sliderTrophy = item.transform.Find("Empty_WarshipExperienceScale/Image_RightRect/Slider") .GetComponent <Slider>(); sliderTrophy.value = warshipRankModel.rankProgress; //Установить обработчик нажатия Button button = item.GetComponent <Button>(); button.onClick.RemoveAllListeners(); button.onClick.AddListener(() => { UiSoundsManager.Instance().PlayClick(); lobbyEcsController.ShowWarshipOverview(warshipDto); }); } }
public ResourceModel Create(List <WarshipDbDto> warships) { ResourceTypeEnum resourceTypeEnum = lootboxResourceTypeFactory.CreateResourceType(); switch (resourceTypeEnum) { case ResourceTypeEnum.SoftCurrency: { int amount = random.Next(15, 100); var model = new SoftCurrencyResourceModel() { Amount = amount }; return(new ResourceModel { SerializedModel = ZeroFormatterSerializer.Serialize(model), ResourceTypeEnum = ResourceTypeEnum.SoftCurrency }); } case ResourceTypeEnum.WarshipPowerPoints: { int warshipIndex = random.Next(warships.Count); WarshipDbDto warship = warships[warshipIndex]; int amount = random.Next(2, 15); var model = new WarshipPowerPointsResourceModel(); var test = WarshipPowerScale.GetModel(warship.WarshipPowerLevel); if (test == null) { return(null); } model.MaxValueForLevel = test.PowerPointsCost; model.WarshipSkinName = warship.CurrentSkinType.Name; model.FinishValue = warship.WarshipPowerPoints + amount; model.StartValue = warship.WarshipPowerPoints; model.WarshipId = warship.Id; model.WarshipTypeEnum = warship.WarshipTypeId; warship.WarshipPowerPoints += amount; return(new ResourceModel { SerializedModel = ZeroFormatterSerializer.Serialize(model), ResourceTypeEnum = ResourceTypeEnum.WarshipPowerPoints }); } case ResourceTypeEnum.HardCurrency: { var model = new HardCurrencyResourceModel() { Amount = random.Next(2, 15) }; return(new ResourceModel { SerializedModel = ZeroFormatterSerializer.Serialize(model), ResourceTypeEnum = ResourceTypeEnum.HardCurrency }); } default: throw new Exception("Неизвестный тип подарка " + resourceTypeEnum); } }