• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

MeltyPlayer / MeltyTool / 21599622021

02 Feb 2026 05:04PM UTC coverage: 41.734% (-0.02%) from 41.756%
21599622021

push

github

MeltyPlayer
Included assets from Volcanic Panic for posterity.

6859 of 18573 branches covered (36.93%)

Branch coverage included in aggregate %.

0 of 34 new or added lines in 3 files covered. (0.0%)

1 existing line in 1 file now uncovered.

29413 of 68340 relevant lines covered (43.04%)

63652.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

65.12
/FinModelUtility/Libraries/GameMaker/GameMaker/src/api/D3dModelImporter.cs
1
using System.Numerics;
2

3
using fin.io;
4
using fin.io.bundles;
5
using fin.math.transform;
6
using fin.model;
7
using fin.model.impl;
8
using fin.model.io;
9
using fin.model.io.importers;
10
using fin.model.util;
11
using fin.util.sets;
12

13
using gm.schema.d3d;
14

15
namespace gm.api;
16

17
public sealed class D3dModelFileBundle : IModelFileBundle {
18
  public required IReadOnlyTreeFile ModFile { get; init; }
×
NEW
19
  public IReadOnlyTreeFile? TextureFile { get; init; }
×
UNCOV
20
  public IReadOnlyTreeFile MainFile => this.ModFile;
×
NEW
21
  public bool FlipNormals { get; init; }
×
22
}
23

24
public sealed class D3dModelImporter : IModelImporter<D3dModelFileBundle> {
25
  public IModel Import(D3dModelFileBundle modelFileBundle) {
×
26
    var modFile = modelFileBundle.ModFile;
×
27
    var mod = modFile.ReadNewFromText<D3d>();
×
28

29
    var (finModel, finRootBone)
×
30
        = CreateModel((modelFileBundle, modFile.AsFileSet()));
×
31

NEW
32
    ITextureMaterial? material = null;
×
NEW
33
    if (modelFileBundle.TextureFile is {} textureFile) {
×
NEW
34
      (material, _) = finModel.MaterialManager.AddSimpleTextureMaterialFromFile(
×
NEW
35
          textureFile);
×
NEW
36
    }
×
37

NEW
38
    AddToModel(mod, finModel, finRootBone, out _, material);
×
39

NEW
40
    if (modelFileBundle.FlipNormals) {
×
NEW
41
      finModel.FlipAllNormals();
×
NEW
42
    }
×
43

44
    return finModel;
×
45
  }
×
46

47
  public static (IModel<ISkin<NormalUvVertexImpl>>, IBone) CreateModel(
48
      (IFileBundle fileBundle, IReadOnlySet<IReadOnlyGenericFile> files)?
49
          modelMetadata = null) {
1✔
50
    var finModel = new ModelImpl<NormalUvVertexImpl>(
1!
51
        (index, position) => new NormalUvVertexImpl(index, position)) {
4,791✔
52
        FileBundle = modelMetadata?.fileBundle!,
1✔
53
        Files = modelMetadata?.files!
1✔
54
    };
1✔
55
    var finRootBone = CreateAdjustedRootBone(finModel);
1✔
56
    return (finModel, finRootBone);
1✔
57
  }
1✔
58

59
  public static IBone CreateAdjustedRootBone(IModel finModel) {
1✔
60
    var finSkeleton = finModel.Skeleton;
1✔
61
    var bone = finSkeleton.Root.AddRoot(0, 0, 0);
1✔
62
    bone.Transform.SetRotationDegrees(-90, 180, 0);
1✔
63
    bone.Transform.SetScale(-1, 1, 1);
1✔
64
    return bone;
1✔
65
  }
1✔
66

67
  public static void AddToModel(D3d d3d,
68
                                IModel<ISkin<NormalUvVertexImpl>> finModel,
69
                                IReadOnlyBone bone,
70
                                out IMesh finMesh,
71
                                IMaterial? material = null) {
13✔
72
    var finSkin = finModel.Skin;
13✔
73
    finMesh = finSkin.AddMesh();
13✔
74

75
    var boneWeights = finSkin.GetOrCreateBoneWeights(
13✔
76
        VertexSpace.RELATIVE_TO_BONE,
13✔
77
        bone);
13✔
78

79
    D3dPrimitiveType d3dPrimitiveType = default;
13✔
80
    var finVertices = new LinkedList<IVertex>();
13✔
81
    foreach (var d3dCommand in d3d.Commands) {
14,508✔
82
      switch (d3dCommand.CommandType) {
4,823!
83
        case D3dCommandType.BEGIN: {
16✔
84
          d3dPrimitiveType = (D3dPrimitiveType) d3dCommand.Parameters[0];
16✔
85
          break;
16✔
86
        }
87
        case D3dCommandType.END: {
16✔
88
          switch (d3dPrimitiveType) {
16!
89
            case D3dPrimitiveType.TRIANGLE_LIST: {
16✔
90
              finMesh.AddTriangles(finVertices.ToArray()).SetMaterial(material);
16✔
91
              break;
16✔
92
            }
93
            default: throw new NotImplementedException();
×
94
          }
95

96
          finVertices.Clear();
16✔
97
          break;
16✔
98
        }
99
        case D3dCommandType.VERTEX_NORMAL_TEXTURE: {
4,791✔
100
          var d3dParams = d3dCommand.Parameters.AsSpan();
4,791✔
101

102
          var finVertex = finSkin.AddVertex(new Vector3(d3dParams[..3]));
4,791✔
103
          finVertex.SetLocalNormal(-new Vector3(d3dParams.Slice(3, 3)));
4,791✔
104
          finVertex.SetUv(new Vector2(d3dParams.Slice(6, 2)));
4,791✔
105
          finVertex.SetBoneWeights(boneWeights);
4,791✔
106

107
          finVertices.AddLast(finVertex);
4,791✔
108
          break;
4,791✔
109
        }
110
        default: throw new ArgumentOutOfRangeException();
×
111
      }
112
    }
4,823✔
113
  }
13✔
114
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc