private IEnumerator WarshipAnimation(string warshipPrefabNameArg, int amount) { // log.Debug($"{nameof(warshipPrefabNameArg)} {warshipPrefabNameArg}"); //создать кораблик слева за сценой GameObject warshipPrefab = Resources.Load <GameObject>($"Prefabs/{warshipPrefabNameArg}"); Vector3 position = new Vector3(-4, 0); Quaternion quaternion = Quaternion.identity; GameObject warship = Instantiate(warshipPrefab, position, quaternion, transform); warship.transform.localScale = Vector3.one / 2; //плавно переместить корабль на центр экрана float velocity = 0.01f; float acceleration = 0.005f; while (warship.transform.position.x < 0) { Vector3 tmp = warship.transform.position; tmp = new Vector3(tmp.x + velocity, tmp.y); warship.transform.position = tmp; velocity += acceleration; yield return(null); } //включить систему частиц lightningParticleSystem.SetActive(true); //создать набор иконок Vector3 spawnPosition = new Vector3(Screen.width / 2, Screen.height / 2); Vector3 finishPosition = canvasRect.gameObject.transform.Find("Empty_PowerValueRoot/Image_PowerValue") .GetComponent <RectTransform>().position; var trajectoryFactory = new WppIconTrajectoryFactory(); var random = new Random(); for (int index = 0; index < amount; index++) { DateTime spawnStartTime = DateTime.UtcNow; var entity = Contexts.sharedInstance.wppAccrual.CreateEntity(); List <ControlPoint> controlPoints = trajectoryFactory .Create(index, spawnStartTime, spawnPosition, finishPosition, random); IconTrajectory iconTrajectory = new IconTrajectory() { controlPoints = controlPoints, currentControlPointIndex = 0 }; entity.AddMovingIcon(1, iconTrajectory, AwardTypeEnum.WarshipPowerPoints); entity.AddPosition(controlPoints.First().position); entity.AddAlpha(0); entity.AddScale(new Vector3(1, 1, 1)); } }
protected override void Execute(List <LobbyUiEntity> entities) { const int maxNumberOfImagesPerAwardType = 100; foreach (var command in entities.Select(entity => entity.commandToCreateAwardImages)) { AwardTypeEnum awardTypeEnum = command.awardTypeEnum; DateTime spawnStartTime = command.startSpawnTime; int remainder = command.quantity; int numberOfImages; if (command.quantity > maxNumberOfImagesPerAwardType) { numberOfImages = maxNumberOfImagesPerAwardType; } else { numberOfImages = command.quantity; } int roundedAverageIncrement = (int)Math.Round(((decimal)command.quantity / numberOfImages), MidpointRounding.AwayFromZero); // log.Debug($"{nameof(roundedAverageIncrement)} {roundedAverageIncrement}"); int index = 0; while (remainder != 0) { index++; LobbyUiEntity entity = contextsLobbyUi.CreateEntity(); Vector3 spawnPoint = MovingAwardsUiElementsStorage.Instance().GetStartPoint(awardTypeEnum); Vector3 finishPoint = MovingAwardsUiElementsStorage.Instance().GetFinishPoint(awardTypeEnum); // log.Debug($"finish position {finishPoint.x} {finishPoint.y}"); List <ControlPoint> controlPoints = awardTrajectoryFactory .Create(index, spawnStartTime, spawnPoint, finishPoint, random, screenHeight); // log.Debug("last control point position "+controlPoints.Last().position.x+" "+controlPoints.Last().position.y); int increment; if (roundedAverageIncrement < remainder) { increment = roundedAverageIncrement; } else { increment = remainder; } IconTrajectory iconTrajectory = new IconTrajectory() { controlPoints = controlPoints, currentControlPointIndex = 1 }; entity.AddMovingIcon(increment, iconTrajectory, awardTypeEnum); entity.AddPosition(controlPoints.First().position); entity.AddAlpha(0); entity.AddScale(new Vector3(1, 1, 1)); remainder -= increment; } } }