Exemple #1
0
        public CElegans(float length, int size, string neurons, string connections, string muscles, GameObject wormGO, GameObject neuronHolder, GameObject musclesHolder, GameObject masspointHolder, GameObject springHolder)
        {
            this.wormGO          = wormGO;
            this.neuronHolder    = neuronHolder;
            this.musclesHolder   = musclesHolder;
            this.masspointHolder = masspointHolder;
            this.springHolder    = springHolder;

            this.size   = size;
            this.length = length;

            dl = length;
            dx = dl * 0.5f * 73.0f / 60.0f;

            /*Width Profile*/
            float[] wp = { 0.35f, 0.50f, 0.61f, 0.68f, 0.75f, 0.81f, 0.85f, 0.88f, 0.91f, 0.93f, 0.95f, 0.97f, 0.99f, 1.00f, 0.99f, 0.98f, 0.97f, 0.96f, 0.95f, 0.93f, 0.91f, 0.88f, 0.83f, 0.79f, 0.70f, 0.53f, 0.34f };

            vshift = wormGO.transform.position + new Vector3(dl * size / 4.0f + 0.5f, 0.0f, dl / 3.0f / 2.0f);

            verlet.Constants = new VerletUniversalConstantsBridge();
            verlet.CreateSimulatedShape(wormGO.transform.position, new VerletTestWorm.VerletWormFactory());

            // Head.
            table[nextTable++] = new Neuron[MAX_NEURONS_IN_TABLE_ENTRY];

            // Body.
            for (int i = 1; i < size + 1; i++)
            {
                table[nextTable++] = new Neuron[MAX_NEURONS_IN_TABLE_ENTRY];
            }

            #region Muscles
            addMuscle(new Muscle(verlet.MassPoints, 0 * 9 + 1, 1 * 9 + 1, "VL02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 1, 1 * 9 + 1, "VL02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 1, 3 * 9 + 1, "VL04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 1, 3 * 9 + 1, "VL04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 1, 5 * 9 + 1, "VL06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 1, 5 * 9 + 1, "VL06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 1, 7 * 9 + 1, "VL08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 1, 7 * 9 + 1, "VL08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 1, 9 * 9 + 1, "VL10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 1, 9 * 9 + 1, "VL10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 1, 11 * 9 + 1, "VL12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 1, 11 * 9 + 1, "VL12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 1, 13 * 9 + 1, "VL14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 1, 13 * 9 + 1, "VL14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 1, 15 * 9 + 1, "VL16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 1, 15 * 9 + 1, "VL16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 1, 17 * 9 + 1, "VL18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 1, 17 * 9 + 1, "VL18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 1, 19 * 9 + 1, "VL20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 1, 19 * 9 + 1, "VL20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 1, 21 * 9 + 1, "VL21"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 1, 21 * 9 + 1, "VL21"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 1, 23 * 9 + 1, "VL22"));
            addMuscle(new Muscle(verlet.MassPoints, 24 * 9 + 1, 23 * 9 + 1, "VL22"));
            addMuscle(new Muscle(verlet.MassPoints, 24 * 9 + 1, 25 * 9 + 1, "VL23"));
            addMuscle(new Muscle(verlet.MassPoints, 26 * 9 + 1, 25 * 9 + 1, "VL23"));

            addMuscle(new Muscle(verlet.MassPoints, 0 * 9 + 2, 1 * 9 + 2, "VR02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 2, 1 * 9 + 2, "VR02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 2, 3 * 9 + 2, "VR04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 2, 3 * 9 + 2, "VR04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 2, 5 * 9 + 2, "VR06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 2, 5 * 9 + 2, "VR06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 2, 7 * 9 + 2, "VR08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 2, 7 * 9 + 2, "VR08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 2, 9 * 9 + 2, "VR10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 2, 9 * 9 + 2, "VR10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 2, 11 * 9 + 2, "VR12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 2, 11 * 9 + 2, "VR12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 2, 13 * 9 + 2, "VR14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 2, 13 * 9 + 2, "VR14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 2, 15 * 9 + 2, "VR16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 2, 15 * 9 + 2, "VR16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 2, 17 * 9 + 2, "VR18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 2, 17 * 9 + 2, "VR18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 2, 19 * 9 + 2, "VR20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 2, 19 * 9 + 2, "VR20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 2, 21 * 9 + 2, "VR22"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 2, 21 * 9 + 2, "VR22"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 2, 23 * 9 + 2, "VR23"));
            addMuscle(new Muscle(verlet.MassPoints, 24 * 9 + 2, 23 * 9 + 2, "VR23"));
            addMuscle(new Muscle(verlet.MassPoints, 24 * 9 + 2, 25 * 9 + 2, "VR24"));
            addMuscle(new Muscle(verlet.MassPoints, 26 * 9 + 2, 25 * 9 + 2, "VR24"));

            addMuscle(new Muscle(verlet.MassPoints, 1 * 9 + 3, 2 * 9 + 3, "VR01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 3, 2 * 9 + 3, "VR01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 3, 4 * 9 + 3, "VR03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 3, 4 * 9 + 3, "VR03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 3, 6 * 9 + 3, "VR05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 3, 6 * 9 + 3, "VR05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 3, 8 * 9 + 3, "VR07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 3, 8 * 9 + 3, "VR07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 3, 10 * 9 + 3, "VR09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 3, 10 * 9 + 3, "VR09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 3, 12 * 9 + 3, "VR11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 3, 12 * 9 + 3, "VR11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 3, 14 * 9 + 3, "VR13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 3, 14 * 9 + 3, "VR13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 3, 16 * 9 + 3, "VR15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 3, 16 * 9 + 3, "VR15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 3, 18 * 9 + 3, "VR17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 3, 18 * 9 + 3, "VR17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 3, 20 * 9 + 3, "VR19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 3, 20 * 9 + 3, "VR19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 3, 22 * 9 + 3, "VR21"));
            addMuscle(new Muscle(verlet.MassPoints, 23 * 9 + 3, 22 * 9 + 3, "VR21"));

            addMuscle(new Muscle(verlet.MassPoints, 1 * 9 + 4, 2 * 9 + 4, "DR01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 4, 2 * 9 + 4, "DR01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 4, 4 * 9 + 4, "DR03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 4, 4 * 9 + 4, "DR03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 4, 6 * 9 + 4, "DR05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 4, 6 * 9 + 4, "DR05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 4, 8 * 9 + 4, "DR07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 4, 8 * 9 + 4, "DR07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 4, 10 * 9 + 4, "DR09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 4, 10 * 9 + 4, "DR09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 4, 12 * 9 + 4, "DR11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 4, 12 * 9 + 4, "DR11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 4, 14 * 9 + 4, "DR13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 4, 14 * 9 + 4, "DR13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 4, 16 * 9 + 4, "DR15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 4, 16 * 9 + 4, "DR15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 4, 18 * 9 + 4, "DR17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 4, 18 * 9 + 4, "DR17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 4, 20 * 9 + 4, "DR19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 4, 20 * 9 + 4, "DR19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 4, 22 * 9 + 4, "DR21"));
            addMuscle(new Muscle(verlet.MassPoints, 23 * 9 + 4, 22 * 9 + 4, "DR21"));
            addMuscle(new Muscle(verlet.MassPoints, 23 * 9 + 4, 24 * 9 + 4, "DR23"));
            addMuscle(new Muscle(verlet.MassPoints, 25 * 9 + 4, 24 * 9 + 4, "DR23"));

            addMuscle(new Muscle(verlet.MassPoints, 0 * 9 + 5, 1 * 9 + 5, "DR02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 5, 1 * 9 + 5, "DR02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 5, 3 * 9 + 5, "DR04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 5, 3 * 9 + 5, "DR04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 5, 5 * 9 + 5, "DR06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 5, 5 * 9 + 5, "DR06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 5, 7 * 9 + 5, "DR08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 5, 7 * 9 + 5, "DR08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 5, 9 * 9 + 5, "DR10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 5, 9 * 9 + 5, "DR10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 5, 11 * 9 + 5, "DR12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 5, 11 * 9 + 5, "DR12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 5, 13 * 9 + 5, "DR14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 5, 13 * 9 + 5, "DR14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 5, 15 * 9 + 5, "DR16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 5, 15 * 9 + 5, "DR16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 5, 17 * 9 + 5, "DR18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 5, 17 * 9 + 5, "DR18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 5, 19 * 9 + 5, "DR20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 5, 19 * 9 + 5, "DR20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 5, 21 * 9 + 5, "DR22"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 5, 21 * 9 + 5, "DR22"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 5, 23 * 9 + 5, "DR24"));
            addMuscle(new Muscle(verlet.MassPoints, 24 * 9 + 5, 23 * 9 + 5, "DR24"));

            addMuscle(new Muscle(verlet.MassPoints, 0 * 9 + 6, 1 * 9 + 6, "DL02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 6, 1 * 9 + 6, "DL02"));
            addMuscle(new Muscle(verlet.MassPoints, 2 * 9 + 6, 3 * 9 + 6, "DL04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 6, 3 * 9 + 6, "DL04"));
            addMuscle(new Muscle(verlet.MassPoints, 4 * 9 + 6, 5 * 9 + 6, "DL06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 6, 5 * 9 + 6, "DL06"));
            addMuscle(new Muscle(verlet.MassPoints, 6 * 9 + 6, 7 * 9 + 6, "DL08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 6, 7 * 9 + 6, "DL08"));
            addMuscle(new Muscle(verlet.MassPoints, 8 * 9 + 6, 9 * 9 + 6, "DL10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 6, 9 * 9 + 6, "DL10"));
            addMuscle(new Muscle(verlet.MassPoints, 10 * 9 + 6, 11 * 9 + 6, "DL12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 6, 11 * 9 + 6, "DL12"));
            addMuscle(new Muscle(verlet.MassPoints, 12 * 9 + 6, 13 * 9 + 6, "DL14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 6, 13 * 9 + 6, "DL14"));
            addMuscle(new Muscle(verlet.MassPoints, 14 * 9 + 6, 15 * 9 + 6, "DL16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 6, 15 * 9 + 6, "DL16"));
            addMuscle(new Muscle(verlet.MassPoints, 16 * 9 + 6, 17 * 9 + 6, "DL18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 6, 17 * 9 + 6, "DL18"));
            addMuscle(new Muscle(verlet.MassPoints, 18 * 9 + 6, 19 * 9 + 6, "DL20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 6, 19 * 9 + 6, "DL20"));
            addMuscle(new Muscle(verlet.MassPoints, 20 * 9 + 6, 21 * 9 + 6, "DL22"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 6, 21 * 9 + 6, "DL22"));
            addMuscle(new Muscle(verlet.MassPoints, 22 * 9 + 6, 23 * 9 + 6, "DL24"));
            addMuscle(new Muscle(verlet.MassPoints, 24 * 9 + 6, 23 * 9 + 6, "DL24"));

            addMuscle(new Muscle(verlet.MassPoints, 1 * 9 + 7, 2 * 9 + 7, "DL01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 7, 2 * 9 + 7, "DL01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 7, 4 * 9 + 7, "DL03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 7, 4 * 9 + 7, "DL03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 7, 6 * 9 + 7, "DL05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 7, 6 * 9 + 7, "DL05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 7, 8 * 9 + 7, "DL07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 7, 8 * 9 + 7, "DL07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 7, 10 * 9 + 7, "DL09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 7, 10 * 9 + 7, "DL09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 7, 12 * 9 + 7, "DL11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 7, 12 * 9 + 7, "DL11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 7, 14 * 9 + 7, "DL13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 7, 14 * 9 + 7, "DL13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 7, 16 * 9 + 7, "DL15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 7, 16 * 9 + 7, "DL15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 7, 18 * 9 + 7, "DL17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 7, 18 * 9 + 7, "DL17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 7, 20 * 9 + 7, "DL19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 7, 20 * 9 + 7, "DL19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 7, 22 * 9 + 7, "DL21"));
            addMuscle(new Muscle(verlet.MassPoints, 23 * 9 + 7, 22 * 9 + 7, "DL21"));
            addMuscle(new Muscle(verlet.MassPoints, 23 * 9 + 7, 24 * 9 + 7, "DL23"));
            addMuscle(new Muscle(verlet.MassPoints, 25 * 9 + 7, 24 * 9 + 7, "DL23"));

            addMuscle(new Muscle(verlet.MassPoints, 1 * 9 + 8, 2 * 9 + 8, "VL01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 8, 2 * 9 + 8, "VL01"));
            addMuscle(new Muscle(verlet.MassPoints, 3 * 9 + 8, 4 * 9 + 8, "VL03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 8, 4 * 9 + 8, "VL03"));
            addMuscle(new Muscle(verlet.MassPoints, 5 * 9 + 8, 6 * 9 + 8, "VL05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 8, 6 * 9 + 8, "VL05"));
            addMuscle(new Muscle(verlet.MassPoints, 7 * 9 + 8, 8 * 9 + 8, "VL07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 8, 8 * 9 + 8, "VL07"));
            addMuscle(new Muscle(verlet.MassPoints, 9 * 9 + 8, 10 * 9 + 8, "VL09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 8, 10 * 9 + 8, "VL09"));
            addMuscle(new Muscle(verlet.MassPoints, 11 * 9 + 8, 12 * 9 + 8, "VL11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 8, 12 * 9 + 8, "VL11"));
            addMuscle(new Muscle(verlet.MassPoints, 13 * 9 + 8, 14 * 9 + 8, "VL13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 8, 14 * 9 + 8, "VL13"));
            addMuscle(new Muscle(verlet.MassPoints, 15 * 9 + 8, 16 * 9 + 8, "VL15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 8, 16 * 9 + 8, "VL15"));
            addMuscle(new Muscle(verlet.MassPoints, 17 * 9 + 8, 18 * 9 + 8, "VL17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 8, 18 * 9 + 8, "VL17"));
            addMuscle(new Muscle(verlet.MassPoints, 19 * 9 + 8, 20 * 9 + 8, "VL19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 8, 20 * 9 + 8, "VL19"));
            addMuscle(new Muscle(verlet.MassPoints, 21 * 9 + 8, 22 * 9 + 8, "VL21"));
            addMuscle(new Muscle(verlet.MassPoints, 23 * 9 + 8, 22 * 9 + 8, "VL21"));
            #endregion

            // Tail is all done in verlet.

            using (var reader = new StreamReader(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(neurons))))
            {
                while (!reader.EndOfStream)
                {
                    int tresh = 1;

                    var line     = reader.ReadLine();
                    var tokens   = line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
                    var name     = tokens[0];
                    var x        = float.Parse(tokens[1]);
                    var y        = float.Parse(tokens[2]);
                    var z        = float.Parse(tokens[3]);
                    var clrIndex = int.Parse(tokens[4]);

                    // Sy: Intentionally flip around y and z - as I think the original proto was in GL coords.
                    var temp = z;
                    z = y;
                    y = temp;

                    // Moved this from elsewhere.
                    y *= 0.5f * length;

                    var type = 'm';
                    if (name[name.Length - 1] == 'L')
                    {
                        type = 'l';
                    }
                    if (name[name.Length - 1] == 'R')
                    {
                        type = 'r';
                    }

                    addNeuron(name, vshift + new Vector3(dx * (-1.5f - x * size), y, -dl / 2.0f + ((0.045f + z / 25.0f) / 0.095f * length)), (float)tresh, type, clrIndex, line);
                }
            }

            using (var reader = new StreamReader(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(connections))))
            {
                reader.ReadLine(); // For some resaon they ignore the first line. Headers?

                while (!reader.EndOfStream)
                {
                    var line   = reader.ReadLine();
                    var tokens = line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
                    var name   = tokens[0];
                    var name2  = tokens[1];
                    var ctype  = tokens[2];
                    var value  = 1.0f;
                    if (!float.TryParse(tokens[3], out value))
                    {
                        Debug.Break();
                    }

                    if (ctype.StartsWith("EJ") || ctype[0] == 'S')
                    {
                        var n1 = Array.Find(neuron, n => n.name == name);
                        if (n1 != null)
                        {
                            var n2 = Array.Find(neuron, n => n.name == name2);
                            if (n2 != null)
                            {
                                n1.AddAxon(n2, value);
                            }
                        }
                    }
                }
            }

            using (var reader = new StreamReader(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(muscles))))
            {
                while (!reader.EndOfStream)
                {
                    var line   = reader.ReadLine().Trim();
                    var tokens = line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
                    var name   = tokens[0];
                    var name2  = tokens[1];
                    var weight = 0.0f;
                    if (!float.TryParse(tokens[2], out weight))
                    {
                        Debug.Break();
                    }

                    // WFT AGAIN!?
                    weight = 3.0f;

                    addNeuroMuscleAxosByName(name, name2, weight);
                }
            }
        }
 // Start is called before the first frame update
 void Start()
 {
     sim = new VerletSim();
     sim.CreateSimulatedShape(new Vector3(0.0f, 0.3f, 0.0f), new VerletWormFactory());
 }