Commit Graph

662 Commits (9d04c1b2b8ae2fee1e07902dba1b50189a703f8c)

Author SHA1 Message Date
psi29a c15710c35b Merge branch 'settings_values_index' into 'master'
Use typed settings storage for settings window (#6876)

See merge request OpenMW/openmw!2997
2 years ago
florent.teppe 43e247d458 fixes tests
fix linux build + clang-tidy
2 years ago
Evil Eye 3cf0977c0b Remove dialogue related instances of getRefIdString 2 years ago
elsid 258ae9d98e
Add settings index to provide lookup by category and name 2 years ago
elsid 0601d7213e
Remove ESM::RefId::sEmpty
This variable is only required to return empty RefId as const reference. There
is no point in doing so for a type cheap to copy.
2 years ago
Petr Mikheev 61578ca39b Add function LuaUtil::cast 2 years ago
psi29a 406eb1f9cc Merge branch 'replace_boost' into 'master'
replace boost where not needed

See merge request OpenMW/openmw!2962
2 years ago
psi29a 71aaa56ae3 replace boost where not needed 2 years ago
elsid 499d086cc1
Add tests for Settings::Values 2 years ago
elsid 1fbf50fb13
Use PROJECT_SOURCE_DIR in tests 2 years ago
florent.teppe fc3d113d29 fix tests 2 years ago
florent.teppe 3bbf60373a Keep things coherent between references and and cell table 2 years ago
elsid 7db14b3392
Add more tests for printing RefId and clarify some constants 2 years ago
elsid c97df7d770
Check FormIdRefId value in constructor 2 years ago
Petr Mikheev f09a689a4f Merge ESM::RefNum and ESM4::FormId 2 years ago
psi29a edfc6b78c8 Merge branch 'fix_esm3_exterior_cell_ref_id' into 'master'
Use lexicographical comparison in ESM3ExteriorCellRefId::operator< (#7316)

Closes #7316

See merge request OpenMW/openmw!2909
2 years ago
elsid bd10becb65
Use lexicographical comparison in ESM3ExteriorCellRefId::operator< 2 years ago
elsid aa77e727b8
Fix build with clang and libc++
libc++ does not have such function:

apps/openmw_test_suite/esm3/testesmwriter.cpp:73:30: error: no member named 'view' in 'std::ostringstream'
            EXPECT_EQ(stream.view().size(), size);
                      ~~~~~~ ^
2 years ago
elsid 794050df63
Fix and add tests for ESM3ExteriorCellRefId serialization and text representation 2 years ago
elsid 5b14ff4470
Add tests to verify RefId size written to ESM file 2 years ago
elsid fd9f652f43
Add CurrentContentFormatVersion to Esm3SaveLoadRecordTest parameters 2 years ago
elsid e3944f741e
Test save/load for all ESM::CellRef fields 2 years ago
florent.teppe 0d17e20490 Implements serialize/deserialize
fixes test compilation.
2 years ago
florent.teppe 21bd28542a Applies review advice
2d coord hash moved to hash.hpp file
format version adds suffix to be more coherent
don't use ESM::RefId::sEmpty
RefId equality with string_view, conversion to refId unecessary
action teleport remove test that mCellId is empty
removes some const references, when copy is enough
invalid refid => empty refid
removes useless change
2 years ago
florent.teppe d782d37ee2 Make sure Vec2iRefId is trivially copyable on GCC 11.3
std::pair<int, int> isn't trivially copyable on some compilers
so a specific struct is defined, it's an int pair, but it should be recognised by GCC 11.3 as trivially copyable

Vec2iRefId => ESM3ExteriorCellRefId

more explcit name and use mX,mY instead of pair
renamed files and enum
2 years ago
florent.teppe c2182c2fcc Get Rid of ESM::CellId almost everywhere
it was a competing concept from using RefIds for cell.
There is almost no point to it now, except to load older data.
2 years ago
florent.teppe fb6701ac1a ESM::CellId is no longer stored on saves. 2 years ago
florent.teppe 6c6dbccd0a fix crash on reset
fix tests
2 years ago
florent.teppe 9f597ecfea No more Cellid used by ESM4 cells
and that also means it is no longer used by MWWorld::Cell
fixes tests
2 years ago
florent.teppe 36502eaf75 ESM3 Cells have an Id.
Store<ESM::Cell> is updated to use it.
2 years ago
psi29a ee970db9e0 Merge branch 'player_cell_id_test' into 'master'
Test more ESM::Player records

See merge request OpenMW/openmw!2888
2 years ago
psi29a 0a791528bc Merge branch 'fix_index_ref_id_hash' into 'master'
Shift record type value for IndexRefId hash

See merge request OpenMW/openmw!2885
2 years ago
elsid 9162eaa019
Test more ESM::Player records 2 years ago
elsid 171a25645a
Make sure there are tests for all RefId types 2 years ago
elsid 258aec223a
Shift record type value for IndexRefId hash 2 years ago
elsid f8cc929f9a
Use approximate equality for btBvhTriangleMeshShape triangles 2 years ago
elsid 452d1e7e49
Store original string id for Dialogue records 2 years ago
elsid d6c8c54dc5
Generate test cases for all ESM3 format versions since MaxStringRefIdFormatVersion 2 years ago
elsid 90ed24f4c9
Split type traits for ESM4, ESM3 and unite common 2 years ago
elsid b7fdca0fe6
Use serialized ESM::RefId for Lua records 2 years ago
elsid cd4027ffd6
Do not use ESM::RefId::getRefIdString for spell id 2 years ago
Andrei Kortunov 302c331559 Add field initialization 2 years ago
psi29a db1b260323 Merge branch 'gmst_l10n' into 'master'
Support links to GMSTs in l10n files; extract Morrowind-specific l10n files to a separate directory

See merge request OpenMW/openmw!2822
2 years ago
elsid d1e8e56619
Make QuickKey type a fixed size enum class 2 years ago
elsid 2135eba103
Fix loading ESM3 QuickKeys 2 years ago
elsid e6cf516e12
Support index RefId as pair of record type and std::uint32_t 2 years ago
elsid 86293af084
Support generated RefId as std::uint64_t 2 years ago
elsid 0992624c8b
Support reading and writing typed ESM::RefId to ESM 2 years ago
elsid 069d4255b9
Make ESM::RefId to be fixed size cheap to copy
Use std::variant. Store refId strings in unordered_set and use pointer to an
item there. Inserts to unordered_set do not invalidate pointers to values so the
pointer is always valid. Elements are not removed. Assume there is finite number
of string refIds.
2 years ago
elsid e032214fcb
Use common info ordering implementation for engine and editor 2 years ago
psi29a 6d8f3c7bce Merge branch 'cs_unit_tests' into 'master'
Introduce unit tests for editor

See merge request OpenMW/openmw!2821
2 years ago
elsid 55ebd97949
Remove misleading part of the function name 2 years ago
Petr Mikheev 58fdd687a8 Support links to GMST in l10n files 2 years ago
elsid 6f6e452dfa
Add executable to run CS tests 2 years ago
psi29a efebb8efd8 Merge branch 'cmake_fixes' into 'master'
Formatting and coverage related CMake files fixes

See merge request OpenMW/openmw!2811
2 years ago
elsid 9c780efe50
Add ESMStore tests for loading dialogue and info records 2 years ago
elsid 1857d8a68c
Use target_compile_options to add --coverage 2 years ago
Alexei Dobrohotov 562461a659 Unify collision shape transformations 2 years ago
Alexei Dobrohotov 2277bdc1ae Improve btTriangleMesh abuse (bug #6027, part 2) 2 years ago
Evil Eye 724c6ec425 Match unit test to Morrowind.exe behaviour 2 years ago
Petr Mikheev e70ab80b90 Ignore duplicated preferred l10n locales 2 years ago
elsid cd6a5b5a0e
Support asymmetric comparison between ESM::RefId and std::string_view 2 years ago
elsid 6f329f3d40
Add tests for ESM::RefId 2 years ago
elsid eb17f0ba06
Use ESM::RefId as key in TestInterpreterContext::mMembers 2 years ago
elsid dfcea389be
Add helper functions for string comparison to RefId 2 years ago
psi29a 340a2aa826 Merge branch 'ref_id_cmp_string_view' into 'master'
Support RefId comparison with std::string_view

See merge request OpenMW/openmw!2784
2 years ago
elsid 2fcb94064d
Support RefId comparison with std::string_view 2 years ago
Alexei Kotov 7fd9b27b54 Don't combine static node collision geometry (bug #6027) 2 years ago
Petr Mikheev b0a6e4e510 [Lua] Add memory usage test 2 years ago
Cody Glassman ac4787aeec shade refactor 2 years ago
psi29a 0f331a4fc5 Merge branch 'lua_callback' into 'master'
Fix potential memory leak in LuaUtil::Callback

See merge request OpenMW/openmw!2733
2 years ago
elsid b5ec584be2
Replace ESM::RefId::sEmpty by default constructed RefId where possible
Static const is only required to provide a reference or a pointer when it is not
possible with default constructed temporary.
2 years ago
elsid 28f7a89530
Reuse dtNavMeshQuery
To avoid redundant allocations.
2 years ago
Petr Mikheev eceeb15ee5 Fix bug in lua_ui/content.lua: getmetatable(ui.content{}) shouldn't return a global mutable table 2 years ago
Petr Mikheev 65885d994f Don't expose LuaUtil::Callback to lua 2 years ago
Petr Mikheev 71ba7b88e2 Move asyncpackage from apps/openmw/mwlua to components/lua 2 years ago
elsid 80e6d6cbe3
Support variable size strings in ESM3 2 years ago
elsid beb017e699
Do not truncate too long strings on writing ESM 2 years ago
elsid 12d36fb1d7
Add missing include 2 years ago
elsid 1e9e7b7607
Add tests to save and load some ESM3 records 2 years ago
elsid 2e64155c0f
Use signed type for left record and files size in ESM3 reader context
Otherwise reading some of the records like ESM::CellRef without a subrecord
after could lead to underflow of ESM_Context::leftRec which makes
ESM::ESMReader::hasMoreSubs to return true and load hangs for a while trying to
read the same subrecord many times.

Fix ESM::Variant tests since it's now required to have a record for any ESM
data. Add 16 (size of record header) to all expected data sizes.
2 years ago
elsid 080700f8fe
Name all custom ESM format versions and add tests 2 years ago
florent.teppe dc961e3189 Adds the light into the scene.
Common struct for ESM3 and ESM4 light
2 years ago
psi29a 4032c447e9 Merge branch 'load-ESM4-Cell' into 'master'
Can load and coc into an interrior oblivion cell

See merge request OpenMW/openmw!2647
2 years ago
psi29a 68b3b90255 Merge branch 'ui_content_leak' into 'master'
Move implementation of UI Content to Lua (#7155)

See merge request OpenMW/openmw!2661
2 years ago
uramer e96681151c Get rid of the LuaUI::Content namespace 2 years ago
uramer d24c506b0e Move metatable protection asserts to tests 2 years ago
uramer bbbef96087 Switch to loadInternalLib 2 years ago
uramer c17eedd348 Documentation and API fixes (part of !2529) 2 years ago
uramer 259f104311 Clean up 2 years ago
uramer 3618b3f409 Fix Content::View::remove 2 years ago
uramer fc1430af95 Move implementation of UI Content to Lua 2 years ago
florent.teppe 562e129bd0 encapsulations of esm3 cell and esm4 cells. 2 years ago
florent.teppe a4137e941c std::string_view can be used in map and unordered map
This avoids some unecessary dynamic allocations.
Also applies some review advice.
2 years ago
florent.teppe 150e2ba885 Revert "Use ESM::RefId for worldspace in detournavigator"
This reverts commit b4ab153418.

# Conflicts:
#	apps/navmeshtool/worldspacedata.cpp
2 years ago
elsid cf1d8544e3
Check agent bounds on adding agent to navigator
Do not add agent bounds which are not supported by recastnavigation with given
settings and log such events.

To avoid reaching navmesh tile generation to find out it can't be generated for
such agent bounds.
2 years ago
elsid 1cbe295030
Extend navigator tests for update with big object
Check for the number of generated recast mesh tiles and navmesh tiles.
2 years ago
psi29a dc3ec1a0a0 Merge branch 'mwscript' into 'master'
Multiple mwscript optimizations and some refactoring

See merge request OpenMW/openmw!2600
2 years ago
elsid 44429f0393
Limit NavMeshManager update range by player tile and max tiles
Object AABB may be much larger than area currently covered by navmesh. In this
case all tiles beyond covered range should be ignored. Attempt to iterate over
them will not result in any new tile updates but can take quite a while. At
maximum this can be pow(INT_MAX - INT_MIN, 2) iterations.

Use arbitrary time limit to check for update call to finish in the test.
2 years ago
elsid b88f0d2dbd
Replace mwscript program serialization into a vector with simple struct
Mostly to avoid string literal lookup by index with iteration over all preciding
literals and calling strlen. This is very inefficient. In genral this makes code
much more straightforward but also makes it portable since now int and float of
different sizes are properly supported.
2 years ago
psi29a 83718878b2 Merge branch 'Load_ESM4' into 'master'
Loading ESM4 data and storing them in the ESMStore

See merge request OpenMW/openmw!2557
2 years ago
elsid 2bbed8cc06
Fix gcc warning: array subscript 5 is outside array bounds of ‘const char [5]’
In function ‘bool ESM::operator==(const FixedString<capacity>&, const T* const&) [with long unsigned int capacity = 5; T = char; <template-parameter-1-3> = void]’,
    inlined from ‘testing::AssertionResult testing::internal::CmpHelperEQ(const char*, const char*, const T1&, const T2&) [with T1 = ESM::FixedString<5>; T2 = const char*]’ at /home/elsid/dev/googletest/build/gcc/release/install/include/gtest/gtest.h:1358:11,
    inlined from ‘static testing::AssertionResult testing::internal::EqHelper::Compare(const char*, const char*, const T1&, const T2&) [with T1 = ESM::FixedString<5>; T2 = const char*; typename std::enable_if<((! std::is_integral<_Tp>::value) || (! std::is_pointer<_Dp>::value))>::type* <anonymous> = 0]’ at /home/elsid/dev/googletest/build/gcc/release/install/include/gtest/gtest.h:1377:64,
    inlined from ‘virtual void {anonymous}::EsmFixedString_equality_operator_for_not_convertible_to_uint32_with_const_char_pointer_Test::TestBody()’ at apps/openmw_test_suite/esm/test_fixed_string.cpp:165:9:
components/esm/esmcommon.hpp:134:19: warning: array subscript 5 is outside array bounds of ‘const char [5]’ [-Warray-bounds]
  134 |         return rhs[capacity] == '\0';
      |                ~~~^
apps/openmw_test_suite/esm/test_fixed_string.cpp: In member function ‘virtual void {anonymous}::EsmFixedString_equality_operator_for_not_convertible_to_uint32_with_const_char_pointer_Test::TestBody()’:
apps/openmw_test_suite/esm/test_fixed_string.cpp:164:20: note: at offset 5 into object ‘other’ of size 5
  164 |         const char other[5] = { 'a', 'b', 'c', 'd', '\0' };
      |                    ^~~~~
2 years ago
elsid c80ba92ab7
Add more tests for ESM::FixedString 2 years ago
elsid 7c60905266
Put ESM::FixedString tests into unnamed namespace 2 years ago
florent.teppe 400d51c099 Fix compile MSVC 2 years ago
florent.teppe b88eee08c2 Store display's the ESM4's RecnameInt when not found 2 years ago
florent.teppe 631fa26872 Applies review advice. 2 years ago
florent.teppe e80dbd7c95 Moved the test to test_store.cpp where it belongs 2 years ago
elsid b4ab153418
Use ESM::RefId for worldspace in detournavigator 2 years ago
psi29a 80e2cd79ec Merge branch 'boat_closer_to_todd' into 'master'
Ignore special characters preceding script commands

Closes #6807

See merge request OpenMW/openmw!2555
2 years ago
psi29a 7827d3ae8f Merge branch 'fix_hour_modulo' into 'master'
Fix hour modulo expression (#7121)

Closes #7121

See merge request OpenMW/openmw!2556
2 years ago
elsid 25ead80d8b
Fix hour modulo expression
Round result of std::fmod(hours, 24) to the nearest float below 24 on double to
float conversion when it is not. Add special type and conversion function along
with tests to be used in all places where such conversion happens.

To avoid producing hours equal to 24 due to double to float precision loss.
2 years ago
florent.teppe 30a020883e Avoids unecessary copies
Fixed issue with lowerCase

Oups fixed compialtion on openMW_test_suite
2 years ago
florent.teppe b61d5d8123 Some RefId == ESM::RefId::StringRefId('constString') still existed 2 years ago
florent.teppe 65cdd489fb create a specific esm reader function for RefID to avoid allocation for string and then again for RefId
Fixed some types

removed useless header

applied clang format

fixed compile tests

fixed clang tidy, and closer to logic before this MR

Removed hardcoded refids

unless there is a returned value we don't use static RefIds
can use == between RefId and hardcoded string

Fix clang format

Fixed a few instances where std::string was used, when only const std::string& was needed

removed unused variable
2 years ago
florent.teppe 874ff88288 In the interpretter, the id is no longer passed by vallue, but as a const reference instead.
In getMembersLocal(, a reference to a reference wrapper is used, because the id can change, bu all we need to do is change a pointer.No need to change the value
2 years ago
fteppe 20da0892ef openMW_test_suite compiles and runs
Slowly moving through the open-cs errors

Good progress in openCS

Very good progress on openCS

Getting closer with openCS

OpenCS compiles and runs! Didn't have time to test it all though

ix openMW

everything compiles on windows??

Fix gcc

Fix Clang
2 years ago
Evil Eye b19ad079c2 Ignore special characters preceding script commands 2 years ago
elsid 0b399a9d1a
Fix detournavigator tests
d40c09c18c changed the logic in parallel with
15e8f0b53c making this check invalid.
2 years ago
elsid 15e8f0b53c
Check input and report errors via RecastContext
Recast functions have preconditions for arguments they don't validate. This may
produce garbage data which may lead to crash. Check arguments and log when they
are invalid.

Do not throw exceptions when these function calls fail, capture Recast reported
errors via RecastContext inherited from rcContext and log them.
2 years ago
Petr Mikheev 55db95d4cf Update Lua profiler; add ability to run OpenMW with old LuaJit that doesn't allow custom allocator (Lua profiler will be disabled in this case) 2 years ago
Petr Mikheev 6fa65e4729 Track memory and CPU usage per script in LuaUtil::LuaState 2 years ago
uramer b13a4f6b01 Lua coroutine crash tests 2 years ago
psi29a e16c451d08 Merge branch 'l10n' into 'master'
Separate l10n manager from lua

See merge request OpenMW/openmw!2451
2 years ago
elsid 843753da14
Remove unused includes 2 years ago
Petr Mikheev 3697c9266b Separate l10n manager from lua 2 years ago
elsid 063fff7fa4
Fix and prevent -Wextra-semi warning 2 years ago
elsid d2e1f18924
Add tests for NifOsg::Loader 2 years ago
elsid 4b760e8846
Do not add redundant nullptr parent
There are no failed tests after this, so this is not really needed.
2 years ago
elsid 83bb2195b0
Move init functions for Nif nodes to a separate file
This will be used in other tests.
2 years ago
elsid f2fb3d6de8
Separate NIFFileReader from NIFFile
NIFFile might not always be created from a file or stream containing NIF data.
Basically there are 2 different responsibilities for this class:
1. Read NIF file
2. Provide input for nifosg and bulletnifloader.

Remove no longer needed NIFFileMock since the state of NIFFfile can be
initialized independently from reading NIF file.
2 years ago
clang-format-bot ddb0522bbf
Apply clang-format to code base 2 years ago
Project579 b82176410b Use std::filesystem for unit tests temporary files path. 2 years ago
elsid 5b1d6917ef
Add comments to prevent line splitting on formatting 2 years ago
elsid 6ae15f08e0
Avoid chained operator() calls to prevent formatting issues 2 years ago
Project579 5456ef1d50 Add new functions and overloads to support std::u8string and std::filesystem::path. 2 years ago
Project579 928b131564 Implement std::filesystem::path conversion tests. 2 years ago
Project579 a13709c510 Replace implicit convertions from std::filesystem::path to std::string with correctly converting functions. 2 years ago
Project579 864112b5db Fixed Windows build when using MSVC 14.26 and MacOS build. 2 years ago
Project579 e5c417c968 Make sure all paths are passed as std::filesystem::path instead of std::string where possible. 2 years ago
Project579 cf0af87c80 Revert changes from "4c8e1ccf - Fixed windows build and updated tests to reflect changes of escape character from "&" to "\"" in "apps/openmw_test_suite/openmw/options.cpp" 2 years ago
Project579 cd229a965b Fixed windows build and updated tests to reflect changes of escape character from "&" to "\" 2 years ago
Project579 4bb07282c9 Replace all remaining occurrences of boost::filesystem with std::filesystem. 2 years ago
elsid 22ee592dd3
Lock TileCachedRecastMeshManager once per changing a cell
To save time on locking mutex and prevent AsyncNavMeshUpdater to use RecastMesh
for a tile in the middle of objects loading.
2 years ago
elsid d15e1dca84
Use R-tree for objects to be used for navmesh generation
Instead of storing a set of objects per tile.
2 years ago
psi29a fcd9b78cac Merge branch 'REFACTOR_STORE' into 'master'
Refactoring the ESM store to better support many new ESM4 types

See merge request OpenMW/openmw!2161
2 years ago
elsid 180d609e0d
Check "wait until min distance to player" only for requiredTilesPresent wait condition
allJobsDone should wait even if "wait until min distance to player" is 0.
2 years ago
elsid 204ab6fea3
Use version instead of generation and revision for recast mesh 2 years ago
florent.teppe 0dd529ab1d With the records include removed from store.hpp, need to include the relevant files accross the codebase.Lots of touched files, but very little done 2 years ago
elsid e2d566b89d
Store changed tiles in TileCachedRecastMeshManager 2 years ago
Evil Eye 02bbb0be45 Improve format workaround and add unit tests 2 years ago
elsid 948e2f5db9
Do not use collision shapes with visual only collision to generate navmesh
These collision shapes are not used for actors movement physics simulation.
2 years ago
Evil Eye 0df45a90b3 Use string_view in the remaining Class methods and push string_views closer to the MyGUI boundary 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 e1bed86d7e
Do single navigator update per frame
Primarily for crossing cell border case. Each Navigator::update call has a cost.
Doing it multiple times per frame increased frame duration on cell loading.

Call Navigator::wait only when cell has changed but do not use
Scene::hasCellChanged because it doesn't always indicates it.
2 years ago
Evil Eye 51938f9ef7 Use string_view in Interpreter::Context 2 years ago
psi29a bb9884c024 Merge branch 'split_stringops' into 'master'
Split components/misc/stringops.hpp into multiple headers

See merge request OpenMW/openmw!2233
2 years ago
cody glassman ac4b29be08 cleanup default shaders and remove confusing main shader 2 years ago
psi29a 00f8c9760a Merge branch 'fixed_string_tests' into 'master'
Replace deprecated std::is_pod

See merge request OpenMW/openmw!2239
2 years ago
elsid 8e4f6fc4e4
Use FetchContent to get googletest 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
elsid da0a1ac9ba
Do compile time checks in compile time instead of tests 2 years ago
elsid c42c0dcbc9
Replace deprecated std::is_pod
apps/openmw_test_suite/esm/test_fixed_string.cpp:99:23: warning: ‘template<class _Tp> struct std::is_pod’ is deprecated: use is_standard_layout && is_trivial instead [-Wdeprecated-declarations]
   99 |      ASSERT_TRUE(std::is_pod<ESM::NAME>::value);
      |                       ^~~~~~
2 years ago
Andrei Kortunov 888f4d2ac1 Add a post processing API to work with fog 2 years ago
Andrei Kortunov c36c28e8f9 Move NIF implementation to cpp files 2 years ago
elsid 9398e97600
Avoid manual memory management for VFS archives 3 years ago
Petr Mikheev 8b8c304953 Treat empty `RootCollisionNode` in NIF as NCC flag and generate CameraOnly collision shape 3 years ago
elsid bef15edf0b
Remove redundant ostream, istream, iostream and sstream includes
* Replace by std::to_string and operator+ where possible.
* Move the code requiring to include <sstream> from .hpp to .cpp files.
3 years ago
elsid e074ebde96
Fix C4389 msvc warning
'==': signed/unsigned mismatch
3 years ago
elsid 2eae3227ba
Fix C4305 msvc warning
'argument': truncation from 'double' to 'float'
3 years ago
elsid 8544aa481c
Fix C4459 msvc warning
declaration of 'navMeshVersion' hides global declaration
3 years ago
elsid 7e6c13630a Use target_precompile_headers for the most expensive headers 3 years ago
elsid 10fbf170a2
Reduce number of includes for boost/program_options 3 years ago
Alexei Kotov e673f9fa76 Clean up NIF flags 3 years ago
elsid 1a12c453d6
Support different agent collision shape type for pathfinding
Actors may have different collision shapes. Currently there are axis-aligned
bounding boxes and rotating bounding boxes. With AABB it's required to use
bounding cylinder for navmesh agent to avoid providing paths where actor can't
pass. But for rotating bounding boxes cylinder with diameter equal to the front
face width should be used to not reduce of available paths. For example rats
have rotating bounding box as collision shape because of the difference between
front and side faces width.

* Add agent bounds to navmesh tile db cache key. This is required to distinguish
  tiles for agents with different bounds.
* Increase navmesh version because navmesh tile db cache key and data has changed.
* Move navmesh version to the code to avoid misconfiguration by users.
* Fix all places where wrong half extents were used for pathfinding.
3 years ago
Petr Mikheev 3bf18c601c Better fog 3 years ago
psi29a 9c1970dce4 Merge branch 'lua_esm' into 'master'
Advanced Lua scripts configuration in omwaddon

See merge request OpenMW/openmw!1947
3 years ago
psi29a c7449dc272 Merge branch 'bullet_includes' into 'master'
Clean up bullet includes

See merge request OpenMW/openmw!1974
3 years ago
Petr Mikheev a70d5831c5 Lua scripts configuration in omwaddon 3 years ago
jvoisin 72a6d1f69f Clean up bullet includes 3 years ago
elsid 3affe9913f
Limit the number of simultaneously open not actively used content files
Use LRU cache for ESMReaders. When cache capacity is reached close least
recently used ESMReader. Remember the file name if a reader was open. Once the
reader requested again open the file if there is stored name for it. Put
released ESMReader to the back of the free items list. Close ESMReader's from
the front of the free items list.

Cached item can be used only by one client at the same time. If the same item is
requested twice exception is thrown. This should never happen in practice. If
this happens need to fix the client logic.

It's allowed to go over the capacity limit when requesting different readers.
Ideally this should never happen but there will be system error anyway
signalizing about too many open files. Need to fix client logic in this case.

All places that were using a vector of ESMReaders now using the cache. Cache is
local for each use case and there is no need for a thread safety.
3 years ago
Petr Mikheev 709d186b8d Put tests output files to a separate dir 3 years ago
jvoisin cb226e00f9 Remove some more of boost:: 3 years ago
psi29a 499e688289 Merge branch 'fix_navigator_tests' into 'master'
Increase precision error for navigator tests (#6770)

Closes #6770

See merge request OpenMW/openmw!1909
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
elsid 87073e26f2
Increase precision error for navigator tests 3 years ago
cody glassman 6093cb5f2c postprocessing lua api extensions 3 years ago
psi29a f17d7fc00b Merge branch 'string_view' into 'master'
Make getStringLiteral return a string_view

See merge request OpenMW/openmw!1896
3 years ago
Evil Eye ac78b537d2 Address feedback 3 years ago
elsid 5269ba6f3c Fix warning: -Wunused-lambda-capture 3 years ago
Evil Eye c6ca0e78c9 Make getStringLiteral return a string_view 3 years ago
psi29a d3f331793e Merge branch 'sol' into 'master'
Update sol. Replace combined sol.hpp with loose files.

See merge request OpenMW/openmw!1851
3 years ago
ζeh Matt 18f16eac4c
Refactor DetourNavigator to pass prng along, use world prng for AiWander 3 years ago
psi29a f092d8da9a Merge branch 'post_malone' into 'master'
Post Processing

See merge request OpenMW/openmw!1124
3 years ago
Petr Mikheev d16fa553c8 Fix LuaUtil::Callback 3 years ago
cody glassman 04843fed6d moddable post-processing pipeline 3 years ago
elsid a75c7c49f0
Disable writes to navmeshdb on database is locked error
Simultaneously writing to sqlite3 database is not possible. Process exclusively
locks the database for this. Another process will fail to perform any request
when database is locked. Alternatively it can wait. Handling this situation
properly requires complexity that is not really needed. Users are not expected
to run multiple openmw processes simultaneously using the same navmeshdb.

Before this change running multiple openmw processes using the same navmeshdb
can lead to a crash when first transaction fails to start because there is
exception thrown and not catched.

Remove use of explicit transactions from DbWorker. Handling all possible
transaction states due to different errors brings unnecessary complexity.
Initially they were introduced to increase time between flushes to disk. This
makes sense for navmeshtool because of massive number of writes but for the
engine this is not an issue.
3 years ago
Petr Mikheev c7ab67c2c1 Allow relative paths in openmw.cfg; support --replace=config. 3 years ago
madsbuvi dc3045c970 mono-only version of the shader linking system introduced in the stereo MR 3 years ago