DeamonHunter / AWBW-Replay-Player

Advance Wars By Web Replay Player
MIT License
38 stars 5 forks source link

Map Editor: Capture Overlay crashes the application #129

Closed Xirema closed 1 year ago

Xirema commented 1 year ago

Unfortunately, I might have the wrong stack trace/error message; there's briefly a message to click on, but then the Windows Crash Handler takes over and disables access to the window.

I found this in the Squirrel-ProcessStart.log file found in %localappdata%/AWBWReplayPlayer which I'm hoping correlates to the error being experienced, but it could be unrelated.

2023-02-03 22:52:25.3768 [FATAL] - Finished with unhandled exception: System.ArgumentException: Value does not fall within the expected range.
   at Squirrel.Update.Program.ProcessStart(String exeName, String arguments, Boolean shouldWait) in ./Program.cs:line 487
   at Squirrel.Update.Program.executeCommandLine(String[] args) in ./Program.cs:line 112
   at Squirrel.Update.Program.main(String[] args) in ./Program.cs:line 60

This is the map I downloaded to try the map editor with: https://awbw.amarriner.com/prevmaps.php?maps_id=137979

The Map Editor seems to initially work perfectly fine (from the limited testing I performed) but crashes at the moment the user tries to activate the Capture Overlay.

image

DeamonHunter commented 1 year ago

Hiya, Thanks for the report. Seems like the full error is:

Sequence contains no elements
   at System.Linq.ThrowHelper.ThrowNoElementsException()
   at System.Linq.Enumerable.MinBy[TSource,TKey](IEnumerable`1 source, Func`2 keySelector, IComparer`1 comparer)
   at AWBWApp.Game.Editor.Overlays.CaptureCalcEditorOverlay.checkForContestedProperties(Dictionary`2 propertiesToCountry, Dictionary`2 factoriesToCountry, Dictionary`2 rightfulProps, CapPhaseAnalysis output)
   at AWBWApp.Game.Editor.Overlays.CaptureCalcEditorOverlay.CalculateCapPhase()
   at AWBWApp.Game.UI.Editor.Overlays.DrawableCaptureCalcEditorOverlay.CalcAndShowCaptures()
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.TriggerValueChange(T previousValue, Bindable`1 source, Boolean propagateToBindings, Boolean bypassChecks)
   at osu.Framework.Bindables.Bindable`1.set_Value(T value)
   at AWBWApp.Game.UI.Editor.Components.EditorSpriteButton.OnClick(ClickEvent e)
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Func`2 predicate, Boolean& found)
   at osu.Framework.Input.ButtonEventManager`1.PropagateButtonEvent(IEnumerable`1 drawables, UIEvent e)
   at osu.Framework.Input.MouseButtonEventManager.handleClick(InputState state, List`1 targets)
   at osu.Framework.Input.MouseButtonEventManager.HandleButtonUp(InputState state, List`1 targets)
   at osu.Framework.Input.InputManager.HandleMouseButtonStateChange(ButtonStateChangeEvent`1 e)
   at osu.Framework.Input.UserInputManager.HandleInputStateChange(InputStateChangeEvent inputStateChange)
   at osu.Framework.Input.StateChanges.ButtonInput`1.Apply(InputState state, IInputStateChangeHandler handler)
   at osu.Framework.Input.InputManager.Update()
   at osu.Framework.Input.PassThroughInputManager.Update()
   at osu.Framework.Graphics.Drawable.UpdateSubTree()
   at osu.Framework.Graphics.Containers.CompositeDrawable.UpdateSubTree()
   at osu.Framework.Platform.GameHost.UpdateFrame()
   at osu.Framework.Threading.GameThread.processFrame()
--- End of stack trace from previous location ---
   at osu.Framework.Platform.GameHost.<>c__DisplayClass133_0.<abortExecutionFromException>b__0()
   at osu.Framework.Threading.ScheduledDelegate.RunTaskInternal()
   at osu.Framework.Threading.Scheduler.Update()
   at osu.Framework.Threading.GameThread.processFrame()
   at osu.Framework.Threading.GameThread.RunSingleFrame()
   at osu.Framework.Platform.ThreadRunner.RunMainLoop()
   at osu.Framework.Platform.GameHost.windowUpdate()
   at osu.Framework.Platform.SDL2DesktopWindow.Run()
   at osu.Framework.Platform.GameHost.Run(Game game)
   at AWBWApp.Desktop.Program.Main()

Looking into it now.

For future reference (I should make an issue template that includes this.) Logs are under %Appdata%/AWBWReplayPlayer/logs and runtime.log is the one that mostly concerns actual play.

DeamonHunter commented 1 year ago

Fixed in 1f5ab29575a1a4caeab837edd3de126b14a58a62. Making a hotfix build now.

Occured due to buildings being out of reach of infantry.