mirror of
https://github.com/P3D-Legacy/P3D-Legacy.git
synced 2025-07-27 15:54:25 +02:00
file watcher for debugging maps/scripts
This commit is contained in:
parent
c4c1d4b62c
commit
c570609b39
@ -12677,6 +12677,7 @@
|
|||||||
<Compile Include="World\ActionScript\V2\ScriptV2.vb" />
|
<Compile Include="World\ActionScript\V2\ScriptV2.vb" />
|
||||||
<Compile Include="World\Badge.vb" />
|
<Compile Include="World\Badge.vb" />
|
||||||
<Compile Include="World\BaseEntity.vb" />
|
<Compile Include="World\BaseEntity.vb" />
|
||||||
|
<Compile Include="Debug\DebugFileWatcher.vb" />
|
||||||
<Compile Include="World\Level.vb" />
|
<Compile Include="World\Level.vb" />
|
||||||
<Compile Include="World\LevelLoader.vb" />
|
<Compile Include="World\LevelLoader.vb" />
|
||||||
<Compile Include="World\Lighting.vb" />
|
<Compile Include="World\Lighting.vb" />
|
||||||
|
82
2.5DHero/2.5DHero/Debug/DebugFileWatcher.vb
Normal file
82
2.5DHero/2.5DHero/Debug/DebugFileWatcher.vb
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
''' <summary>
|
||||||
|
''' This class watches the maps and scripts folders of the project to automatically
|
||||||
|
''' copy changed files on map reloads to the bin directory.
|
||||||
|
''' </summary>
|
||||||
|
Public Class DebugFileWatcher
|
||||||
|
|
||||||
|
Private Shared _changedFiles As List(Of String)
|
||||||
|
Private Shared _watchers As List(Of FileSystemWatcher)
|
||||||
|
Private Shared _isWatching As Boolean = False
|
||||||
|
|
||||||
|
Shared Sub New()
|
||||||
|
_changedFiles = New List(Of String)()
|
||||||
|
_watchers = New List(Of FileSystemWatcher)()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Shared Sub TriggerReload()
|
||||||
|
' copy all changed files
|
||||||
|
SyncLock _changedFiles
|
||||||
|
Dim projectPath = GetProjectPath()
|
||||||
|
Dim targetPath = AppDomain.CurrentDomain.BaseDirectory
|
||||||
|
|
||||||
|
For Each changedFile In _changedFiles
|
||||||
|
Dim relativeFile = changedFile.Remove(0, projectPath.Length + 1)
|
||||||
|
Dim targetFile = Path.Combine(targetPath, relativeFile)
|
||||||
|
|
||||||
|
File.Copy(changedFile, targetFile, True)
|
||||||
|
Next
|
||||||
|
|
||||||
|
' clear the changed files afterwards
|
||||||
|
_changedFiles.Clear()
|
||||||
|
End SyncLock
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Shared Function GetProjectPath() As String
|
||||||
|
Return New DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Public Shared Sub StartWatching()
|
||||||
|
If Not _isWatching Then
|
||||||
|
_isWatching = True
|
||||||
|
|
||||||
|
Dim projectPath = GetProjectPath()
|
||||||
|
|
||||||
|
' MAPS
|
||||||
|
Dim mapsPath = Path.Combine(projectPath, "maps")
|
||||||
|
Dim mapsWatcher = New FileSystemWatcher With {
|
||||||
|
.Path = mapsPath,
|
||||||
|
.NotifyFilter = NotifyFilters.LastWrite,
|
||||||
|
.IncludeSubdirectories = True
|
||||||
|
}
|
||||||
|
|
||||||
|
AddHandler mapsWatcher.Changed, AddressOf OnChanged
|
||||||
|
mapsWatcher.EnableRaisingEvents = True
|
||||||
|
|
||||||
|
_watchers.Add(mapsWatcher)
|
||||||
|
|
||||||
|
' SCRIPTS
|
||||||
|
Dim scriptsPath = Path.Combine(projectPath, "Scripts")
|
||||||
|
Dim scriptsWatcher = New FileSystemWatcher With {
|
||||||
|
.Path = scriptsPath,
|
||||||
|
.NotifyFilter = NotifyFilters.LastWrite,
|
||||||
|
.IncludeSubdirectories = True
|
||||||
|
}
|
||||||
|
|
||||||
|
AddHandler scriptsWatcher.Changed, AddressOf OnChanged
|
||||||
|
scriptsWatcher.EnableRaisingEvents = True
|
||||||
|
|
||||||
|
_watchers.Add(scriptsWatcher)
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
|
||||||
|
SyncLock _changedFiles
|
||||||
|
Dim file = e.FullPath
|
||||||
|
If Not _changedFiles.Contains(file) Then
|
||||||
|
Logger.Debug("File changed: " + file)
|
||||||
|
_changedFiles.Add(file)
|
||||||
|
End If
|
||||||
|
End SyncLock
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
End Class
|
@ -138,6 +138,11 @@ Public Class OverworldScreen
|
|||||||
|
|
||||||
'Load the particle texture.
|
'Load the particle texture.
|
||||||
Me._particlesTexture = TextureManager.GetTexture("GUI\Overworld\Particles")
|
Me._particlesTexture = TextureManager.GetTexture("GUI\Overworld\Particles")
|
||||||
|
|
||||||
|
' start watching files for changes
|
||||||
|
#If DEBUG Then
|
||||||
|
DebugFileWatcher.StartWatching()
|
||||||
|
#End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
|
@ -698,6 +698,12 @@ Public Class Level
|
|||||||
''' </summary>
|
''' </summary>
|
||||||
''' <param name="Levelpath">The path to load the level from. Start with "|" to prevent loading a levelfile.</param>
|
''' <param name="Levelpath">The path to load the level from. Start with "|" to prevent loading a levelfile.</param>
|
||||||
Public Sub Load(ByVal Levelpath As String)
|
Public Sub Load(ByVal Levelpath As String)
|
||||||
|
|
||||||
|
' copy all changed files
|
||||||
|
#If DEBUG Then
|
||||||
|
DebugFileWatcher.TriggerReload()
|
||||||
|
#End If
|
||||||
|
|
||||||
' Create a parameter array to pass over to the LevelLoader:
|
' Create a parameter array to pass over to the LevelLoader:
|
||||||
Dim params As New List(Of Object)
|
Dim params As New List(Of Object)
|
||||||
params.AddRange({Levelpath, False, New Vector3(0, 0, 0), 0, New List(Of String)})
|
params.AddRange({Levelpath, False, New Vector3(0, 0, 0), 0, New List(Of String)})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user