Skip to content

Commit 197c6f3

Browse files
committed
Performance Improvement, MaxDeltaTime auto-adjustment, hyper warp MaxDeltaTime control, Bug Fixes
1 parent 64f5700 commit 197c6f3

18 files changed

+567
-301
lines changed

GameData/GameData.projitems

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</PropertyGroup>
1111
<ItemGroup>
1212
<Content Include="$(MSBuildThisFileDirectory)TimeControl\Flags\TimeControl.png" />
13-
<Content Include="$(MSBuildThisFileDirectory)TimeControl\LICENSE.txt" />
13+
<Content Include="$(MSBuildThisFileDirectory)TimeControl\LICENSE" />
1414
<Content Include="$(MSBuildThisFileDirectory)TimeControl\ToolbarIcons\BlizzyToolbarIcons\disabled.png" />
1515
<Content Include="$(MSBuildThisFileDirectory)TimeControl\ToolbarIcons\BlizzyToolbarIcons\enabled.png" />
1616
<Content Include="$(MSBuildThisFileDirectory)TimeControl\ToolbarIcons\StockToolbarIcons\disabled.png" />
4 KB
Binary file not shown.

GameData/TimeControl/TimeControl.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"VERSION": {
77
"MAJOR": 2,
88
"MINOR": 8,
9-
"PATCH": 2,
9+
"PATCH": 3,
1010
"BUILD": 0
1111
},
1212
"KSP_VERSION": {

LICENSE

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
The MIT License (MIT)
2+
3+
Portions Copyright (c) 2014 Xaiier
4+
Portions Copyright (c) 2017 Nate West
5+
6+
Permission is hereby granted, free of charge, to any person obtaining a copy
7+
of this software and associated documentation files (the "Software"), to deal
8+
in the Software without restriction, including without limitation the rights
9+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
copies of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included in all
14+
copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
SOFTWARE.

TimeControl/AssemblyVersion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66

77
using System.Reflection;
88

9-
[assembly: AssemblyVersion("2.8.2.0")]
9+
[assembly: AssemblyVersion("2.8.3.0")]

TimeControl/ExtensionMethods.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3232

3333
namespace TimeControl
3434
{
35+
internal class FloatComparer : Comparer<float>
36+
{
37+
public override int Compare(float x, float y)
38+
{
39+
if (Mathf.Approximately( x, y ))
40+
return 0;
41+
else
42+
return x.CompareTo( y );
43+
}
44+
}
45+
3546
internal static class ExtensionMethods
3647
{
3748
internal static ManeuverNode FirstUpcomingManuverNode(this Vessel v, double fromUT)

TimeControl/GlobalSettings.cs

Lines changed: 119 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ public bool AssignFromConfigNode(ConfigNode pCN)
135135
public static GlobalSettings Instance { get; private set; }
136136
#endregion
137137

138+
private EventData<float> OnTimeControlHyperWarpMaximumDeltaTimeChangedEvent { get; set; }
138139
private EventData<float> OnTimeControlHyperWarpMaxAttemptedRateChangedEvent { get; set; }
139140
private EventData<float> OnTimeControlHyperWarpPhysicsAccuracyChangedEvent { get; set; }
140141
private EventData<float> OnTimeControlSlowMoRateChangedEvent { get; set; }
@@ -172,15 +173,33 @@ public void SetActiveKeyBinds(List<TimeControlKeyBinding> value)
172173
saveOnNextUpdate = true;
173174
}
174175

176+
private float hyperWarpMaximumDeltaTime = GameSettings.PHYSICS_FRAME_DT_LIMIT;
177+
public float HyperWarpMaximumDeltaTime
178+
{
179+
get => hyperWarpMaximumDeltaTime;
180+
set
181+
{
182+
if (hyperWarpMaximumDeltaTime != value)
183+
{
184+
hyperWarpMaximumDeltaTime = value;
185+
mainNode?.SetValue( nameof( HyperWarpMaximumDeltaTime ), value, true );
186+
saveOnNextUpdate = true;
187+
}
188+
}
189+
}
190+
175191
private float hyperWarpPhysicsAccuracy = 1f;
176192
public float HyperWarpPhysicsAccuracy
177193
{
178194
get => hyperWarpPhysicsAccuracy;
179195
set
180196
{
181-
hyperWarpPhysicsAccuracy = value;
182-
mainNode?.SetValue( nameof( HyperWarpPhysicsAccuracy ), value, true );
183-
saveOnNextUpdate = true;
197+
if (hyperWarpPhysicsAccuracy != value)
198+
{
199+
hyperWarpPhysicsAccuracy = value;
200+
mainNode?.SetValue( nameof( HyperWarpPhysicsAccuracy ), value, true );
201+
saveOnNextUpdate = true;
202+
}
184203
}
185204
}
186205

@@ -190,9 +209,12 @@ public float HyperWarpMaxAttemptedRate
190209
get => hyperWarpMaxAttemptedRate;
191210
set
192211
{
193-
hyperWarpMaxAttemptedRate = value;
194-
mainNode?.SetValue( nameof( HyperWarpMaxAttemptedRate ), value, true );
195-
saveOnNextUpdate = true;
212+
if (hyperWarpMaxAttemptedRate != value)
213+
{
214+
hyperWarpMaxAttemptedRate = value;
215+
mainNode?.SetValue( nameof( HyperWarpMaxAttemptedRate ), value, true );
216+
saveOnNextUpdate = true;
217+
}
196218
}
197219
}
198220

@@ -202,9 +224,12 @@ public float SlowMoRate
202224
get => slowMoRate;
203225
set
204226
{
205-
slowMoRate = value;
206-
mainNode?.SetValue( nameof( SlowMoRate ), value, true );
207-
saveOnNextUpdate = true;
227+
if (slowMoRate != value)
228+
{
229+
slowMoRate = value;
230+
mainNode?.SetValue( nameof( SlowMoRate ), value, true );
231+
saveOnNextUpdate = true;
232+
}
208233
}
209234
}
210235

@@ -214,9 +239,12 @@ public bool DeltaLocked
214239
get => deltaLocked;
215240
set
216241
{
217-
deltaLocked = value;
218-
mainNode?.SetValue( nameof( DeltaLocked ), value, true );
219-
saveOnNextUpdate = true;
242+
if (deltaLocked != value)
243+
{
244+
deltaLocked = value;
245+
mainNode?.SetValue( nameof( DeltaLocked ), value, true );
246+
saveOnNextUpdate = true;
247+
}
220248
}
221249
}
222250
private float resetAltitudeToValue = 1000f;
@@ -225,28 +253,33 @@ public float ResetAltitudeToValue
225253
get => resetAltitudeToValue;
226254
set
227255
{
228-
resetAltitudeToValue = value;
229-
mainNode?.SetValue( nameof( ResetAltitudeToValue ), value, true );
230-
saveOnNextUpdate = true;
256+
if (resetAltitudeToValue != value)
257+
{
258+
resetAltitudeToValue = value;
259+
mainNode?.SetValue( nameof( ResetAltitudeToValue ), value, true );
260+
saveOnNextUpdate = true;
261+
}
231262
}
232263
}
233-
234-
264+
235265
// This is managed in the time control parameters screen, but is applied globally by the settings
236266
private bool cameraZoomFix = true;
237267
public bool CameraZoomFix
238268
{
239269
get => cameraZoomFix;
240270
set
241271
{
242-
cameraZoomFix = value;
243-
try
272+
if (cameraZoomFix != value)
244273
{
245-
HighLogic.CurrentGame.Parameters.CustomParams<TimeControlParameterNode>().CameraZoomFix = value;
274+
cameraZoomFix = value;
275+
try
276+
{
277+
HighLogic.CurrentGame.Parameters.CustomParams<TimeControlParameterNode>().CameraZoomFix = value;
278+
}
279+
catch (NullReferenceException) { }
280+
mainNode?.SetValue( nameof( CameraZoomFix ), value, true );
281+
saveOnNextUpdate = true;
246282
}
247-
catch (NullReferenceException) { }
248-
mainNode?.SetValue( nameof( CameraZoomFix ), value, true );
249-
saveOnNextUpdate = true;
250283
}
251284
}
252285

@@ -256,9 +289,12 @@ public int KeyRepeatStart
256289
get => keyRepeatStart;
257290
set
258291
{
259-
keyRepeatStart = value;
260-
mainNode?.SetValue( nameof( KeyRepeatStart ), value, true );
261-
saveOnNextUpdate = true;
292+
if (keyRepeatStart != value)
293+
{
294+
keyRepeatStart = value;
295+
mainNode?.SetValue( nameof( KeyRepeatStart ), value, true );
296+
saveOnNextUpdate = true;
297+
}
262298
}
263299
}
264300
private int keyRepeatInterval = 15;
@@ -267,9 +303,12 @@ public int KeyRepeatInterval
267303
get => keyRepeatInterval;
268304
set
269305
{
270-
keyRepeatInterval = value;
271-
mainNode?.SetValue( nameof( KeyRepeatInterval ), value, true );
272-
saveOnNextUpdate = true;
306+
if (keyRepeatInterval != value)
307+
{
308+
keyRepeatInterval = value;
309+
mainNode?.SetValue( nameof( KeyRepeatInterval ), value, true );
310+
saveOnNextUpdate = true;
311+
}
273312
}
274313
}
275314

@@ -280,15 +319,18 @@ public LogSeverity LoggingLevel
280319
get => loggingLevel;
281320
set
282321
{
283-
loggingLevel = value;
284-
Log.LoggingLevel = value;
285-
try
322+
if (loggingLevel != value)
286323
{
287-
HighLogic.CurrentGame.Parameters.CustomParams<TimeControlParameterNode>().LoggingLevel = value;
324+
loggingLevel = value;
325+
Log.LoggingLevel = value;
326+
try
327+
{
328+
HighLogic.CurrentGame.Parameters.CustomParams<TimeControlParameterNode>().LoggingLevel = value;
329+
}
330+
catch (NullReferenceException) { }
331+
mainNode?.SetValue( nameof( LoggingLevel ), value.ToString(), true );
332+
saveOnNextUpdate = true;
288333
}
289-
catch (NullReferenceException) { }
290-
mainNode?.SetValue( nameof( LoggingLevel ), value.ToString(), true );
291-
saveOnNextUpdate = true;
292334
}
293335
}
294336

@@ -299,15 +341,18 @@ public bool UseKerbinTime
299341
get => useKerbinTime;
300342
set
301343
{
302-
useKerbinTime = value;
303-
GameSettings.KERBIN_TIME = value;
304-
try
344+
if (useKerbinTime != value)
305345
{
306-
HighLogic.CurrentGame.Parameters.CustomParams<TimeControlParameterNode>().UseKerbinTime = value;
346+
useKerbinTime = value;
347+
GameSettings.KERBIN_TIME = value;
348+
try
349+
{
350+
HighLogic.CurrentGame.Parameters.CustomParams<TimeControlParameterNode>().UseKerbinTime = value;
351+
}
352+
catch (NullReferenceException) { }
353+
//mainNode?.SetValue( nameof( KerbinTime ), value.ToString(), true );
354+
//saveOnNextUpdate = true;
307355
}
308-
catch (NullReferenceException) { }
309-
//mainNode?.SetValue( nameof( KerbinTime ), value.ToString(), true );
310-
//saveOnNextUpdate = true;
311356
}
312357
}
313358

@@ -343,6 +388,7 @@ private void Start()
343388

344389
mainNode.SetValue( nameof( HyperWarpPhysicsAccuracy ), HyperWarpPhysicsAccuracy, true );
345390
mainNode.SetValue( nameof( HyperWarpMaxAttemptedRate ), HyperWarpMaxAttemptedRate, true );
391+
mainNode.SetValue( nameof( HyperWarpMaximumDeltaTime ), HyperWarpMaximumDeltaTime, true );
346392
mainNode.SetValue( nameof( SlowMoRate ), SlowMoRate, true );
347393
mainNode.SetValue( nameof( DeltaLocked ), DeltaLocked, true );
348394
mainNode.SetValue( nameof( ResetAltitudeToValue ), ResetAltitudeToValue, true );
@@ -358,6 +404,8 @@ private void Start()
358404
LoadFromConfig();
359405

360406
SubscribeToEvents();
407+
408+
saveOnNextUpdate = true;
361409
IsReady = true;
362410
}
363411
}
@@ -393,6 +441,9 @@ private void SubscribeToEvents()
393441
OnTimeControlHyperWarpPhysicsAccuracyChangedEvent = GameEvents.FindEvent<EventData<float>>( nameof( TimeControlEvents.OnTimeControlHyperWarpPhysicsAccuracyChanged ) );
394442
OnTimeControlHyperWarpPhysicsAccuracyChangedEvent?.Add( OnTimeControlHyperWarpPhysicsAccuracyChanged );
395443

444+
OnTimeControlHyperWarpMaximumDeltaTimeChangedEvent = GameEvents.FindEvent<EventData<float>>( nameof( TimeControlEvents.OnTimeControlHyperWarpMaximumDeltaTimeChanged ) );
445+
OnTimeControlHyperWarpMaximumDeltaTimeChangedEvent?.Add( OnTimeControlHyperWarpMaximumDeltaTimeChanged );
446+
396447
OnTimeControlSlowMoRateChangedEvent = GameEvents.FindEvent<EventData<float>>( nameof( TimeControlEvents.OnTimeControlSlowMoRateChanged ) );
397448
OnTimeControlSlowMoRateChangedEvent?.Add( OnTimeControlSlowMoRateChanged );
398449

@@ -413,6 +464,7 @@ private void UnsubscribeFromEvents()
413464
OnTimeControlKeyBindingsChangedEvent?.Remove( OnTimeControlKeyBindingsChanged );
414465
OnTimeControlHyperWarpMaxAttemptedRateChangedEvent?.Remove( OnTimeControlHyperWarpMaxAttemptedRateChanged );
415466
OnTimeControlHyperWarpPhysicsAccuracyChangedEvent?.Remove( OnTimeControlHyperWarpPhysicsAccuracyChanged );
467+
OnTimeControlHyperWarpMaximumDeltaTimeChangedEvent?.Remove( OnTimeControlHyperWarpMaximumDeltaTimeChanged );
416468
OnTimeControlSlowMoRateChangedEvent?.Remove( OnTimeControlSlowMoRateChanged );
417469

418470
SpaceCenterWindow.OnChanged -= GUIWindowsChanged;
@@ -496,6 +548,18 @@ private void OnTimeControlHyperWarpMaxAttemptedRateChanged(float data)
496548
}
497549
}
498550

551+
private void OnTimeControlHyperWarpMaximumDeltaTimeChanged(float data)
552+
{
553+
const string logBlockName = nameof( GlobalSettings ) + "." + nameof( OnTimeControlHyperWarpMaximumDeltaTimeChanged );
554+
using (EntryExitLogger.EntryExitLog( logBlockName, EntryExitLoggerOptions.All ))
555+
{
556+
if (HyperWarpController.IsReady)
557+
{
558+
HyperWarpMaximumDeltaTime = HyperWarpController.Instance.MaximumDeltaTime;
559+
}
560+
}
561+
}
562+
499563
private void OnTimeControlSlowMoRateChanged(float data)
500564
{
501565
const string logBlockName = nameof( GlobalSettings ) + "." + nameof( OnTimeControlSlowMoRateChanged );
@@ -679,6 +743,18 @@ private void LoadFromConfig()
679743
Log.Warning( nameof( HyperWarpPhysicsAccuracy ) + " has error in configuration file. Using default.", logBlockName );
680744
}
681745

746+
////////////////////////////////////////////////
747+
// HyperWarpPhysicsAccuracy
748+
////////////////////////////////////////////////
749+
if (tmpConfigMain.TryAssignFromConfigFloat( nameof( HyperWarpMaximumDeltaTime ), out float tmpHyperWarpMaximumDeltaTime ))
750+
{
751+
HyperWarpMaximumDeltaTime = tmpHyperWarpMaximumDeltaTime;
752+
}
753+
else
754+
{
755+
Log.Warning( nameof( HyperWarpMaximumDeltaTime ) + " has error in configuration file. Using default.", logBlockName );
756+
}
757+
682758
////////////////////////////////////////////////
683759
// SlowMoRate
684760
////////////////////////////////////////////////

0 commit comments

Comments
 (0)