private void SetCharacteristics(WarshipDto warshipDto) { GameObject prefab = Resources.Load <GameObject>("Prefabs/LobbyWarshipModalWindow/Empty_Parameter"); //Заполнить раздел защиты Transform defenceParent = warshipsUiStorage.defenceHorizontalLayout.transform; SetSectionParameters(warshipDto.PowerLevel, warshipDto.WarshipCharacteristics.DefenceParameters, prefab, defenceParent); //Заполнить раздел атаки Transform attackParent = warshipsUiStorage.attackGridLayout.transform; SetSectionParameters(warshipDto.PowerLevel, warshipDto.WarshipCharacteristics.AttackParameters, prefab, attackParent); //Заполнить раздел ульты Transform ultimateParent = warshipsUiStorage.ultimateGridLayout.transform; SetSectionParameters(warshipDto.PowerLevel, warshipDto.WarshipCharacteristics.UltimateParameters, prefab, ultimateParent); warshipsUiStorage.attackDescription.text = warshipDto.WarshipCharacteristics.AttackDescription; warshipsUiStorage.ultimateDescription.text = warshipDto.WarshipCharacteristics.UltimateDescription; warshipsUiStorage.attackName.text = warshipDto.WarshipCharacteristics.AttackName; warshipsUiStorage.ultimateName.text = warshipDto.WarshipCharacteristics.UltimateName; }
private void ShowWarshipOverview(WarshipDto warshipDto) { UpdateData(warshipDto); //Обновить уникальный компонент для листания и переключения скинов lobbyUiContext.ReplaceWarshipOverviewCurrentSkinModel(warshipDto.CurrentSkinIndex, warshipDto); }
protected override void Execute(List <LobbyUiEntity> entities) { foreach (var warshipEntity in entities) { WarshipDto warshipDto = warshipEntity.warship.warshipDto; string skinName = warshipDto.GetCurrentSkinName(); GameObject prefab = Resources.Load <GameObject>("Prefabs/" + skinName); GameObject warshipGo = Object.Instantiate(prefab, gameViewsParent, false); warshipGo.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); LobbyUiEntity oldWarshipEntity = warshipsGroup.AsEnumerable() .SingleOrDefault(entity => { return(entity.warship.warshipDto.WarshipTypeEnum == warshipDto.WarshipTypeEnum); }); if (oldWarshipEntity != null) { oldWarshipEntity.view.gameObject.Unlink(); Object.Destroy(oldWarshipEntity.view.gameObject); oldWarshipEntity.Destroy(); } warshipEntity.AddView(warshipGo); warshipGo.Link(warshipEntity); } }
private void ShowOverviewLayer(WarshipDto warshipDto) { warshipsUiStorage.hint.SetActive(false); ShowWarshipOverview(warshipDto); warshipsUiStorage.warshipListRootGameObject.SetActive(false); warshipsUiStorage.warshipRootGameObject.SetActive(true); warshipsUiStorage.warshipRoot.SetActive(true); }
public string GetSkinName(WarshipTypeEnum modelWarshipTypeEnum) { WarshipDto warshipDto = contexts.lobbyUi .GetGroup(LobbyUiMatcher.Warship) .AsEnumerable() .Select(entity => entity.warship.warshipDto) .Single(item => item.WarshipTypeEnum == modelWarshipTypeEnum); return(warshipDto.GetCurrentSkinName()); }
public int GetWarshipPowerPoints(WarshipTypeEnum modelWarshipTypeEnum) { WarshipDto warshipDto = contexts.lobbyUi .GetGroup(LobbyUiMatcher.Warship) .AsEnumerable() .Select(entity => entity.warship.warshipDto) .Single(item => item.WarshipTypeEnum == modelWarshipTypeEnum); return(warshipDto.PowerPoints); }
private void CreateWarshipComponents(List <WarshipDto> warships, LobbyUiContext lobbyUiContextArg) { log.Info("Старт создания сущностей для кораблей"); for (var i = 0; i < warships.Count; i++) { log.Info("Создание сущности для корабля " + i); WarshipDto warshipDto = warships[i]; lobbyUiContext.CreateEntity().AddWarship(warshipDto); } log.Info("Создание сущностей для кораблей окончено"); }
public AccountDto Map(AccountDbDto account) { AccountDto result = new AccountDto { Username = account.Username, AccountRating = account.Rating, SoftCurrency = account.SoftCurrency, HardCurrency = account.HardCurrency, BigLootboxPoints = 0, SmallLootboxPoints = account.LootboxPoints, Warships = new List <WarshipDto>(), AccountId = account.Id }; foreach (WarshipDbDto warshipDbDto in account.Warships) { WarshipDto warshipDto = new WarshipDto(); warshipDto.Rating = warshipDbDto.WarshipRating; warshipDto.CombatRoleName = warshipDbDto.WarshipType.WarshipCombatRole.Name; warshipDto.Description = warshipDbDto.WarshipType.Description; warshipDto.WarshipName = warshipDbDto.WarshipType.Name; warshipDto.PowerPoints = warshipDbDto.WarshipPowerPoints; warshipDto.Id = warshipDbDto.Id; warshipDto.PowerLevel = warshipDbDto.WarshipPowerLevel; warshipDto.WarshipCharacteristics = warshipsCharacteristicsService .GetWarshipCharacteristics(warshipDbDto.WarshipType.Id); warshipDto.WarshipTypeEnum = warshipDbDto.WarshipType.Id; List <SkinTypeDto> skinTypeDtos = new List <SkinTypeDto>(); foreach (SkinType skinType in warshipDbDto.Skins) { SkinTypeDto skinTypeDto = new SkinTypeDto() { Id = skinType.Id, Name = skinType.Name }; skinTypeDtos.Add(skinTypeDto); } warshipDto.Skins = skinTypeDtos; warshipDto.CurrentSkinIndex = warshipDto.Skins .FindIndex((skin) => skin.Id == warshipDbDto.CurrentSkinTypeId); result.Warships.Add(warshipDto); } return(result); }
private void AddListenerToImproveButton(WarshipDto warshipDto) { var button = warshipsUiStorage.modalWindowImproveButton.GetComponent <Button>(); button.onClick.RemoveAllListeners(); button.onClick.AddListener(() => { UnityThread.ExecuteCoroutine(Coroutine()); }); IEnumerator Coroutine() { //Отправить запрос var downloader = new WarshipImprovementDownloader().TryBuy(warshipDto.Id); yield return(new WaitUntil(() => downloader.IsCompleted)); bool success = downloader.Result; if (success) { UiSoundsManager.Instance().PlayLevelUp(); //Показать анимацию получения нового уровня log.Info("Успешное получение уровня"); //Перезагрузить сцену lobbySceneSwitcher.ReloadScene(); var newLobbyEcs = Object.FindObjectOfType <LobbyEcsController>(); yield return(new WaitUntil(() => newLobbyEcs.IsWarshipsCreationCompleted())); yield return(new WaitUntil(() => newLobbyEcs.IsSoftCurrencyReady())); //Показать текущее меню newLobbyEcs.ShowWarshipList(); newLobbyEcs.ShowWarshipOverviewById(warshipDto.Id); } else { UiSoundsManager.Instance().PlayError(); //Показать уведомление, что ресурсов недостаточно log.Error("Не удалось получить новый уровень"); } } }
protected override void Execute(List <LobbyUiEntity> entities) { List <LobbyUiEntity> warshipsList = warshipsGroup.GetEntities().ToList(); // log.Debug($"кол-во кораблей до спавна "+warshipsList.Count); foreach (var warshipEntity in entities) { // log.Debug("Спавн корабля с id = "+warshipEntity.warship.warshipDto.WarshipTypeEnum.ToString()); WarshipDto warshipDto = warshipEntity.warship.warshipDto; string skinName = warshipDto.GetCurrentSkinName(); // log.Debug("Название скина перед спавном "+skinName); GameObject prefab = Resources.Load <GameObject>("Prefabs/" + skinName); GameObject warshipGo = Object.Instantiate(prefab, gameViewsParent, false); warshipGo.transform.localScale = new Vector3(1.4f, 1.4f, 1.4f); LobbyUiEntity oldWarshipEntity = warshipsGroup.AsEnumerable() .SingleOrDefault(entity => entity.warship.warshipDto.WarshipTypeEnum == warshipDto.WarshipTypeEnum); if (oldWarshipEntity != null) { // log.Debug("Корабль этого типа существует"); oldWarshipEntity.view.gameObject.Unlink(); Object.Destroy(oldWarshipEntity.view.gameObject); oldWarshipEntity.Destroy(); // log.Debug("Корабль этого типа уничтожен"); } // warshipGo.SetActive(false); warshipEntity.AddView(warshipGo); warshipGo.Link(warshipEntity); } isWarshipCreationCompleted = true; }
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 void ShowWarshipCharacteristics(WarshipDto warshipDto) { contexts.lobbyUi.CreateEntity().AddEnableWarshipOverviewModalWindow(warshipDto); }
public void ShowWarshipImprovementModalWindow(WarshipDto warshipDto) { contexts.lobbyUi.CreateEntity().AddEnableWarshipImprovementModalWindow(warshipDto); }
public void ShowWarshipOverview(WarshipDto warshipDto) { contexts.lobbyUi.CreateEntity().AddEnableWarshipOverviewUiLayer(warshipDto); }
public void AddOrUpdate(WarshipTypeEnum warshipTypeEnum, WarshipDto warshipDto) { warships.AddOrUpdate(warshipTypeEnum, warshipDto, (key, oldValue) => warshipDto); }