// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. #pragma once #include "Engine/Core/Config/Settings.h" #include "Engine/Serialization/Serialization.h" /// /// The navigation system settings container. /// /// class NavigationSettings : public Settings { public: /// /// The height of a grid cell in the navigation mesh building steps using heightfields. /// A lower number means higher precision on the vertical axis but longer build times. /// float CellHeight = 10.0f; /// /// The width/height of a grid cell in the navigation mesh building steps using heightfields. /// A lower number means higher precision on the horizontal axes but longer build times. /// float CellSize = 30.0f; /// /// Tile size used for Navigation mesh tiles, the final size of a tile is CellSize*TileSize. /// int32 TileSize = 64; /// /// The minimum number of cells allowed to form isolated island areas. /// int32 MinRegionArea = 0; /// /// Any regions with a span count smaller than this value will, if possible, be merged with larger regions. /// int32 MergeRegionArea = 20; /// /// The maximum allowed length for contour edges along the border of the mesh. /// float MaxEdgeLen = 1200.0f; /// /// The maximum distance a simplified contour's border edges should deviate from the original raw contour. /// float MaxEdgeError = 1.3f; /// /// The sampling distance to use when generating the detail mesh. /// float DetailSamplingDist = 600.0f; /// /// The maximum distance the detail mesh surface should deviate from heightfield data. /// float MaxDetailSamplingError = 1.0f; /// /// The radius of the smallest objects to traverse this nav mesh. Objects can't pass through gaps of less than twice the radius. /// float WalkableRadius = 34.0f; /// /// The height of the smallest objects to traverse this nav mesh. Objects can't enter areas with ceilings lower than this value. /// float WalkableHeight = 144.0f; /// /// The maximum ledge height that is considered to still be traversable. /// float WalkableMaxClimb = 35.0f; /// /// The maximum slope that is considered walkable (in degrees). Objects can't go up or down slopes higher than this value. /// float WalkableMaxSlopeAngle = 60.0f; public: // [Settings] void RestoreDefault() final override { CellHeight = 10.0f; CellSize = 30.0f; TileSize = 64; MinRegionArea = 0; MergeRegionArea = 20; MaxEdgeLen = 1200.0f; MaxEdgeError = 1.3f; DetailSamplingDist = 600.0f; MaxDetailSamplingError = 1.0f; WalkableRadius = 34.0f; WalkableHeight = 144.0f; WalkableMaxClimb = 35.0f; WalkableMaxSlopeAngle = 60.0f; } void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override { DESERIALIZE(CellHeight); DESERIALIZE(CellSize); DESERIALIZE(TileSize); DESERIALIZE(MinRegionArea); DESERIALIZE(MergeRegionArea); DESERIALIZE(MaxEdgeLen); DESERIALIZE(MaxEdgeError); DESERIALIZE(DetailSamplingDist); DESERIALIZE(MaxDetailSamplingError); DESERIALIZE(WalkableRadius); DESERIALIZE(WalkableHeight); DESERIALIZE(WalkableMaxClimb); DESERIALIZE(WalkableMaxSlopeAngle); } };