From 9ad4665270bb194893e0d908ea352dd99c664da6 Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Sat, 3 Sep 2022 12:54:37 +0200 Subject: [PATCH] Add Network Settings --- Source/Editor/Editor.cs | 1 + .../Editor/Modules/ContentDatabaseModule.cs | 1 + Source/Editor/Modules/ContentFindingModule.cs | 1 + Source/Engine/Core/Config/GameSettings.cpp | 5 ++ Source/Engine/Core/Config/GameSettings.cs | 10 ++++ Source/Engine/Core/Config/GameSettings.h | 1 + Source/Engine/Networking/NetworkSettings.h | 54 +++++++++++++++++++ 7 files changed, 73 insertions(+) create mode 100644 Source/Engine/Networking/NetworkSettings.h diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index fabea9033..946894ab9 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -529,6 +529,7 @@ namespace FlaxEditor GameSettings.Save(new LayersAndTagsSettings()); GameSettings.Save(new InputSettings()); GameSettings.Save(new GraphicsSettings()); + GameSettings.Save(new NetworkSettings()); GameSettings.Save(new NavigationSettings()); GameSettings.Save(new LocalizationSettings()); GameSettings.Save(new BuildSettings()); diff --git a/Source/Editor/Modules/ContentDatabaseModule.cs b/Source/Editor/Modules/ContentDatabaseModule.cs index a3ee714ae..294674b47 100644 --- a/Source/Editor/Modules/ContentDatabaseModule.cs +++ b/Source/Editor/Modules/ContentDatabaseModule.cs @@ -935,6 +935,7 @@ namespace FlaxEditor.Modules Proxy.Add(new SettingsProxy(typeof(LayersAndTagsSettings), Editor.Instance.Icons.LayersTagsSettings128)); Proxy.Add(new SettingsProxy(typeof(PhysicsSettings), Editor.Instance.Icons.PhysicsSettings128)); Proxy.Add(new SettingsProxy(typeof(GraphicsSettings), Editor.Instance.Icons.GraphicsSettings128)); + Proxy.Add(new SettingsProxy(typeof(NetworkSettings), Editor.Instance.Icons.Document128)); Proxy.Add(new SettingsProxy(typeof(NavigationSettings), Editor.Instance.Icons.NavigationSettings128)); Proxy.Add(new SettingsProxy(typeof(LocalizationSettings), Editor.Instance.Icons.LocalizationSettings128)); Proxy.Add(new SettingsProxy(typeof(AudioSettings), Editor.Instance.Icons.AudioSettings128)); diff --git a/Source/Editor/Modules/ContentFindingModule.cs b/Source/Editor/Modules/ContentFindingModule.cs index 81925c121..c6df41f1b 100644 --- a/Source/Editor/Modules/ContentFindingModule.cs +++ b/Source/Editor/Modules/ContentFindingModule.cs @@ -400,6 +400,7 @@ namespace FlaxEditor.Modules { "FlaxEditor.Content.Settings.BuildSettings", "Settings" }, { "FlaxEditor.Content.Settings.GameSettings", "Settings" }, { "FlaxEditor.Content.Settings.GraphicsSettings", "Settings" }, + { "FlaxEditor.Content.Settings.NetworkSettings", "Settings" }, { "FlaxEditor.Content.Settings.InputSettings", "Settings" }, { "FlaxEditor.Content.Settings.LayersAndTagsSettings", "Settings" }, { "FlaxEditor.Content.Settings.NavigationSettings", "Settings" }, diff --git a/Source/Engine/Core/Config/GameSettings.cpp b/Source/Engine/Core/Config/GameSettings.cpp index 66004afd9..057923e80 100644 --- a/Source/Engine/Core/Config/GameSettings.cpp +++ b/Source/Engine/Core/Config/GameSettings.cpp @@ -12,6 +12,7 @@ #include "BuildSettings.h" #include "Engine/Input/InputSettings.h" #include "Engine/Audio/AudioSettings.h" +#include "Engine/Networking/NetworkSettings.h" #include "Engine/Navigation/NavigationSettings.h" #include "Engine/Localization/LocalizationSettings.h" #include "Engine/Content/Content.h" @@ -41,6 +42,7 @@ public: IMPLEMENT_ENGINE_SETTINGS_GETTER(BuildSettings, GameCooking); IMPLEMENT_ENGINE_SETTINGS_GETTER(GraphicsSettings, Graphics); +IMPLEMENT_ENGINE_SETTINGS_GETTER(NetworkSettings, Network); IMPLEMENT_ENGINE_SETTINGS_GETTER(LayersAndTagsSettings, LayersAndTags); IMPLEMENT_ENGINE_SETTINGS_GETTER(TimeSettings, Time); IMPLEMENT_ENGINE_SETTINGS_GETTER(AudioSettings, Audio); @@ -146,6 +148,7 @@ bool GameSettings::Load() PRELOAD_SETTINGS(Physics); PRELOAD_SETTINGS(Input); PRELOAD_SETTINGS(Graphics); + PRELOAD_SETTINGS(Network); PRELOAD_SETTINGS(Navigation); PRELOAD_SETTINGS(Localization); PRELOAD_SETTINGS(GameCooking); @@ -180,6 +183,7 @@ void GameSettings::Apply() APPLY_SETTINGS(StreamingSettings); APPLY_SETTINGS(InputSettings); APPLY_SETTINGS(GraphicsSettings); + APPLY_SETTINGS(NetworkSettings); APPLY_SETTINGS(NavigationSettings); APPLY_SETTINGS(LocalizationSettings); APPLY_SETTINGS(BuildSettings); @@ -220,6 +224,7 @@ void GameSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* mo DESERIALIZE(Physics); DESERIALIZE(Input); DESERIALIZE(Graphics); + DESERIALIZE(Network); DESERIALIZE(Navigation); DESERIALIZE(Localization); DESERIALIZE(GameCooking); diff --git a/Source/Engine/Core/Config/GameSettings.cs b/Source/Engine/Core/Config/GameSettings.cs index 7e70f29bd..b2727c694 100644 --- a/Source/Engine/Core/Config/GameSettings.cs +++ b/Source/Engine/Core/Config/GameSettings.cs @@ -75,6 +75,12 @@ namespace FlaxEditor.Content.Settings [EditorOrder(1040), EditorDisplay("Other Settings"), AssetReference(typeof(GraphicsSettings), true), Tooltip("Reference to Graphics Settings asset")] public JsonAsset Graphics; + /// + /// Reference to asset. + /// + [EditorOrder(1043), EditorDisplay("Other Settings"), AssetReference(typeof(NetworkSettings), true), Tooltip("Reference to Network Settings asset")] + public JsonAsset Network; + /// /// Reference to asset. /// @@ -255,6 +261,8 @@ namespace FlaxEditor.Content.Settings return LoadAsset(gameSettings.Physics) as T; if (type == typeof(GraphicsSettings)) return LoadAsset(gameSettings.Graphics) as T; + if (type == typeof(NetworkSettings)) + return LoadAsset(gameSettings.Network) as T; if (type == typeof(NavigationSettings)) return LoadAsset(gameSettings.Navigation) as T; if (type == typeof(LocalizationSettings)) @@ -373,6 +381,8 @@ namespace FlaxEditor.Content.Settings return SaveAsset(gameSettings, ref gameSettings.Physics, obj); if (type == typeof(GraphicsSettings)) return SaveAsset(gameSettings, ref gameSettings.Graphics, obj); + if (type == typeof(NetworkSettings)) + return SaveAsset(gameSettings, ref gameSettings.Network, obj); if (type == typeof(NavigationSettings)) return SaveAsset(gameSettings, ref gameSettings.Navigation, obj); if (type == typeof(LocalizationSettings)) diff --git a/Source/Engine/Core/Config/GameSettings.h b/Source/Engine/Core/Config/GameSettings.h index fe2961430..fb5094a3a 100644 --- a/Source/Engine/Core/Config/GameSettings.h +++ b/Source/Engine/Core/Config/GameSettings.h @@ -67,6 +67,7 @@ public: Guid Physics; Guid Input; Guid Graphics; + Guid Network; Guid Navigation; Guid Localization; Guid GameCooking; diff --git a/Source/Engine/Networking/NetworkSettings.h b/Source/Engine/Networking/NetworkSettings.h new file mode 100644 index 000000000..9802737c6 --- /dev/null +++ b/Source/Engine/Networking/NetworkSettings.h @@ -0,0 +1,54 @@ +// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Core/Types/BaseTypes.h" +#include "Engine/Core/Config/Settings.h" + +/// +/// Network settings container. +/// +API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API NetworkSettings : public SettingsBase +{ + API_AUTO_SERIALIZATION(); + DECLARE_SCRIPTING_TYPE_MINIMAL(NetworkSettings); +public: + /// + /// Maximum amount of active network clients in a game session. Used by server or host to limit amount of players and spectators. + /// + API_FIELD(Attributes="EditorOrder(0), EditorDisplay(\"General\")") + int32 MaxClients = 100; + + /// + /// The target amount of the network system updates per second. Higher values provide better network synchronization (eg. 60 for shooters), lower values reduce network usage and performance impact (eg. 30 for strategy games). Can be used to tweak networking performance impact on game. Cannot be higher that UpdateFPS (from Time Settings). Use 0 to run every game update. + /// + API_FIELD(Attributes="EditorOrder(100), Limit(0, 1000), EditorDisplay(\"General\", \"Network FPS\")") + float NetworkFPS = 60.0f; + + /// + /// Address of the server (server/host always runs on localhost). Only IPv4 is supported. + /// + API_FIELD(Attributes="EditorOrder(1000), EditorDisplay(\"Transport\")") + String Address = TEXT("127.0.0.1"); + + /// + /// The port for the network peer. + /// + API_FIELD(Attributes="EditorOrder(1010), EditorDisplay(\"Transport\")") + uint16 Port = 7777; + + /// + /// The type of the network driver (implements INetworkDriver) that will be used to create, manage, send and receive messages over the network. + /// + API_FIELD(Attributes="EditorOrder(1100), EditorDisplay(\"Transport\"), TypeReference(typeof(INetworkDriver)), CustomEditorAlias(\"FlaxEditor.CustomEditors.Editors.TypeNameEditor\")") + StringAnsi NetworkDriver = "FlaxEngine.Networking.ENetDriver"; + +public: + /// + /// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use. + /// + static NetworkSettings* Get(); + + // [SettingsBase] + void Apply() override; +};