Commit Graph

269 Commits (492e336c0c68a8f29679488ac7cee49a598afa0b)

Author SHA1 Message Date
florent.teppe 65bd007baa simplified some big switch/case 2 years ago
ζeh Matt aa65df8872
Rename meta.hpp to tuplemeta.hpp 2 years ago
ζeh Matt c856095562
Use compile time generated indices for tuples types 2 years ago
ζeh Matt 8f7703d5c8
Rename HasMember to TupleHasType and move code into misc/meta.hpp 2 years ago
jvoisin 9f62f0c292 Reserve the output buffer in lowerCaseUtf8
Since lowercasing an utf8 string shouldn't change its size very much,
it does make sense to reserve the output buffer, to reduce
memory allocations.
2 years ago
Cédric Mocquillon 83ee25711e Use the pattern according to the esm version 2 years ago
Cédric Mocquillon 6a3d27ce82 Add a dictionary to retrieve the LOD mesh name of a mesh cache 2 years ago
Evil Eye 02bbb0be45 Improve format workaround and add unit tests 2 years ago
Evil Eye 4e2e5ad002 Revert format change and ensure string_view args are null-terminated 2 years ago
Evil Eye 1d21330fcc Return string_view from getGameSettingString 2 years ago
psi29a 1f5277349c Merge branch 'span' into 'master'
Replace Misc::Span by std::span

See merge request OpenMW/openmw!2324
2 years ago
psi29a 9c24d6b390 Merge branch 'ci_starts_with' into 'master'
Replace ciCompareLen with ciStartsWith where possible

See merge request OpenMW/openmw!2325
2 years ago
Evil Eye 150d1840d6 Use more string_view and const string& 2 years ago
elsid 5dc612aa54
Replace ciCompareLen with ciStartsWith where possible
`ciCompareLen(a, b, b.size()) == 0` expression is an equivalent of checking for
equality of `a` prefix with size `b.size()` with `b`.

`ciCompareLen(a, b, a.size()) == 0` is also the same thing but `a` is a prefix
`b` should start with.
2 years ago
elsid e4a254deb7
Replace Misc::Span by std::span 2 years ago
psi29a bf40f9b287 Merge branch 'name_view' into 'master'
Make Class::getName return string_view

See merge request OpenMW/openmw!2289
2 years ago
Evil Eye 4ff12d8945 Make Class::getName return string_view 2 years ago
elsid cc8c7002ea
Cleanup components includes 2 years ago
Matt e6868fd211 Allow constexpr hashing 2 years ago
Evil Eye de8d9b8db3 Use Fowler-Noll-Vo hash instead of std::hash 2 years ago
Evil Eye de51525c76 Allow string_view lookups in MWWorld::Store and get some use out of that 2 years ago
elsid f99ed6f1db
Split components/misc/stringops.hpp into multiple headers
Replace all ciEqual overloads with one having std::string_view as argument.
2 years ago
Andrei Kortunov de58c9dff3 Get rid of obsolete osg::Geode where it is possible 2 years ago
Andrei Kortunov 6f6b5ba04b Some refactoring 3 years ago
elsid 22ed6d5c1e
Use unsigned to define number of threads 3 years ago
Andrei Kortunov fe785ea788 Don't cast away const when we can avoid it 3 years ago
glassmancody.info b09411d396 allow soft particles on meshes and add extra data extensions 3 years ago
elsid 6abb963bd9
Use string_view for StringUtils functions 3 years ago
uramer 1fb136a417 Correct icon and mesh paths in Lua records 3 years ago
psi29a a737b05d84 Merge branch 'faster_toLower' into 'master'
Improve the speed of toLower

See merge request OpenMW/openmw!1889
3 years ago
jvoisin 998f1c960e Improve the speed of toLower
This significantly improves the speed of my fuzzer,
by something like 15%.
3 years ago
Evil Eye e79f803402 Change includes 3 years ago
Evil Eye c6ca0e78c9 Make getStringLiteral return a string_view 3 years ago
cody glassman 0cb63ca4e6 experimental point light bindings 3 years ago
elsid 79676aee15
Make Environment a storage of referencing pointers instead of owned
Engine controls lifetime of managers therefore it should own them. Environment
is only access provider.

This allows to avoid redundant virtual calls and also some functions from
managers base classes can be removed if they are used only by Engine.
3 years ago
elsid 0dcb1f5aac
Fix build on Windows
Use wrapper header over Windows.h to undefine far and near in a single place.
3 years ago
elsid 39da3bfef8
Ignore player when checking whether AiTravel destination is occupied by other actor 3 years ago
elsid 2d5ccc804b
Exchange binary messages between navmeshtool and launcher 3 years ago
ζeh Matt d7de17a1ac
Add a comment explaining the pick of the prng 3 years ago
ζeh Matt 5df76f5051
Remove unnecessary debug output 3 years ago
ζeh Matt f8f3bb2421
Use std::minstd_rand and split serialization from save/load 3 years ago
ζeh Matt 151770ccf1
Separate global vs world rng functions and use custom prng 3 years ago
ζeh Matt 08fae7be6e
Pass the prng from world where appropriate 3 years ago
ζeh Matt d83a381f79
Refactor and rename some things around Misc::Rng 3 years ago
Bret Curtis 6601274992 constify weakcache overloaded operators 3 years ago
elsid 42d6032c8b
Support compilation with c++20 3 years ago
elsid 1b2954f2db
Remove unused z coordinate 3 years ago
elsid b0f192d878
Fix warning: maybe-uninitialized
../../components/misc/color.cpp: In static member function 'static Misc::Color Misc::Color::fromHex(std::string_view)':
../../components/misc/color.cpp:36:24: error: 'v' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   36 |             rgb[i] = v / 255.0f;
      |                      ~~^~~~~~~~
3 years ago
psi29a 7bab714825 Merge branch 'fix_circling_fargoth' into 'master'
Remove unnecessary loops from path (#6510)

Closes #6510

See merge request OpenMW/openmw!1584
3 years ago
elsid 7ec7c57879
Remove unnecessary loops from path
This prevents actors going back when a new shortest path includes a point
behind them where they were right before. Such situation can happen when path
includes off mesh connection. Resulting cost of such path can be lower than
the real one because off mesh connections are straight lines and walking
surface usually is not a plane but a surface.

Skip to path point where distance from current position to the line between
previous and this point is less than point tolerance. Which means actor is
standing very close to the edge between those points. Additionally check by
navmesh raycasting to make sure there is actually a valid path.
3 years ago
Bret Curtis 74e7cfc023 remove unused includes: part1
remove unused imports: part2

revert one tidy we will keep for c++20
3 years ago
Bret Curtis d1fb854521 move most of the files from esm to esm3, keep common code in esm; this is make space for a future with esm4
esm typo

esm typo
3 years ago
elsid a2002bc983
Support frequency of ProgressReporter calls lower than interval 3 years ago
uramer d1d8f058ac Lua bindings for Colours 3 years ago
elsid aaf6c82e33
Do not write shapes to navmeshdb when writing is disabled 3 years ago
elsid 5a6b39f8e0
Store mesh source data in recast mesh 3 years ago
psi29a adc3bab51e Merge branch 'Embedded-error-marker' into 'master'
Embed marker error

See merge request OpenMW/openmw!1383
3 years ago
Cédric Mocquillon 40656b3135 Embed error marker in osgt format inside a string defined in misc/errorMarker.hpp.
Use the embed error marker we fail to load a mesh.
3 years ago
Evil Eye 6daefe3ddc Cast to the unsigned char expected by cctype functions 3 years ago
Evil Eye f23bd51175 Don't check bounds when the type is unambiguously a char 3 years ago
Evil Eye c6470f33d3 Use string_view 3 years ago
Evil Eye 751e8cf76b Do a bounds check before calling functions defined in cctype 3 years ago
Evil Eye 8f48a1f030 Handle non-ASCII characters while saving without triggering an assertion 3 years ago
elsid 08a25c2b1f
Support seed type different from std::size_t for hashCombine 3 years ago
psi29a 41bd20e358 Merge branch 'bullet_shape_hash' into 'master'
Store BulletShape source file name and content hash

See merge request OpenMW/openmw!1379
3 years ago
elsid d7041613ef
Store BulletShape source file name and content hash 3 years ago
Cédric Mocquillon 512d64e514 Extract correctSoundPath method to avoid code duplication. Add unit test for the new method 3 years ago
elsid 3f80725ebe
Remove duplicated implementation of Misc::Convert::toOsg 3 years ago
Bo Svensson 1960e976e2
refactors stringops.hpp (#3192)
With this PR we refactor `StringUtils::replaceAll` to accept `string_view` as suggested in a code comment. In addition, while we are touching this rebuild happy file, we slim it down a bit by moving a few sparingly used functions elsewhere.
3 years ago
Bo Svensson 0371072631
removes lowerCaseInPlace (#3217)
This PR removes unneeded `lowerCaseInPlace` calls in in a hot path of `objectpaging.cpp` that are no longer necessary after PR #3197. In addition, I have been informed that these changes should by coincidence address a compiler specific compilation error we currently experience.
3 years ago
Petr Mikheev 33d71be81f Add LuaUtil::ScriptsConfiguration 3 years ago
Bo Svensson 7f9beac3a7
refactors a case insensitive map (#3184)
This PR aims to spark the retirement of a questionable pattern I have found all over our code base. I will illustrate how this pattern encourages code duplication, lacks type safety, requires documentation and can be prone to bugs.
```
std::map<std::string, Object> mMap; // Stored in all lowercase for a case-insensitive lookup

std::string lowerKey = Misc::StringUtils::lowerCase(key);
mMap.emplace(lowerKey, object);

std::string lowerKey = Misc::StringUtils::lowerCase(key);
mMap.find(lowerKey);

mMap.find(key); // Not found. Oops!
```
An alternative approach produces no such issues.
```
std::unordered_map<std::string, Object, Misc::StringUtils::CiHash, Misc::StringUtils::CiEqual> mMap;

mMap.emplace(key, object);

mMap.find(key);
```
Of course, such an alternative will work for a `map` as well, but an `unordered_map` is generally preferable over a `map` with these changes because we have moved `lowerCase` into the comparison operator. 

In this PR I have refactored `Animation::mNodeMap` accordingly. I have reviewed and adapted all direct and indirect usage of `Animation::mNodeMap` to ensure we do not change behaviour with this PR.
3 years ago
elsid e5413c0664
Add functions to compress/decompress vector of bytes 3 years ago
elsid bb26ba30b6
Add progress reporter type
To log/report progress of long duration operations using given time period.
3 years ago
psi29a 207a7245bc Merge branch 'navigator_settings' into 'master'
Initialize navigator max climb and max slope settings in makeSettingsFromSettingsManager

See merge request OpenMW/openmw!1283
3 years ago
elsid 405e814190
Move btCollisionObject creation for MWPhysics::Object into components 3 years ago
elsid 6986feb81b
Initialize navigator max climb and max slope settings in makeSettingsFromSettingsManager
To avoid having multiple places to initialize them when they will be required
by multiple binaries.
3 years ago
fredzio 21dbe314bf Use common function for sync and async case. Now both cases follow the
same flow, synchronous simulation is just a special case.
3 years ago
Cédric Mocquillon 6817282097 Move getFileExtension to common header and use instead of repeating same code 3 years ago
elsid 6b7434ca69
Pass std::string_view instead of const std::string&
* Starting with Actor::getBodyPartMesh and ending with
  Misc::StringUtils::ciEqual.
* Add tests for Misc::StringUtils::ciEqual.
3 years ago
elsid 3caf45807f
Use common implementation to filter hidden markers 3 years ago
jvoisin 9db7d0278a Sprinkle some const ref 4 years ago
Evil Eye 2be27da791 Merge branch 'const_refs' into 'master'
Add a ton of const refs

See merge request OpenMW/openmw!954
4 years ago
Evil Eye 9f7980ecd7 Merge branch 'refenreces' into 'master'
Sprinkle some references where it makes sense

See merge request OpenMW/openmw!952
4 years ago
jvoisin cf11870b1c Sprinkle some references where it makes sense 4 years ago
jvoisin 5840279f16 Use `default` instead of empty constructors/destructors
See https://pvs-studio.com/en/docs/warnings/v832/ for details
4 years ago
jvoisin 1123dc46ee Add a ton of const refs 4 years ago
jvoisin e51669c05d Don't assign a variable passed by value 4 years ago
elsid 1e2aae8095
Use stable sort+unique to collect RefIDs for ESMStore records counting
The idea is to avoid std::map lookup for each CellRef. Instead generate a
sequence of added and removed RefNums into a vector then order them by RefNum
using a stable sort that preserves relative order of elements with the same
RefNum. RefIDs are stored in a different vector to avoid std::string move ctor
calls when swapping elements while sorting. Reversed iteration over added and
removed RefNums for each unique RefNum is an equivalent to what map-based
algorithm produces. The main benefit from sorting a vector is a data locality
that means less cache misses for each access. Reduces ESMStore::countRecords
perf cycles by 25%.
4 years ago
psi29a fd89582e0c Merge branch 'navmesh_wait' into 'master'
Wait until navmesh is generated within given distance around player (#5500)

Closes #5500

See merge request OpenMW/openmw!819
4 years ago
elsid 626e032931
Do not store callback inside Misc::Barrier
The only wait method can be provided with it so pass it as a template
parameter there.
4 years ago
elsid f169f8e6f0
Wait until navmesh is generated for interior cells
Add special loading progress bar.

It should be fast enough to not keep loading screen for noticably long but
will provide better pathfinding for actors inside interior cells.
4 years ago
Andrei Kortunov f308dde254 Clean up MSVC warnings 4 years ago
fredzio 16b288f53c Re-add dropped struct keyword to fix build.
rtprio is both a struct and a function, so we need to be explicit.

../../../components/misc/thread.cpp:53:9: error: must use 'struct' tag
to refer to type 'rtprio' in this scope
rtprio prio;
^
struct
/usr/include/sys/rtprio.h:91:5: note: struct 'rtprio' is hidden by a
non-type declaration of 'rtprio' here
int     rtprio(int, pid_t, struct rtprio *);
^
1 error generated.
4 years ago
psi29a c686dd05d0 Merge branch 'thread_idle_priority' into 'master'
Set idle priority for navmesh generation thread

See merge request OpenMW/openmw!632
4 years ago
elsid ab8d1c02d4
Set idle priority for navmesh generation thread
Support Linux, Windows, FreeBSD.
4 years ago
glassmancody.info 582f7b52cf Merge remote-tracking branch 'upstream/master' into why_are_the_christmas_lights_still_up 4 years ago
glassmancody.info 9e80091aff clear up force shaders and make it less convoluted 4 years ago
Andrei Kortunov 124a33d8a3 Fix uninitialized variables 4 years ago
Max 2cd96e56d5 create constant and use constant in other parts of the code base 4 years ago