Importing files can cause crash depending on project architecture
Release Type: Github and release
Version: master and 4.2.0.2122
Platform(s): Windows
Describe the bug When you import a file into the game studio it will crash if the Resource folder is not in your main project folder.
the cause is this line in AssetCollectionViewModel.cs
var finalPath = Path.GetFullPath(Path.Combine(directory.Package.Package.ResourceFolders[0], path, file.GetFileName()));
since the directory.Package.Package.ResourceFolders[0] will throw an index out of bounds error.
To Reproduce Steps to reproduce the behavior:
- create the default FPS template
- import any file like a 3d model
- select yes on the move file into project folder popup
- crash
Expected behavior Either it should create a Resource folder where it expects it or it would ask you where it should save if it cant find a spot.
Additional context
Application: GameStudio
UserEmail:
UserMessage:
StrideVersion: 4.2.0.2122
GameStudioVersion: 4
ThreadName: Main thread
DefaultGraphicProfile: Level_10_0
OpenedAssets: f08ccb44-9a6a-40fa-a923-15c48cc1bc7d:MainScene (Scene)
LastActions: * +[Create folder "New folder" in "Assets"]
* {PropertyChangeOperation: DirectoryViewModel.Parent}
* +[Rename folder "New folder" to "Test"]
* {PropertyChangeOperation: DirectoryViewModel.Name}
CurrentDirectory: %USERPROFILE%\.nuget\packages\stride.gamestudio\4.2.0.2122\lib\net8.0-windows7.0
CommandArgs: C:\dev\stride-dev\FirstPersonShooter\FirstPersonShooter.sln
OsVersion: Microsoft Windows 10 Pro 10.0.19045 x64
ProcessorCount: 32
Exception: ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Stride.Core.Assets.Editor.ViewModel.AssetCollectionViewModel.GetAssetCopyDirectory(DirectoryBaseViewModel directory, UFile file) in C:\BuildAgent\work\b5f46e3c4829a09e\sources\editor\Stride.Core.Assets.Editor\ViewModel\AssetCollectionViewModel.cs:line 542
at Stride.Core.Assets.Editor.ViewModel.AssetCollectionViewModel.InvokeAddAssetTemplate(LoggerResult logger, String name, DirectoryBaseViewModel directory, TemplateAssetDescription templateDescription, IList`1 files, Nullable`1 customParameters) in C:\BuildAgent\work\b5f46e3c4829a09e\sources\editor\Stride.Core.Assets.Editor\ViewModel\AssetCollectionViewModel.cs:line 594
at Stride.Core.Assets.Editor.ViewModel.AssetCollectionViewModel.RunAssetTemplate(ITemplateDescriptionViewModel template, IList`1 files, Nullable`1 customParameters) in C:\BuildAgent\work\b5f46e3c4829a09e\sources\editor\Stride.Core.Assets.Editor\ViewModel\AssetCollectionViewModel.cs:line 504
at Stride.Core.Assets.Editor.ViewModel.AssetCollectionViewModel.Stride.Core.Assets.Editor.ViewModel.IAddChildViewModel.AddChildren(IReadOnlyCollection`1 children, AddChildModifiers modifiers) in C:\BuildAgent\work\b5f46e3c4829a09e\sources\editor\Stride.Core.Assets.Editor\ViewModel\AssetCollectionViewModel.cs:line 1594
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at Stride.GameStudio.Program.Main() in C:\BuildAgent\work\b5f46e3c4829a09e\sources\editor\Stride.GameStudio\Program.cs:line 148
GPU0.AdapterCompatibility: Virtual Desktop, Inc.
GPU0.Availability: 8
GPU0.Caption: Virtual Desktop Monitor
GPU0.ConfigManagerErrorCode: 22
GPU0.ConfigManagerUserConfig: False
GPU0.CreationClassName: Win32_VideoController
GPU0.Description: Virtual Desktop Monitor
GPU0.DeviceID: VideoController1
GPU0.DriverDate: 20240114000000.000000-000
GPU0.DriverVersion: 10.54.50.446
GPU0.InfFilename: oem5.inf
GPU0.InfSection: MyDevice_Install.NT
GPU0.Monochrome: False
GPU0.Name: Virtual Desktop Monitor
GPU0.PNPDeviceID: ROOT\DISPLAY\0000
GPU0.Status: Error
GPU0.SystemCreationClassName: Win32_ComputerSystem
GPU0.SystemName: DESKTOP-AUQIATQ
GPU0.VideoArchitecture: 5
GPU0.VideoMemoryType: 2
GPU1.AdapterCompatibility: NVIDIA
GPU1.AdapterDACType: Integrated RAMDAC
GPU1.AdapterRAM: 4293918720
GPU1.Availability: 3
GPU1.Caption: NVIDIA GeForce RTX 3080
GPU1.ConfigManagerErrorCode: 0
GPU1.ConfigManagerUserConfig: False
GPU1.CreationClassName: Win32_VideoController
GPU1.CurrentBitsPerPixel: 32
GPU1.CurrentHorizontalResolution: 1920
GPU1.CurrentNumberOfColors: 4294967296
GPU1.CurrentNumberOfColumns: 0
GPU1.CurrentNumberOfRows: 0
GPU1.CurrentRefreshRate: 143
GPU1.CurrentScanMode: 4
GPU1.CurrentVerticalResolution: 1080
GPU1.Description: NVIDIA GeForce RTX 3080
GPU1.DeviceID: VideoController2
GPU1.DitherType: 0
GPU1.DriverDate: 20240301000000.000000-000
GPU1.DriverVersion: 31.0.15.5176
GPU1.InfFilename: oem94.inf
GPU1.InfSection: Section028
GPU1.InstalledDisplayDrivers: C:\WINDOWS\System32\DriverStore\FileRepository\nvmdi.inf_amd64_92b25561841a09dd\nvldumdx.dll,C:\WINDOWS\System32\DriverStore\FileRepository\nvmdi.inf_amd64_92b25561841a09dd\nvldumdx.dll,C:\WINDOWS\System32\DriverStore\FileRepository\nvmdi.inf_amd64_92b25561841a09dd\nvldumdx.dll,C:\WINDOWS\System32\DriverStore\FileRepository\nvmdi.inf_amd64_92b25561841a09dd\nvldumdx.dll
GPU1.MaxRefreshRate: 164
GPU1.MinRefreshRate: 50
GPU1.Monochrome: False
GPU1.Name: NVIDIA GeForce RTX 3080
GPU1.PNPDeviceID: PCI\VEN_10DE&DEV_220A&SUBSYS_38961462&REV_A1\4&1D81E16&0&0019
GPU1.Status: OK
GPU1.SystemCreationClassName: Win32_ComputerSystem
GPU1.SystemName: DESKTOP-AUQIATQ
GPU1.VideoArchitecture: 5
GPU1.VideoMemoryType: 2
GPU1.VideoModeDescription: 1920 x 1080 x 4294967296 colors
GPU1.VideoProcessor: NVIDIA GeForce RTX 3080
Log: 1: Trigger/TriggerGroupException(0,0): []: Fatal: The asset Trigger/TriggerGroupException is missing or incorrectly indexed in the package. Please report this issue.
2: Trigger/TriggerEvent(0,0): []: Fatal: The asset Trigger/TriggerEvent is missing or incorrectly indexed in the package. Please report this issue.
3: Trigger/TriggerGroup(0,0): []: Fatal: The asset Trigger/TriggerGroup is missing or incorrectly indexed in the package. Please report this issue.
4: Trigger/TriggerScript(0,0): []: Fatal: The asset Trigger/TriggerScript is missing or incorrectly indexed in the package. Please report this issue.
5: FirstPersonShooterApp(0,0): []: Fatal: The asset FirstPersonShooterApp is missing or incorrectly indexed in the package. Please report this issue.
Is it from a new project or an existing one? The resource folder definition was missing from most of the templates but I fixed that some time ago.
Cf #2109
I only tried the FPS template and created it yesterday. It does seem like the changes arent in the sdpkg anymore when I create a new template but it was in your PR.
@Doprez Is it still the case? As far as I can see it was fixed in 4.2.0.2121 and wasn't regressed in 4.0.2.2122.
Weird yeah, I cant recreate this anymore for some reason... Ill close it, maybe the FPS project just didnt create properly or something strange.