17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 08:39:19 +02:00
Commit Graph

39 Commits

Author SHA1 Message Date
pawelw
51521a135a Text displays: accept characters above 127, in windows-1250 or utf-8 (#198)
* Text displays: accept characters above 127, in windows-1250 or utf-8

A text display (sub-model of type "text") looks up the sub-model of each character
in a 256 entry table, and indexed it with a plain char. With char being signed, any
character above 127 gave a negative index: reading the text went outside the table,
and so did filling the table if a character sub-model had such a name. In effect the
displays could only show ASCII, and a text with national characters could crash.

The lookup is now keyed by unicode code point. Both the displayed text and the names
of the character sub-models are decoded as utf-8 if they are valid utf-8, and as
windows-1250 otherwise, so legacy (ansi) sceneries and models work next to utf-8
ones, and the two can be mixed. A short ansi text can be valid utf-8 by accident
(two upper case accented letters in a row will do); when both readings are possible
the one which finds more of its characters in the model is used.

The rest is unchanged: the first character of the text still isn't displayed, the
characters are still drawn in the translucent pass only. A missing text pointer no
longer gets dereferenced.

* Text displays: prepare the characters once for each text

The sequence of character sub-models was cached for the last text only, so
displays of several instances drawn in turn decoded their texts again on
every draw. It is now kept for each text the display shows; the texts of the
instances don't change, so a draw costs a single lookup.

Also the comments added in the renderers are now in English.

* Text displays: move the text decoding to utilities

utf8_to_utf32() and win1250_to_utf32(), with the windows-1250 table, now sit
next to win1250_to_utf8(). The existing function maps only the Polish letters
and passes other bytes above 127 through, so it can't serve the displays.

* Text displays: address the SonarCloud findings

std::array instead of the C-style arrays, the utf-8 sequence length worked
out in a function of its own instead of nested conditional operators,
std::byte for the bit operations, std::ranges::count_if and contains().
The character loop of the renderers moved to Render_Alpha_text(), which
takes the nesting back to the limit, and the static pasText is accessed
through the class.
2026-10-03 12:05:32 +02:00
jerrrrycho
176427f96b refactor: sonar c++20 changes (#185) 2026-09-28 21:08:15 +02:00
jerrrrycho
8fbb482350 feat(materials): texture randomization for loads
* feat(materials): texture randomization for loads
2026-09-27 00:09:16 +02:00
maj00r
3fa3853018 fix for sonar 2026-09-14 22:51:33 +02:00
e7b64c7397 Merge branch 'random-seed-entropy' of https://github.com/MaSzyna-EU07/maszyna into random-seed-entropy 2026-09-14 19:28:45 +02:00
788135cc2d Improve random engine entropy and clean up random engine initialization 2026-09-14 19:26:24 +02:00
maj00r
2945f3f9b2 use random_device for local generator 2026-09-14 19:11:07 +02:00
maj00r
ff3daea78c seed the random engines from the system pool, not std::random_device 2026-09-14 18:26:16 +02:00
maj00r
5fce417a51 fix: guard Random/LocalRandom against inverted min>max bounds
std::uniform_real/int_distribution has UB when min>max. The old "fancy Random"
used interpolate(a,b,t) which tolerated a>b; the migration to
std::uniform_real_distribution did not, and only one inverted call site was
fixed by hand. Swap the bounds inside Random()/Random(int)/LocalRandom() so
every call site is safe, and reorder the two inverted literal calls in
Driver.cpp (fActionTime buzzer / departure delay) for readability.
2026-07-02 00:37:52 +02:00
d60841944d Merge pull request #124 from xwizard/refactor/user-config-path
refactor: extract user_config_path() helper
2026-06-30 22:35:53 +02:00
Mateusz Włodarczyk
fe603f15eb refactor: extract user_config_path() helper
Consolidates platform-specific config-directory logic (APPDATA on Windows,
~/Library/Application Support on macOS, ~/.config on Linux) into a single
user_config_path(filename) function in utilities/utilities.{cpp,h}, removing
copy-pasted #ifdef blocks from application.cpp, editor/editorSettings.cpp,
input/{keyboard,gamepad,drivermouse,uart}input.cpp.
2026-06-30 21:30:36 +02:00
jerrrrycho
d85096f64d reformat: remove redundant parentheses 2026-06-30 21:19:46 +02:00
306ed64f38 Merge pull request #110 from xwizard/macos-arm64-build
Add macOS ARM64 build support
2026-06-16 11:15:46 +02:00
Mateusz Włodarczyk
dd412894bb Add macOS ARM64 build support
Three small source tweaks that let the OpenGL renderer build and run
on Apple Silicon without affecting the Windows/Linux paths:

- stdafx.h: use GLM_FORCE_NEON on ARM64 instead of GLM_FORCE_AVX2.
  AVX2 pulls <immintrin.h>, which clang on ARM64 rejects because
  the x86 intrinsics are unimplemented.
- utilities/utilities.cpp: provide an Apple libc++ fallback for
  Now() using localtime_r + strftime, since
  std::chrono::current_zone() is not yet implemented there.
- audio/audio.h: prefer Khronos-style <AL/al.h> headers when they
  are on the include path (brew openal-soft) and fall back to the
  deprecated Apple OpenAL.framework's <OpenAL/al.h> only otherwise.
2026-05-19 10:45:18 +02:00
Christopher Kwiatkowski
3707a7845b Merge pull request #1 from docentYT/fix-clamp-exception
Merge with fix-clamp-exception
2026-05-12 17:01:47 +02:00
docentYT
a787bdd77c fix min max in Random 2026-05-12 16:56:48 +02:00
docentYT
be91c4da70 Fix C4566 2026-05-12 16:36:32 +02:00
docentYT
6542021253 Optimize substr_path implementation and change return type to sd::string 2026-05-07 12:59:57 +02:00
f4f4897798 Revert substr_path function 2026-05-06 22:20:32 +02:00
docentYT
13c7317f6e Do not allow implicit cast for inline std::string to_string(bool Value) and change to_string to std::string for non boolean values 2026-05-03 15:49:29 +02:00
docentYT
ca699d117f Remove not needed includes 2026-05-02 14:40:31 +02:00
docentYT
0c19bd4507 return empty string_view in substr_path if no '/' was found 2026-05-01 18:38:28 +02:00
docentYT
0e6950a386 Replace count_trailing_zeros with std::countr_zero 2026-05-01 17:43:43 +02:00
docentYT
ec1dfae953 Replace starts_with and ends_with with string class methods 2026-05-01 17:31:11 +02:00
docentYT
9c27b54960 Simplify len_common_prefix 2026-05-01 13:57:33 +02:00
docentYT
664c340d84 substr_path refactor 2026-05-01 13:45:57 +02:00
docentYT
5f117832fb slashes functions refactor 2026-05-01 13:44:23 +02:00
docentYT
bd21b8f49c Replace string_starts_with and string_ends_with with string::starts_with and string::ends_with 2026-05-01 13:33:32 +02:00
docentYT
614a7f51a5 Refactor LocalRandom() 2026-05-01 13:17:05 +02:00
docentYT
e1d8c08915 Remove not needed to_string overloads and refactor existing one 2026-05-01 13:15:33 +02:00
docentYT
b59ccb6de5 Better Split implementation and remove of unused overloads 2026-05-01 01:55:46 +02:00
docentYT
350123fb9e Replace ExchangeCharInString with std::ranges::replace 2026-05-01 00:43:22 +02:00
docentYT
2faf3293b1 Remove not used DUE and DWE 2026-05-01 00:28:35 +02:00
docentYT
ee3af0bf18 Change RandomInt to Random overload and reuse global random engine. 2026-05-01 00:25:16 +02:00
docentYT
937d1b2f2a Replace fancy Random function with std::uniform_real_distribution 2026-05-01 00:11:55 +02:00
docentYT
31026bca89 Replace Now() implementation with more modern std::chrono 2026-05-01 00:03:12 +02:00
docentYT
337e750ed1 Replace Max0R and Min0R with std::max and std::min 2026-04-30 23:47:32 +02:00
copilot-swe-agent[bot]
7e49aa8740 Rewrite #includes to use explicit subdirectory paths
Co-authored-by: Hirek193 <23196899+Hirek193@users.noreply.github.com>
2026-03-14 19:16:48 +00:00
copilot-swe-agent[bot]
0531086bb9 Reorganize source files into logical subdirectories
Co-authored-by: Hirek193 <23196899+Hirek193@users.noreply.github.com>
2026-03-14 19:01:57 +00:00