Commit graph

8736 commits

Author SHA1 Message Date
Ralph Sennhauser
7aa5890236
Fix getting host jid after 0a455fbe2d
During the removal of glooxwrapper the function GetJID was mapped to
getID. This results in NetClient querying for host jid not getting the
right value which prevents hosting a game in the lobby.

Reported-by: Dunedan
Refs: #7203
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-11-29 05:50:16 +01:00
phosit
32b26e6d0c Remove unused delta in Camera.cpp
The variable was introduced in 5470eff53c but never used.
2024-11-25 21:23:05 +01:00
Ralph Sennhauser
0a455fbe2d Remove glooxwrapper
This wrapper was meant to support multiple C++ ABIs with a single
pre-built gloox library wrap as a C library. A new ABI change was
rejected a few years back, so this will probably take a while for it to
be on the table again. With the bug tracker and mailing list currently
unavailable and known TLS issues we might have replaced gloox by then
anyway.

Supporting multiple ABIs with the current setup isn't an issue either
and is already done for 32bit vs 64bit ABI on Windows.

Therefore use gloox types directly in lobby code instead of wrapper
types and delete the wrapper and build-integration.

Migrate to override where applicable, as it helped avoid subtle
differences in signatures and finding missing inheritance of LogHandler.

Finally use version check instead of os check to work around Windows
using the 1.1 development branch instead of releases.

Fixes: #7198
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-11-25 20:01:00 +01:00
Ralph Sennhauser
49507c04e0
Make failed audio device query non fatal
Querring the audio device name may fail. The name is only used for the
sake of logging it for debugging. Avoid querry failure to be fatal and
insted just log the issue.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-11-21 15:08:04 +01:00
Ralph Sennhauser
bb1910ff4c
Fix segfault with openal-1.24.0
With version 1.24.0 alcIsExtensionPresent() has dropped case insensitive
string comparison [1], use upper case names.

The internal strings are uppercase since the first git commit importing
openal 17 years ago.

[1] upstream commit 785f794141d62a4c308db26aa4a4819e6a92525e

Report: https://wildfiregames.com/forum/topic/125203-crash-on-start-due-to-soundmanager
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-11-21 15:08:03 +01:00
phosit
f8afd49ae1 Return by value from CCamera::GetScreenCoordinates
Pack the two `float`s in to a `CVector2D`.
Rename some variables to not use underscore.
2024-11-17 20:27:58 +01:00
phosit
998dc30b6d Return by value from CCamera::BuildCameraRay
Some return values can be assigned to a `const auto`, somewhere `dir` is
mutated so the whole result has to be assigned to a non `const` variable
and once only dir is used, so structured binding isn't used there.
2024-11-17 20:27:58 +01:00
phosit
cf92c20020 Return by value from CCamera::GetViewQuad
Remove some temporaries by passing the return value directly to
range-based for loops.
2024-11-17 20:27:58 +01:00
Itms
5ed3a54603
Do not pin or atomize ParamNode strings
When building a JS::Value from CParamNode, strings have been "interned"
since the conversion was written in dd501b2a5a. This means that the JS
string object could be used outside a JS realm, and also that those
strings could be compared efficiently instead of char-by-char.

This was unnecessary, and the only place in the code where we used
"interned" strings. The upgrade to SpiderMonkey 45 (64b477625d) changed
the name of related methods, and some of them are removed from the
public API in SM 102, so stop pinning and atomizing those strings.

Additionally, the switch of CParamNode to utf8 in 35ed55cfd6 missed one
of the two utf16 handlings, so fix that as well.
2024-11-17 18:59:48 +01:00
phosit
48d1b7586d Clear modsToInstall earlier
Dataflow is now more clear.

The `std::vector` is cleared earlyer, so there is a bit less memory
used.
2024-11-17 18:03:49 +01:00
phosit
3c8f6762c8 Change flags to a single bool
In `RunGameOrAtlas` only one of thous flags is used. Using a `bool` is
simpler and less error-prone.

Also reset the variable earlier, so it's easyer to reason about it.
2024-11-17 18:03:49 +01:00
phosit
31d9b0ed05 Make the TaskManager a automatic livetime object
This way the destructor can be used for cleanup.
2024-11-17 18:03:49 +01:00
phosit
256152df6d Add CXeromycesEngine
This way the destructor can be used for clean up and `Singleton` can be
used.
2024-11-17 18:03:49 +01:00
phosit
400878b374 Include utility in Future.h
Fix building without precompiled headers.
Defect introduced in 778972602a
2024-11-14 19:25:28 +01:00
trompetin17
4e98704b71
fix Propagation mousewheel event in game
Propagation mousewheel event was introduce to have the opportunity to
parent handle this event if an only if the child doenst handle and the
parent set a handler for that event.
The error foundedd by elexis inside a game relay on the message waw
propagated outsie IGUIObjects to CGUI.cpp that shouldnt be at the
beggin. I forget to stop the propagation when all objects in the tree
was validated, because of that the message was propagate to CGUI.cpp
andd then hanle by camera.
the fix suggest to only propagate the event in the GUI tree, not outside
the GUI tree
2024-11-12 15:03:28 -05:00
trompetin17
73a3602475
Fix GUI Action on MouseWheel events
Now that we are propagating mousewheel events to parent we need to
explicitly mark that the event was handle in JS and shouldnt be handle
by parent.
this error was informed by Elexis
2024-11-12 15:01:44 -05:00
trompetin17
8c250568e7
Add scrollpanel widget
This PR introduces a new ScrollPanel component with the following
capabilities:
- Scroll Orientation Support: Allows scrolling in horizontal, vertical,
  or both directions, providing flexibility for different use cases.
- Partial Object Rendering: Supports partial rendering of objects that
  are only partially visible within the scroll boundaries, improving
  visual accuracy and performance.
- Boundary-Constrained Mouse Interaction: Handles mouse events strictly
  within the panel's visible boundaries, preventing interaction with
  objects outside the scrollable area.
- Minimum Internal Size (min_width, min_height): Introduces support for
  virtual space management, allowing the panel to maintain a minimum
  internal size independent of its actual on-screen dimensions. Even
  when the panel is resized, this ensures that the content respects a
  defined virtual space (with min_width and min_height), effectively
  simulating a larger internal canvas. This is particularly useful for
  large content or scenarios where a more extensive scrollable area is
  required than the current visible panel.
2024-11-12 15:01:42 -05:00
phosit
581f4af012 Allow the future request stop from the callback
In `Future` there is a notion of cancelation / stop-request. The task
callback doesn't have such a notion.
Some tasks (like the map-generation) are stopable. It did that in a
thread unsave way.

A task is canceled when the future is destroied or when `CancelOrWait`
is called on it.
2024-11-10 20:38:37 +01:00
Vladislav Belov
9094c3adb0
Batches update and upload passes for model renderers. 2024-11-08 13:57:57 +01:00
Vladislav Belov
0a6703762d
Removes hardcoded Vulkan uniform descriptor set ranges. 2024-11-06 23:24:22 +01:00
Vladislav Belov
3a01d852e2
Adds binding slot type to Vulkan shader program. 2024-11-06 19:09:22 +01:00
Ralph Sennhauser
50aae8763f Improve script generating glad headers
The script assumes glad got cloned into glad subdirectory. This is the
case if you follow the procedure outlined in the README, however if you
are using system glad or or glad installed via pip this assumption
doesn't hold.

Therefore relax the requirement on where to get glad from. While at it
add shell option errexit and make the script callable from repository root.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-11-06 16:35:57 +01:00
Vladislav Belov
eecc5a8fea
Updates the list of GL extensions for glad. 2024-11-03 20:35:28 +01:00
Vladislav Belov
ff923e5d6a Adds a patch to automatically apply the macOS fix to glad after its generation. 2024-11-03 20:26:13 +01:00
Stan
1a216cb848
Fix compilation on other platforms after 67464ebbaa 2024-11-03 10:57:11 +01:00
Vladislav Belov
3c124ecd63 Removes vertex attribute name strings after aba7a170d9. 2024-11-01 20:08:06 +01:00
Stan
361a32a7e5
Fix parameter typo in GL backend 2024-11-01 13:30:12 +01:00
Stan
6d12d25348
Replace usage of OSString().c_str() by OSString
Fixes #6604
2024-10-28 16:35:49 +01:00
trompetin17
ff28ac36a6
Tooltip set like ghost
Tooltip shouldnt receive any mouse event direct, there is a edge case
when you have a big tooltip and the object that need that tooltip is in
the bottom left, at this moment tooltip is in the same position of the
mouse, current code was returning the tooltip, and the code hide the
tooltip, and find again there is another object that needs the tooltip
and show again. To fix this is just than simple to set a tooltip like
ghost because shouldnt receive any mouse event.
2024-10-27 17:18:42 -05:00
Vladislav Belov
2b324fdd94 Avoids recalculating Vulkan pipeline state in case of the same desc. 2024-10-25 21:23:47 +02:00
Dunedan
d9740858f7
Look up location of spirv-reflect only once
Instead of looking up the location of spirv-reflect for every shader,
this is now being done once and cached for all shaders. This results in
shader compilation being slightly faster.
2024-10-25 09:24:43 +02:00
Dunedan
cdd2f3636a
Use spirv-opt to strip debug info
Instead of compiling SPIR-V shaders twice, once with debug info and once
without, this uses `spirv-opt` to remove the debug info from the SPIR-V
shaders with debug info. This results in notable performance gains, as
stripping the debug info from existing shaders is much faster than
compiling them.

As a result of this change the contents of the non-debug shaders change
once. That's because shaders with debug info contain much more
instructions and therefore more result ids. Stripping the debug
info from shaders results in different result ids being used as when
generating ones without debug info. While that doesn't result in a
difference in the functionality of the shaders, it's a difference in
their binary representation, causing their content hashs and therefore
file names to change. After that one-time change the result ids are
reproducible again.
2024-10-25 08:26:54 +02:00
Ralph Sennhauser
a9241f4cc7
Use std::placeholders for json_spirit
"bind.hpp" was moved in boost-1.39. [1]

Placeholders were moved in boost 1.60. [2]

Since boost 1.73 placeholders defined in global namespace are
deprectared. [3]

Boost 1.76 added support for using std::placeholders with
boost::bind. [4]

This change uses the new, cough, location of the header and
std::placerholders for boost 1.76 plus to silence the deprecation
warning there.

Following commits are from https://github.com/boostorg/bind.git
[1] 8f507b9aeca643ca78e6a712b6d300720627c0ed
[2] db56733e4ed2125944b89e01cf36a9e451dd36f5
[3] 2797f0dc33caaae126a416bf613bd11267ba3353
[4] c85b31e3d200dda2a73cf0027a82c6d8e29066f8

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-10-24 19:53:23 +02:00
real_tabasco_sauce
8d78e3165b Rename TeamPlacement -> PlayerPlacement 2024-10-23 18:37:35 +02:00
Dunedan
6eb9a3308a
Define VkDescriptorType enum only once
Instead of redefining the VkDescriptorType enum for every shader, only
define it once. This avoids unnecessary computation and slightly
increases performance.
2024-10-21 09:02:38 +02:00
Vladislav Belov
5a5d518c28
Cleans up code after renaming HWLightingModelRenderer to CPUSkinnedModelRenderer. 2024-10-19 23:24:40 +02:00
Vladislav Belov
63faea7153
Renames HWLightingModelRenderer to CPUSkinnedModelRenderer. 2024-10-19 22:59:50 +02:00
Vladislav Belov
960b3180e5
Reduces code duplication for Vulkan pipeline state binding. 2024-10-19 19:58:03 +02:00
Vladislav Belov
4f7f2e056c Fixes water foam texture size after scale. 2024-10-19 01:21:50 +02:00
Vladislav Belov
3eb1da6e5c Fixes incorrect Vulkan buffer usage enum name. 2024-10-19 00:13:50 +02:00
Vladislav Belov
5e4b3f84b6
Fixes Future usage in CCmpPathfinder after 0eed117e6d. 2024-10-18 22:46:08 +02:00
Ralph Sennhauser
b1f0ebda41 Fix wxString to std::string conversion in Atlas
At least on Linux this resulted in the help menu in Atlas not being
populated. This fixes the issue.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-10-18 19:30:26 +02:00
Ralph Sennhauser
7e22cbf28f Add missing headers to tests
Fixes no-pch build.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-10-18 17:27:48 +02:00
Dunedan
20cef3bce0
Fix compiling SPIR-V shaders on Windows
b2cdb1e6b4 broke compiling of SPIR-V shaders on Windows, as the output
of `spirv-reflect` contains CRLF as line separators there. This commit
fixes that.
2024-10-18 16:50:31 +02:00
Dunedan
0bbd2ad7dd
Improve linting of PO files
During the mogration to git e9d1cb6cc7 removed the
`lint-translations.sh` script which was used together with
`check_translations.py` to lint POT- and PO-files. By doing so it
removed a valuable option to find problems in translations.

This commit undos that by merging the functionality of the removed
`lint-translations.sh` and `check_translations.py` into the latter
one. The new logic is easier to maintain, produces less false-positives
and has some unit test coverage.
2024-10-17 19:23:50 +02:00
Dunedan
b2cdb1e6b4
Improve YAML loading performance using libyaml
This adds optional support for loading the YAML reflection data using
`libyaml`, which is faster than PyYAML's pure Python implementation.
2024-10-17 17:52:08 +02:00
Dunedan
92df50f36c
Improve formatting for SPIR-V tools README 2024-10-17 17:51:56 +02:00
Dunedan
8e6cac8744
Deduplicate SPIR-V shaders across programs
This drops the program name from the SPIR-V shader file name, which
allows deduplicating shaders belonging to different programs. While that
has no significant impact on compilation performance it reduces the
number of required SPIR-V shaders.

One downside this has it that it's not directly visible from the file
name of a shader anymore to which program it belongs.
2024-10-17 17:02:22 +02:00
Ralph Sennhauser
f3b26cadc4 Use vanilla cxxtest functionallity
To disable tests we carry a patch which allows disabling test by
appending DISABLED to the test function name. Instead just do as
upstream says and prepend the test function so it won't be recognized as
a test any longer.

The docs suggest to prepend x but anything will do. Continue to use
DISABLED_ but as prefix which is actually already in use in one case.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-10-13 18:27:18 +02:00
Ralph Sennhauser
b5d08a4833 Use XWayland for Atlas if needed
GlCanvas currently doesn't support runtime selection of GDK backend [1].

Therefore to run Atlas under Wayland wxWidgets needs to be built with
GLCANVAS_EGL which is usually not the case to support X11 at the same
time.

Check if the EGL backend is available and if not and running under
Wayland force use of XWayland with the GLX backend.

[1] https://github.com/wxWidgets/wxWidgets/issues/22325

Closes: #6939
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-10-09 06:28:56 +02:00
Vladislav Belov
0716d23aa4 Fixes notes. 2024-10-08 23:07:18 +02:00
Vladislav Belov
03792bd809 Adds a hack to detect missing SPIR-V mod. 2024-10-08 23:07:17 +02:00
phosit
0eed117e6d Catch exceptions from tasks
It's now possible te get an exception from a function in a task.
The interface is like std::future: if you call .Get() you will get the
result (as before) or the exception will be thrown.
2024-10-08 20:05:44 +02:00
Stan
bd5f8392be
Make CMatrix3D::operator*= behave as expected. 2024-10-08 16:04:22 +02:00
Stan
09e42692bb
Fix GLES 2.0 build after the compute shader addition 2024-10-08 08:13:33 +02:00
phosit
f9ad0c1df4 Allow selecting a TeamPlacement in Atlas 2024-10-06 19:37:39 +02:00
Dunedan
c4047b1cf2
Parallelize generation of SPIR-V shaders
For each program this parallelizes the generation of shaders by program
combinations. This leads to significantly faster shader generation on
systems with multiple CPU-cores. The resulting shaders are identical to
the ones prior to this change.
2024-10-05 07:29:43 +02:00
Dunedan
c101984445
Make SPIR-V file names reproducible
This ensures the file names of SPIR-V program combinations and shaders
are reproducible. Up to now they only were if the order of program
combinations in the rules.json didn't change, as the file names
contained the position of the program combination in the rules.json.
With this change files names of program combinations will be named based
on the details of the combination used to create them and the file names
of shaders will be based on their content respectively.

Changing the file names avoids wrong shaders when partially rebuilding
them after a new combination for a program got added in between the
other combinations in rules.json and removes the need for keeping track
of identical shaders in the script. It's also a preparation for being
able to build shaders in parallel, while also keeping the result
reproducible.
2024-10-01 16:58:03 +02:00
Vantha
38b71c1bac Add a Tips and Tricks page containing the loading screen tips
- Small popup page accessible from the main menu via Learn to Play.
- Lets the player read through the tips with 'Previous' and 'Next' buttons.
- Tips continue to be shown on the loading screen.
-> but there without the scrolling ability.

- Added two new hotkeys for quicker tip changing (item.prev and item.next)
-> set to the left and right arrows respectively by default.

- Responsible scripts are placed in gui/reference/tips/.
- The tip text files have been moved to gui/reference/tips/texts/.
- Tip image files have been moved to art/textures/ui/tips/.

- Added a series of new sprites (textures in art/textures/ui/tipdisplay/)
-> comprises a title decoration, a bullet point sprite, and a new button
style.
2024-09-30 06:22:47 +02:00
Itms
1c12ada278 Remove unused typedef in json_spirit
This fixes -Wunused-local-typedef with macOS's clang10.
2024-09-28 21:55:30 +02:00
Itms
b19dbb9bdb Remove unused variables
This fixes -Wunused-but-set-variable with FreeBSD's clang17.
2024-09-28 21:55:30 +02:00
Itms
35e0a98940 Avoid a copy in a range-for-loop
This fixes -Wrange-loop-construct with FreeBSD's clang17.
2024-09-28 21:55:30 +02:00
Itms
8e90103569 Use lambda capture in tests
This fixes -Wunused-lambda-capture with FreeBSD's clang17.
2024-09-28 21:55:30 +02:00
Itms
b2ab747c8a Mark class with final dtor as final in tests
This fixes -Wfinal-dtor-non-final-class with FreeBSD's clang17.
2024-09-28 21:55:30 +02:00
Itms
ad3537c414 Revert 1e504cd64c which used a deprecated API
The fix doesn't seem needed anymore on supported versions of macOS,
refs #1554.
2024-09-28 21:55:30 +02:00
Itms
3dfc7c57e0 Explicitly default copy ctors for some classes
This fixes -Wdeprecated-copy with FreeBSD's clang17.

This commit reverts a change from 8a32b0b3d4, where a private copy
assignment operator was deleted, whereas it was needed to explicitly
declare the copy constructor, refs #5294.
2024-09-28 21:55:30 +02:00
phosit
ac54096bb2 Allow selecting a biome in Atlas
Original patch by: lyv
2024-09-26 19:47:36 +02:00
Stan
67464ebbaa
Fix the CPU name detection on AARCH64 macOS 2024-09-25 23:34:43 +02:00
Itms
86a4092e55 Remove platform-dependant atomic operations 2024-09-25 21:57:15 +02:00
Itms
e7434e1770 Use std::atomic instead of platform-dependant code
This covers atomic add operations and atomic compare-and-switch
operations.
2024-09-25 21:57:15 +02:00
Itms
9db8e792b6 Replace custom atomic_bool with std::atomic<bool> 2024-09-25 21:57:15 +02:00
Itms
e401b206d0 Remove TIMER_ACCRUE_ATOMIC
Added in aa44bac652, the "atomic" accumulated timer is based on a
structure that mixes atomic and non-atomic access, which is not fit to
be converted to std::atomic.

Additionally, it is only used in a single situation where benchmarking
is not essential to us.
2024-09-25 21:57:15 +02:00
Itms
944994b21e Do not use atomic CAS in VfsDirectory
The compare-and-switch operation in this situation does not need to be
atomic.

This class must be copyable, so the CAS'd flag cannot be adapted to use
std::atomic.
2024-09-25 21:57:15 +02:00
phosit
a84b5a61ed Adopt generator based interface by mapgen tests
This put the tests more in line with actual mapgen scripts.
2024-09-25 20:15:43 +02:00
Ralph Sennhauser
288d5002f3 Add support for vendored spirv-reflect
This allows build-archives.sh to fall back to vendored spirv-reflect if
it can't be found in PATH.

Also update error messages to suggest additional alternatives.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-09-24 18:45:22 +02:00
Ralph Sennhauser
cf909a81db Add support for vendored spirv-reflect to compile.py
The script build-archive.sh sets a variable SPIRV_REFLECT, even respects
it if it's set in env but without support from the compile.py script for
it there isn't much point.

This commit adds support SPIRV_REFLECT in compile.py and and adds a
fallback to use vendored spirv-reflect for when the envvar is unset and
the tool can't be found in PATH

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-09-24 18:45:22 +02:00
Ralph Sennhauser
9770391bc4 Make failure messages visible for build-archives
Due to "set -e" the script terminates when the required tools aren't
found and the arguably helpful messages later on won't be printed.

Make the initial check for tools non fatal and allow for the later check
to take care of missing tools.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-09-24 18:45:22 +02:00
Ralph Sennhauser
eb328fc2df Allow building archives without translations
Currently you have to fetch translations first so they can be filtered
by build-archives.sh without the script failing.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-09-24 18:45:22 +02:00
Dunedan
57308bb847
Avoid unnecessary computations
This refactors the script for cleaning the translations to get the
same result by doing less. This is achieved by the following changes:

- Use glob-patterns for finding the files to clean more efficiently,
  without the need to exclude collected files again.
- Only write files which are supposed to be modified (previously all
  portable object files did get rewritten by this script, no matter if
  it did change something or not).
- Stop searching for sections in files to clean up, once they are
  already passed.
2024-09-22 07:59:07 +02:00
Dunedan
0ea6d32fa5
Enable various ruff rules
This commit enables a bunch of unrelated ruff rules, which only require
minimal changes to the code base to enable them.

The rules enabled by this commit are:

- check the use of datetime objects without timezone (DTZ005)
- check the performance of try-except in loops (PERF203)
- check the number of function arguments (PLR0913)
- check for mutable class defaults (RUF012)
- check for the use of secure hashing algorithms (S324)
- check for raising base exceptions (TRY002)
- check for raising other exceptions where TypeErrors should be raised
  (TRY004)
2024-09-21 20:54:30 +02:00
Dunedan
c0232c6b5f
Specify the Python target version in ruff.toml
This ensures the same Python target version used for `ruff format`
is used for `ruff check` as well. It also allows ruff, even if it's not
run through pre-commit, to use the correct target Python version.
2024-09-21 20:54:24 +02:00
Dunedan
265ed76131
Simplify check for identical shaders
Previously when checking if two SPIR-V shaders are identical the
hashs of their file content would be compared and afterwards their
(unhashed) file contents as well. Comparing the file contents isn't
necessary, as the hash function used is a cryptographic one, which
guarantees the hash can be used as a representative of the hashed data.
2024-09-21 20:39:59 +02:00
Dunedan
230c7ca27d
Add EditorConfig options for Python
While the desired options for indent size and style are Python's
defaults, let's make it explicit by specifying it in the EditorConfig.

As part of this, this also removes unnecessary inline formatting options
for Python files.
2024-09-17 11:03:15 +02:00
Dunedan
cd8b4266a4
Fix class name in xmlvalidator 2024-09-13 11:04:06 +02:00
Dunedan
8c7cc7373d
Fix variable names in SPIRV compile.py 2024-09-13 11:04:06 +02:00
Dunedan
0d3e3fbc29
Rename simple-example.py 2024-09-13 11:04:05 +02:00
Dunedan
661328ab15
Fix variable naming for map compatibility file 2024-09-13 11:04:05 +02:00
Dunedan
616f2e134b
Fix variable names in checkrefs.py 2024-09-13 11:04:04 +02:00
Dunedan
ea4b580527
Simplify JSON parsing 2024-09-11 17:52:10 +02:00
Dunedan
0e84957979
Simplify XML parsing by iterating only once
This simplifies the XML parsing, by iterating over the DOM tree only
once. Curiously this doesn't result in significant performance gains.

As the keywords are now found in the order they appear in the
document instead of the order they are mentioned in messages.json, the
order of a few strings in the PO-templates changes caused by the changes
in this commit.
2024-09-11 17:52:10 +02:00
Dunedan
eeb502c115
Simplify code by making use of early returns 2024-09-11 17:52:10 +02:00
Dunedan
f4c40b740c
Remove unnecessary extractors package
This simplifies the code structure, by removing the extractors package,
which only contained a single module, the extractors module. This module
is now located in the i18n_helper package.
2024-09-11 17:52:09 +02:00
Dunedan
20ab96a0f4
Make some attribute names PEP 8 compatible 2024-09-11 17:52:09 +02:00
Dunedan
ac48b72550
Move imports to the top of the file 2024-09-11 17:52:09 +02:00
Dunedan
4d3be23bac
Remove broken and unused ini-file extractor
The ini-file extractor has been broken since the transition to Python 3
and nobody noticed, because it isn't used nowadays. Therefore, let's
remove it.
2024-09-11 17:52:09 +02:00
Dunedan
f856a7663f
Add a cache for mask patterns
This increases the performance of updating the PO-templates
significantly by adding a cache for the building of mask patterns. In
non-representative tests it increased the performance of updating the
PO-templates by >25%.
2024-09-11 17:52:09 +02:00
Dunedan
7575dfe3c8
Remove unnecessary use of codecs module 2024-09-11 17:52:08 +02:00
Dunedan
e86fd58524
Simplify and speed up finding of messages.json 2024-09-11 17:51:58 +02:00
Dunedan
04aa01a39b
Speed up fetching of translations from Transifex
This increases the number of workers to use when fetching translations
from Transifex from 5 (the default) to 12. While the Transifex CLI
allows up to 20 workers, using more workers results in frequent request
throttling, which hurts performance more than it improves it.
2024-09-10 07:34:48 +02:00
Dunedan
ccb1d747f0
Use PEP 8 naming conventions for templatesanalyzer 2024-09-10 07:29:33 +02:00
Dunedan
10e7513bba
Revert changes in check_diff.py in batches
This is to avoid running into errors caused by the limited length of
command line input when reverting lots of files.
2024-09-08 11:39:08 +02:00
Itms
34a209b680
Update glad to 2.0.7
Release: https://github.com/Dav1dde/glad/releases/tag/v2.0.7
2024-09-08 09:31:14 +02:00
Itms
0f87124b98
Some glad improvements
- Silence a MSVC warning in vulkan.cpp, refs #6987
- Document the patching of gl.h for macOS, from r26094
- Fix shellcheck warnings in the generation script
2024-09-08 09:26:46 +02:00
Itms
35d998694f
Move glad from source-libs to source/third_party
Improve definition of the gladwrapper project in premake.
2024-09-08 09:18:45 +02:00
Itms
8d0af4b184
Unify Windows scripts for getting nightly binaries
The new script merges existing scripts for downloading translations and
SPIR-V shaders, and also exports game binaries from the latest nightly
build into the git repo.

This allows contributors, especially artists, to obtain a working build
of the game without learning how to build the game for Windows, refs #1814.
2024-09-04 17:20:50 +02:00
Dunedan
eb499b4c5c
Fix a regression introduced with 4a049c5f3a 2024-09-04 15:03:21 +02:00
Dunedan
19e7d14506
Use PEP 8 naming conventions for fontbuilder2 2024-09-03 14:01:47 +02:00
Dunedan
4a049c5f3a
Use PEP 8 naming conventions for i18n tools 2024-09-03 13:51:27 +02:00
Dunedan
80f808df4a
Markdown format for fontbuilder2 README
The fontbuilder2 README file was already partially formatted with
Markdown, but didn't indicate that via its file extension. This commit
changes that and improves the formatting of the README itself.
2024-09-03 13:39:28 +02:00
Dunedan
bcf97b608b
Enable ruff rules for docstrings and comments
This enables some ruff rules for docstrings and comments. The idea is to
not enforce the presence of docstrings, but to ensure they are properly
formatted if they're present.

For comments this adds checks that they don't contain code and verify
the formatting of comments with "TODO" tags.

As part of this, some commented out code which hasn't been touch in the
past 10 years gets removed as well.

The rules enabled enabled by this are:

- check formatting of existing docstrings (D200-)
- check comments for code (ERA)
- check formatting of TODO tags (TD001, TD004-)
2024-08-31 21:09:20 +02:00
Ralph Sennhauser
2634f8762e build-unix-win32.sh: move to posix shell
Convert non posix shell constructs and change shebang to /bin/sh

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-29 12:55:26 +02:00
Ralph Sennhauser
1c4a32baa4 build-archives.sh: move to posix shell
Convert various no posix constructs and change the shebang to /bin/sh.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-29 12:55:26 +02:00
Ralph Sennhauser
8ed1a0cb5a templatessorter.sh: move to posix shell
This one is already clean, so just change the shebang

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-29 12:55:26 +02:00
Dunedan
f2bef8388a
Use UTF-8 as encoding when working with files
This explicitly uses UTF-8 encoding when reading or writing files with
Python. This is necessary as the default locale varies between
operating systems.
2024-08-29 07:22:46 +02:00
Dunedan
c3b99feb60
Enable ruff rules for code simplification
This enables ruff rules which check for code which can be simplified to
improve readability.

The additionally rules getting enabled by this are:

- remove unnecessary nesting of if-statements (SIM102)
- use contextlib.suppress() for no-op exception handling (SIM105)
- use enumerate() for counting in loops (SIM113)
- use context managers for opening files (SIM115)
2024-08-29 07:00:43 +02:00
Stan
028ec40165
Add a RC file to add metadata to the pyrogenesis executable 2024-08-28 23:37:36 +02:00
Ralph Sennhauser
6f5ac7c4ae Fix issues pointed out by shellcheck
Some are real bugs, some are bashisms, but most is zealous quoting of
variables.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-28 18:23:18 +02:00
Dunedan
ea647067f0
Enable ruff rules to check for ambiguous code
This enables some ruff rules to check for ambiguous and dead Python
code, which might cause unintended side-effects.

The enabled rules are:

- a bunch of rules related to shadowing of builtin structures (A)
- a bunch of rules checking for unused arguments (ARG)
- a rule checking for useless expressions (B018)
- a rule checking for unbound loop variables (B023)
- a rule checking redefined function parameters (PLR1704)
2024-08-27 19:28:11 +02:00
Dunedan
ae3fad73ce
Add a markdownlint pre-commit hook
This adds a pre-commit hook to link Markdown files and fixes all
reported findings.
2024-08-27 10:06:31 +02:00
Ralph Sennhauser
abdda50892 Format shell scripts using shfmt
This updates shell scripts to use a consistent style that can be enforced
via pre-commit hook.

As for choosing tabs over spaces, some arguments are:

- tabs can help people with visual impairment
- tabs allow for indenting heredocs in bash
- tabs are the default for the tool shfmt

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-26 09:03:00 +02:00
Dunedan
1800b5f1c0
Add executable bits for files with shebangs 2024-08-26 07:46:38 +02:00
Dunedan
f58dc9b485
Remove unnecessary executable bits
This removes the executable bits from files which aren't supposed to
have them.

Also removes shebangs for files which aren't supposed to be executable.
2024-08-26 07:46:34 +02:00
Dunedan
05e708f987
Refactor check_* functions for better readability 2024-08-25 21:24:00 +02:00
Dunedan
75949e1f5a
Replace use of os.path with pathlib 2024-08-25 21:24:00 +02:00
Dunedan
4b77d7bb74
Compile regex pattern once
This should slightly increase the performance as the pattern has to be
only compiled once, instead of so during every loop iteration.
2024-08-25 21:24:00 +02:00
Dunedan
87029f2a91
Replace uses of re.split() with str.split() 2024-08-25 21:23:59 +02:00
Dunedan
24e67746f9
Log a warning when a specified mod can't be found 2024-08-25 21:23:59 +02:00
Dunedan
92d92fac1b
Remove unnecessary default value for dict.get() 2024-08-25 21:23:59 +02:00
Dunedan
0dea22285e
Fix the exit codes of checkrefs.py 2024-08-25 21:23:59 +02:00
Dunedan
39f2889cf7
Support calling checkrefs.py from other dirs 2024-08-25 21:23:59 +02:00
phosit
f22d0d899e Add final to classes introduced in f9114a87f2
A class which can not be derived from should tell that in the
declaration.
2024-08-25 13:38:09 +02:00
phosit
62c0080e1b Don't use std::shared_ptr in CStrIntern
Now there is less allocation and reference counting.
2024-08-25 11:58:22 +02:00
Itms
45984c905b Fix get-nightly scripts on Unix
A wrong syntax was used in for loops.
2024-08-25 10:12:21 +02:00
Dunedan
e36c6a31fe
Enable additional ruff rules
In the ruff config file added in #6954 explicitly selecting the ruff
rules to check was missed, resulting in ruff only checking a very small
subset of its available rules. That hasn't been desired, so this is the
first of a series of commits enabling more rules. In this PR all rules
whose violations can be either automatically fixed by ruff or are
trivial to fix manually get enabled. For the follow up PRs it's intended
to focus on one area of rules per PR to gradually improve the Python
code quality.
2024-08-25 06:29:39 +02:00
Ralph Sennhauser
a44dd59a0c Add some missing headers
When running clang-format which reorders headers, those are the ones
that came up as missing.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2024-08-24 12:19:52 +02:00
Dunedan
c49d4eedd0
Lint and format Python files using ruff
To improve quality und uniformity of the included Python code this
lints and formats the included Python files with ruff.
2024-08-24 10:54:26 +02:00
Dunedan
8519eb9b86
Reduce time needed for STUN
In my tests this reduced the time necessary for starting to host a game
or joining a hosted game by ~180ms.
2024-08-23 21:00:15 +02:00
Stan
eeb0f1cce6
Make checkrefs and called scripts return an error 2024-08-23 17:54:56 +02:00
Stan
2a06eea08a
Fix checkrefs.py for python 3.12
Fixes #6898
Reported by: @Itms
2024-08-23 15:59:36 +02:00
Itms
e9d1cb6cc7 Generate nightly SVN builds for end users, fixes #1819. 2024-08-20 19:15:56 +02:00
Itms
b698558102 Get rid of svnversion. 2024-08-20 19:10:54 +02:00
Dunedan
ef623af2f8 Check for source of XMPP stanzas
Up to now Pyrogenesis didn't check if lobby related XMPP stanzas were
sent by the lobby bots. This meant that every user could send forged
data, like the list of games, to be displayed by another user. This
change fixes that by checking such stanzas come from the expected lobby
bots.

Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5216
This was SVN commit r28197.
2024-08-13 04:59:38 +00:00
Stan
27757404f0 Set missing executable properties on some scripts.
Reported by: @sera
Fixes: #6944

This was SVN commit r28188.
2024-08-10 11:48:16 +00:00
Dunedan
a9ea169301 Improve formatting of XMPP announcements
Previously private messages and announcements got handled the same way.
This adds a distinct handling for server announcements, which allows
formatting them in a different way. They are now not prefixed with
"Private" anymore and show the announcement subject as well, if one was
set.

Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5268
This was SVN commit r28186.
2024-08-10 05:08:31 +00:00
Dunedan
56f6d76b78 Remove internationalization of log messages
As log messages aren't supposed to be translatable, this removes the
internationalization of all log messages, which had it enabled.

Patch by: @Dunedan
Accepted by: @Itms
Differential Revision: https://code.wildfiregames.com/D5314
This was SVN commit r28179.
2024-08-05 15:27:12 +00:00
Stan
0831f5d3ce Fix build with Boost 1.85
Patch by: @Cayleb-Ordo
Accepted by: @Stan
Comments by: @sera
Differential Revision: https://code.wildfiregames.com/D5267
This was SVN commit r28176.
2024-08-02 16:17:22 +00:00
Stan
1ca3e6d3bc Fix two Clang warnings in Profiler2.cpp
Introduced in 3cbe96d24c

Differential Revision: https://code.wildfiregames.com/D5316
This was SVN commit r28173.
2024-08-02 09:40:57 +00:00
Stan
38e3f5cec0 Fix build with miniupnpc 2.2.8
See
https://github.com/miniupnp/miniupnp/blob/miniupnpc_2_2_8/miniupnpc/Changelog.txt.
And https://github.com/0ad/0ad/pull/45

Patch by: @emily
Accepted: by @Stan
Comments by: @phosit, @sera
Differential Revision: https://code.wildfiregames.com/D5307
This was SVN commit r28167.
2024-07-30 18:44:38 +00:00
Dunedan
32b9a27e9b Fix references in portable object templates
Up to now the references (lines starting with `#:`) in the portable
object templates generated by `updateTemplates.py` didn't comply with
the PO file format specification. They violated the specification in two
ways:

- White spaces in file names got replaced by non-breaking spaces
  (U+00A0), instead of the file names being enclosed by First Strong
  Isolate (U+2068) and Pop Directional Isolate (U+2069)
- the references didn't just include the filename and optionally the
  line number of the string, as defined in the specification, but also a
  non-standard "breadcrumb" component, which made them unnecessary
  hard to read in certain cases and difficult to use with tools
  expecting properly formatted references

This commit fixes both of these issues by properly encoding white
spaces and removing the breadcrumb component.

Patch by: @Dunedan
Accepted by: @Stan
Differential Revision: https://code.wildfiregames.com/D5309
This was SVN commit r28159.
2024-07-25 08:53:04 +00:00
Dunedan
1fa6184d17 Make language names in credits translatable
Up to now the languages and their names shown in the credits came from a
static mapping in `creditTranslators.py`. The language names noted in
there weren't consistent: some where present just in English, some in
their native language and some in both. This also required adjusting the
mapping manually, whenever a new language got added on Transifex,
otherwise its translators wouldn't be credited properly.

This commit resolves both issues, by making the language names
translatable and removing the need for the static mapping in
`creditTranslators.py`.

There is one minor nuisance with this implementation: As the languages
get listed in the credits in the same order as in `translators.json` and
they are ordered by there English name in there, the order might not be
alphabetical in other languages.

Running `creditTranslators.py` for the first time with these changes
will produce a rather large diff for `translators.json`, as not just the
language names will be changed to the English name of the language in
many cases, but the order of languages in the file as well. The first
run of `updateTemplates.py` after that will then add the languages as
new translatable strings.

Patch by: @Dunedan
Accepted by: @Itms
Differential Revision: https://code.wildfiregames.com/D5300
This was SVN commit r28158.
2024-07-24 15:37:05 +00:00