using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;

/// <summary>
/// This class holds all Model Definitions that will be used in the ModelManager
/// Is Planned to be replaced with a JSON Serializer
/// </summary>
public class ModelList
{
    public static readonly List<BaseModel> BaseModels = new List<BaseModel>()
    {
        new BaseModel(
        "Fahrrad",
        "bike",
        Resources.Load<Mesh>("Model/Bicycle/Models/Low-Poly Bicycle"),
        Resources.Load<Material>($"Model/Universal_Material"),
        Vector3.zero, 
        Quaternion.Euler(0,90,0),
        Vector3.one,
        new List<Port>
        {
            //please dont ask about the numbers
            new Port(Definitions.PORT_BIKE_SPROCKET, new Vector3(0.007933f, 0.444f, -0.1614f), "idBikeSprocket"),
            new Port(Definitions.PORT_BIKE_PEDAL_L, new Vector3(-0.1252177f, 0.5490288f, -0.312027f), "idBikePedalL_1"),
            new Port(Definitions.PORT_BIKE_PEDAL_R, new Vector3(0.1410843f, 0.3393247f, -0.01154391f), "idBikePedalR_1"),
            new Port(Definitions.PORT_BIKE_STEER, new Vector3(0.002989591f, 1.214713f, 0.4860705f), Quaternion.Euler(-30f, 0f, 0f), "idBikeHandlebars"),
            new Port(Definitions.PORT_BIKE_WHEEL, new Vector3(-0.01431298f, 0.4673222f, -0.7874681f), "idBikeWheel_Back1"),
            new Port(Definitions.PORT_BIKE_WHEEL, new Vector3(0.01984263f, 0.4673225f, 0.9462124f), "idBikeWheel_Front1"),
            new Port(Definitions.PORT_BIKE_DRIVER, new Vector3(0f, 1.25f, -0.65f), Quaternion.Euler(70f, 0f, 0f), "nuke"),
        }
        ),
        new BaseModel(
        "ERL-Bach",
        "erlbach",
        Resources.Load<Mesh>("Model/ERLbach/02.01.98.0000-ERLbach_vereinfacht"),
        Resources.Load<Material>($"Model/Universal_Material"),
        new Vector3(0,0,4f), //big car needs big space
        Quaternion.Euler(-90f,0f,0f), //rotate correctly
        new Vector3(0.03f,0.03f,0.03f), //model bisschen groß
        new List<Port>
        {
            new Port(Definitions.PORT_ERLBACH_0, new Vector3(0f, 0f, 0f), "idErlbachPart0"),
            new Port(Definitions.PORT_ERLBACH_1, new Vector3(0f, 0f, 0f), "idErlbachPart1"),
            new Port(Definitions.PORT_ERLBACH_2, new Vector3(0f, 0f, 0f), "idErlbachPart2"),
            new Port(Definitions.PORT_ERLBACH_3, new Vector3(0f, 0f, 0f), "idErlbachPart3"),
            new Port(Definitions.PORT_ERLBACH_4, new Vector3(0f, 0f, 0f), "idErlbachPart4"),
            new Port(Definitions.PORT_ERLBACH_5, new Vector3(0f, 0f, 0f), "idErlbachPart5"),
            new Port(Definitions.PORT_ERLBACH_6, new Vector3(0f, 0f, 0f), "idErlbachPart6"),
            new Port(Definitions.PORT_ERLBACH_7, new Vector3(0f, 0f, 0f), "idErlbachPart7"),
            new Port(Definitions.PORT_ERLBACH_8, new Vector3(0f, 0f, 0f), "idErlbachPart8"),
            new Port(Definitions.PORT_ERLBACH_9, new Vector3(0f, 0f, 0f), "idErlbachPart9"),
            new Port(Definitions.PORT_ERLBACH_10, new Vector3(0f, 0f, 0f), "idErlbachPart10"),
            new Port(Definitions.PORT_ERLBACH_11, new Vector3(0f, 0f, 0f), "idErlbachPart11"),
            new Port(Definitions.PORT_ERLBACH_12, new Vector3(0f, 0f, 0f), "idErlbachPart12"),
            new Port(Definitions.PORT_ERLBACH_13, new Vector3(0f, 0f, 0f), "idErlbachPart13"),
            new Port(Definitions.PORT_ERLBACH_14, new Vector3(0f, 0f, 0f), "idErlbachPart14"),
            new Port(Definitions.PORT_ERLBACH_15, new Vector3(0f, 0f, 0f), "idErlbachPart15"),
            new Port(Definitions.PORT_ERLBACH_16, new Vector3(0f, 0f, 0f), "idErlbachPart16"),
            new Port(Definitions.PORT_ERLBACH_17, new Vector3(0f, 0f, 0f), "idErlbachPart17"),
            new Port(Definitions.PORT_ERLBACH_18, new Vector3(0f, 0f, 0f), "idErlbachPart18"),
            new Port(Definitions.PORT_ERLBACH_19, new Vector3(0f, 0f, 0f), "idErlbachPart19"),
            new Port(Definitions.PORT_ERLBACH_20, new Vector3(0f, 0f, 0f), "idErlbachPart20"),
            new Port(Definitions.PORT_ERLBACH_21, new Vector3(0f, 0f, 0f), "idErlbachPart21"),
            new Port(Definitions.PORT_ERLBACH_22, new Vector3(0f, 0f, 0f), "idErlbachPart22"),
            new Port(Definitions.PORT_ERLBACH_23, new Vector3(0f, 0f, 0f), "idErlbachPart23"),
            new Port(Definitions.PORT_ERLBACH_24, new Vector3(0f, 0f, 0f), "idErlbachPart24"),
            new Port(Definitions.PORT_ERLBACH_25, new Vector3(0f, 0f, 0f), "idErlbachPart25"),
            new Port(Definitions.PORT_ERLBACH_26, new Vector3(0f, 0f, 0f), "idErlbachPart26"),
            new Port(Definitions.PORT_ERLBACH_27, new Vector3(0f, 0f, 0f), "idErlbachPart27"),
            new Port(Definitions.PORT_ERLBACH_28, new Vector3(0f, 0f, 0f), "idErlbachPart28"),
            new Port(Definitions.PORT_ERLBACH_29, new Vector3(0f, 0f, 0f), "idErlbachPart29"),
            new Port(Definitions.PORT_ERLBACH_30, new Vector3(0f, 0f, 0f), "idErlbachPart30"),
            new Port(Definitions.PORT_ERLBACH_31, new Vector3(0f, 0f, 0f), "idErlbachPart31"),
            new Port(Definitions.PORT_ERLBACH_32, new Vector3(0f, 0f, 0f), "idErlbachPart32"),
            new Port(Definitions.PORT_ERLBACH_33, new Vector3(0f, 0f, 0f), "idErlbachPart33"),
            new Port(Definitions.PORT_ERLBACH_34, new Vector3(0f, 0f, 0f), "idErlbachPart34"),
            new Port(Definitions.PORT_ERLBACH_35, new Vector3(0f, 0f, 0f), "idErlbachPart35"),
            new Port(Definitions.PORT_ERLBACH_36, new Vector3(0f, 0f, 0f), "idErlbachPart36"),
            new Port(Definitions.PORT_ERLBACH_37, new Vector3(0f, 0f, 0f), "idErlbachPart37"),
            new Port(Definitions.PORT_ERLBACH_38, new Vector3(0f, 0f, 0f), "idErlbachPart38"),
            new Port(Definitions.PORT_ERLBACH_39, new Vector3(0f, 0f, 0f), "idErlbachPart39"),
            new Port(Definitions.PORT_ERLBACH_40, new Vector3(0f, 0f, 0f), "idErlbachPart40"),
            new Port(Definitions.PORT_ERLBACH_41, new Vector3(0f, 0f, 0f), "idErlbachPart41"),
            new Port(Definitions.PORT_ERLBACH_42, new Vector3(0f, 0f, 0f), "idErlbachPart42"),
            new Port(Definitions.PORT_ERLBACH_43, new Vector3(0f, 0f, 0f), "idErlbachPart43"),
            new Port(Definitions.PORT_ERLBACH_44, new Vector3(0f, 0f, 0f), "idErlbachPart44"),
            new Port(Definitions.PORT_ERLBACH_45, new Vector3(0f, 0f, 0f), "idErlbachPart45"),
            new Port(Definitions.PORT_ERLBACH_46, new Vector3(0f, 0f, 0f), "idErlbachPart46"),
            new Port(Definitions.PORT_ERLBACH_47, new Vector3(0f, 0f, 0f), "idErlbachPart47"),
            new Port(Definitions.PORT_ERLBACH_48, new Vector3(0f, 0f, 0f), "idErlbachPart48"),
            new Port(Definitions.PORT_ERLBACH_49, new Vector3(0f, 0f, 0f), "idErlbachPart49"),
            new Port(Definitions.PORT_ERLBACH_50, new Vector3(0f, 0f, 0f), "idErlbachPart50"),
            new Port(Definitions.PORT_ERLBACH_51, new Vector3(0f, 0f, 0f), "idErlbachPart51"),
            new Port(Definitions.PORT_ERLBACH_52, new Vector3(0f, 0f, 0f), "idErlbachPart52"),
            new Port(Definitions.PORT_ERLBACH_53, new Vector3(0f, 0f, 0f), "idErlbachPart53"),
            new Port(Definitions.PORT_ERLBACH_54, new Vector3(0f, 0f, 0f), "idErlbachPart54"),
            new Port(Definitions.PORT_ERLBACH_55, new Vector3(0f, 0f, 0f), "idErlbachPart55"),
            new Port(Definitions.PORT_ERLBACH_56, new Vector3(0f, 0f, 0f), "idErlbachPart56"),
            new Port(Definitions.PORT_ERLBACH_57, new Vector3(0f, 0f, 0f), "idErlbachPart57"),
            new Port(Definitions.PORT_ERLBACH_58, new Vector3(0f, 0f, 0f), "idErlbachPart58"),
            new Port(Definitions.PORT_ERLBACH_59, new Vector3(0f, 0f, 0f), "idErlbachPart59"),
            new Port(Definitions.PORT_ERLBACH_60, new Vector3(0f, 0f, 0f), "idErlbachPart60"),
            new Port(Definitions.PORT_ERLBACH_61, new Vector3(0f, 0f, 0f), "idErlbachPart61"),
            new Port(Definitions.PORT_ERLBACH_62, new Vector3(0f, 0f, 0f), "idErlbachPart62"),
            new Port(Definitions.PORT_ERLBACH_63, new Vector3(0f, 0f, 0f), "idErlbachPart63"),
            new Port(Definitions.PORT_ERLBACH_64, new Vector3(0f, 0f, 0f), "idErlbachPart64"),
            new Port(Definitions.PORT_ERLBACH_65, new Vector3(0f, 0f, 0f), "idErlbachPart65"),
            new Port(Definitions.PORT_ERLBACH_66, new Vector3(0f, 0f, 0f), "idErlbachPart66"),
            new Port(Definitions.PORT_ERLBACH_67, new Vector3(0f, 0f, 0f), "idErlbachPart67"),
            new Port(Definitions.PORT_ERLBACH_68, new Vector3(0f, 0f, 0f), "idErlbachPart68"),
            new Port(Definitions.PORT_ERLBACH_69, new Vector3(0f, 0f, 0f), "idErlbachPart69"),
            new Port(Definitions.PORT_ERLBACH_70, new Vector3(0f, 0f, 0f), "idErlbachPart70"),
            new Port(Definitions.PORT_ERLBACH_71, new Vector3(0f, 0f, 0f), "idErlbachPart71"),
            new Port(Definitions.PORT_ERLBACH_72, new Vector3(0f, 0f, 0f), "idErlbachPart72"),
            new Port(Definitions.PORT_ERLBACH_73, new Vector3(0f, 0f, 0f), "idErlbachPart73"),
            new Port(Definitions.PORT_ERLBACH_74, new Vector3(0f, 0f, 0f), "idErlbachPart74"),
            new Port(Definitions.PORT_ERLBACH_75, new Vector3(0f, 0f, 0f), "idErlbachPart75"),
            new Port(Definitions.PORT_ERLBACH_76, new Vector3(0f, 0f, 0f), "idErlbachPart76"),
            new Port(Definitions.PORT_ERLBACH_77, new Vector3(0f, 0f, 0f), "idErlbachPart77"),
            new Port(Definitions.PORT_ERLBACH_78, new Vector3(0f, 0f, 0f), "idErlbachPart78"),
            new Port(Definitions.PORT_ERLBACH_79, new Vector3(0f, 0f, 0f), "idErlbachPart79"),
            new Port(Definitions.PORT_ERLBACH_80, new Vector3(0f, 0f, 0f), "idErlbachPart80"),
            new Port(Definitions.PORT_ERLBACH_81, new Vector3(0f, 0f, 0f), "idErlbachPart81"),
            new Port(Definitions.PORT_ERLBACH_82, new Vector3(0f, 0f, 0f), "idErlbachPart82"),
            new Port(Definitions.PORT_ERLBACH_83, new Vector3(0f, 0f, 0f), "idErlbachPart83"),
            new Port(Definitions.PORT_ERLBACH_84, new Vector3(0f, 0f, 0f), "idErlbachPart84"),
            new Port(Definitions.PORT_ERLBACH_85, new Vector3(0f, 0f, 0f), "idErlbachPart85"),
            new Port(Definitions.PORT_ERLBACH_86, new Vector3(0f, 0f, 0f), "idErlbachPart86"),
            new Port(Definitions.PORT_ERLBACH_87, new Vector3(0f, 0f, 0f), "idErlbachPart87"),
            new Port(Definitions.PORT_ERLBACH_88, new Vector3(0f, 0f, 0f), "idErlbachPart88"),
            new Port(Definitions.PORT_ERLBACH_89, new Vector3(0f, 0f, 0f), "idErlbachPart89"),
            new Port(Definitions.PORT_ERLBACH_90, new Vector3(0f, 0f, 0f), "idErlbachPart90"),
            new Port(Definitions.PORT_ERLBACH_91, new Vector3(0f, 0f, 0f), "idErlbachPart91"),
            new Port(Definitions.PORT_ERLBACH_92, new Vector3(0f, 0f, 0f), "idErlbachPart92"),
            new Port(Definitions.PORT_ERLBACH_93, new Vector3(0f, 0f, 0f), "idErlbachPart93")
        }
        )
    };
    public static readonly List<ChildModel> ChildModels = new List<ChildModel>()
    {
        new ChildModel(
        "driver",
        "Bacteria",
        "bacteria",
        Resources.Load<Mesh>("Plagues/Mesh/bacteria"),
        Resources.Load<Material>($"Model/Universal_Material"),
        null
        ),
        new ChildModel(
        "driver",
        "ICBM",
        "nuke",
        Resources.Load<Mesh>("Plagues/Mesh/Nuke"),
        Resources.Load<Material>($"Model/Universal_Material"),
        null
        ),
        new ChildModel(
        Definitions.PORT_BIKE_WHEEL,
        "30 Zoller MehrSpeicherFelge",
        "bike30inchAlloy",
        Resources.Load<Mesh>("Plagues/Mesh/Hex"),
        Resources.Load<Material>($"Model/Universal_Material"),
        null
        ),
        new ChildModel(
        "bikePedalR",
        "Pedal Rechts",
        "bikePedalR",
        Resources.Load<Mesh>("Plagues/Mesh/Hex"),
        Resources.Load<Material>($"Model/Universal_Material"),
        null
        ),
        new ChildModel(
        "bikePedalL",
        "Pedal Links",
        "bikePedalL",
        Resources.Load<Mesh>("Plagues/Mesh/Hex"),
        Resources.Load<Material>($"Model/Universal_Material"),
        null
        )
    };

    static ModelList()
    {
        // I love importing .fbx, maybe refactor this function some day

        /*
         * ██████  ██ ██   ██ ███████
         * ██   ██ ██ ██  ██  ██
         * ██████  ██ █████   █████
         * ██   ██ ██ ██  ██  ██
         * ██████  ██ ██   ██ ███████
         */
        ModelLoader.LoadChildModelsFromPackedModel(
        ChildModels,
        new string[6] // port
        {
            Definitions.PORT_BIKE_SPROCKET,
            Definitions.PORT_BIKE_PEDAL_L,
            Definitions.PORT_BIKE_PEDAL_R,
            Definitions.PORT_BIKE_STEER,
            Definitions.PORT_BIKE_WHEEL,
            Definitions.PORT_BIKE_WHEEL,
        },
        new string[6] //human name
        {
            "Sprocket",
            "Left Pedal",
            "Right Pedal",
            "Handlebars",
            "Back Wheel",
            "Front Wheel",
        },
        new string[6] //id
        {
            "idBikeSprocket",
            "idBikePedalL_1",
            "idBikePedalR_1",
            "idBikeHandlebars",
            "idBikeWheel_Back1",
            "idBikeWheel_Front1",
        },
        Resources.LoadAll<Mesh>($"Model/Bicycle/Models/Low-Poly Bicycle"),
        new Material[6] //mat
        {
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            
            
        },
        new List<Port>[6] // ports
        {
            null,
            null,
            null,
            null,
            null,
            null,
        },
        1 //skip the first mesh, which is the basemodel
        );

        /*
         * ███████ ██████  ██            ██████   █████   ██████ ██   ██
         * ██      ██   ██ ██            ██   ██ ██   ██ ██      ██   ██
         * █████   ██████  ██      █████ ██████  ███████ ██      ███████
         * ██      ██   ██ ██            ██   ██ ██   ██ ██      ██   ██
         * ███████ ██   ██ ███████       ██████  ██   ██  ██████ ██   ██
         */

        ModelLoader.LoadChildModelsFromPackedModel(
        ChildModels,
        new string[94] // port
        {
            Definitions.PORT_ERLBACH_0,
            Definitions.PORT_ERLBACH_1,
            Definitions.PORT_ERLBACH_2,
            Definitions.PORT_ERLBACH_3,
            Definitions.PORT_ERLBACH_4,
            Definitions.PORT_ERLBACH_5,
            Definitions.PORT_ERLBACH_6,
            Definitions.PORT_ERLBACH_7,
            Definitions.PORT_ERLBACH_8,
            Definitions.PORT_ERLBACH_9,
            Definitions.PORT_ERLBACH_10,
            Definitions.PORT_ERLBACH_11,
            Definitions.PORT_ERLBACH_12,
            Definitions.PORT_ERLBACH_13,
            Definitions.PORT_ERLBACH_14,
            Definitions.PORT_ERLBACH_15,
            Definitions.PORT_ERLBACH_16,
            Definitions.PORT_ERLBACH_17,
            Definitions.PORT_ERLBACH_18,
            Definitions.PORT_ERLBACH_19,
            Definitions.PORT_ERLBACH_20,
            Definitions.PORT_ERLBACH_21,
            Definitions.PORT_ERLBACH_22,
            Definitions.PORT_ERLBACH_23,
            Definitions.PORT_ERLBACH_24,
            Definitions.PORT_ERLBACH_25,
            Definitions.PORT_ERLBACH_26,
            Definitions.PORT_ERLBACH_27,
            Definitions.PORT_ERLBACH_28,
            Definitions.PORT_ERLBACH_29,
            Definitions.PORT_ERLBACH_30,
            Definitions.PORT_ERLBACH_31,
            Definitions.PORT_ERLBACH_32,
            Definitions.PORT_ERLBACH_33,
            Definitions.PORT_ERLBACH_34,
            Definitions.PORT_ERLBACH_35,
            Definitions.PORT_ERLBACH_36,
            Definitions.PORT_ERLBACH_37,
            Definitions.PORT_ERLBACH_38,
            Definitions.PORT_ERLBACH_39,
            Definitions.PORT_ERLBACH_40,
            Definitions.PORT_ERLBACH_41,
            Definitions.PORT_ERLBACH_42,
            Definitions.PORT_ERLBACH_43,
            Definitions.PORT_ERLBACH_44,
            Definitions.PORT_ERLBACH_45,
            Definitions.PORT_ERLBACH_46,
            Definitions.PORT_ERLBACH_47,
            Definitions.PORT_ERLBACH_48,
            Definitions.PORT_ERLBACH_49,
            Definitions.PORT_ERLBACH_50,
            Definitions.PORT_ERLBACH_51,
            Definitions.PORT_ERLBACH_52,
            Definitions.PORT_ERLBACH_53,
            Definitions.PORT_ERLBACH_54,
            Definitions.PORT_ERLBACH_55,
            Definitions.PORT_ERLBACH_56,
            Definitions.PORT_ERLBACH_57,
            Definitions.PORT_ERLBACH_58,
            Definitions.PORT_ERLBACH_59,
            Definitions.PORT_ERLBACH_60,
            Definitions.PORT_ERLBACH_61,
            Definitions.PORT_ERLBACH_62,
            Definitions.PORT_ERLBACH_63,
            Definitions.PORT_ERLBACH_64,
            Definitions.PORT_ERLBACH_65,
            Definitions.PORT_ERLBACH_66,
            Definitions.PORT_ERLBACH_67,
            Definitions.PORT_ERLBACH_68,
            Definitions.PORT_ERLBACH_69,
            Definitions.PORT_ERLBACH_70,
            Definitions.PORT_ERLBACH_71,
            Definitions.PORT_ERLBACH_72,
            Definitions.PORT_ERLBACH_73,
            Definitions.PORT_ERLBACH_74,
            Definitions.PORT_ERLBACH_75,
            Definitions.PORT_ERLBACH_76,
            Definitions.PORT_ERLBACH_77,
            Definitions.PORT_ERLBACH_78,
            Definitions.PORT_ERLBACH_79,
            Definitions.PORT_ERLBACH_80,
            Definitions.PORT_ERLBACH_81,
            Definitions.PORT_ERLBACH_82,
            Definitions.PORT_ERLBACH_83,
            Definitions.PORT_ERLBACH_84,
            Definitions.PORT_ERLBACH_85,
            Definitions.PORT_ERLBACH_86,
            Definitions.PORT_ERLBACH_87,
            Definitions.PORT_ERLBACH_88,
            Definitions.PORT_ERLBACH_89,
            Definitions.PORT_ERLBACH_90,
            Definitions.PORT_ERLBACH_91,
            Definitions.PORT_ERLBACH_92,
            Definitions.PORT_ERLBACH_93,
        },
        new string[94] //human name
        {
            "Erlbach Part 0",
            "Erlbach Part 1",
            "Erlbach Part 2",
            "Erlbach Part 3",
            "Erlbach Part 4",
            "Erlbach Part 5",
            "Erlbach Part 6",
            "Erlbach Part 7",
            "Erlbach Part 8",
            "Erlbach Part 9",
            "Erlbach Part 10",
            "Erlbach Part 11",
            "Erlbach Part 12",
            "Erlbach Part 13",
            "Erlbach Part 14",
            "Erlbach Part 15",
            "Erlbach Part 16",
            "Erlbach Part 17",
            "Erlbach Part 18",
            "Erlbach Part 19",
            "Erlbach Part 20",
            "Erlbach Part 21",
            "Erlbach Part 22",
            "Erlbach Part 23",
            "Erlbach Part 24",
            "Erlbach Part 25",
            "Erlbach Part 26",
            "Erlbach Part 27",
            "Erlbach Part 28",
            "Erlbach Part 29",
            "Erlbach Part 30",
            "Erlbach Part 31",
            "Erlbach Part 32",
            "Erlbach Part 33",
            "Erlbach Part 34",
            "Erlbach Part 35",
            "Erlbach Part 36",
            "Erlbach Part 37",
            "Erlbach Part 38",
            "Erlbach Part 39",
            "Erlbach Part 40",
            "Erlbach Part 41",
            "Erlbach Part 42",
            "Erlbach Part 43",
            "Erlbach Part 44",
            "Erlbach Part 45",
            "Erlbach Part 46",
            "Erlbach Part 47",
            "Erlbach Part 48",
            "Erlbach Part 49",
            "Erlbach Part 50",
            "Erlbach Part 51",
            "Erlbach Part 52",
            "Erlbach Part 53",
            "Erlbach Part 54",
            "Erlbach Part 55",
            "Erlbach Part 56",
            "Erlbach Part 57",
            "Erlbach Part 58",
            "Erlbach Part 59",
            "Erlbach Part 60",
            "Erlbach Part 61",
            "Erlbach Part 62",
            "Erlbach Part 63",
            "Erlbach Part 64",
            "Erlbach Part 65",
            "Erlbach Part 66",
            "Erlbach Part 67",
            "Erlbach Part 68",
            "Erlbach Part 69",
            "Erlbach Part 70",
            "Erlbach Part 71",
            "Erlbach Part 72",
            "Erlbach Part 73",
            "Erlbach Part 74",
            "Erlbach Part 75",
            "Erlbach Part 76",
            "Erlbach Part 77",
            "Erlbach Part 78",
            "Erlbach Part 79",
            "Erlbach Part 80",
            "Erlbach Part 81",
            "Erlbach Part 82",
            "Erlbach Part 83",
            "Erlbach Part 84",
            "Erlbach Part 85",
            "Erlbach Part 86",
            "Erlbach Part 87",
            "Erlbach Part 88",
            "Erlbach Part 89",
            "Erlbach Part 90",
            "Erlbach Part 91",
            "Erlbach Part 92",
            "Erlbach Part 93",

        },
        new string[94] //id
        {
            "idErlbachPart0",
            "idErlbachPart1",
            "idErlbachPart2",
            "idErlbachPart3",
            "idErlbachPart4",
            "idErlbachPart5",
            "idErlbachPart6",
            "idErlbachPart7",
            "idErlbachPart8",
            "idErlbachPart9",
            "idErlbachPart10",
            "idErlbachPart11",
            "idErlbachPart12",
            "idErlbachPart13",
            "idErlbachPart14",
            "idErlbachPart15",
            "idErlbachPart16",
            "idErlbachPart17",
            "idErlbachPart18",
            "idErlbachPart19",
            "idErlbachPart20",
            "idErlbachPart21",
            "idErlbachPart22",
            "idErlbachPart23",
            "idErlbachPart24",
            "idErlbachPart25",
            "idErlbachPart26",
            "idErlbachPart27",
            "idErlbachPart28",
            "idErlbachPart29",
            "idErlbachPart30",
            "idErlbachPart31",
            "idErlbachPart32",
            "idErlbachPart33",
            "idErlbachPart34",
            "idErlbachPart35",
            "idErlbachPart36",
            "idErlbachPart37",
            "idErlbachPart38",
            "idErlbachPart39",
            "idErlbachPart40",
            "idErlbachPart41",
            "idErlbachPart42",
            "idErlbachPart43",
            "idErlbachPart44",
            "idErlbachPart45",
            "idErlbachPart46",
            "idErlbachPart47",
            "idErlbachPart48",
            "idErlbachPart49",
            "idErlbachPart50",
            "idErlbachPart51",
            "idErlbachPart52",
            "idErlbachPart53",
            "idErlbachPart54",
            "idErlbachPart55",
            "idErlbachPart56",
            "idErlbachPart57",
            "idErlbachPart58",
            "idErlbachPart59",
            "idErlbachPart60",
            "idErlbachPart61",
            "idErlbachPart62",
            "idErlbachPart63",
            "idErlbachPart64",
            "idErlbachPart65",
            "idErlbachPart66",
            "idErlbachPart67",
            "idErlbachPart68",
            "idErlbachPart69",
            "idErlbachPart70",
            "idErlbachPart71",
            "idErlbachPart72",
            "idErlbachPart73",
            "idErlbachPart74",
            "idErlbachPart75",
            "idErlbachPart76",
            "idErlbachPart77",
            "idErlbachPart78",
            "idErlbachPart79",
            "idErlbachPart80",
            "idErlbachPart81",
            "idErlbachPart82",
            "idErlbachPart83",
            "idErlbachPart84",
            "idErlbachPart85",
            "idErlbachPart86",
            "idErlbachPart87",
            "idErlbachPart88",
            "idErlbachPart89",
            "idErlbachPart90",
            "idErlbachPart91",
            "idErlbachPart92",
            "idErlbachPart93",

        },
        Resources.LoadAll<Mesh>($"Model/ERLbach/02.01.98.0000-ERLbach_vereinfacht"),
        new Material[94] //mat
        {
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
            Resources.Load<Material>($"Model/Universal_Material"),
           
           
            
            

        },
        new List<Port>[94] // ports
        {
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,

        },
        0 //skip the first mesh, which is the basemodel
        );
    }
}
