11
11
using Robust . Shared . Utility ;
12
12
using SixLabors . ImageSharp ;
13
13
using SixLabors . ImageSharp . PixelFormats ;
14
+ using TerraFX . Interop . Windows ;
14
15
using IResourceManager = Robust . Shared . ContentPack . IResourceManager ;
15
16
16
17
namespace Robust . Client . ResourceManagement
@@ -36,10 +37,13 @@ public sealed class RSIResource : BaseResource
36
37
public const uint MAXIMUM_RSI_VERSION = RsiLoading . MAXIMUM_RSI_VERSION ;
37
38
38
39
public override void Load ( IDependencyCollection dependencies , ResPath path )
40
+ => Load ( dependencies , path , false ) ;
41
+
42
+ public override void Load ( IDependencyCollection dependencies , ResPath path , bool normalLoading )
39
43
{
40
44
var loadStepData = new LoadStepData { Path = path } ;
41
45
var manager = dependencies . Resolve < IResourceManager > ( ) ;
42
- LoadPreTexture ( manager , loadStepData ) ;
46
+ LoadPreTexture ( manager , loadStepData , normalLoading ) ;
43
47
LoadTexture ( dependencies . Resolve < IClyde > ( ) , loadStepData ) ;
44
48
LoadPostTexture ( loadStepData ) ;
45
49
LoadFinish ( dependencies . Resolve < IResourceCacheInternal > ( ) , loadStepData ) ;
@@ -145,7 +149,7 @@ internal static void CreatePlaceholderNormal(Image<Rgba32> original, Vector2i bl
145
149
bumpmap . Dispose ( ) ;
146
150
}
147
151
148
- internal static void LoadPreTexture ( IResourceManager manager , LoadStepData data )
152
+ internal static void LoadPreTexture ( IResourceManager manager , LoadStepData data , bool normalLoading = false )
149
153
{
150
154
var manifestPath = data . Path / "meta.json" ;
151
155
RsiLoading . RsiMetadata metadata ;
@@ -188,7 +192,8 @@ internal static void LoadPreTexture(IResourceManager manager, LoadStepData data)
188
192
{
189
193
var texture = Image . Load < Rgba32 > ( stream ) ;
190
194
Image < Rgba32 > normalImage ;
191
- if ( stateObject . NormalId is { } )
195
+ if ( ! normalLoading ) normalImage = texture ;
196
+ else if ( stateObject . NormalId is { } )
192
197
{
193
198
using ( var normalStream = manager . ContentFileRead ( normalPath ) )
194
199
{
@@ -211,13 +216,14 @@ internal static void LoadPreTexture(IResourceManager manager, LoadStepData data)
211
216
CreatePlaceholderNormal ( texture , stateObject . Size , out normalImage ) ;
212
217
}
213
218
}
214
- for ( int nX = 0 ; nX < texture . Width ; nX ++ )
215
- for ( int nY = 0 ; nY < texture . Height ; nY ++ )
216
- {
217
- var T = normalImage [ nX , nY ] ;
218
- T . A = texture [ nX , nY ] . A ;
219
- normalImage [ nX , nY ] = T ;
220
- }
219
+ if ( normalLoading )
220
+ for ( int nX = 0 ; nX < texture . Width ; nX ++ )
221
+ for ( int nY = 0 ; nY < texture . Height ; nY ++ )
222
+ {
223
+ var T = normalImage [ nX , nY ] ;
224
+ T . A = texture [ nX , nY ] . A ;
225
+ normalImage [ nX , nY ] = T ;
226
+ }
221
227
222
228
reg . Src = ( texture , normalImage ) ;
223
229
}
@@ -269,7 +275,7 @@ internal static void LoadPreTexture(IResourceManager manager, LoadStepData data)
269
275
var dimensionY = ( int ) MathF . Ceiling ( ( float ) totalFrameCount / dimensionX ) ;
270
276
271
277
var sheetHalfWidth = dimensionX * frameSize . X ;
272
- var sheet = new Image < Rgba32 > ( sheetHalfWidth * 2 , dimensionY * frameSize . Y ) ;
278
+ var sheet = new Image < Rgba32 > ( sheetHalfWidth * ( normalLoading ? 2 : 1 ) , dimensionY * frameSize . Y ) ;
273
279
274
280
var sheetIndex = 0 ;
275
281
for ( var index = 0 ; index < toAtlas . Length ; index ++ )
@@ -291,7 +297,8 @@ internal static void LoadPreTexture(IResourceManager manager, LoadStepData data)
291
297
var srcBox = UIBox2i . FromDimensions ( srcPos , frameSize ) ;
292
298
293
299
reg . Src . Item1 . Blit ( srcBox , sheet , sheetPos ) ;
294
- reg . Src . Item2 . Blit ( srcBox , sheet , sheetNPos ) ;
300
+ if ( normalLoading )
301
+ reg . Src . Item2 . Blit ( srcBox , sheet , sheetNPos ) ;
295
302
}
296
303
297
304
sheetIndex += reg . TotalFrameCount ;
@@ -301,7 +308,8 @@ internal static void LoadPreTexture(IResourceManager manager, LoadStepData data)
301
308
{
302
309
ref var reg = ref toAtlas [ i ] ;
303
310
reg . Src . Item1 . Dispose ( ) ;
304
- reg . Src . Item2 . Dispose ( ) ;
311
+ if ( normalLoading )
312
+ reg . Src . Item2 . Dispose ( ) ;
305
313
}
306
314
307
315
data . Rsi = rsi ;
0 commit comments