public void Execute() { DateTime now = DateTime.Now; foreach (LobbyUiEntity award in movingAwardsGroup) { MovingIconComponent movingAward = award.movingIcon; DateTime currentTargetArrivalTime = movingAward.GetCurrentTargetArrivalTime(); //Если уже нужно переходить на новый отрезок пути if (currentTargetArrivalTime <= now) { //то стать в последнюю точку текущего отрезка award.position.value = movingAward.GetCurrentTargetPoint(); //если отрезки ещё есть, то перейти дальше if (movingAward.iconTrajectory.currentControlPointIndex + 1 < movingAward.iconTrajectory.controlPoints.Count) { movingAward.iconTrajectory.currentControlPointIndex++; } } //иначе сдвинуть в зависимости от времени else { award.position.value = movingAward.CalculatePosition(now); award.scale.scale = movingAward.CalculateScale(now); award.alpha.alpha = movingAward.CalculateAlpha(now); } } }
public static Vector3 CalculatePosition(this MovingIconComponent movingIcon, DateTime now) { Vector3 deltaPositionForTime = movingIcon.GetDeltaVector3() * movingIcon.GetPercentageOfCoveredDistance(now); return(movingIcon.GetCurrentLineStartPosition() + deltaPositionForTime); }
public static Vector3 CalculateScale(this MovingIconComponent movingIcon, DateTime now) { Vector3 deltaScale = movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex].scale - movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].scale; return(movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].scale + movingIcon.GetPercentageOfCoveredDistance(now) * deltaScale); }
public static DateTime GetCurrentTargetArrivalTime(this MovingIconComponent movingIcon) { return(movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex].arrivalTime); }
public static float CalculateAlpha(this MovingIconComponent movingIcon, DateTime now) { float deltaAlpha = movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex].alpha - movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].alpha; return(movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].alpha + movingIcon.GetPercentageOfCoveredDistance(now) * deltaAlpha); }
private static float GetPercentageOfCoveredDistance(this MovingIconComponent movingIcon, DateTime now) { return((float)((now - movingIcon.GetCurrentLineStartTime()).TotalMilliseconds / (movingIcon.GetCurrentTargetArrivalTime() - movingIcon.GetCurrentLineStartTime()).TotalMilliseconds)); }
private static Vector3 GetDeltaVector3(this MovingIconComponent movingIcon) { return(movingIcon.GetCurrentTargetPoint() - movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].position); }
private static Vector3 GetCurrentLineStartPosition(this MovingIconComponent movingIcon) { return(movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].position); }
private static DateTime GetCurrentLineStartTime(this MovingIconComponent movingIcon) { return(movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex - 1].arrivalTime); }
public static void TurnOffRaiseUp(this MovingIconComponent movingIconComponent) { movingIconComponent.iconTrajectory.controlPoints[movingIconComponent.iconTrajectory.currentControlPointIndex].moveToUp = false; }
public static bool IsRaiseUpNeeded(this MovingIconComponent movingIconComponent) { return(movingIconComponent.iconTrajectory.controlPoints[movingIconComponent.iconTrajectory.currentControlPointIndex].moveToUp); }
public static Vector3 GetCurrentTargetPoint(this MovingIconComponent movingIcon) { return(movingIcon.iconTrajectory.controlPoints[movingIcon.iconTrajectory.currentControlPointIndex].position); }