mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-30 02:45:32 +00:00
Add OpenMW commits up to 21 May 2021
# Conflicts: # CMakeLists.txt # apps/openmw/mwscript/interpretercontext.cpp # components/CMakeLists.txt
This commit is contained in:
commit
7a6dfc61ec
234 changed files with 1945 additions and 1268 deletions
|
@ -25,6 +25,7 @@ stages:
|
|||
- cmake --build . -- -j $(nproc)
|
||||
- cmake --install .
|
||||
- if [[ "${BUILD_TESTS_ONLY}" ]]; then ./openmw_test_suite; fi
|
||||
- if [[ "${BUILD_TESTS_ONLY}" ]]; then ./openmw_detournavigator_navmeshtilescache_benchmark; fi
|
||||
- ccache -s
|
||||
artifacts:
|
||||
paths:
|
||||
|
@ -169,6 +170,10 @@ variables: &cs-targets
|
|||
targets: "openmw-cs,bsatool,esmtool,niftest"
|
||||
package: "CS"
|
||||
|
||||
variables: &tests-targets
|
||||
targets: "openmw_test_suite,openmw_detournavigator_navmeshtilescache_benchmark"
|
||||
package: "Tests"
|
||||
|
||||
.Windows_Ninja_Base:
|
||||
tags:
|
||||
- windows
|
||||
|
@ -187,7 +192,7 @@ variables: &cs-targets
|
|||
- $time = (Get-Date -Format "HH:mm:ss")
|
||||
- echo ${time}
|
||||
- echo "started by ${GITLAB_USER_NAME}"
|
||||
- sh CI/before_script.msvc.sh -c $config -p Win64 -v 2019 -k -V -N
|
||||
- sh CI/before_script.msvc.sh -c $config -p Win64 -v 2019 -k -V -N -b -t
|
||||
- cd MSVC2019_64_Ninja
|
||||
- .\ActivateMSVC.ps1
|
||||
- cmake --build . --config $config --target ($targets.Split(','))
|
||||
|
@ -199,6 +204,7 @@ variables: &cs-targets
|
|||
Get-ChildItem -Recurse *.pdb | Remove-Item
|
||||
}
|
||||
- 7z a -tzip ..\..\OpenMW_MSVC2019_64_${package}_${config}_${CI_COMMIT_REF_NAME}.zip '*'
|
||||
- if ($executables) { foreach ($exe in $executables.Split(',')) { & .\$exe } }
|
||||
after_script:
|
||||
- Copy-Item C:\ProgramData\chocolatey\logs\chocolatey.log
|
||||
cache:
|
||||
|
@ -262,6 +268,15 @@ Windows_Ninja_CS_RelWithDebInfo:
|
|||
<<: *cs-targets
|
||||
config: "RelWithDebInfo"
|
||||
|
||||
Windows_Ninja_Tests_RelWithDebInfo:
|
||||
extends: .Windows_Ninja_Base
|
||||
stage: build
|
||||
variables:
|
||||
<<: *tests-targets
|
||||
config: "RelWithDebInfo"
|
||||
# Gitlab can't successfully execute following binaries due to unknown reason
|
||||
# executables: "openmw_test_suite.exe,openmw_detournavigator_navmeshtilescache_benchmark.exe"
|
||||
|
||||
.Windows_MSBuild_Base:
|
||||
tags:
|
||||
- windows
|
||||
|
@ -279,7 +294,7 @@ Windows_Ninja_CS_RelWithDebInfo:
|
|||
- $time = (Get-Date -Format "HH:mm:ss")
|
||||
- echo ${time}
|
||||
- echo "started by ${GITLAB_USER_NAME}"
|
||||
- sh CI/before_script.msvc.sh -c $config -p Win64 -v 2019 -k -V
|
||||
- sh CI/before_script.msvc.sh -c $config -p Win64 -v 2019 -k -V -b -t
|
||||
- cd MSVC2019_64
|
||||
- cmake --build . --config $config --target ($targets.Split(','))
|
||||
- cd $config
|
||||
|
@ -290,6 +305,7 @@ Windows_Ninja_CS_RelWithDebInfo:
|
|||
Get-ChildItem -Recurse *.pdb | Remove-Item
|
||||
}
|
||||
- 7z a -tzip ..\..\OpenMW_MSVC2019_64_${package}_${config}_${CI_COMMIT_REF_NAME}.zip '*'
|
||||
- if ($executables) { foreach ($exe in $executables.Split(',')) { & .\$exe } }
|
||||
after_script:
|
||||
- Copy-Item C:\ProgramData\chocolatey\logs\chocolatey.log
|
||||
cache:
|
||||
|
@ -353,6 +369,15 @@ Windows_MSBuild_CS_RelWithDebInfo:
|
|||
<<: *cs-targets
|
||||
config: "RelWithDebInfo"
|
||||
|
||||
Windows_MSBuild_Tests_RelWithDebInfo:
|
||||
extends: .Windows_MSBuild_Base
|
||||
stage: build
|
||||
variables:
|
||||
<<: *tests-targets
|
||||
config: "RelWithDebInfo"
|
||||
# Gitlab can't successfully execute following binaries due to unknown reason
|
||||
# executables: "openmw_test_suite.exe,openmw_detournavigator_navmeshtilescache_benchmark.exe"
|
||||
|
||||
Debian_AndroidNDK_arm64-v8a:
|
||||
tags:
|
||||
- linux
|
||||
|
|
15
CHANGELOG.md
15
CHANGELOG.md
|
@ -64,6 +64,7 @@
|
|||
Bug #5452: Autowalk is being included in savegames
|
||||
Bug #5469: Local map is reset when re-entering certain cells
|
||||
Bug #5472: Mistify mod causes CTD in 0.46 on Mac
|
||||
Bug #5473: OpenMW-CS: Cell border lines don't update properly on terrain change
|
||||
Bug #5479: NPCs who should be walking around town are standing around without walking
|
||||
Bug #5484: Zero value items shouldn't be able to be bought or sold for 1 gold
|
||||
Bug #5485: Intimidate doesn't increase disposition on marginal wins
|
||||
|
@ -80,6 +81,7 @@
|
|||
Bug #5603: Setting constant effect cast style doesn't correct effects view
|
||||
Bug #5604: Only one valid NIF root node is loaded from a single file
|
||||
Bug #5611: Usable items with "0 Uses" should be used only once
|
||||
Bug #5619: Input events are queued during save loading
|
||||
Bug #5622: Can't properly interact with the console when in pause menu
|
||||
Bug #5627: Bookart not shown if it isn't followed by <BR> statement
|
||||
Bug #5633: Damage Spells in effect before god mode is enabled continue to hurt the player character and can kill them
|
||||
|
@ -121,6 +123,15 @@
|
|||
Bug #5975: NIF controllers from sheath meshes are used
|
||||
Bug #5991: Activate should always be allowed for inventory items
|
||||
Bug #5995: NiUVController doesn't calculate the UV offset properly
|
||||
Bug #6007: Crash when ending cutscene is playing
|
||||
Bug #6016: Greeting interrupts Fargoth's sneak-walk
|
||||
Bug #6022: OpenMW-CS: Terrain selection is not updated when undoing/redoing terrain changes
|
||||
Bug #6023: OpenMW-CS: Clicking on a reference in "Terrain land editing" mode discards corresponding select/edit action
|
||||
Bug #6028: Particle system controller values are incorrectly used
|
||||
Bug #6035: OpenMW-CS: Circle brush in "Terrain land editing" mode sometimes includes vertices outside its radius
|
||||
Bug #6036: OpenMW-CS: Terrain selection at the border of cells omits certain corner vertices
|
||||
Bug #6043: Actor can have torch missing when torch animation is played
|
||||
Bug #6047: Mouse bindings can be triggered during save loading
|
||||
Feature #390: 3rd person look "over the shoulder"
|
||||
Feature #832: OpenMW-CS: Handle deleted references
|
||||
Feature #1536: Show more information about level on menu
|
||||
|
@ -141,6 +152,7 @@
|
|||
Feature #5456: Basic collada animation support
|
||||
Feature #5457: Realistic diagonal movement
|
||||
Feature #5486: Fixes trainers to choose their training skills based on their base skill points
|
||||
Feature #5500: Prepare enough navmesh tiles before scene loading ends
|
||||
Feature #5511: Add in game option to toggle HRTF support in OpenMW
|
||||
Feature #5519: Code Patch tab in launcher
|
||||
Feature #5524: Resume failed script execution after reload
|
||||
|
@ -159,6 +171,9 @@
|
|||
Feature #5814: Bsatool should be able to create BSA archives, not only to extract it
|
||||
Feature #5828: Support more than 8 lights
|
||||
Feature #5910: Fall back to delta time when physics can't keep up
|
||||
Feature #6024: OpenMW-CS: Selecting terrain in "Terrain land editing" should support "Add to selection" and "Remove from selection" modes
|
||||
Feature #6033: Include pathgrid to navigation mesh
|
||||
Feature #6034: Find path based on area cost depending on NPC stats
|
||||
Task #5480: Drop Qt4 support
|
||||
Task #5520: Improve cell name autocompleter implementation
|
||||
Task #5844: Update 'toggle sneak' documentation
|
||||
|
|
|
@ -38,9 +38,15 @@ Editor Bug Fixes:
|
|||
- Disabled record sorting in Topic and Journal Info tables, implemented drag-move for records (#4357)
|
||||
- Topic and Journal Info records can now be cloned with a different parent Topic/Journal Id (#4363)
|
||||
- Verifier no longer checks for alleged 'race' entries in clothing body parts (#5400)
|
||||
- Cell borders are now properly redrawn when undoing/redoing terrain changes (#5473)
|
||||
- Loading mods now keeps the master index (#5675)
|
||||
- Flicker and crashing on XFCE4 fixed (#5703)
|
||||
- Collada models render properly in the Editor (#5713)
|
||||
- Terrain-selection grid is now properly updated when undoing/redoing terrain changes (#6022)
|
||||
- Tool outline and select/edit actions in "Terrain land editing" mode now ignore references (#6023)
|
||||
- Primary-select and secondary-select actions in "Terrain land editing" mode now behave like in "Instance editing" mode (#6024)
|
||||
- Using the circle brush to select terrain in the "Terrain land editing" mode no longer selects vertices outside the circle (#6035)
|
||||
- Vertices at the NW and SE corners of a cell can now also be selected in "Terrain land editing" mode if the adjacent cells aren't loaded yet (#6036)
|
||||
|
||||
Miscellaneous:
|
||||
- Prevent save-game bloating by using an appropriate fog texture format (#5108)
|
||||
|
|
|
@ -4,9 +4,14 @@ set -xeo pipefail
|
|||
|
||||
free -m
|
||||
|
||||
BUILD_UNITTESTS=OFF
|
||||
BUILD_BENCHMARKS=OFF
|
||||
|
||||
if [[ "${BUILD_TESTS_ONLY}" ]]; then
|
||||
export GOOGLETEST_DIR="${PWD}/googletest/build/install"
|
||||
env GENERATOR='Unix Makefiles' CONFIGURATION=Release CI/build_googletest.sh
|
||||
BUILD_UNITTESTS=ON
|
||||
BUILD_BENCHMARKS=ON
|
||||
fi
|
||||
|
||||
declare -a CMAKE_CONF_OPTS=(
|
||||
|
@ -54,7 +59,8 @@ if [[ "${BUILD_TESTS_ONLY}" ]]; then
|
|||
-DBUILD_ESSIMPORTER=OFF \
|
||||
-DBUILD_OPENCS=OFF \
|
||||
-DBUILD_WIZARD=OFF \
|
||||
-DBUILD_UNITTESTS=ON \
|
||||
-DBUILD_UNITTESTS=${BUILD_UNITTESTS} \
|
||||
-DBUILD_BENCHMARKS=${BUILD_BENCHMARKS} \
|
||||
-DGTEST_ROOT="${GOOGLETEST_DIR}" \
|
||||
-DGMOCK_ROOT="${GOOGLETEST_DIR}" \
|
||||
..
|
||||
|
|
|
@ -73,6 +73,7 @@ CONFIGURATIONS=()
|
|||
TEST_FRAMEWORK=""
|
||||
GOOGLE_INSTALL_ROOT=""
|
||||
INSTALL_PREFIX="."
|
||||
BUILD_BENCHMARKS=""
|
||||
|
||||
ACTIVATE_MSVC=""
|
||||
SINGLE_CONFIG=""
|
||||
|
@ -133,6 +134,9 @@ while [ $# -gt 0 ]; do
|
|||
INSTALL_PREFIX=$(echo "$1" | sed 's;\\;/;g' | sed -E 's;/+;/;g')
|
||||
shift ;;
|
||||
|
||||
b )
|
||||
BUILD_BENCHMARKS=true ;;
|
||||
|
||||
h )
|
||||
cat <<EOF
|
||||
Usage: $0 [-cdehkpuvVi]
|
||||
|
@ -167,6 +171,8 @@ Options:
|
|||
Run verbosely
|
||||
-i
|
||||
CMake install prefix
|
||||
-b
|
||||
Build benchmarks
|
||||
EOF
|
||||
wrappedExit 0
|
||||
;;
|
||||
|
@ -1067,6 +1073,10 @@ fi
|
|||
done
|
||||
#fi
|
||||
|
||||
if [ "${BUILD_BENCHMARKS}" ]; then
|
||||
add_cmake_opts -DBUILD_BENCHMARKS=ON
|
||||
fi
|
||||
|
||||
if [ -n "$ACTIVATE_MSVC" ]; then
|
||||
echo -n "- Activating MSVC in the current shell... "
|
||||
command -v vswhere >/dev/null 2>&1 || { echo "Error: vswhere is not on the path."; wrappedExit 1; }
|
||||
|
|
|
@ -480,8 +480,8 @@ configure_resource_file(${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp-client-default.
|
|||
configure_resource_file(${OpenMW_SOURCE_DIR}/files/tes3mp/tes3mp-server-default.cfg
|
||||
"${OpenMW_BINARY_DIR}" "tes3mp-server-default.cfg")
|
||||
|
||||
configure_resource_file(${OpenMW_SOURCE_DIR}/files/settings-default.cfg
|
||||
"${OpenMW_BINARY_DIR}" "settings-default.cfg")
|
||||
pack_resource_file(${OpenMW_SOURCE_DIR}/files/settings-default.cfg
|
||||
"${OpenMW_BINARY_DIR}" "defaults.bin")
|
||||
|
||||
configure_resource_file(${OpenMW_SOURCE_DIR}/files/openmw.appdata.xml
|
||||
"${OpenMW_BINARY_DIR}" "openmw.appdata.xml")
|
||||
|
@ -564,6 +564,7 @@ IF(BUILD_OPENMW OR BUILD_OPENCS)
|
|||
# End of tes3mp addition
|
||||
add_subdirectory (extern/osg-ffmpeg-videoplayer)
|
||||
add_subdirectory (extern/oics)
|
||||
add_subdirectory (extern/Base64)
|
||||
if (BUILD_OPENCS)
|
||||
add_subdirectory (extern/osgQt)
|
||||
endif()
|
||||
|
@ -668,11 +669,8 @@ if (WIN32)
|
|||
set(WARNINGS "/W4")
|
||||
|
||||
set(WARNINGS_DISABLE
|
||||
# OpenMW specific warnings
|
||||
4100 # Unreferenced formal parameter (-Wunused-parameter)
|
||||
4127 # Conditional expression is constant
|
||||
4244 # Storing value of one type in variable of another (size_t in int, for example)
|
||||
4267 # Conversion from 'size_t' to 'int', possible loss of data
|
||||
4996 # Function was declared deprecated
|
||||
)
|
||||
|
||||
|
@ -741,6 +739,10 @@ if (WIN32)
|
|||
if (BUILD_WIZARD)
|
||||
set_target_properties(openmw-wizard PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
|
||||
endif()
|
||||
|
||||
if (BUILD_BENCHMARKS)
|
||||
set_target_properties(openmw_detournavigator_navmeshtilescache_benchmark PROPERTIES COMPILE_FLAGS "${WARNINGS} ${MT_BUILD}")
|
||||
endif()
|
||||
endif(MSVC)
|
||||
|
||||
# TODO: At some point release builds should not use the console but rather write to a log file
|
||||
|
@ -880,7 +882,7 @@ elseif(NOT APPLE)
|
|||
INSTALL(FILES "${OpenMW_SOURCE_DIR}/README.md" DESTINATION "." RENAME "README.txt")
|
||||
INSTALL(FILES "${OpenMW_SOURCE_DIR}/LICENSE" DESTINATION "." RENAME "LICENSE.txt")
|
||||
INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/mygui/DejaVuFontLicense.txt" DESTINATION ".")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/settings-default.cfg" DESTINATION ".")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/defaults.bin" DESTINATION ".")
|
||||
# Start of tes3mp addition
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/tes3mp-client-default.cfg" DESTINATION ".")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/tes3mp-server-default.cfg" DESTINATION ".")
|
||||
|
@ -933,13 +935,13 @@ elseif(NOT APPLE)
|
|||
SET(VCREDIST32 "${OpenMW_BINARY_DIR}/vcredist_x86.exe")
|
||||
if(EXISTS ${VCREDIST32})
|
||||
INSTALL(FILES ${VCREDIST32} DESTINATION "redist")
|
||||
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x86.exe\\\" /q'" )
|
||||
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x86.exe\\\" /q /norestart'" )
|
||||
endif(EXISTS ${VCREDIST32})
|
||||
|
||||
SET(VCREDIST64 "${OpenMW_BINARY_DIR}/vcredist_x64.exe")
|
||||
if(EXISTS ${VCREDIST64})
|
||||
INSTALL(FILES ${VCREDIST64} DESTINATION "redist")
|
||||
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x64.exe\\\" /q'" )
|
||||
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x64.exe\\\" /q /norestart'" )
|
||||
endif(EXISTS ${VCREDIST64})
|
||||
|
||||
SET(OALREDIST "${OpenMW_BINARY_DIR}/oalinst.exe")
|
||||
|
@ -1022,7 +1024,7 @@ elseif(NOT APPLE)
|
|||
ENDIF(BUILD_OPENCS)
|
||||
|
||||
# Install global configuration files
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/settings-default.cfg" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/defaults.bin" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/openmw.cfg.install" DESTINATION "${SYSCONFDIR}" RENAME "openmw.cfg" COMPONENT "openmw")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/resources/version" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
|
||||
INSTALL(FILES "${INSTALL_SOURCE}/gamecontrollerdb.txt" DESTINATION "${SYSCONFDIR}" COMPONENT "openmw")
|
||||
|
|
|
@ -19,16 +19,9 @@ FetchContent_MakeAvailableExcludeFromAll(benchmark)
|
|||
set(CMAKE_CXX_FLAGS "${SAVED_CMAKE_CXX_FLAGS}")
|
||||
|
||||
openmw_add_executable(openmw_detournavigator_navmeshtilescache_benchmark detournavigator/navmeshtilescache.cpp)
|
||||
target_compile_options(openmw_detournavigator_navmeshtilescache_benchmark PRIVATE -Wall)
|
||||
target_compile_features(openmw_detournavigator_navmeshtilescache_benchmark PRIVATE cxx_std_17)
|
||||
target_link_libraries(openmw_detournavigator_navmeshtilescache_benchmark benchmark::benchmark components)
|
||||
|
||||
if (UNIX AND NOT APPLE)
|
||||
target_link_libraries(openmw_detournavigator_navmeshtilescache_benchmark ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
if (CMAKE_CL_64)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj")
|
||||
endif (CMAKE_CL_64)
|
||||
endif (MSVC)
|
||||
|
|
|
@ -13,9 +13,9 @@ std::string loadSettings (Settings::Manager & settings)
|
|||
|
||||
// prefer local
|
||||
if (boost::filesystem::exists(localdefault))
|
||||
settings.loadDefault(localdefault);
|
||||
settings.loadDefault(localdefault, false);
|
||||
else if (boost::filesystem::exists(globaldefault))
|
||||
settings.loadDefault(globaldefault);
|
||||
settings.loadDefault(globaldefault, false);
|
||||
else
|
||||
throw std::runtime_error ("No default settings file found! Make sure the file \"tes3mp-client-default.cfg\" was properly installed.");
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <vector>
|
||||
#include <deque>
|
||||
#include <list>
|
||||
#include <unordered_set>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <fstream>
|
||||
|
@ -322,7 +323,7 @@ int load(Arguments& info)
|
|||
std::string filename = info.filename;
|
||||
std::cout << "Loading file: " << filename << std::endl;
|
||||
|
||||
std::list<uint32_t> skipped;
|
||||
std::unordered_set<uint32_t> skipped;
|
||||
|
||||
try {
|
||||
|
||||
|
@ -364,17 +365,17 @@ int load(Arguments& info)
|
|||
// Loop through all records
|
||||
while(esm.hasMoreRecs())
|
||||
{
|
||||
ESM::NAME n = esm.getRecName();
|
||||
const ESM::NAME n = esm.getRecName();
|
||||
uint32_t flags;
|
||||
esm.getRecHeader(flags);
|
||||
|
||||
EsmTool::RecordBase *record = EsmTool::RecordBase::create(n);
|
||||
if (record == nullptr)
|
||||
{
|
||||
if (std::find(skipped.begin(), skipped.end(), n.intval) == skipped.end())
|
||||
if (skipped.count(n.intval) == 0)
|
||||
{
|
||||
std::cout << "Skipping " << n.toString() << " records." << std::endl;
|
||||
skipped.push_back(n.intval);
|
||||
skipped.emplace(n.intval);
|
||||
}
|
||||
|
||||
esm.skipRecord();
|
||||
|
|
|
@ -172,7 +172,7 @@ void printTransport(const std::vector<ESM::Transport::Dest>& transport)
|
|||
namespace EsmTool {
|
||||
|
||||
RecordBase *
|
||||
RecordBase::create(ESM::NAME type)
|
||||
RecordBase::create(const ESM::NAME type)
|
||||
{
|
||||
RecordBase *record = nullptr;
|
||||
|
||||
|
|
|
@ -13,11 +13,9 @@
|
|||
|
||||
#include "utils/openalutil.hpp"
|
||||
|
||||
Launcher::AdvancedPage::AdvancedPage(Config::GameSettings &gameSettings,
|
||||
Settings::Manager &engineSettings, QWidget *parent)
|
||||
Launcher::AdvancedPage::AdvancedPage(Config::GameSettings &gameSettings, QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, mGameSettings(gameSettings)
|
||||
, mEngineSettings(engineSettings)
|
||||
{
|
||||
setObjectName ("AdvancedPage");
|
||||
setupUi(this);
|
||||
|
@ -100,12 +98,12 @@ bool Launcher::AdvancedPage::loadSettings()
|
|||
loadSettingBool(normaliseRaceSpeedCheckBox, "normalise race speed", "Game");
|
||||
loadSettingBool(swimUpwardCorrectionCheckBox, "swim upward correction", "Game");
|
||||
loadSettingBool(avoidCollisionsCheckBox, "NPCs avoid collisions", "Game");
|
||||
int unarmedFactorsStrengthIndex = mEngineSettings.getInt("strength influences hand to hand", "Game");
|
||||
int unarmedFactorsStrengthIndex = Settings::Manager::getInt("strength influences hand to hand", "Game");
|
||||
if (unarmedFactorsStrengthIndex >= 0 && unarmedFactorsStrengthIndex <= 2)
|
||||
unarmedFactorsStrengthComboBox->setCurrentIndex(unarmedFactorsStrengthIndex);
|
||||
loadSettingBool(stealingFromKnockedOutCheckBox, "always allow stealing from knocked out actors", "Game");
|
||||
loadSettingBool(enableNavigatorCheckBox, "enable", "Navigator");
|
||||
int numPhysicsThreads = mEngineSettings.getInt("async num threads", "Physics");
|
||||
int numPhysicsThreads = Settings::Manager::getInt("async num threads", "Physics");
|
||||
if (numPhysicsThreads >= 0)
|
||||
physicsThreadsSpinBox->setValue(numPhysicsThreads);
|
||||
loadSettingBool(allowNPCToFollowOverWaterSurfaceCheckBox, "allow actors to follow over water surface", "Game");
|
||||
|
@ -130,26 +128,19 @@ bool Launcher::AdvancedPage::loadSettings()
|
|||
loadSettingBool(turnToMovementDirectionCheckBox, "turn to movement direction", "Game");
|
||||
loadSettingBool(smoothMovementCheckBox, "smooth movement", "Game");
|
||||
|
||||
const bool distantTerrain = mEngineSettings.getBool("distant terrain", "Terrain");
|
||||
const bool objectPaging = mEngineSettings.getBool("object paging", "Terrain");
|
||||
const bool distantTerrain = Settings::Manager::getBool("distant terrain", "Terrain");
|
||||
const bool objectPaging = Settings::Manager::getBool("object paging", "Terrain");
|
||||
if (distantTerrain && objectPaging) {
|
||||
distantLandCheckBox->setCheckState(Qt::Checked);
|
||||
}
|
||||
|
||||
loadSettingBool(activeGridObjectPagingCheckBox, "object paging active grid", "Terrain");
|
||||
viewingDistanceComboBox->setValue(convertToCells(mEngineSettings.getInt("viewing distance", "Camera")));
|
||||
|
||||
int lightingMethod = 1;
|
||||
if (mEngineSettings.getString("lighting method", "Shaders") == "legacy")
|
||||
lightingMethod = 0;
|
||||
else if (mEngineSettings.getString("lighting method", "Shaders") == "shaders")
|
||||
lightingMethod = 2;
|
||||
lightingMethodComboBox->setCurrentIndex(lightingMethod);
|
||||
viewingDistanceComboBox->setValue(convertToCells(Settings::Manager::getInt("viewing distance", "Camera")));
|
||||
}
|
||||
|
||||
// Audio
|
||||
{
|
||||
std::string selectedAudioDevice = mEngineSettings.getString("device", "Sound");
|
||||
std::string selectedAudioDevice = Settings::Manager::getString("device", "Sound");
|
||||
if (selectedAudioDevice.empty() == false)
|
||||
{
|
||||
int audioDeviceIndex = audioDeviceSelectorComboBox->findData(QString::fromStdString(selectedAudioDevice));
|
||||
|
@ -158,12 +149,12 @@ bool Launcher::AdvancedPage::loadSettings()
|
|||
audioDeviceSelectorComboBox->setCurrentIndex(audioDeviceIndex);
|
||||
}
|
||||
}
|
||||
int hrtfEnabledIndex = mEngineSettings.getInt("hrtf enable", "Sound");
|
||||
int hrtfEnabledIndex = Settings::Manager::getInt("hrtf enable", "Sound");
|
||||
if (hrtfEnabledIndex >= -1 && hrtfEnabledIndex <= 1)
|
||||
{
|
||||
enableHRTFComboBox->setCurrentIndex(hrtfEnabledIndex + 1);
|
||||
}
|
||||
std::string selectedHRTFProfile = mEngineSettings.getString("hrtf", "Sound");
|
||||
std::string selectedHRTFProfile = Settings::Manager::getString("hrtf", "Sound");
|
||||
if (selectedHRTFProfile.empty() == false)
|
||||
{
|
||||
int hrtfProfileIndex = hrtfProfileSelectorComboBox->findData(QString::fromStdString(selectedHRTFProfile));
|
||||
|
@ -185,7 +176,7 @@ bool Launcher::AdvancedPage::loadSettings()
|
|||
loadSettingBool(deferredPreviewRotationCheckBox, "deferred preview rotation", "Camera");
|
||||
loadSettingBool(headBobbingCheckBox, "head bobbing", "Camera");
|
||||
defaultShoulderComboBox->setCurrentIndex(
|
||||
mEngineSettings.getVector2("view over shoulder offset", "Camera").x() >= 0 ? 0 : 1);
|
||||
Settings::Manager::getVector2("view over shoulder offset", "Camera").x() >= 0 ? 0 : 1);
|
||||
}
|
||||
|
||||
// Interface Changes
|
||||
|
@ -195,13 +186,13 @@ bool Launcher::AdvancedPage::loadSettings()
|
|||
loadSettingBool(showMeleeInfoCheckBox, "show melee info", "Game");
|
||||
loadSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
|
||||
loadSettingBool(changeDialogTopicsCheckBox, "color topic enable", "GUI");
|
||||
int showOwnedIndex = mEngineSettings.getInt("show owned", "Game");
|
||||
int showOwnedIndex = Settings::Manager::getInt("show owned", "Game");
|
||||
// Match the index with the option (only 0, 1, 2, or 3 are valid). Will default to 0 if invalid.
|
||||
if (showOwnedIndex >= 0 && showOwnedIndex <= 3)
|
||||
showOwnedComboBox->setCurrentIndex(showOwnedIndex);
|
||||
loadSettingBool(stretchBackgroundCheckBox, "stretch menu background", "GUI");
|
||||
loadSettingBool(graphicHerbalismCheckBox, "graphic herbalism", "Game");
|
||||
scalingSpinBox->setValue(mEngineSettings.getFloat("scaling factor", "GUI"));
|
||||
scalingSpinBox->setValue(Settings::Manager::getFloat("scaling factor", "GUI"));
|
||||
}
|
||||
|
||||
// Bug fixes
|
||||
|
@ -214,10 +205,10 @@ bool Launcher::AdvancedPage::loadSettings()
|
|||
{
|
||||
// Saves
|
||||
loadSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
|
||||
maximumQuicksavesComboBox->setValue(mEngineSettings.getInt("max quicksaves", "Saves"));
|
||||
maximumQuicksavesComboBox->setValue(Settings::Manager::getInt("max quicksaves", "Saves"));
|
||||
|
||||
// Other Settings
|
||||
QString screenshotFormatString = QString::fromStdString(mEngineSettings.getString("screenshot format", "General")).toUpper();
|
||||
QString screenshotFormatString = QString::fromStdString(Settings::Manager::getString("screenshot format", "General")).toUpper();
|
||||
if (screenshotFormatComboBox->findText(screenshotFormatString) == -1)
|
||||
screenshotFormatComboBox->addItem(screenshotFormatString);
|
||||
screenshotFormatComboBox->setCurrentIndex(screenshotFormatComboBox->findText(screenshotFormatString));
|
||||
|
@ -258,13 +249,13 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
saveSettingBool(swimUpwardCorrectionCheckBox, "swim upward correction", "Game");
|
||||
saveSettingBool(avoidCollisionsCheckBox, "NPCs avoid collisions", "Game");
|
||||
int unarmedFactorsStrengthIndex = unarmedFactorsStrengthComboBox->currentIndex();
|
||||
if (unarmedFactorsStrengthIndex != mEngineSettings.getInt("strength influences hand to hand", "Game"))
|
||||
mEngineSettings.setInt("strength influences hand to hand", "Game", unarmedFactorsStrengthIndex);
|
||||
if (unarmedFactorsStrengthIndex != Settings::Manager::getInt("strength influences hand to hand", "Game"))
|
||||
Settings::Manager::setInt("strength influences hand to hand", "Game", unarmedFactorsStrengthIndex);
|
||||
saveSettingBool(stealingFromKnockedOutCheckBox, "always allow stealing from knocked out actors", "Game");
|
||||
saveSettingBool(enableNavigatorCheckBox, "enable", "Navigator");
|
||||
int numPhysicsThreads = physicsThreadsSpinBox->value();
|
||||
if (numPhysicsThreads != mEngineSettings.getInt("async num threads", "Physics"))
|
||||
mEngineSettings.setInt("async num threads", "Physics", numPhysicsThreads);
|
||||
if (numPhysicsThreads != Settings::Manager::getInt("async num threads", "Physics"))
|
||||
Settings::Manager::setInt("async num threads", "Physics", numPhysicsThreads);
|
||||
}
|
||||
|
||||
// Visuals
|
||||
|
@ -282,23 +273,20 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
saveSettingBool(turnToMovementDirectionCheckBox, "turn to movement direction", "Game");
|
||||
saveSettingBool(smoothMovementCheckBox, "smooth movement", "Game");
|
||||
|
||||
const bool distantTerrain = mEngineSettings.getBool("distant terrain", "Terrain");
|
||||
const bool objectPaging = mEngineSettings.getBool("object paging", "Terrain");
|
||||
const bool distantTerrain = Settings::Manager::getBool("distant terrain", "Terrain");
|
||||
const bool objectPaging = Settings::Manager::getBool("object paging", "Terrain");
|
||||
const bool wantDistantLand = distantLandCheckBox->checkState();
|
||||
if (wantDistantLand != (distantTerrain && objectPaging)) {
|
||||
mEngineSettings.setBool("distant terrain", "Terrain", wantDistantLand);
|
||||
mEngineSettings.setBool("object paging", "Terrain", wantDistantLand);
|
||||
Settings::Manager::setBool("distant terrain", "Terrain", wantDistantLand);
|
||||
Settings::Manager::setBool("object paging", "Terrain", wantDistantLand);
|
||||
}
|
||||
|
||||
saveSettingBool(activeGridObjectPagingCheckBox, "object paging active grid", "Terrain");
|
||||
double viewingDistance = viewingDistanceComboBox->value();
|
||||
if (viewingDistance != convertToCells(mEngineSettings.getInt("viewing distance", "Camera")))
|
||||
if (viewingDistance != convertToCells(Settings::Manager::getInt("viewing distance", "Camera")))
|
||||
{
|
||||
mEngineSettings.setInt("viewing distance", "Camera", convertToUnits(viewingDistance));
|
||||
Settings::Manager::setInt("viewing distance", "Camera", convertToUnits(viewingDistance));
|
||||
}
|
||||
|
||||
static std::array<std::string, 3> lightingMethodMap = {"legacy", "shaders compatibility", "shaders"};
|
||||
mEngineSettings.setString("lighting method", "Shaders", lightingMethodMap[lightingMethodComboBox->currentIndex()]);
|
||||
}
|
||||
|
||||
// Audio
|
||||
|
@ -306,25 +294,25 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
int audioDeviceIndex = audioDeviceSelectorComboBox->currentIndex();
|
||||
if (audioDeviceIndex != 0)
|
||||
{
|
||||
mEngineSettings.setString("device", "Sound", audioDeviceSelectorComboBox->currentText().toUtf8().constData());
|
||||
Settings::Manager::setString("device", "Sound", audioDeviceSelectorComboBox->currentText().toUtf8().constData());
|
||||
}
|
||||
else
|
||||
{
|
||||
mEngineSettings.setString("device", "Sound", "");
|
||||
Settings::Manager::setString("device", "Sound", "");
|
||||
}
|
||||
int hrtfEnabledIndex = enableHRTFComboBox->currentIndex() - 1;
|
||||
if (hrtfEnabledIndex != mEngineSettings.getInt("hrtf enable", "Sound"))
|
||||
if (hrtfEnabledIndex != Settings::Manager::getInt("hrtf enable", "Sound"))
|
||||
{
|
||||
mEngineSettings.setInt("hrtf enable", "Sound", hrtfEnabledIndex);
|
||||
Settings::Manager::setInt("hrtf enable", "Sound", hrtfEnabledIndex);
|
||||
}
|
||||
int selectedHRTFProfileIndex = hrtfProfileSelectorComboBox->currentIndex();
|
||||
if (selectedHRTFProfileIndex != 0)
|
||||
{
|
||||
mEngineSettings.setString("hrtf", "Sound", hrtfProfileSelectorComboBox->currentText().toUtf8().constData());
|
||||
Settings::Manager::setString("hrtf", "Sound", hrtfProfileSelectorComboBox->currentText().toUtf8().constData());
|
||||
}
|
||||
else
|
||||
{
|
||||
mEngineSettings.setString("hrtf", "Sound", "");
|
||||
Settings::Manager::setString("hrtf", "Sound", "");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -336,14 +324,14 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
saveSettingBool(deferredPreviewRotationCheckBox, "deferred preview rotation", "Camera");
|
||||
saveSettingBool(headBobbingCheckBox, "head bobbing", "Camera");
|
||||
|
||||
osg::Vec2f shoulderOffset = mEngineSettings.getVector2("view over shoulder offset", "Camera");
|
||||
osg::Vec2f shoulderOffset = Settings::Manager::getVector2("view over shoulder offset", "Camera");
|
||||
if (defaultShoulderComboBox->currentIndex() != (shoulderOffset.x() >= 0 ? 0 : 1))
|
||||
{
|
||||
if (defaultShoulderComboBox->currentIndex() == 0)
|
||||
shoulderOffset.x() = std::abs(shoulderOffset.x());
|
||||
else
|
||||
shoulderOffset.x() = -std::abs(shoulderOffset.x());
|
||||
mEngineSettings.setVector2("view over shoulder offset", "Camera", shoulderOffset);
|
||||
Settings::Manager::setVector2("view over shoulder offset", "Camera", shoulderOffset);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -355,13 +343,13 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
saveSettingBool(showProjectileDamageCheckBox, "show projectile damage", "Game");
|
||||
saveSettingBool(changeDialogTopicsCheckBox, "color topic enable", "GUI");
|
||||
int showOwnedCurrentIndex = showOwnedComboBox->currentIndex();
|
||||
if (showOwnedCurrentIndex != mEngineSettings.getInt("show owned", "Game"))
|
||||
mEngineSettings.setInt("show owned", "Game", showOwnedCurrentIndex);
|
||||
if (showOwnedCurrentIndex != Settings::Manager::getInt("show owned", "Game"))
|
||||
Settings::Manager::setInt("show owned", "Game", showOwnedCurrentIndex);
|
||||
saveSettingBool(stretchBackgroundCheckBox, "stretch menu background", "GUI");
|
||||
saveSettingBool(graphicHerbalismCheckBox, "graphic herbalism", "Game");
|
||||
float uiScalingFactor = scalingSpinBox->value();
|
||||
if (uiScalingFactor != mEngineSettings.getFloat("scaling factor", "GUI"))
|
||||
mEngineSettings.setFloat("scaling factor", "GUI", uiScalingFactor);
|
||||
if (uiScalingFactor != Settings::Manager::getFloat("scaling factor", "GUI"))
|
||||
Settings::Manager::setFloat("scaling factor", "GUI", uiScalingFactor);
|
||||
}
|
||||
|
||||
// Bug fixes
|
||||
|
@ -375,15 +363,15 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
// Saves Settings
|
||||
saveSettingBool(timePlayedCheckbox, "timeplayed", "Saves");
|
||||
int maximumQuicksaves = maximumQuicksavesComboBox->value();
|
||||
if (maximumQuicksaves != mEngineSettings.getInt("max quicksaves", "Saves"))
|
||||
if (maximumQuicksaves != Settings::Manager::getInt("max quicksaves", "Saves"))
|
||||
{
|
||||
mEngineSettings.setInt("max quicksaves", "Saves", maximumQuicksaves);
|
||||
Settings::Manager::setInt("max quicksaves", "Saves", maximumQuicksaves);
|
||||
}
|
||||
|
||||
// Other Settings
|
||||
std::string screenshotFormatString = screenshotFormatComboBox->currentText().toLower().toStdString();
|
||||
if (screenshotFormatString != mEngineSettings.getString("screenshot format", "General"))
|
||||
mEngineSettings.setString("screenshot format", "General", screenshotFormatString);
|
||||
if (screenshotFormatString != Settings::Manager::getString("screenshot format", "General"))
|
||||
Settings::Manager::setString("screenshot format", "General", screenshotFormatString);
|
||||
}
|
||||
|
||||
// Testing
|
||||
|
@ -407,15 +395,15 @@ void Launcher::AdvancedPage::saveSettings()
|
|||
|
||||
void Launcher::AdvancedPage::loadSettingBool(QCheckBox *checkbox, const std::string &setting, const std::string &group)
|
||||
{
|
||||
if (mEngineSettings.getBool(setting, group))
|
||||
if (Settings::Manager::getBool(setting, group))
|
||||
checkbox->setCheckState(Qt::Checked);
|
||||
}
|
||||
|
||||
void Launcher::AdvancedPage::saveSettingBool(QCheckBox *checkbox, const std::string &setting, const std::string &group)
|
||||
{
|
||||
bool cValue = checkbox->checkState();
|
||||
if (cValue != mEngineSettings.getBool(setting, group))
|
||||
mEngineSettings.setBool(setting, group, cValue);
|
||||
if (cValue != Settings::Manager::getBool(setting, group))
|
||||
Settings::Manager::setBool(setting, group, cValue);
|
||||
}
|
||||
|
||||
void Launcher::AdvancedPage::slotLoadedCellsChanged(QStringList cellNames)
|
||||
|
|
|
@ -17,8 +17,7 @@ namespace Launcher
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
AdvancedPage(Config::GameSettings &gameSettings,
|
||||
Settings::Manager &engineSettings, QWidget *parent = nullptr);
|
||||
explicit AdvancedPage(Config::GameSettings &gameSettings, QWidget *parent = nullptr);
|
||||
|
||||
bool loadSettings();
|
||||
void saveSettings();
|
||||
|
@ -34,7 +33,6 @@ namespace Launcher
|
|||
|
||||
private:
|
||||
Config::GameSettings &mGameSettings;
|
||||
Settings::Manager &mEngineSettings;
|
||||
QCompleter mCellNameCompleter;
|
||||
QStringListModel mCellNameCompleterModel;
|
||||
|
||||
|
|
|
@ -32,9 +32,8 @@ QString getAspect(int x, int y)
|
|||
return QString(QString::number(xaspect) + ":" + QString::number(yaspect));
|
||||
}
|
||||
|
||||
Launcher::GraphicsPage::GraphicsPage(Settings::Manager &engineSettings, QWidget *parent)
|
||||
Launcher::GraphicsPage::GraphicsPage(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, mEngineSettings(engineSettings)
|
||||
{
|
||||
setObjectName ("GraphicsPage");
|
||||
setupUi(this);
|
||||
|
@ -93,26 +92,27 @@ bool Launcher::GraphicsPage::loadSettings()
|
|||
if (!setupSDL())
|
||||
return false;
|
||||
|
||||
if (mEngineSettings.getBool("vsync", "Video"))
|
||||
// Visuals
|
||||
if (Settings::Manager::getBool("vsync", "Video"))
|
||||
vSyncCheckBox->setCheckState(Qt::Checked);
|
||||
|
||||
if (mEngineSettings.getBool("fullscreen", "Video"))
|
||||
if (Settings::Manager::getBool("fullscreen", "Video"))
|
||||
fullScreenCheckBox->setCheckState(Qt::Checked);
|
||||
|
||||
if (mEngineSettings.getBool("window border", "Video"))
|
||||
if (Settings::Manager::getBool("window border", "Video"))
|
||||
windowBorderCheckBox->setCheckState(Qt::Checked);
|
||||
|
||||
// aaValue is the actual value (0, 1, 2, 4, 8, 16)
|
||||
int aaValue = mEngineSettings.getInt("antialiasing", "Video");
|
||||
int aaValue = Settings::Manager::getInt("antialiasing", "Video");
|
||||
// aaIndex is the index into the allowed values in the pull down.
|
||||
int aaIndex = antiAliasingComboBox->findText(QString::number(aaValue));
|
||||
if (aaIndex != -1)
|
||||
antiAliasingComboBox->setCurrentIndex(aaIndex);
|
||||
|
||||
int width = mEngineSettings.getInt("resolution x", "Video");
|
||||
int height = mEngineSettings.getInt("resolution y", "Video");
|
||||
int width = Settings::Manager::getInt("resolution x", "Video");
|
||||
int height = Settings::Manager::getInt("resolution y", "Video");
|
||||
QString resolution = QString::number(width) + QString(" x ") + QString::number(height);
|
||||
screenComboBox->setCurrentIndex(mEngineSettings.getInt("screen", "Video"));
|
||||
screenComboBox->setCurrentIndex(Settings::Manager::getInt("screen", "Video"));
|
||||
|
||||
int resIndex = resolutionComboBox->findText(resolution, Qt::MatchStartsWith);
|
||||
|
||||
|
@ -125,40 +125,49 @@ bool Launcher::GraphicsPage::loadSettings()
|
|||
customHeightSpinBox->setValue(height);
|
||||
}
|
||||
|
||||
float fpsLimit = mEngineSettings.getFloat("framerate limit", "Video");
|
||||
float fpsLimit = Settings::Manager::getFloat("framerate limit", "Video");
|
||||
if (fpsLimit != 0)
|
||||
{
|
||||
framerateLimitCheckBox->setCheckState(Qt::Checked);
|
||||
framerateLimitSpinBox->setValue(fpsLimit);
|
||||
}
|
||||
|
||||
if (mEngineSettings.getBool("actor shadows", "Shadows"))
|
||||
// Lighting
|
||||
int lightingMethod = 1;
|
||||
if (Settings::Manager::getString("lighting method", "Shaders") == "legacy")
|
||||
lightingMethod = 0;
|
||||
else if (Settings::Manager::getString("lighting method", "Shaders") == "shaders")
|
||||
lightingMethod = 2;
|
||||
lightingMethodComboBox->setCurrentIndex(lightingMethod);
|
||||
|
||||
// Shadows
|
||||
if (Settings::Manager::getBool("actor shadows", "Shadows"))
|
||||
actorShadowsCheckBox->setCheckState(Qt::Checked);
|
||||
if (mEngineSettings.getBool("player shadows", "Shadows"))
|
||||
if (Settings::Manager::getBool("player shadows", "Shadows"))
|
||||
playerShadowsCheckBox->setCheckState(Qt::Checked);
|
||||
if (mEngineSettings.getBool("terrain shadows", "Shadows"))
|
||||
if (Settings::Manager::getBool("terrain shadows", "Shadows"))
|
||||
terrainShadowsCheckBox->setCheckState(Qt::Checked);
|
||||
if (mEngineSettings.getBool("object shadows", "Shadows"))
|
||||
if (Settings::Manager::getBool("object shadows", "Shadows"))
|
||||
objectShadowsCheckBox->setCheckState(Qt::Checked);
|
||||
if (mEngineSettings.getBool("enable indoor shadows", "Shadows"))
|
||||
if (Settings::Manager::getBool("enable indoor shadows", "Shadows"))
|
||||
indoorShadowsCheckBox->setCheckState(Qt::Checked);
|
||||
|
||||
shadowComputeSceneBoundsComboBox->setCurrentIndex(
|
||||
shadowComputeSceneBoundsComboBox->findText(
|
||||
QString(tr(mEngineSettings.getString("compute scene bounds", "Shadows").c_str()))));
|
||||
QString(tr(Settings::Manager::getString("compute scene bounds", "Shadows").c_str()))));
|
||||
|
||||
int shadowDistLimit = mEngineSettings.getInt("maximum shadow map distance", "Shadows");
|
||||
int shadowDistLimit = Settings::Manager::getInt("maximum shadow map distance", "Shadows");
|
||||
if (shadowDistLimit > 0)
|
||||
{
|
||||
shadowDistanceCheckBox->setCheckState(Qt::Checked);
|
||||
shadowDistanceSpinBox->setValue(shadowDistLimit);
|
||||
}
|
||||
|
||||
float shadowFadeStart = mEngineSettings.getFloat("shadow fade start", "Shadows");
|
||||
float shadowFadeStart = Settings::Manager::getFloat("shadow fade start", "Shadows");
|
||||
if (shadowFadeStart != 0)
|
||||
fadeStartSpinBox->setValue(shadowFadeStart);
|
||||
|
||||
int shadowRes = mEngineSettings.getInt("shadow map resolution", "Shadows");
|
||||
int shadowRes = Settings::Manager::getInt("shadow map resolution", "Shadows");
|
||||
int shadowResIndex = shadowResolutionComboBox->findText(QString::number(shadowRes));
|
||||
if (shadowResIndex != -1)
|
||||
shadowResolutionComboBox->setCurrentIndex(shadowResIndex);
|
||||
|
@ -168,23 +177,25 @@ bool Launcher::GraphicsPage::loadSettings()
|
|||
|
||||
void Launcher::GraphicsPage::saveSettings()
|
||||
{
|
||||
// Visuals
|
||||
|
||||
// Ensure we only set the new settings if they changed. This is to avoid cluttering the
|
||||
// user settings file (which by definition should only contain settings the user has touched)
|
||||
bool cVSync = vSyncCheckBox->checkState();
|
||||
if (cVSync != mEngineSettings.getBool("vsync", "Video"))
|
||||
mEngineSettings.setBool("vsync", "Video", cVSync);
|
||||
if (cVSync != Settings::Manager::getBool("vsync", "Video"))
|
||||
Settings::Manager::setBool("vsync", "Video", cVSync);
|
||||
|
||||
bool cFullScreen = fullScreenCheckBox->checkState();
|
||||
if (cFullScreen != mEngineSettings.getBool("fullscreen", "Video"))
|
||||
mEngineSettings.setBool("fullscreen", "Video", cFullScreen);
|
||||
if (cFullScreen != Settings::Manager::getBool("fullscreen", "Video"))
|
||||
Settings::Manager::setBool("fullscreen", "Video", cFullScreen);
|
||||
|
||||
bool cWindowBorder = windowBorderCheckBox->checkState();
|
||||
if (cWindowBorder != mEngineSettings.getBool("window border", "Video"))
|
||||
mEngineSettings.setBool("window border", "Video", cWindowBorder);
|
||||
if (cWindowBorder != Settings::Manager::getBool("window border", "Video"))
|
||||
Settings::Manager::setBool("window border", "Video", cWindowBorder);
|
||||
|
||||
int cAAValue = antiAliasingComboBox->currentText().toInt();
|
||||
if (cAAValue != mEngineSettings.getInt("antialiasing", "Video"))
|
||||
mEngineSettings.setInt("antialiasing", "Video", cAAValue);
|
||||
if (cAAValue != Settings::Manager::getInt("antialiasing", "Video"))
|
||||
Settings::Manager::setInt("antialiasing", "Video", cAAValue);
|
||||
|
||||
int cWidth = 0;
|
||||
int cHeight = 0;
|
||||
|
@ -199,33 +210,38 @@ void Launcher::GraphicsPage::saveSettings()
|
|||
cHeight = customHeightSpinBox->value();
|
||||
}
|
||||
|
||||
if (cWidth != mEngineSettings.getInt("resolution x", "Video"))
|
||||
mEngineSettings.setInt("resolution x", "Video", cWidth);
|
||||
if (cWidth != Settings::Manager::getInt("resolution x", "Video"))
|
||||
Settings::Manager::setInt("resolution x", "Video", cWidth);
|
||||
|
||||
if (cHeight != mEngineSettings.getInt("resolution y", "Video"))
|
||||
mEngineSettings.setInt("resolution y", "Video", cHeight);
|
||||
if (cHeight != Settings::Manager::getInt("resolution y", "Video"))
|
||||
Settings::Manager::setInt("resolution y", "Video", cHeight);
|
||||
|
||||
int cScreen = screenComboBox->currentIndex();
|
||||
if (cScreen != mEngineSettings.getInt("screen", "Video"))
|
||||
mEngineSettings.setInt("screen", "Video", cScreen);
|
||||
if (cScreen != Settings::Manager::getInt("screen", "Video"))
|
||||
Settings::Manager::setInt("screen", "Video", cScreen);
|
||||
|
||||
if (framerateLimitCheckBox->checkState() != Qt::Unchecked)
|
||||
{
|
||||
float cFpsLimit = framerateLimitSpinBox->value();
|
||||
if (cFpsLimit != mEngineSettings.getFloat("framerate limit", "Video"))
|
||||
mEngineSettings.setFloat("framerate limit", "Video", cFpsLimit);
|
||||
if (cFpsLimit != Settings::Manager::getFloat("framerate limit", "Video"))
|
||||
Settings::Manager::setFloat("framerate limit", "Video", cFpsLimit);
|
||||
}
|
||||
else if (mEngineSettings.getFloat("framerate limit", "Video") != 0)
|
||||
else if (Settings::Manager::getFloat("framerate limit", "Video") != 0)
|
||||
{
|
||||
mEngineSettings.setFloat("framerate limit", "Video", 0);
|
||||
Settings::Manager::setFloat("framerate limit", "Video", 0);
|
||||
}
|
||||
|
||||
// Lighting
|
||||
static std::array<std::string, 3> lightingMethodMap = {"legacy", "shaders compatibility", "shaders"};
|
||||
Settings::Manager::setString("lighting method", "Shaders", lightingMethodMap[lightingMethodComboBox->currentIndex()]);
|
||||
|
||||
// Shadows
|
||||
int cShadowDist = shadowDistanceCheckBox->checkState() != Qt::Unchecked ? shadowDistanceSpinBox->value() : 0;
|
||||
if (mEngineSettings.getInt("maximum shadow map distance", "Shadows") != cShadowDist)
|
||||
mEngineSettings.setInt("maximum shadow map distance", "Shadows", cShadowDist);
|
||||
if (Settings::Manager::getInt("maximum shadow map distance", "Shadows") != cShadowDist)
|
||||
Settings::Manager::setInt("maximum shadow map distance", "Shadows", cShadowDist);
|
||||
float cFadeStart = fadeStartSpinBox->value();
|
||||
if (cShadowDist > 0 && mEngineSettings.getFloat("shadow fade start", "Shadows") != cFadeStart)
|
||||
mEngineSettings.setFloat("shadow fade start", "Shadows", cFadeStart);
|
||||
if (cShadowDist > 0 && Settings::Manager::getFloat("shadow fade start", "Shadows") != cFadeStart)
|
||||
Settings::Manager::setFloat("shadow fade start", "Shadows", cFadeStart);
|
||||
|
||||
bool cActorShadows = actorShadowsCheckBox->checkState();
|
||||
bool cObjectShadows = objectShadowsCheckBox->checkState();
|
||||
|
@ -233,42 +249,42 @@ void Launcher::GraphicsPage::saveSettings()
|
|||
bool cPlayerShadows = playerShadowsCheckBox->checkState();
|
||||
if (cActorShadows || cObjectShadows || cTerrainShadows || cPlayerShadows)
|
||||
{
|
||||
if (!mEngineSettings.getBool("enable shadows", "Shadows"))
|
||||
mEngineSettings.setBool("enable shadows", "Shadows", true);
|
||||
if (mEngineSettings.getBool("actor shadows", "Shadows") != cActorShadows)
|
||||
mEngineSettings.setBool("actor shadows", "Shadows", cActorShadows);
|
||||
if (mEngineSettings.getBool("player shadows", "Shadows") != cPlayerShadows)
|
||||
mEngineSettings.setBool("player shadows", "Shadows", cPlayerShadows);
|
||||
if (mEngineSettings.getBool("object shadows", "Shadows") != cObjectShadows)
|
||||
mEngineSettings.setBool("object shadows", "Shadows", cObjectShadows);
|
||||
if (mEngineSettings.getBool("terrain shadows", "Shadows") != cTerrainShadows)
|
||||
mEngineSettings.setBool("terrain shadows", "Shadows", cTerrainShadows);
|
||||
if (!Settings::Manager::getBool("enable shadows", "Shadows"))
|
||||
Settings::Manager::setBool("enable shadows", "Shadows", true);
|
||||
if (Settings::Manager::getBool("actor shadows", "Shadows") != cActorShadows)
|
||||
Settings::Manager::setBool("actor shadows", "Shadows", cActorShadows);
|
||||
if (Settings::Manager::getBool("player shadows", "Shadows") != cPlayerShadows)
|
||||
Settings::Manager::setBool("player shadows", "Shadows", cPlayerShadows);
|
||||
if (Settings::Manager::getBool("object shadows", "Shadows") != cObjectShadows)
|
||||
Settings::Manager::setBool("object shadows", "Shadows", cObjectShadows);
|
||||
if (Settings::Manager::getBool("terrain shadows", "Shadows") != cTerrainShadows)
|
||||
Settings::Manager::setBool("terrain shadows", "Shadows", cTerrainShadows);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mEngineSettings.getBool("enable shadows", "Shadows"))
|
||||
mEngineSettings.setBool("enable shadows", "Shadows", false);
|
||||
if (mEngineSettings.getBool("actor shadows", "Shadows"))
|
||||
mEngineSettings.setBool("actor shadows", "Shadows", false);
|
||||
if (mEngineSettings.getBool("player shadows", "Shadows"))
|
||||
mEngineSettings.setBool("player shadows", "Shadows", false);
|
||||
if (mEngineSettings.getBool("object shadows", "Shadows"))
|
||||
mEngineSettings.setBool("object shadows", "Shadows", false);
|
||||
if (mEngineSettings.getBool("terrain shadows", "Shadows"))
|
||||
mEngineSettings.setBool("terrain shadows", "Shadows", false);
|
||||
if (Settings::Manager::getBool("enable shadows", "Shadows"))
|
||||
Settings::Manager::setBool("enable shadows", "Shadows", false);
|
||||
if (Settings::Manager::getBool("actor shadows", "Shadows"))
|
||||
Settings::Manager::setBool("actor shadows", "Shadows", false);
|
||||
if (Settings::Manager::getBool("player shadows", "Shadows"))
|
||||
Settings::Manager::setBool("player shadows", "Shadows", false);
|
||||
if (Settings::Manager::getBool("object shadows", "Shadows"))
|
||||
Settings::Manager::setBool("object shadows", "Shadows", false);
|
||||
if (Settings::Manager::getBool("terrain shadows", "Shadows"))
|
||||
Settings::Manager::setBool("terrain shadows", "Shadows", false);
|
||||
}
|
||||
|
||||
bool cIndoorShadows = indoorShadowsCheckBox->checkState();
|
||||
if (mEngineSettings.getBool("enable indoor shadows", "Shadows") != cIndoorShadows)
|
||||
mEngineSettings.setBool("enable indoor shadows", "Shadows", cIndoorShadows);
|
||||
if (Settings::Manager::getBool("enable indoor shadows", "Shadows") != cIndoorShadows)
|
||||
Settings::Manager::setBool("enable indoor shadows", "Shadows", cIndoorShadows);
|
||||
|
||||
int cShadowRes = shadowResolutionComboBox->currentText().toInt();
|
||||
if (cShadowRes != mEngineSettings.getInt("shadow map resolution", "Shadows"))
|
||||
mEngineSettings.setInt("shadow map resolution", "Shadows", cShadowRes);
|
||||
if (cShadowRes != Settings::Manager::getInt("shadow map resolution", "Shadows"))
|
||||
Settings::Manager::setInt("shadow map resolution", "Shadows", cShadowRes);
|
||||
|
||||
auto cComputeSceneBounds = shadowComputeSceneBoundsComboBox->currentText().toStdString();
|
||||
if (cComputeSceneBounds != mEngineSettings.getString("compute scene bounds", "Shadows"))
|
||||
mEngineSettings.setString("compute scene bounds", "Shadows", cComputeSceneBounds);
|
||||
if (cComputeSceneBounds != Settings::Manager::getString("compute scene bounds", "Shadows"))
|
||||
Settings::Manager::setString("compute scene bounds", "Shadows", cComputeSceneBounds);
|
||||
}
|
||||
|
||||
QStringList Launcher::GraphicsPage::getAvailableResolutions(int screen)
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace Launcher
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
GraphicsPage(Settings::Manager &engineSettings, QWidget *parent = nullptr);
|
||||
explicit GraphicsPage(QWidget *parent = nullptr);
|
||||
|
||||
void saveSettings();
|
||||
bool loadSettings();
|
||||
|
@ -33,8 +33,6 @@ namespace Launcher
|
|||
void slotShadowDistLimitToggled(bool checked);
|
||||
|
||||
private:
|
||||
Settings::Manager &mEngineSettings;
|
||||
|
||||
QVector<QStringList> mResolutionsPerScreen;
|
||||
|
||||
static QStringList getAvailableResolutions(int screen);
|
||||
|
|
|
@ -123,9 +123,9 @@ void Launcher::MainDialog::createPages()
|
|||
|
||||
mPlayPage = new PlayPage(this);
|
||||
mDataFilesPage = new DataFilesPage(mCfgMgr, mGameSettings, mLauncherSettings, this);
|
||||
mGraphicsPage = new GraphicsPage(mEngineSettings, this);
|
||||
mGraphicsPage = new GraphicsPage(this);
|
||||
mSettingsPage = new SettingsPage(mCfgMgr, mGameSettings, mLauncherSettings, this);
|
||||
mAdvancedPage = new AdvancedPage(mGameSettings, mEngineSettings, this);
|
||||
mAdvancedPage = new AdvancedPage(mGameSettings, this);
|
||||
|
||||
// Set the combobox of the play page to imitate the combobox on the datafilespage
|
||||
mPlayPage->setProfilesModel(mDataFilesPage->profilesModel());
|
||||
|
@ -424,11 +424,11 @@ bool Launcher::MainDialog::setupGraphicsSettings()
|
|||
mEngineSettings.clear();
|
||||
|
||||
// Create the settings manager and load default settings file
|
||||
const std::string localDefault = (mCfgMgr.getLocalPath() / "settings-default.cfg").string();
|
||||
const std::string globalDefault = (mCfgMgr.getGlobalPath() / "settings-default.cfg").string();
|
||||
const std::string localDefault = (mCfgMgr.getLocalPath() / "defaults.bin").string();
|
||||
const std::string globalDefault = (mCfgMgr.getGlobalPath() / "defaults.bin").string();
|
||||
std::string defaultPath;
|
||||
|
||||
// Prefer the settings-default.cfg in the current directory.
|
||||
// Prefer the defaults.bin in the current directory.
|
||||
if (boost::filesystem::exists(localDefault))
|
||||
defaultPath = localDefault;
|
||||
else if (boost::filesystem::exists(globalDefault))
|
||||
|
@ -436,7 +436,7 @@ bool Launcher::MainDialog::setupGraphicsSettings()
|
|||
// Something's very wrong if we can't find the file at all.
|
||||
else {
|
||||
cfgError(tr("Error reading OpenMW configuration file"),
|
||||
tr("<br><b>Could not find settings-default.cfg</b><br><br> \
|
||||
tr("<br><b>Could not find defaults.bin</b><br><br> \
|
||||
The problem may be due to an incomplete installation of OpenMW.<br> \
|
||||
Reinstalling OpenMW may resolve the problem."));
|
||||
return false;
|
||||
|
@ -447,7 +447,7 @@ bool Launcher::MainDialog::setupGraphicsSettings()
|
|||
mEngineSettings.loadDefault(defaultPath);
|
||||
}
|
||||
catch (std::exception& e) {
|
||||
std::string msg = std::string("<br><b>Error reading settings-default.cfg</b><br><br>") + e.what();
|
||||
std::string msg = std::string("<br><b>Error reading defaults.bin</b><br><br>") + e.what();
|
||||
cfgError(tr("Error reading OpenMW configuration file"), tr(msg.c_str()));
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -676,7 +676,7 @@ MwIniImporter::multistrmap MwIniImporter::loadIniFile(const boost::filesystem::p
|
|||
}
|
||||
|
||||
if(line[0] == '[') {
|
||||
int pos = line.find(']');
|
||||
int pos = static_cast<int>(line.find(']'));
|
||||
if(pos < 2) {
|
||||
std::cout << "Warning: ini file wrongly formatted (" << line << "). Line ignored." << std::endl;
|
||||
continue;
|
||||
|
@ -686,12 +686,12 @@ MwIniImporter::multistrmap MwIniImporter::loadIniFile(const boost::filesystem::p
|
|||
continue;
|
||||
}
|
||||
|
||||
int comment_pos = line.find(";");
|
||||
int comment_pos = static_cast<int>(line.find(';'));
|
||||
if(comment_pos > 0) {
|
||||
line = line.substr(0,comment_pos);
|
||||
}
|
||||
|
||||
int pos = line.find("=");
|
||||
int pos = static_cast<int>(line.find('='));
|
||||
if(pos < 1) {
|
||||
continue;
|
||||
}
|
||||
|
@ -722,7 +722,7 @@ MwIniImporter::multistrmap MwIniImporter::loadCfgFile(const boost::filesystem::p
|
|||
while (std::getline(file, line)) {
|
||||
|
||||
// we cant say comment by only looking at first char anymore
|
||||
int comment_pos = line.find("#");
|
||||
int comment_pos = static_cast<int>(line.find('#'));
|
||||
if(comment_pos > 0) {
|
||||
line = line.substr(0,comment_pos);
|
||||
}
|
||||
|
@ -731,7 +731,7 @@ MwIniImporter::multistrmap MwIniImporter::loadCfgFile(const boost::filesystem::p
|
|||
continue;
|
||||
}
|
||||
|
||||
int pos = line.find("=");
|
||||
int pos = static_cast<int>(line.find('='));
|
||||
if(pos < 1) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace bfs = boost::filesystem;
|
|||
///See if the file has the named extension
|
||||
bool hasExtension(std::string filename, std::string extensionToFind)
|
||||
{
|
||||
std::string extension = filename.substr(filename.find_last_of(".")+1);
|
||||
std::string extension = filename.substr(filename.find_last_of('.')+1);
|
||||
|
||||
//Convert strings to lower case for comparison
|
||||
std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower);
|
||||
|
|
|
@ -89,7 +89,7 @@ opencs_units (view/render
|
|||
scenewidget worldspacewidget pagedworldspacewidget unpagedworldspacewidget
|
||||
previewwidget editmode instancemode instanceselectionmode instancemovemode
|
||||
orbitcameramode pathgridmode selectionmode pathgridselectionmode cameracontroller
|
||||
cellwater terraintexturemode actor terrainselection terrainshapemode brushdraw
|
||||
cellwater terraintexturemode actor terrainselection terrainshapemode brushdraw commands
|
||||
)
|
||||
|
||||
opencs_units_noqt (view/render
|
||||
|
|
|
@ -21,7 +21,7 @@ void CSMDoc::Blacklist::add (CSMWorld::UniversalId::Type type,
|
|||
{
|
||||
std::vector<std::string>& list = mIds[type];
|
||||
|
||||
int size = list.size();
|
||||
size_t size = list.size();
|
||||
|
||||
list.resize (size+ids.size());
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include "../tools/reportmodel.hpp"
|
||||
|
||||
#include "document.hpp"
|
||||
#include "state.hpp"
|
||||
|
||||
CSMDoc::Loader::Stage::Stage() : mFile (0), mRecordsLoaded (0), mRecordsLeft (false) {}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#include "../world/universalid.hpp"
|
||||
|
||||
#include "state.hpp"
|
||||
#include "stage.hpp"
|
||||
|
||||
void CSMDoc::Operation::prepareStages()
|
||||
|
|
|
@ -9,7 +9,7 @@ CSMFilter::NAryNode::NAryNode (const std::vector<std::shared_ptr<Node> >& nodes,
|
|||
|
||||
int CSMFilter::NAryNode::getSize() const
|
||||
{
|
||||
return mNodes.size();
|
||||
return static_cast<int>(mNodes.size());
|
||||
}
|
||||
|
||||
const CSMFilter::Node& CSMFilter::NAryNode::operator[] (int index) const
|
||||
|
|
|
@ -178,7 +178,7 @@ namespace CSMPrefs
|
|||
{
|
||||
const int MaxKeys = 4; // A limitation of QKeySequence
|
||||
|
||||
size_t end = data.find(";");
|
||||
size_t end = data.find(';');
|
||||
size_t size = std::min(end, data.size());
|
||||
|
||||
std::string value = data.substr(0, size);
|
||||
|
@ -191,7 +191,7 @@ namespace CSMPrefs
|
|||
|
||||
while (start < value.size())
|
||||
{
|
||||
end = data.find("+", start);
|
||||
end = data.find('+', start);
|
||||
end = std::min(end, value.size());
|
||||
|
||||
std::string name = value.substr(start, end - start);
|
||||
|
@ -243,7 +243,7 @@ namespace CSMPrefs
|
|||
|
||||
void ShortcutManager::convertFromString(const std::string& data, int& modifier) const
|
||||
{
|
||||
size_t start = data.find(";") + 1;
|
||||
size_t start = data.find(';') + 1;
|
||||
start = std::min(start, data.size());
|
||||
|
||||
std::string name = data.substr(start);
|
||||
|
|
|
@ -11,7 +11,7 @@ CSMTools::MandatoryIdStage::MandatoryIdStage (const CSMWorld::CollectionBase& id
|
|||
|
||||
int CSMTools::MandatoryIdStage::setup()
|
||||
{
|
||||
return mIds.size();
|
||||
return static_cast<int>(mIds.size());
|
||||
}
|
||||
|
||||
void CSMTools::MandatoryIdStage::perform (int stage, CSMDoc::Messages& messages)
|
||||
|
|
|
@ -24,7 +24,7 @@ int CSMTools::ReportModel::rowCount (const QModelIndex & parent) const
|
|||
if (parent.isValid())
|
||||
return 0;
|
||||
|
||||
return mRows.size();
|
||||
return static_cast<int>(mRows.size());
|
||||
}
|
||||
|
||||
int CSMTools::ReportModel::columnCount (const QModelIndex & parent) const
|
||||
|
@ -140,7 +140,7 @@ bool CSMTools::ReportModel::removeRows (int row, int count, const QModelIndex& p
|
|||
|
||||
void CSMTools::ReportModel::add (const CSMDoc::Message& message)
|
||||
{
|
||||
beginInsertRows (QModelIndex(), mRows.size(), mRows.size());
|
||||
beginInsertRows (QModelIndex(), static_cast<int>(mRows.size()), static_cast<int>(mRows.size()));
|
||||
|
||||
mRows.push_back (message);
|
||||
|
||||
|
@ -176,7 +176,7 @@ void CSMTools::ReportModel::clear()
|
|||
{
|
||||
if (!mRows.empty())
|
||||
{
|
||||
beginRemoveRows (QModelIndex(), 0, mRows.size()-1);
|
||||
beginRemoveRows (QModelIndex(), 0, static_cast<int>(mRows.size())-1);
|
||||
mRows.clear();
|
||||
endRemoveRows();
|
||||
}
|
||||
|
|
|
@ -270,7 +270,7 @@ void CSMWorld::IdTable::reorderRows (int baseIndex, const std::vector<int>& newO
|
|||
if (!newOrder.empty())
|
||||
if (mIdCollection->reorderRows (baseIndex, newOrder))
|
||||
emit dataChanged (index (baseIndex, 0),
|
||||
index (baseIndex+newOrder.size()-1, mIdCollection->getColumns()-1));
|
||||
index (baseIndex+static_cast<int>(newOrder.size())-1, mIdCollection->getColumns()-1));
|
||||
}
|
||||
|
||||
std::pair<CSMWorld::UniversalId, std::string> CSMWorld::IdTable::view (int row) const
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "refcollection.hpp"
|
||||
|
||||
#include <components/misc/stringops.hpp>
|
||||
#include <components/esm/loadcell.hpp>
|
||||
|
||||
#include "ref.hpp"
|
||||
|
@ -109,11 +108,13 @@ void CSMWorld::RefCollection::load (ESM::ESMReader& reader, int cellIndex, bool
|
|||
|
||||
Record<CellRef> record;
|
||||
record.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly;
|
||||
(base ? record.mBase : record.mModified) = ref;
|
||||
const ESM::RefNum refNum = ref.mRefNum;
|
||||
std::string refId = ref.mId;
|
||||
(base ? record.mBase : record.mModified) = std::move(ref);
|
||||
|
||||
appendRecord (record);
|
||||
|
||||
cache.insert (std::make_pair (ref.mRefNum, ref.mId));
|
||||
cache.emplace(refNum, std::move(refId));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -124,7 +125,7 @@ void CSMWorld::RefCollection::load (ESM::ESMReader& reader, int cellIndex, bool
|
|||
|
||||
Record<CellRef> record = getRecord (index);
|
||||
record.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_Modified;
|
||||
(base ? record.mBase : record.mModified) = ref;
|
||||
(base ? record.mBase : record.mModified) = std::move(ref);
|
||||
|
||||
setRecord (index, record);
|
||||
}
|
||||
|
|
|
@ -20,13 +20,13 @@ void CSMWorld::Resources::recreate(const VFS::Manager* vfs, const char * const *
|
|||
mFiles.clear();
|
||||
mIndex.clear();
|
||||
|
||||
int baseSize = mBaseDirectory.size();
|
||||
size_t baseSize = mBaseDirectory.size();
|
||||
|
||||
const std::map<std::string, VFS::File*>& index = vfs->getIndex();
|
||||
for (std::map<std::string, VFS::File*>::const_iterator it = index.begin(); it != index.end(); ++it)
|
||||
{
|
||||
std::string filepath = it->first;
|
||||
if (static_cast<int> (filepath.size())<baseSize+1 ||
|
||||
if (filepath.size()<baseSize+1 ||
|
||||
filepath.substr (0, baseSize)!=mBaseDirectory ||
|
||||
(filepath[baseSize]!='/' && filepath[baseSize]!='\\'))
|
||||
continue;
|
||||
|
@ -60,7 +60,7 @@ void CSMWorld::Resources::recreate(const VFS::Manager* vfs, const char * const *
|
|||
|
||||
int CSMWorld::Resources::getSize() const
|
||||
{
|
||||
return mFiles.size();
|
||||
return static_cast<int>(mFiles.size());
|
||||
}
|
||||
|
||||
std::string CSMWorld::Resources::getId (int index) const
|
||||
|
|
|
@ -30,7 +30,7 @@ void CSVDoc::Operations::setProgress (int current, int max, int type, int thread
|
|||
return;
|
||||
}
|
||||
|
||||
int oldCount = mOperations.size();
|
||||
int oldCount = static_cast<int>(mOperations.size());
|
||||
int newCount = oldCount + 1;
|
||||
|
||||
Operation *operation = new Operation (type, this);
|
||||
|
@ -51,7 +51,7 @@ void CSVDoc::Operations::quitOperation (int type)
|
|||
for (std::vector<Operation *>::iterator iter (mOperations.begin()); iter!=mOperations.end(); ++iter)
|
||||
if ((*iter)->getType()==type)
|
||||
{
|
||||
int oldCount = mOperations.size();
|
||||
int oldCount = static_cast<int>(mOperations.size());
|
||||
int newCount = oldCount - 1;
|
||||
|
||||
mLayout->removeItem ((*iter)->getLayout());
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include "../../model/doc/documentmanager.hpp"
|
||||
#include "../../model/doc/document.hpp"
|
||||
#include "../../model/world/columns.hpp"
|
||||
#include "../../model/world/universalid.hpp"
|
||||
#include "../../model/world/idcompletionmanager.hpp"
|
||||
|
||||
#include "../../model/prefs/state.hpp"
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include <osg/Group>
|
||||
#include <osg/PositionAttitudeTransform>
|
||||
#include <osg/Geode>
|
||||
#include <osg/Geometry>
|
||||
#include <osg/PrimitiveSet>
|
||||
|
||||
|
@ -13,15 +12,23 @@
|
|||
#include "../../model/world/cellcoordinates.hpp"
|
||||
|
||||
const int CSVRender::CellBorder::CellSize = ESM::Land::REAL_SIZE;
|
||||
const int CSVRender::CellBorder::VertexCount = (ESM::Land::LAND_SIZE * 4) - 3;
|
||||
|
||||
/*
|
||||
The number of vertices per cell border is equal to the number of vertices per edge
|
||||
minus the duplicated corner vertices. An additional vertex to close the loop is NOT needed.
|
||||
*/
|
||||
const int CSVRender::CellBorder::VertexCount = (ESM::Land::LAND_SIZE * 4) - 4;
|
||||
|
||||
|
||||
CSVRender::CellBorder::CellBorder(osg::Group* cellNode, const CSMWorld::CellCoordinates& coords)
|
||||
: mParentNode(cellNode)
|
||||
{
|
||||
mBorderGeometry = new osg::Geometry();
|
||||
|
||||
mBaseNode = new osg::PositionAttitudeTransform();
|
||||
mBaseNode->setNodeMask(Mask_CellBorder);
|
||||
mBaseNode->setPosition(osg::Vec3f(coords.getX() * CellSize, coords.getY() * CellSize, 10));
|
||||
mBaseNode->addChild(mBorderGeometry);
|
||||
|
||||
mParentNode->addChild(mBaseNode);
|
||||
}
|
||||
|
@ -38,56 +45,59 @@ void CSVRender::CellBorder::buildShape(const ESM::Land& esmLand)
|
|||
if (!landData)
|
||||
return;
|
||||
|
||||
osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry();
|
||||
mBaseNode->removeChild(mBorderGeometry);
|
||||
mBorderGeometry = new osg::Geometry();
|
||||
|
||||
// Vertices
|
||||
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array();
|
||||
|
||||
int x = 0, y = 0;
|
||||
for (; x < ESM::Land::LAND_SIZE; ++x)
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
|
||||
/*
|
||||
Traverse the cell border counter-clockwise starting at the SW corner vertex (0, 0).
|
||||
Each loop starts at a corner vertex and ends right before the next corner vertex.
|
||||
*/
|
||||
for (; x < ESM::Land::LAND_SIZE - 1; ++x)
|
||||
vertices->push_back(osg::Vec3f(scaleToWorld(x), scaleToWorld(y), landData->mHeights[landIndex(x, y)]));
|
||||
|
||||
x = ESM::Land::LAND_SIZE - 1;
|
||||
for (; y < ESM::Land::LAND_SIZE; ++y)
|
||||
for (; y < ESM::Land::LAND_SIZE - 1; ++y)
|
||||
vertices->push_back(osg::Vec3f(scaleToWorld(x), scaleToWorld(y), landData->mHeights[landIndex(x, y)]));
|
||||
|
||||
y = ESM::Land::LAND_SIZE - 1;
|
||||
for (; x >= 0; --x)
|
||||
for (; x > 0; --x)
|
||||
vertices->push_back(osg::Vec3f(scaleToWorld(x), scaleToWorld(y), landData->mHeights[landIndex(x, y)]));
|
||||
|
||||
x = 0;
|
||||
for (; y >= 0; --y)
|
||||
for (; y > 0; --y)
|
||||
vertices->push_back(osg::Vec3f(scaleToWorld(x), scaleToWorld(y), landData->mHeights[landIndex(x, y)]));
|
||||
|
||||
geometry->setVertexArray(vertices);
|
||||
mBorderGeometry->setVertexArray(vertices);
|
||||
|
||||
// Color
|
||||
osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array();
|
||||
colors->push_back(osg::Vec4f(0.f, 0.5f, 0.f, 1.f));
|
||||
|
||||
geometry->setColorArray(colors, osg::Array::BIND_PER_PRIMITIVE_SET);
|
||||
mBorderGeometry->setColorArray(colors, osg::Array::BIND_PER_PRIMITIVE_SET);
|
||||
|
||||
// Primitive
|
||||
osg::ref_ptr<osg::DrawElementsUShort> primitives =
|
||||
new osg::DrawElementsUShort(osg::PrimitiveSet::LINE_STRIP, VertexCount+1);
|
||||
new osg::DrawElementsUShort(osg::PrimitiveSet::LINE_STRIP, VertexCount + 1);
|
||||
|
||||
// Assign one primitive to each vertex.
|
||||
for (size_t i = 0; i < VertexCount; ++i)
|
||||
primitives->setElement(i, i);
|
||||
|
||||
// Assign the last primitive to the first vertex to close the loop.
|
||||
primitives->setElement(VertexCount, 0);
|
||||
|
||||
geometry->addPrimitiveSet(primitives);
|
||||
geometry->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
mBorderGeometry->addPrimitiveSet(primitives);
|
||||
mBorderGeometry->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
|
||||
geode->addDrawable(geometry);
|
||||
mBaseNode->addChild(geode);
|
||||
mBaseNode->addChild(mBorderGeometry);
|
||||
}
|
||||
|
||||
size_t CSVRender::CellBorder::landIndex(int x, int y)
|
||||
{
|
||||
return y * ESM::Land::LAND_SIZE + x;
|
||||
return static_cast<size_t>(y) * ESM::Land::LAND_SIZE + x;
|
||||
}
|
||||
|
||||
float CSVRender::CellBorder::scaleToWorld(int value)
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
namespace osg
|
||||
{
|
||||
class Geometry;
|
||||
class Group;
|
||||
class PositionAttitudeTransform;
|
||||
}
|
||||
|
@ -47,7 +48,7 @@ namespace CSVRender
|
|||
|
||||
osg::Group* mParentNode;
|
||||
osg::ref_ptr<osg::PositionAttitudeTransform> mBaseNode;
|
||||
|
||||
osg::ref_ptr<osg::Geometry> mBorderGeometry;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
19
apps/opencs/view/render/commands.cpp
Normal file
19
apps/opencs/view/render/commands.cpp
Normal file
|
@ -0,0 +1,19 @@
|
|||
#include "commands.hpp"
|
||||
|
||||
#include <components/esm/loadland.hpp>
|
||||
|
||||
#include "terrainselection.hpp"
|
||||
|
||||
CSVRender::DrawTerrainSelectionCommand::DrawTerrainSelectionCommand(TerrainSelection& terrainSelection, QUndoCommand* parent)
|
||||
: mTerrainSelection(terrainSelection)
|
||||
{ }
|
||||
|
||||
void CSVRender::DrawTerrainSelectionCommand::redo()
|
||||
{
|
||||
mTerrainSelection.update();
|
||||
}
|
||||
|
||||
void CSVRender::DrawTerrainSelectionCommand::undo()
|
||||
{
|
||||
mTerrainSelection.update();
|
||||
}
|
35
apps/opencs/view/render/commands.hpp
Normal file
35
apps/opencs/view/render/commands.hpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#ifndef CSV_RENDER_COMMANDS_HPP
|
||||
#define CSV_RENDER_COMMANDS_HPP
|
||||
|
||||
#include <QUndoCommand>
|
||||
|
||||
namespace CSVRender
|
||||
{
|
||||
class TerrainSelection;
|
||||
|
||||
/*
|
||||
Current solution to force a redrawing of the terrain-selection grid
|
||||
when undoing/redoing changes in the editor.
|
||||
This only triggers a simple redraw of the grid, so only use it in
|
||||
conjunction with actual data changes which deform the grid.
|
||||
|
||||
Please note that this command needs to be put onto the QUndoStack twice:
|
||||
at the start and at the end of the related terrain manipulation.
|
||||
This makes sure that the grid is always updated after all changes have
|
||||
been undone or redone -- but it also means that the selection is redrawn
|
||||
once at the beginning of either action. Future refinement may solve that.
|
||||
*/
|
||||
class DrawTerrainSelectionCommand : public QUndoCommand
|
||||
{
|
||||
private:
|
||||
TerrainSelection& mTerrainSelection;
|
||||
|
||||
public:
|
||||
DrawTerrainSelectionCommand(TerrainSelection& terrainSelection, QUndoCommand* parent = nullptr);
|
||||
|
||||
void redo() override;
|
||||
void undo() override;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -3,7 +3,6 @@
|
|||
#include <QMenu>
|
||||
|
||||
#include "../../model/prefs/shortcut.hpp"
|
||||
#include "../../model/prefs/shortcuteventhandler.hpp"
|
||||
|
||||
#include "worldspacewidget.hpp"
|
||||
|
||||
|
|
|
@ -7,18 +7,14 @@
|
|||
#include <QMouseEvent>
|
||||
#include <QApplication>
|
||||
|
||||
#include <components/esm/loadland.hpp>
|
||||
|
||||
#include <components/misc/constants.hpp>
|
||||
|
||||
#include "../../model/prefs/shortcut.hpp"
|
||||
|
||||
#include "../../model/world/tablemimedata.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
|
||||
#include "../widget/scenetooltoggle2.hpp"
|
||||
#include "../widget/scenetoolmode.hpp"
|
||||
#include "../widget/scenetooltoggle2.hpp"
|
||||
|
||||
#include "editmode.hpp"
|
||||
#include "mask.hpp"
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/world/commandmacro.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/world/idtree.hpp"
|
||||
|
||||
#include "../widget/scenetoolbar.hpp"
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
#include "../../model/prefs/state.hpp"
|
||||
#include "../../model/prefs/shortcut.hpp"
|
||||
#include "../../model/prefs/shortcuteventhandler.hpp"
|
||||
|
||||
#include "lighting.hpp"
|
||||
#include "mask.hpp"
|
||||
|
|
|
@ -39,64 +39,23 @@ std::vector<std::pair<int, int>> CSVRender::TerrainSelection::getTerrainSelectio
|
|||
void CSVRender::TerrainSelection::onlySelect(const std::vector<std::pair<int, int>> &localPositions)
|
||||
{
|
||||
mSelection = localPositions;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void CSVRender::TerrainSelection::addSelect(const std::pair<int, int> &localPos)
|
||||
void CSVRender::TerrainSelection::addSelect(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress)
|
||||
{
|
||||
if (std::find(mSelection.begin(), mSelection.end(), localPos) == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
update();
|
||||
}
|
||||
handleSelection(localPositions, toggleInProgress, SelectionMethod::AddSelect);
|
||||
}
|
||||
|
||||
void CSVRender::TerrainSelection::toggleSelect(const std::vector<std::pair<int, int>> &localPositions, bool toggleInProgress)
|
||||
void CSVRender::TerrainSelection::removeSelect(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress)
|
||||
{
|
||||
if (toggleInProgress)
|
||||
{
|
||||
for(auto const& localPos: localPositions)
|
||||
{
|
||||
auto iterTemp = std::find(mTemporarySelection.begin(), mTemporarySelection.end(), localPos);
|
||||
mDraggedOperationFlag = true;
|
||||
handleSelection(localPositions, toggleInProgress, SelectionMethod::RemoveSelect);
|
||||
}
|
||||
|
||||
if (iterTemp == mTemporarySelection.end())
|
||||
{
|
||||
auto iter = std::find(mSelection.begin(), mSelection.end(), localPos);
|
||||
if (iter != mSelection.end())
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
}
|
||||
|
||||
mTemporarySelection.push_back(localPos);
|
||||
}
|
||||
}
|
||||
else if (mDraggedOperationFlag == false)
|
||||
{
|
||||
for(auto const& localPos: localPositions)
|
||||
{
|
||||
const auto iter = std::find(mSelection.begin(), mSelection.end(), localPos);
|
||||
if (iter != mSelection.end())
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mDraggedOperationFlag = false;
|
||||
mTemporarySelection.clear();
|
||||
}
|
||||
update();
|
||||
void CSVRender::TerrainSelection::toggleSelect(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress)
|
||||
{
|
||||
handleSelection(localPositions, toggleInProgress, SelectionMethod::ToggleSelect);
|
||||
}
|
||||
|
||||
void CSVRender::TerrainSelection::activate()
|
||||
|
@ -239,6 +198,100 @@ void CSVRender::TerrainSelection::drawTextureSelection(const osg::ref_ptr<osg::V
|
|||
}
|
||||
}
|
||||
|
||||
void CSVRender::TerrainSelection::handleSelection(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress, SelectionMethod selectionMethod)
|
||||
{
|
||||
if (toggleInProgress)
|
||||
{
|
||||
for (auto const& localPos : localPositions)
|
||||
{
|
||||
auto iterTemp = std::find(mTemporarySelection.begin(), mTemporarySelection.end(), localPos);
|
||||
mDraggedOperationFlag = true;
|
||||
|
||||
if (iterTemp == mTemporarySelection.end())
|
||||
{
|
||||
auto iter = std::find(mSelection.begin(), mSelection.end(), localPos);
|
||||
|
||||
switch (selectionMethod)
|
||||
{
|
||||
case SelectionMethod::AddSelect:
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
|
||||
break;
|
||||
case SelectionMethod::RemoveSelect:
|
||||
if (iter != mSelection.end())
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
|
||||
break;
|
||||
case SelectionMethod::ToggleSelect:
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
mTemporarySelection.push_back(localPos);
|
||||
}
|
||||
}
|
||||
else if (mDraggedOperationFlag == false)
|
||||
{
|
||||
for (auto const& localPos : localPositions)
|
||||
{
|
||||
const auto iter = std::find(mSelection.begin(), mSelection.end(), localPos);
|
||||
|
||||
switch (selectionMethod)
|
||||
{
|
||||
case SelectionMethod::AddSelect:
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
|
||||
break;
|
||||
case SelectionMethod::RemoveSelect:
|
||||
if (iter != mSelection.end())
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
|
||||
break;
|
||||
case SelectionMethod::ToggleSelect:
|
||||
if (iter == mSelection.end())
|
||||
{
|
||||
mSelection.emplace_back(localPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelection.erase(iter);
|
||||
}
|
||||
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mDraggedOperationFlag = false;
|
||||
|
||||
mTemporarySelection.clear();
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
bool CSVRender::TerrainSelection::noCell(const std::string& cellId)
|
||||
{
|
||||
CSMDoc::Document& document = mWorldspaceWidget->getDocument();
|
||||
|
|
|
@ -27,6 +27,14 @@ namespace CSVRender
|
|||
Shape
|
||||
};
|
||||
|
||||
enum class SelectionMethod
|
||||
{
|
||||
OnlySelect,
|
||||
AddSelect,
|
||||
RemoveSelect,
|
||||
ToggleSelect
|
||||
};
|
||||
|
||||
/// \brief Class handling the terrain selection data and rendering
|
||||
class TerrainSelection
|
||||
{
|
||||
|
@ -36,7 +44,8 @@ namespace CSVRender
|
|||
~TerrainSelection();
|
||||
|
||||
void onlySelect(const std::vector<std::pair<int, int>> &localPositions);
|
||||
void addSelect(const std::pair<int, int> &localPos);
|
||||
void addSelect(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress);
|
||||
void removeSelect(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress);
|
||||
void toggleSelect(const std::vector<std::pair<int, int>> &localPositions, bool toggleInProgress);
|
||||
|
||||
void activate();
|
||||
|
@ -55,6 +64,8 @@ namespace CSVRender
|
|||
|
||||
private:
|
||||
|
||||
void handleSelection(const std::vector<std::pair<int, int>>& localPositions, bool toggleInProgress, SelectionMethod selectionMethod);
|
||||
|
||||
bool noCell(const std::string& cellId);
|
||||
|
||||
bool noLand(const std::string& cellId);
|
||||
|
|
|
@ -25,18 +25,16 @@
|
|||
|
||||
#include "../../model/doc/document.hpp"
|
||||
#include "../../model/prefs/state.hpp"
|
||||
#include "../../model/world/columnbase.hpp"
|
||||
#include "../../model/world/commandmacro.hpp"
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/world/data.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/world/idtree.hpp"
|
||||
#include "../../model/world/land.hpp"
|
||||
#include "../../model/world/resourcetable.hpp"
|
||||
#include "../../model/world/tablemimedata.hpp"
|
||||
#include "../../model/world/universalid.hpp"
|
||||
|
||||
#include "brushdraw.hpp"
|
||||
#include "commands.hpp"
|
||||
#include "editmode.hpp"
|
||||
#include "pagedworldspacewidget.hpp"
|
||||
#include "mask.hpp"
|
||||
|
@ -45,7 +43,7 @@
|
|||
#include "worldspacewidget.hpp"
|
||||
|
||||
CSVRender::TerrainShapeMode::TerrainShapeMode (WorldspaceWidget *worldspaceWidget, osg::Group* parentNode, QWidget *parent)
|
||||
: EditMode (worldspaceWidget, QIcon {":scenetoolbar/editing-terrain-shape"}, Mask_Terrain | Mask_Reference, "Terrain land editing", parent),
|
||||
: EditMode (worldspaceWidget, QIcon {":scenetoolbar/editing-terrain-shape"}, Mask_Terrain, "Terrain land editing", parent),
|
||||
mParentNode(parentNode)
|
||||
{
|
||||
}
|
||||
|
@ -288,6 +286,9 @@ void CSVRender::TerrainShapeMode::applyTerrainEditChanges()
|
|||
|
||||
undoStack.beginMacro ("Edit shape and normal records");
|
||||
|
||||
// One command at the beginning of the macro for redrawing the terrain-selection grid when undoing the changes.
|
||||
undoStack.push(new DrawTerrainSelectionCommand(*mTerrainShapeSelection));
|
||||
|
||||
for(CSMWorld::CellCoordinates cellCoordinates: mAlteredCells)
|
||||
{
|
||||
std::string cellId = CSMWorld::CellCoordinates::generateId(cellCoordinates.getX(), cellCoordinates.getY());
|
||||
|
@ -356,6 +357,9 @@ void CSVRender::TerrainShapeMode::applyTerrainEditChanges()
|
|||
}
|
||||
pushNormalsEditToCommand(landNormalsNew, document, landTable, cellId);
|
||||
}
|
||||
// One command at the end of the macro for redrawing the terrain-selection grid when redoing the changes.
|
||||
undoStack.push(new DrawTerrainSelectionCommand(*mTerrainShapeSelection));
|
||||
|
||||
undoStack.endMacro();
|
||||
clearTransientEdits();
|
||||
}
|
||||
|
@ -433,7 +437,9 @@ void CSVRender::TerrainShapeMode::editTerrainShapeGrid(const std::pair<int, int>
|
|||
float smoothedByDistance = 0.0f;
|
||||
if (mShapeEditTool == ShapeEditTool_Drag) smoothedByDistance = calculateBumpShape(distance, r, mTotalDiffY);
|
||||
if (mShapeEditTool == ShapeEditTool_PaintToRaise || mShapeEditTool == ShapeEditTool_PaintToLower) smoothedByDistance = calculateBumpShape(distance, r, r + mShapeEditToolStrength);
|
||||
if (distance <= r)
|
||||
|
||||
// Using floating-point radius here to prevent selecting too few vertices.
|
||||
if (distance <= mBrushSize / 2.0f)
|
||||
{
|
||||
if (mShapeEditTool == ShapeEditTool_Drag) alterHeight(cellCoords, x, y, smoothedByDistance);
|
||||
if (mShapeEditTool == ShapeEditTool_PaintToRaise || mShapeEditTool == ShapeEditTool_PaintToLower)
|
||||
|
@ -1036,10 +1042,35 @@ void CSVRender::TerrainShapeMode::handleSelection(int globalSelectionX, int glob
|
|||
return;
|
||||
int selectionX = globalSelectionX;
|
||||
int selectionY = globalSelectionY;
|
||||
if (xIsAtCellBorder)
|
||||
|
||||
/*
|
||||
The northern and eastern edges don't belong to the current cell.
|
||||
If the corresponding adjacent cell is not loaded, some special handling is necessary to select border vertices.
|
||||
*/
|
||||
if (xIsAtCellBorder && yIsAtCellBorder)
|
||||
{
|
||||
/*
|
||||
Handle the NW, NE, and SE corner vertices.
|
||||
NW corner: (+1, -1) offset to reach current cell.
|
||||
NE corner: (-1, -1) offset to reach current cell.
|
||||
SE corner: (-1, +1) offset to reach current cell.
|
||||
*/
|
||||
if (isInCellSelection(globalSelectionX - 1, globalSelectionY - 1)
|
||||
|| isInCellSelection(globalSelectionX + 1, globalSelectionY - 1)
|
||||
|| isInCellSelection(globalSelectionX - 1, globalSelectionY + 1))
|
||||
{
|
||||
selections->emplace_back(globalSelectionX, globalSelectionY);
|
||||
}
|
||||
}
|
||||
else if (xIsAtCellBorder)
|
||||
{
|
||||
selectionX--;
|
||||
if (yIsAtCellBorder)
|
||||
}
|
||||
else if (yIsAtCellBorder)
|
||||
{
|
||||
selectionY--;
|
||||
}
|
||||
|
||||
if (isInCellSelection(selectionX, selectionY))
|
||||
selections->emplace_back(globalSelectionX, globalSelectionY);
|
||||
}
|
||||
|
@ -1074,8 +1105,11 @@ void CSVRender::TerrainShapeMode::selectTerrainShapes(const std::pair<int, int>&
|
|||
{
|
||||
int distanceX = abs(i - vertexCoords.first);
|
||||
int distanceY = abs(j - vertexCoords.second);
|
||||
int distance = std::round(sqrt(pow(distanceX, 2)+pow(distanceY, 2)));
|
||||
if (distance <= r) handleSelection(i, j, &selections);
|
||||
float distance = sqrt(pow(distanceX, 2)+pow(distanceY, 2));
|
||||
|
||||
// Using floating-point radius here to prevent selecting too few vertices.
|
||||
if (distance <= mBrushSize / 2.0f)
|
||||
handleSelection(i, j, &selections);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1092,9 +1126,21 @@ void CSVRender::TerrainShapeMode::selectTerrainShapes(const std::pair<int, int>&
|
|||
}
|
||||
}
|
||||
|
||||
if(selectMode == 0) mTerrainShapeSelection->onlySelect(selections);
|
||||
if(selectMode == 1) mTerrainShapeSelection->toggleSelect(selections, dragOperation);
|
||||
std::string selectAction;
|
||||
|
||||
if (selectMode == 0)
|
||||
selectAction = CSMPrefs::get()["3D Scene Editing"]["primary-select-action"].toString();
|
||||
else
|
||||
selectAction = CSMPrefs::get()["3D Scene Editing"]["secondary-select-action"].toString();
|
||||
|
||||
if (selectAction == "Select only")
|
||||
mTerrainShapeSelection->onlySelect(selections);
|
||||
else if (selectAction == "Add to selection")
|
||||
mTerrainShapeSelection->addSelect(selections, dragOperation);
|
||||
else if (selectAction == "Remove from selection")
|
||||
mTerrainShapeSelection->removeSelect(selections, dragOperation);
|
||||
else if (selectAction == "Invert selection")
|
||||
mTerrainShapeSelection->toggleSelect(selections, dragOperation);
|
||||
}
|
||||
|
||||
void CSVRender::TerrainShapeMode::pushEditToCommand(const CSMWorld::LandHeightsColumn::DataType& newLandGrid, CSMDoc::Document& document,
|
||||
|
|
|
@ -12,23 +12,17 @@
|
|||
|
||||
#include <osg/Group>
|
||||
|
||||
#include <components/esm/loadland.hpp>
|
||||
|
||||
#include "../widget/modebutton.hpp"
|
||||
#include "../widget/scenetoolbar.hpp"
|
||||
#include "../widget/scenetooltexturebrush.hpp"
|
||||
|
||||
#include "../../model/doc/document.hpp"
|
||||
#include "../../model/prefs/state.hpp"
|
||||
#include "../../model/world/columnbase.hpp"
|
||||
#include "../../model/world/commandmacro.hpp"
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/world/data.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/world/idtree.hpp"
|
||||
#include "../../model/world/land.hpp"
|
||||
#include "../../model/world/landtexture.hpp"
|
||||
#include "../../model/world/resourcetable.hpp"
|
||||
#include "../../model/world/tablemimedata.hpp"
|
||||
#include "../../model/world/universalid.hpp"
|
||||
#include "../widget/brushshapes.hpp"
|
||||
|
@ -332,7 +326,7 @@ void CSVRender::TerrainTextureMode::editTerrainTextureGrid(const WorldspaceHitRe
|
|||
|
||||
int textureColumn = landTable.findColumnIndex(CSMWorld::Columns::ColumnId_LandTexturesIndex);
|
||||
|
||||
std::size_t hashlocation = mBrushTexture.find("#");
|
||||
std::size_t hashlocation = mBrushTexture.find('#');
|
||||
std::string mBrushTextureInt = mBrushTexture.substr (hashlocation+1);
|
||||
int brushInt = stoi(mBrushTexture.substr (hashlocation+1))+1; // All indices are offset by +1
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/world/tablemimedata.hpp"
|
||||
|
||||
#include "../widget/scenetooltoggle.hpp"
|
||||
#include "../widget/scenetooltoggle2.hpp"
|
||||
|
||||
#include "cameracontroller.hpp"
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include "../../model/world/idtable.hpp"
|
||||
|
||||
#include "../../model/prefs/shortcut.hpp"
|
||||
#include "../../model/prefs/shortcuteventhandler.hpp"
|
||||
#include "../../model/prefs/state.hpp"
|
||||
|
||||
#include "../render/orbitcameramode.hpp"
|
||||
|
|
|
@ -30,7 +30,7 @@ void CSVWidget::SceneToolRun::updateIcon()
|
|||
|
||||
void CSVWidget::SceneToolRun::updatePanel()
|
||||
{
|
||||
mTable->setRowCount (mProfiles.size());
|
||||
mTable->setRowCount (static_cast<int>(mProfiles.size()));
|
||||
|
||||
int i = 0;
|
||||
|
||||
|
|
|
@ -27,11 +27,6 @@
|
|||
#include "../../model/doc/document.hpp"
|
||||
#include "../../model/prefs/state.hpp"
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/world/data.hpp"
|
||||
#include "../../model/world/idcollection.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/world/landtexture.hpp"
|
||||
#include "../../model/world/universalid.hpp"
|
||||
|
||||
|
||||
CSVWidget::ShapeBrushSizeControls::ShapeBrushSizeControls(const QString &title, QWidget *parent)
|
||||
|
|
|
@ -80,7 +80,7 @@ QRect CSVWidget::SceneToolToggle::getIconBox (int index) const
|
|||
int y = index / xMax;
|
||||
int x = index % xMax;
|
||||
|
||||
int total = mButtons.size();
|
||||
int total = static_cast<int>(mButtons.size());
|
||||
|
||||
int actualYIcons = total/xMax;
|
||||
|
||||
|
@ -154,7 +154,7 @@ void CSVWidget::SceneToolToggle::addButton (const std::string& icon, unsigned in
|
|||
desc.mMask = mask;
|
||||
desc.mSmallIcon = smallIcon;
|
||||
desc.mName = name;
|
||||
desc.mIndex = mButtons.size();
|
||||
desc.mIndex = static_cast<int>(mButtons.size());
|
||||
|
||||
mButtons.insert (std::make_pair (button, desc));
|
||||
|
||||
|
|
|
@ -99,7 +99,7 @@ void CSVWidget::SceneToolToggle2::addButton (unsigned int id, unsigned int mask,
|
|||
desc.mButtonId = id;
|
||||
desc.mMask = mask;
|
||||
desc.mName = name;
|
||||
desc.mIndex = mButtons.size();
|
||||
desc.mIndex = static_cast<int>(mButtons.size());
|
||||
|
||||
mButtons.insert (std::make_pair (button, desc));
|
||||
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
#include <QPainter>
|
||||
#include <QPushButton>
|
||||
|
||||
#include "../widget/coloreditor.hpp"
|
||||
|
||||
CSVWorld::ColorDelegate::ColorDelegate(CSMWorld::CommandDispatcher *dispatcher,
|
||||
CSMDoc::Document& document,
|
||||
QObject *parent)
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
#include "../../model/world/columns.hpp"
|
||||
#include "../../model/world/record.hpp"
|
||||
#include "../../model/world/tablemimedata.hpp"
|
||||
#include "../../model/world/idtree.hpp"
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/doc/document.hpp"
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ QValidator::State CSVWorld::IdValidator::validate (QString& input, int& pos) con
|
|||
|
||||
if (!mNamespace.empty())
|
||||
{
|
||||
std::string namespace_ = input.left (mNamespace.size()).toUtf8().constData();
|
||||
std::string namespace_ = input.left (static_cast<int>(mNamespace.size())).toUtf8().constData();
|
||||
|
||||
if (Misc::StringUtils::lowerCase (namespace_)!=mNamespace)
|
||||
return QValidator::Invalid; // incorrect namespace
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
#include "../render/pagedworldspacewidget.hpp"
|
||||
#include "../render/unpagedworldspacewidget.hpp"
|
||||
#include "../render/editmode.hpp"
|
||||
|
||||
#include "../widget/scenetoolbar.hpp"
|
||||
#include "../widget/scenetoolmode.hpp"
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "../../model/doc/document.hpp"
|
||||
#include "../../model/world/universalid.hpp"
|
||||
#include "../../model/world/data.hpp"
|
||||
#include "../../model/world/columnbase.hpp"
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/world/idtable.hpp"
|
||||
#include "../../model/prefs/state.hpp"
|
||||
|
|
|
@ -85,9 +85,9 @@ std::string loadSettings (Settings::Manager & settings)
|
|||
|
||||
// prefer local
|
||||
if (boost::filesystem::exists(localdefault))
|
||||
settings.loadDefault(localdefault);
|
||||
settings.loadDefault(localdefault, false);
|
||||
else if (boost::filesystem::exists(globaldefault))
|
||||
settings.loadDefault(globaldefault);
|
||||
settings.loadDefault(globaldefault, false);
|
||||
else
|
||||
throw std::runtime_error ("No default settings file found! Make sure the file \"tes3mp-server-default.cfg\" was properly installed.");
|
||||
|
||||
|
|
|
@ -247,7 +247,7 @@ if(APPLE)
|
|||
|
||||
add_subdirectory(../../files/ ${CMAKE_CURRENT_BINARY_DIR}/files)
|
||||
|
||||
configure_file("${OpenMW_BINARY_DIR}/settings-default.cfg" ${BUNDLE_RESOURCES_DIR} COPYONLY)
|
||||
configure_file("${OpenMW_BINARY_DIR}/defaults.bin" ${BUNDLE_RESOURCES_DIR} COPYONLY)
|
||||
configure_file("${OpenMW_BINARY_DIR}/openmw.cfg" ${BUNDLE_RESOURCES_DIR} COPYONLY)
|
||||
configure_file("${OpenMW_BINARY_DIR}/gamecontrollerdb.txt" ${BUNDLE_RESOURCES_DIR} COPYONLY)
|
||||
|
||||
|
|
|
@ -601,8 +601,8 @@ void OMW::Engine::setSkipMenu (bool skipMenu, bool newGame)
|
|||
std::string OMW::Engine::loadSettings (Settings::Manager & settings)
|
||||
{
|
||||
// Create the settings manager and load default settings file
|
||||
const std::string localdefault = (mCfgMgr.getLocalPath() / "settings-default.cfg").string();
|
||||
const std::string globaldefault = (mCfgMgr.getGlobalPath() / "settings-default.cfg").string();
|
||||
const std::string localdefault = (mCfgMgr.getLocalPath() / "defaults.bin").string();
|
||||
const std::string globaldefault = (mCfgMgr.getGlobalPath() / "defaults.bin").string();
|
||||
|
||||
// prefer local
|
||||
if (boost::filesystem::exists(localdefault))
|
||||
|
@ -610,7 +610,7 @@ std::string OMW::Engine::loadSettings (Settings::Manager & settings)
|
|||
else if (boost::filesystem::exists(globaldefault))
|
||||
settings.loadDefault(globaldefault);
|
||||
else
|
||||
throw std::runtime_error ("No default settings file found! Make sure the file \"settings-default.cfg\" was properly installed.");
|
||||
throw std::runtime_error ("No default settings file found! Make sure the file \"defaults.bin\" was properly installed.");
|
||||
|
||||
// load user settings if they exist
|
||||
const std::string settingspath = (mCfgMgr.getUserConfigPath() / "settings.cfg").string();
|
||||
|
|
|
@ -42,7 +42,6 @@
|
|||
#include "../mwworld/failedaction.hpp"
|
||||
#include "../mwworld/customdata.hpp"
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
#include "../mwphysics/physicssystem.hpp"
|
||||
#include "../mwworld/cellstore.hpp"
|
||||
#include "../mwworld/localscripts.hpp"
|
||||
|
||||
|
|
|
@ -52,7 +52,6 @@
|
|||
#include "../mwworld/failedaction.hpp"
|
||||
#include "../mwworld/inventorystore.hpp"
|
||||
#include "../mwworld/customdata.hpp"
|
||||
#include "../mwphysics/physicssystem.hpp"
|
||||
#include "../mwworld/cellstore.hpp"
|
||||
#include "../mwworld/localscripts.hpp"
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "../mwbase/journal.hpp"
|
||||
|
||||
#include "journalentry.hpp"
|
||||
#include "quest.hpp"
|
||||
|
||||
namespace MWDialogue
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include <stdint.h>
|
||||
|
||||
#include <components/settings/settings.hpp>
|
||||
#include <components/widgets/widgets.hpp>
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/windowmanager.hpp"
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
|
||||
#include <components/compiler/exception.hpp>
|
||||
#include <components/compiler/extensions0.hpp>
|
||||
#include <components/compiler/lineparser.hpp>
|
||||
#include <components/compiler/scanner.hpp>
|
||||
#include <components/compiler/locals.hpp>
|
||||
#include <components/interpreter/interpreter.hpp>
|
||||
|
||||
#include "../mwscript/extensions.hpp"
|
||||
|
||||
|
|
|
@ -6,12 +6,8 @@
|
|||
#include <vector>
|
||||
|
||||
#include <components/compiler/errorhandler.hpp>
|
||||
#include <components/compiler/lineparser.hpp>
|
||||
#include <components/compiler/scanner.hpp>
|
||||
#include <components/compiler/locals.hpp>
|
||||
#include <components/compiler/output.hpp>
|
||||
#include <components/compiler/extensions.hpp>
|
||||
#include <components/interpreter/interpreter.hpp>
|
||||
|
||||
#include "../mwscript/compilercontext.hpp"
|
||||
#include "../mwscript/interpretercontext.hpp"
|
||||
|
|
|
@ -319,7 +319,7 @@ namespace MWGui
|
|||
deleteLater();
|
||||
for (Link* link : mLinks)
|
||||
delete link;
|
||||
for (auto link : mTopicLinks)
|
||||
for (const auto& link : mTopicLinks)
|
||||
delete link.second;
|
||||
for (auto history : mHistoryContents)
|
||||
delete history;
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
#include "../mwworld/esmstore.hpp"
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/mechanicsmanager.hpp"
|
||||
|
|
|
@ -5,9 +5,7 @@
|
|||
#include <MyGUI_FactoryManager.h>
|
||||
#include <MyGUI_Gui.h>
|
||||
#include <MyGUI_ImageBox.h>
|
||||
#include <MyGUI_TextBox.h>
|
||||
#include <MyGUI_ScrollView.h>
|
||||
#include <MyGUI_Button.h>
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
|
||||
|
|
|
@ -278,7 +278,7 @@ BookTypesetter::Ptr JournalBooks::createCyrillicJournalIndex ()
|
|||
mIndexPagesCount = 2;
|
||||
}
|
||||
|
||||
unsigned char ch[2] = {0xd0, 0x90}; // CYRILLIC CAPITAL A is a 0xd090 in UTF-8
|
||||
unsigned char ch[3] = {0xd0, 0x90, 0x00}; // CYRILLIC CAPITAL A is a 0xd090 in UTF-8
|
||||
|
||||
for (int i = 0; i < 32; ++i)
|
||||
{
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "../mwbase/soundmanager.hpp"
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/cellstore.hpp"
|
||||
|
||||
#include "../mwmechanics/creaturestats.hpp"
|
||||
#include "../mwmechanics/npcstats.hpp"
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
#include "../mwbase/windowmanager.hpp"
|
||||
#include "../mwbase/inputmanager.hpp"
|
||||
|
||||
#include "../mwrender/vismask.hpp"
|
||||
|
||||
#include "backgroundimage.hpp"
|
||||
|
||||
namespace MWGui
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include <memory>
|
||||
|
||||
#include <osg/Camera>
|
||||
#include <osg/Timer>
|
||||
#include <osg/ref_ptr>
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include "../mwmechanics/creaturestats.hpp"
|
||||
#include "../mwmechanics/pickpocket.hpp"
|
||||
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
#include "../mwworld/class.hpp"
|
||||
|
||||
#include "../mwbase/environment.hpp"
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
#ifndef MWGUI_QUICKKEYS_H
|
||||
#define MWGUI_QUICKKEYS_H
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
#include "windowbase.hpp"
|
||||
|
||||
#include "spellmodel.hpp"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#include "recharge.hpp"
|
||||
|
||||
#include <MyGUI_ScrollView.h>
|
||||
#include <MyGUI_Gui.h>
|
||||
|
||||
#include <components/widgets/box.hpp>
|
||||
|
||||
|
@ -15,10 +14,10 @@
|
|||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/esmstore.hpp"
|
||||
|
||||
#include "../mwmechanics/creaturestats.hpp"
|
||||
#include "../mwmechanics/actorutil.hpp"
|
||||
#include "../mwmechanics/recharge.hpp"
|
||||
|
||||
#include "itemselection.hpp"
|
||||
#include "itemwidget.hpp"
|
||||
#include "itemchargeview.hpp"
|
||||
#include "sortfilteritemmodel.hpp"
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
#include "windowbase.hpp"
|
||||
|
||||
#include "itemselection.hpp"
|
||||
|
||||
namespace MWWorld
|
||||
{
|
||||
class Ptr;
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
#include <iomanip>
|
||||
|
||||
#include <MyGUI_ScrollView.h>
|
||||
#include <MyGUI_Gui.h>
|
||||
#include <MyGUI_ItemBox.h>
|
||||
|
||||
#include <components/widgets/box.hpp>
|
||||
|
||||
|
@ -17,6 +15,7 @@
|
|||
#include "../mwworld/containerstore.hpp"
|
||||
#include "../mwworld/class.hpp"
|
||||
|
||||
#include "itemselection.hpp"
|
||||
#include "itemwidget.hpp"
|
||||
#include "itemchargeview.hpp"
|
||||
#include "sortfilteritemmodel.hpp"
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
#include "windowbase.hpp"
|
||||
|
||||
#include "itemselection.hpp"
|
||||
|
||||
#include "../mwmechanics/repair.hpp"
|
||||
|
||||
namespace MWGui
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
#include "spellwindow.hpp"
|
||||
|
||||
#include <MyGUI_Button.h>
|
||||
#include <MyGUI_EditBox.h>
|
||||
#include <MyGUI_InputManager.h>
|
||||
#include <MyGUI_Window.h>
|
||||
|
||||
#include <components/misc/stringops.hpp>
|
||||
#include <components/settings/settings.hpp>
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
#define MWGUI_SPELLWINDOW_H
|
||||
|
||||
#include "windowpinnablebase.hpp"
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
#include "spellmodel.hpp"
|
||||
|
||||
|
|
|
@ -266,7 +266,7 @@ namespace MWGui
|
|||
std::map<std::string, std::string> userStrings = focus->getUserStrings();
|
||||
for (auto& userStringPair : userStrings)
|
||||
{
|
||||
size_t underscorePos = userStringPair.first.find("_");
|
||||
size_t underscorePos = userStringPair.first.find('_');
|
||||
if (underscorePos == std::string::npos)
|
||||
continue;
|
||||
std::string key = userStringPair.first.substr(0, underscorePos);
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
#include "containeritemmodel.hpp"
|
||||
#include "tradeitemmodel.hpp"
|
||||
#include "countdialog.hpp"
|
||||
#include "controllers.hpp"
|
||||
#include "tooltips.hpp"
|
||||
|
||||
namespace
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
#include "../mwmechanics/npcstats.hpp"
|
||||
#include "../mwmechanics/actorutil.hpp"
|
||||
|
||||
#include "../mwstate/charactermanager.hpp"
|
||||
|
||||
namespace MWGui
|
||||
{
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include <MyGUI_UString.h>
|
||||
#include <MyGUI_IPointer.h>
|
||||
#include <MyGUI_TextureUtility.h>
|
||||
#include <MyGUI_FactoryManager.h>
|
||||
#include <MyGUI_LanguageManager.h>
|
||||
#include <MyGUI_PointerManager.h>
|
||||
|
@ -77,7 +76,6 @@
|
|||
#include "../mwworld/cellstore.hpp"
|
||||
#include "../mwworld/esmstore.hpp"
|
||||
|
||||
#include "../mwmechanics/stat.hpp"
|
||||
#include "../mwmechanics/npcstats.hpp"
|
||||
#include "../mwmechanics/actorutil.hpp"
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include <components/esm/esmwriter.hpp>
|
||||
#include <components/esm/esmreader.hpp>
|
||||
#include <components/esm/controlsstate.hpp>
|
||||
|
||||
#include "../mwbase/windowmanager.hpp"
|
||||
#include "../mwbase/environment.hpp"
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#ifndef MWINPUT_MWKEYBOARDMANAGER_H
|
||||
#define MWINPUT_MWKEYBOARDMANAGER_H
|
||||
|
||||
#include <components/settings/settings.hpp>
|
||||
#include <components/sdlutil/events.hpp>
|
||||
|
||||
namespace MWInput
|
||||
|
|
|
@ -144,7 +144,8 @@ namespace MWInput
|
|||
|
||||
void MouseManager::mousePressed(const SDL_MouseButtonEvent &arg, Uint8 id)
|
||||
{
|
||||
MWBase::Environment::get().getInputManager()->setJoystickLastUsed(false);
|
||||
MWBase::InputManager* input = MWBase::Environment::get().getInputManager();
|
||||
input->setJoystickLastUsed(false);
|
||||
bool guiMode = false;
|
||||
|
||||
if (id == SDL_BUTTON_LEFT || id == SDL_BUTTON_RIGHT) // MyGUI only uses these mouse events
|
||||
|
@ -165,7 +166,8 @@ namespace MWInput
|
|||
mBindingsManager->setPlayerControlsEnabled(!guiMode);
|
||||
|
||||
// Don't trigger any mouse bindings while in settings menu, otherwise rebinding controls becomes impossible
|
||||
if (MWBase::Environment::get().getWindowManager()->getMode() != MWGui::GM_Settings)
|
||||
// Also do not trigger bindings when input controls are disabled, e.g. during save loading
|
||||
if (MWBase::Environment::get().getWindowManager()->getMode() != MWGui::GM_Settings && !input->controlsDisabled())
|
||||
mBindingsManager->mousePressed(arg, id);
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include <components/esm/defs.hpp>
|
||||
#include <components/esm/activespells.hpp>
|
||||
|
||||
#include "../mwworld/timestamp.hpp"
|
||||
|
|
|
@ -59,7 +59,6 @@
|
|||
#include "aiwander.hpp"
|
||||
#include "actor.hpp"
|
||||
#include "summoning.hpp"
|
||||
#include "combat.hpp"
|
||||
#include "actorutil.hpp"
|
||||
#include "tickableeffects.hpp"
|
||||
|
||||
|
@ -623,7 +622,8 @@ namespace MWMechanics
|
|||
{
|
||||
greetingTimer++;
|
||||
|
||||
if (greetingTimer <= GREETING_SHOULD_END || MWBase::Environment::get().getSoundManager()->sayActive(actor))
|
||||
if (!stats.getMovementFlag(CreatureStats::Flag_ForceJump) && !stats.getMovementFlag(CreatureStats::Flag_ForceSneak)
|
||||
&& (greetingTimer <= GREETING_SHOULD_END || MWBase::Environment::get().getSoundManager()->sayActive(actor)))
|
||||
turnActorToFacePlayer(actor, actorState, dir);
|
||||
|
||||
if (greetingTimer >= GREETING_COOLDOWN)
|
||||
|
|
|
@ -3,10 +3,6 @@
|
|||
|
||||
#include "typedaipackage.hpp"
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <components/esm/defs.hpp>
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
|
||||
#include "pathfinding.hpp"
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include "pathfinding.hpp"
|
||||
#include "movement.hpp"
|
||||
#include "obstacle.hpp"
|
||||
#include "aitimer.hpp"
|
||||
|
||||
namespace ESM
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
#include <memory>
|
||||
|
||||
#include <components/esm/loadspel.hpp>
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
|
||||
#include "pathfinding.hpp"
|
||||
|
||||
namespace ESM
|
||||
{
|
||||
namespace AiSequence
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include <components/esm/loadcell.hpp>
|
||||
#include <components/esm/loadland.hpp>
|
||||
#include <components/esm/loadmgef.hpp>
|
||||
#include <components/detournavigator/navigator.hpp>
|
||||
#include <components/misc/coordinateconverter.hpp>
|
||||
#include <components/settings/settings.hpp>
|
||||
|
@ -15,8 +14,6 @@
|
|||
#include "../mwworld/cellstore.hpp"
|
||||
#include "../mwworld/inventorystore.hpp"
|
||||
|
||||
#include "../mwphysics/collisiontype.hpp"
|
||||
|
||||
#include "pathgrid.hpp"
|
||||
#include "creaturestats.hpp"
|
||||
#include "movement.hpp"
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include <memory>
|
||||
|
||||
#include <components/esm/defs.hpp>
|
||||
#include <components/detournavigator/areatype.hpp>
|
||||
|
||||
#include "pathfinding.hpp"
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "../mwbase/world.hpp"
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/action.hpp"
|
||||
|
||||
/*
|
||||
Start of tes3mp addition
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
#include <components/debug/debuglog.hpp>
|
||||
#include <components/esm/aisequence.hpp>
|
||||
|
||||
#include "../mwbase/world.hpp"
|
||||
|
||||
#include "aipackage.hpp"
|
||||
#include "aistate.hpp"
|
||||
#include "aiwander.hpp"
|
||||
|
|
|
@ -52,14 +52,15 @@ namespace MWMechanics
|
|||
bool AiTravel::execute (const MWWorld::Ptr& actor, CharacterController& characterController, AiState& state, float duration)
|
||||
{
|
||||
MWBase::MechanicsManager* mechMgr = MWBase::Environment::get().getMechanicsManager();
|
||||
auto& stats = actor.getClass().getCreatureStats(actor);
|
||||
|
||||
if (mechMgr->isTurningToPlayer(actor) || mechMgr->getGreetingState(actor) == Greet_InProgress)
|
||||
if (!stats.getMovementFlag(CreatureStats::Flag_ForceJump) && !stats.getMovementFlag(CreatureStats::Flag_ForceSneak)
|
||||
&& (mechMgr->isTurningToPlayer(actor) || mechMgr->getGreetingState(actor) == Greet_InProgress))
|
||||
return false;
|
||||
|
||||
const osg::Vec3f actorPos(actor.getRefData().getPosition().asVec3());
|
||||
const osg::Vec3f targetPos(mX, mY, mZ);
|
||||
|
||||
auto& stats = actor.getClass().getCreatureStats(actor);
|
||||
stats.setMovementFlag(CreatureStats::Flag_Run, false);
|
||||
stats.setDrawState(DrawState_Nothing);
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include "../mwbase/world.hpp"
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/mechanicsmanager.hpp"
|
||||
#include "../mwbase/dialoguemanager.hpp"
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/esmstore.hpp"
|
||||
|
@ -210,14 +209,17 @@ namespace MWMechanics
|
|||
storage.setState(AiWanderStorage::Wander_Walking);
|
||||
}
|
||||
|
||||
GreetingState greetingState = MWBase::Environment::get().getMechanicsManager()->getGreetingState(actor);
|
||||
if (greetingState == Greet_InProgress)
|
||||
if(!cStats.getMovementFlag(CreatureStats::Flag_ForceJump) && !cStats.getMovementFlag(CreatureStats::Flag_ForceSneak))
|
||||
{
|
||||
if (storage.mState == AiWanderStorage::Wander_Walking)
|
||||
GreetingState greetingState = MWBase::Environment::get().getMechanicsManager()->getGreetingState(actor);
|
||||
if (greetingState == Greet_InProgress)
|
||||
{
|
||||
stopMovement(actor);
|
||||
mObstacleCheck.clear();
|
||||
storage.setState(AiWanderStorage::Wander_IdleNow);
|
||||
if (storage.mState == AiWanderStorage::Wander_Walking)
|
||||
{
|
||||
stopMovement(actor);
|
||||
mObstacleCheck.clear();
|
||||
storage.setState(AiWanderStorage::Wander_IdleNow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#include "../mwworld/timestamp.hpp"
|
||||
|
||||
#include "pathfinding.hpp"
|
||||
#include "obstacle.hpp"
|
||||
#include "aistate.hpp"
|
||||
|
@ -128,7 +126,6 @@ namespace MWMechanics
|
|||
short unsigned getRandomIdle();
|
||||
void setPathToAnAllowedNode(const MWWorld::Ptr& actor, AiWanderStorage& storage, const ESM::Position& actorPos);
|
||||
void evadeObstacles(const MWWorld::Ptr& actor, AiWanderStorage& storage);
|
||||
void turnActorToFacePlayer(const osg::Vec3f& actorPosition, const osg::Vec3f& playerPosition, AiWanderStorage& storage);
|
||||
void doPerFrameActionsForState(const MWWorld::Ptr& actor, float duration, AiWanderStorage& storage);
|
||||
void onIdleStatePerFrameActions(const MWWorld::Ptr& actor, float duration, AiWanderStorage& storage);
|
||||
void onWalkingStatePerFrameActions(const MWWorld::Ptr& actor, float duration, AiWanderStorage& storage);
|
||||
|
|
|
@ -35,7 +35,6 @@
|
|||
#include "../mwworld/containerstore.hpp"
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/cellstore.hpp"
|
||||
#include "../mwworld/manualref.hpp"
|
||||
|
||||
#include "magiceffects.hpp"
|
||||
#include "creaturestats.hpp"
|
||||
|
|
|
@ -2034,8 +2034,10 @@ bool CharacterController::updateWeaponState(CharacterState& idle)
|
|||
MWWorld::ConstContainerStoreIterator torch = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if(torch != inv.end() && torch->getTypeName() == typeid(ESM::Light).name()
|
||||
&& updateCarriedLeftVisible(mWeaponType))
|
||||
|
||||
{
|
||||
if (mAnimation->isPlaying("shield"))
|
||||
mAnimation->disable("shield");
|
||||
|
||||
mAnimation->play("torch", Priority_Torch, MWRender::Animation::BlendMask_LeftArm,
|
||||
false, 1.0f, "start", "stop", 0.0f, (~(size_t)0), true);
|
||||
}
|
||||
|
@ -2595,9 +2597,6 @@ void CharacterController::update(float duration)
|
|||
if (!mMovementAnimationControlled)
|
||||
world->queueMovement(mPtr, vec);
|
||||
}
|
||||
else
|
||||
// We must always queue movement, even if there is none, to apply gravity.
|
||||
world->queueMovement(mPtr, osg::Vec3f(0.f, 0.f, 0.f));
|
||||
|
||||
movement = vec;
|
||||
movementSettings.mPosition[0] = movementSettings.mPosition[1] = 0;
|
||||
|
@ -2619,8 +2618,6 @@ void CharacterController::update(float duration)
|
|||
if (cls.isPersistent(mPtr) || cls.getCreatureStats(mPtr).isDeathAnimationFinished())
|
||||
playDeath(1.f, mDeathState);
|
||||
}
|
||||
// We must always queue movement, even if there is none, to apply gravity.
|
||||
world->queueMovement(mPtr, osg::Vec3f(0.f, 0.f, 0.f));
|
||||
}
|
||||
|
||||
bool isPersist = isPersistentAnimPlaying();
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
#include <deque>
|
||||
|
||||
#include <components/esm/loadmgef.hpp>
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue