11using Intersect . Async ;
22using Intersect . Client . Core ;
3+ using Intersect . Client . Framework . Content ;
34using Intersect . Client . Framework . Graphics ;
45using Intersect . Client . Framework . Gwen ;
56using Intersect . Client . Framework . Gwen . Control ;
@@ -39,28 +40,83 @@ public DebugWindow(Base parent) : base(parent, Strings.Debug.Title, false, nameo
3940 TableDebugStats = CreateInfoTableDebugStats ( TabInfo . Page ) ;
4041
4142 TabAssets = Tabs . AddPage ( Strings . Debug . TabLabelAssets ) ;
42- AssetsList = CreateAssetsList ( TabAssets . Page ) ;
4343 AssetsToolsTable = CreateAssetsToolsTable ( TabAssets . Page ) ;
44+ AssetsList = CreateAssetsList ( TabAssets . Page ) ;
45+ AssetsButtonReloadAsset = CreateAssetsButtonReloadAsset ( AssetsToolsTable , AssetsList ) ;
46+
47+ AssetsToolsTable . SizeToChildren ( ) ;
4448
4549 IsHidden = true ;
4650 }
4751
4852 private SearchableTree CreateAssetsList ( Base parent )
4953 {
5054 var dataProvider = new TexturesSearchableTreeDataProvider ( Current , this ) ;
51- SearchableTree textureList = new ( parent , dataProvider )
55+ SearchableTree assetList = new ( parent , dataProvider )
5256 {
5357 Dock = Pos . Fill ,
5458 FontSearch = _defaultFont ,
5559 FontTree = _defaultFont ,
60+ Margin = new Margin ( 0 , 4 , 0 , 0 ) ,
61+ SearchPlaceholderText = Strings . Debug . AssetsSearchPlaceholder ,
5662 } ;
5763
58- return textureList ;
64+ return assetList ;
5965 }
6066
6167 private Table CreateAssetsToolsTable ( Base assetsTabPage )
6268 {
63- return new Table ( assetsTabPage , nameof ( AssetsToolsTable ) ) ;
69+ Table table = new ( assetsTabPage , nameof ( AssetsToolsTable ) )
70+ {
71+ ColumnCount = 2 ,
72+ Dock = Pos . Top ,
73+ } ;
74+
75+ return table ;
76+ }
77+
78+ private Button CreateAssetsButtonReloadAsset ( Table table , SearchableTree assetList )
79+ {
80+ var row = table . AddRow ( ) ;
81+
82+ Button buttonReloadAsset = new ( row , name : nameof ( AssetsButtonReloadAsset ) )
83+ {
84+ IsDisabled = assetList . SelectedNodes . Length < 1 ,
85+ Font = _defaultFont ,
86+ Text = Strings . Debug . ReloadAsset ,
87+ } ;
88+
89+ assetList . SelectionChanged += ( _ , _ ) =>
90+ buttonReloadAsset . IsDisabled = assetList . SelectedNodes . All (
91+ node => node . UserData is not SearchableTreeDataEntry { UserData : GameTexture }
92+ ) ;
93+
94+ buttonReloadAsset . Clicked += ( _ , _ ) =>
95+ {
96+ foreach ( var node in assetList . SelectedNodes )
97+ {
98+ if ( node . UserData is not SearchableTreeDataEntry entry )
99+ {
100+ continue ;
101+ }
102+
103+ if ( entry . UserData is not IAsset asset )
104+ {
105+ continue ;
106+ }
107+
108+ // TODO: Audio reloading?
109+ if ( asset is not GameTexture texture )
110+ {
111+ continue ;
112+ }
113+
114+ texture . Reload ( ) ;
115+ }
116+ } ;
117+ row . SetCellContents ( 0 , buttonReloadAsset , enableMouseInput : true ) ;
118+
119+ return buttonReloadAsset ;
64120 }
65121
66122 private TabControl Tabs { get ; }
@@ -73,6 +129,8 @@ private Table CreateAssetsToolsTable(Base assetsTabPage)
73129
74130 private Table AssetsToolsTable { get ; }
75131
132+ private Button AssetsButtonReloadAsset { get ; }
133+
76134 private LabeledCheckBox CheckboxDrawDebugOutlines { get ; }
77135
78136 private LabeledCheckBox CheckboxEnableLayoutHotReloading { get ; }
0 commit comments