@@ -5,24 +5,9 @@ namespace AssetRipper.SourceGenerated.Extensions
5
5
{
6
6
public sealed class MeshOutlineGenerator
7
7
{
8
- private sealed class Outline
8
+ private readonly struct Outline
9
9
{
10
- private readonly struct Outside
11
- {
12
- public Outside ( int triIndex , int vertex )
13
- {
14
- Triangle = triIndex ;
15
- Member = vertex ;
16
- }
17
-
18
- public override string ToString ( )
19
- {
20
- return $ "{ Triangle } :{ Member } ";
21
- }
22
-
23
- public int Triangle { get ; }
24
- public int Member { get ; }
25
- }
10
+ private readonly record struct Outside ( int Triangle , int Member ) ;
26
11
27
12
public Outline ( IReadOnlyList < Vector3i > triangles , int startTriangle )
28
13
{
@@ -34,14 +19,14 @@ public Outline(IReadOnlyList<Vector3i> triangles, int startTriangle)
34
19
35
20
public void GenerateOutline ( )
36
21
{
37
- List < int > outline = new ( ) ;
22
+ m_outline . Clear ( ) ;
38
23
Outside outsider = m_outsiders [ 0 ] ;
39
24
Vector3i tri = m_triangles [ outsider . Triangle ] ;
40
25
int first = tri . GetValueByMember ( outsider . Member ) ;
41
26
int second = tri . GetValueByMember ( outsider . Member + 1 ) ;
42
27
int startTriIndex = outsider . Triangle ;
43
- outline . Add ( first ) ;
44
- outline . Add ( second ) ;
28
+ m_outline . Add ( first ) ;
29
+ m_outline . Add ( second ) ;
45
30
46
31
Vector3i lastTri = tri ;
47
32
int lastMember = outsider . Member + 1 ;
@@ -74,10 +59,8 @@ public void GenerateOutline()
74
59
break ;
75
60
}
76
61
77
- outline . Add ( nextVertex ) ;
62
+ m_outline . Add ( nextVertex ) ;
78
63
}
79
-
80
- GeneratedOutline = outline ;
81
64
}
82
65
83
66
public bool IsContain ( int triIndex )
@@ -291,23 +274,18 @@ private bool IsConnectedNeighbors(Vector3i tri1, Vector3i tri2, int vertex)
291
274
}
292
275
293
276
public int TriangleCount => m_indexes . Count ;
294
- public IReadOnlyList < int > GeneratedOutline { get ; private set ; } = Array . Empty < int > ( ) ;
277
+ public IReadOnlyList < int > GeneratedOutline => m_outline ;
295
278
296
279
private readonly IReadOnlyList < Vector3i > m_triangles ;
297
280
private readonly HashSet < int > m_indexes = new ( ) ;
281
+ private readonly List < int > m_outline = new ( ) ;
298
282
private readonly List < Outside > m_outsiders = new ( ) ;
299
283
}
300
284
301
285
public MeshOutlineGenerator ( IReadOnlyList < Vector3 > vertices , IReadOnlyList < Vector3i > triangles )
302
286
{
303
- if ( vertices == null )
304
- {
305
- throw new ArgumentNullException ( nameof ( vertices ) ) ;
306
- }
307
- if ( triangles == null )
308
- {
309
- throw new ArgumentNullException ( nameof ( triangles ) ) ;
310
- }
287
+ ArgumentNullException . ThrowIfNull ( vertices ) ;
288
+ ArgumentNullException . ThrowIfNull ( triangles ) ;
311
289
m_vertices = vertices ;
312
290
foreach ( Vector3i triangle in triangles )
313
291
{
@@ -320,7 +298,7 @@ public MeshOutlineGenerator(IReadOnlyList<Vector3> vertices, IReadOnlyList<Vecto
320
298
321
299
public List < Vector2 [ ] > GenerateOutlines ( )
322
300
{
323
- List < Outline > outlines = new List < Outline > ( ) ;
301
+ List < Outline > outlines = new ( ) ;
324
302
for ( int i = 0 ; i < m_triangles . Count ; i ++ )
325
303
{
326
304
bool isKnown = false ;
@@ -362,32 +340,30 @@ public List<Vector2[]> GenerateOutlines()
362
340
for (int l = index; l < nextOutline.GeneratedOutline.Count; l++)
363
341
{
364
342
int nextVertex = nextOutline.GeneratedOutline[l];
365
- resultLine.Add((Vector2f) m_vertices[nextVertex]);
343
+ resultLine.Add(m_vertices[nextVertex].AsVector2() );
366
344
}
367
345
for (int m = 0; m < index; m++)
368
346
{
369
347
int nextVertex = nextOutline.GeneratedOutline[m];
370
- resultLine.Add((Vector2f) m_vertices[nextVertex]);
348
+ resultLine.Add(m_vertices[nextVertex].AsVector2() );
371
349
}
372
350
outlines.RemoveAt(k--);
373
351
}
374
352
}*/
375
- resultLine . Add ( ConvertToVector2f ( m_vertices [ vertex ] ) ) ;
353
+ resultLine . Add ( m_vertices [ vertex ] . AsVector2 ( ) ) ;
376
354
}
377
355
result . Add ( resultLine . ToArray ( ) ) ;
378
356
}
379
357
380
358
return result ;
381
359
}
382
360
383
- private static Vector2 ConvertToVector2f ( Vector3 v3 ) => new Vector2 ( v3 . X , v3 . Y ) ;
384
-
385
361
private static bool IsValidTriangle ( Vector3i triangle )
386
362
{
387
363
return triangle . X != triangle . Y && triangle . X != triangle . Z && triangle . Y != triangle . Z ;
388
364
}
389
365
390
366
private readonly IReadOnlyList < Vector3 > m_vertices ;
391
- private readonly List < Vector3i > m_triangles = new List < Vector3i > ( ) ;
367
+ private readonly List < Vector3i > m_triangles = new ( ) ;
392
368
}
393
369
}
0 commit comments