* Fix index check in CSelectSlide.RenameValue
The check used && instead of ||. An index cannot be negative and out
of range at the same time, so the check never returned early and an
invalid index caused an ArgumentOutOfRangeException.
* Allow textures to be disposed more than once
CTextureBase.Dispose threw ObjectDisposedException on a second call.
Dispose must be safe to call multiple times, otherwise freeing a
texture twice crashes the game.
Return early instead. CD3DTexture and COGLTexture also check
IsDisposed first, so a second call does not free the GPU texture
again. This matters for OpenGL, where the texture name may already
belong to another texture.
---------
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
* Control score sounds from UpdateGame instead of the thread pool
_PlayProgressBarSound started a Task that waited for the progress bar
duration and then closed whatever stream was stored in
_ProgressBarSoundStream. When switching rounds on the score screen
before that time had passed, an old task closed the progress bar
sound of the new round too early and played the applause of the
previous round, while the applause of the new round never played.
Remember when the progress bar sound was started and check it in
UpdateGame on the main thread instead. Starting a new progress bar
sound and leaving the screen now also stop a running applause.
* Sync progress bar sound with the score bar animation
The sound duration was computed from the points (10,000 points =
5 seconds), while the bar animation duration depends on the bar size
in the theme and only starts when the bar is first drawn. Both only
matched approximately and drifted apart with other themes.
Add CProgressBar.AnimatesMovement and CProgressBar.IsAnimating. The
score screen now stops the progress bar sound and starts the applause
as soon as no visible score bar is animating anymore. If the theme
has no movement animation, the previous duration is used.
* Make stream id allocation in CPlaybackBase thread-safe
Load assigned stream ids with _NextId++ outside of the lock. Load is
also called from other threads, so two streams could get the same id
and a later Close or Play could hit the wrong stream.
Use Interlocked.Increment instead. Ids still start at 0.
* Do not play the progress bar sound for 0 points
With 0 points the score bars do not move, so the progress bar sound
started and stopped again right away, which could be heard as a short
click. Do not start it at all if the highest score is 0.
* Better handle multiple tags respecting US format
Based on unversioned, V1 & V2 of US formats : https://github.com/UltraStar-Deluxe/format
Should address #623
Creator now takes multiple values
Maintain backward compatibility
* Update file path properties to match US formats
Seems to not be usefull since song is cloned is others game mode
Improve performance by stop reloading TXT file
Didn't see any difference with and without instead of just song load perfs imrpovement
Maybe that I miss a point ?
* Apply R# clean-up for reliability
- Migrate to NUnit4 Assert.That
- Update dependencise versions
- Fix LangVersion to 9.0 (until net core migration)
- Reformat code
- Apply 'var' style (easier for refactoring)
- Remove redundant parentheses
- Add braces on every condition blocks (1 line)
- Uses new null checking patterns
- Uses AutoProperties when possible
- Uses string scalar type instead of class
- Clean usings
- Add .orig files in git ignore
- Rename some properties to respect defined conventions and US format definition
- ID -> Id
- BPM -> Bpm
- Finish -> End
* Update R# settings according to the clean-up made
* Adding a regex based solution for enumerating files looking for multiple extensions at same time. This should give better performance than enumerating over the same files multiple times looking for different patterns
* Adding a timeout value for regex per security recommendation
* Store the regex directly so we don't have to keep constructing it, also adding some logging and handling for exceptions when enumerating files
* Add Player Select Option
* Add Player Select Option
* Add Player Select Option
* Add Player Select Option
* Theme System Version 9
* Theme System Version 9
* Theme System Version 9
* Add Player Select Option
* Add Player Select Option
* Theme System Version 9
* Theme System Version 9
* Theme System Version 9
* Add Player Select Option
* Add: Transifex file and renamed lang files
* Translate Vocaluxe/Website/locales/en.json in tr
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'tr'.
* Translate Vocaluxe/Website/locales/en.json in es
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'es'.
* Rename all language files to match transifex.
* Manual sync of translations
* Another manual sync of translations
* Adjust pr branch name
* Translate Output/Languages/en.xml in pt
97% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'pt'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in cs
96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.
Sync of partially translated files:
untranslated content is included with an empty translation
or source language content depending on file format
* Translate Output/Languages/en.xml in it
100% translated source file: 'Output/Languages/en.xml'
on 'it'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in sv
100% translated source file: 'Output/Languages/en.xml'
on 'sv'.
* Translate Output/Languages/en.xml in de
100% translated source file: 'Output/Languages/en.xml'
on 'de'.
* Translate Output/Languages/en.xml in fr
100% translated source file: 'Output/Languages/en.xml'
on 'fr'.
* Translate Vocaluxe/Website/locales/en.json in hu
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'hu'.
* Translate Vocaluxe/Website/locales/en.json in ru
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'ru'.
* Fix: Unescape String during xml reading
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Translate Output/Languages/en.xml in ru
100% translated source file: 'Output/Languages/en.xml'
on 'ru'.
* Fix: Seperate handling of unescaping
* Fix: Typo
* Fix: Typo
---------
Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>