| 338 | } |
| 339 | |
| 340 | function cycleValue(value: number, amount: number, min: number, max: number, round = false) { |
| 341 | if (round) { |
| 342 | value += Math.sign(amount); |
| 343 | |
| 344 | if (value < min) { |
| 345 | value = max; |
| 346 | } |
| 347 | |
| 348 | let div = Math.abs(amount); |
| 349 | if (amount > 0) { |
| 350 | value = Math.ceil(value / div) * div; |
| 351 | } else { |
| 352 | value = Math.floor(value / div) * div; |
| 353 | } |
| 354 | |
| 355 | if (value > max) { |
| 356 | value = min; |
| 357 | } |
| 358 | } else { |
| 359 | value += amount; |
| 360 | if (value < min) { |
| 361 | value = max - (min - value - 1); |
| 362 | } else if (value > max) { |
| 363 | value = min + (value - max - 1); |
| 364 | } |
| 365 | } |
| 366 | |
| 367 | return value; |
| 368 | } |
| 369 | |
| 370 | function toHourCycle(hour: number, hourCycle: HourCycle): [number | null, number] { |
| 371 | let dayPeriod: number | null = hour >= 12 ? 1 : 0; |