Ejemplo n.º 1
0
    private void Update()
    {
        if (_geoObjectsNamesInScene == null)
        {
            InitNavigationDropdown();
        }

        if (_lineRenderer != null &&
            _lineRenderer.positionCount > 0)
        {
            if (_lineRenderer.positionCount == 1)
            {
                _userArrivedToPlace = true;
                _lineRenderer.positionCount--;
                displayDropdownMessage.text = "Вы успешно дошли до пункта назначения";
            }
            else if (_lineRenderer.positionCount >= 2)
            {
                var positions = new Vector3[_lineRenderer.positionCount];
                _lineRenderer.GetPositions(positions);
                var distanceToClosestPoint = Vector3.Distance(_mainCamera.transform.position, positions[1]);
                if (distanceToClosestPoint < _maxDistanceToClosestObjectInDirectionPoint)
                {
                    var positionsList = positions.ToList();
                    positionsList.RemoveAt(0);
                    _lineRenderer.positionCount--;
                    _lineRenderer.SetPositions(positionsList.ToArray());
                }
            }
        }
    }
Ejemplo n.º 2
0
 void GenerateSquareVBO()
 {
     Vector3[] vecs = new Vector3[4];
     uint[]    inds = new uint[4];
     Vector3[] texs = new Vector3[4];
     Vector4[] cols = new Vector4[4];
     Vector3[] nrms = new Vector3[4];
     for (uint u = 0; u < 4; u++)
     {
         inds[u] = u;
     }
     for (int c = 0; c < 4; c++)
     {
         cols[c] = new Vector4(1, 1, 1, 1);
         nrms[c] = new Vector3(0, 0, 1);
     }
     vecs[0] = new Vector3(1, 0, 0);
     texs[0] = new Vector3(1, 0, 0);
     vecs[1] = new Vector3(1, 1, 0);
     texs[1] = new Vector3(1, 1, 0);
     vecs[2] = new Vector3(0, 0, 0);
     texs[2] = new Vector3(0, 0, 0);
     vecs[3] = new Vector3(0, 1, 0);
     texs[3] = new Vector3(0, 1, 0);
     Square  = new VBO()
     {
         Vertices  = vecs.ToList(),
         Indices   = inds.ToList(),
         TexCoords = texs.ToList(),
         Colors    = cols.ToList(),
         Normals   = nrms.ToList()
     };
     Square.GenerateVBO();
 }
Ejemplo n.º 3
0
        public void CalculateNormals()
        {
            Vector3[] normals = new Vector3[Vertices.Count];
            Vector3[] verts   = Vertices.Select(x => x.Position).ToArray();
            int[]     inds    = Indices.ToArray();

            for (int i = 0; i < Indices.Count; i += 3)
            {
                if (inds[i] < verts.Length && inds[i + 1] < verts.Length && inds[i + 2] < verts.Length)
                {
                    Vector3 v1 = verts[inds[i]];
                    Vector3 v2 = verts[inds[i + 1]];
                    Vector3 v3 = verts[inds[i + 2]];

                    // The normal is the cross-product of two sides of the triangle
                    normals[inds[i]]     += Vector3.Cross(v2 - v1, v3 - v1);
                    normals[inds[i + 1]] += Vector3.Cross(v2 - v1, v3 - v1);
                    normals[inds[i + 2]] += Vector3.Cross(v2 - v1, v3 - v1);
                }
            }

            for (int i = 0; i < Vertices.Count; i++)
            {
                normals[i] = normals[i].Normalized();
            }

            CalculatedNormals = normals.ToList();
        }
Ejemplo n.º 4
0
    void CreateMesh()
    {
        MeshFilter   mf       = gameObject.AddComponent <MeshFilter>();
        MeshRenderer mr       = gameObject.AddComponent <MeshRenderer>();
        Material     unityMat = Resources.Load("Material_WP") as Material;

        mr.material = unityMat;
        Mesh meshUnity = new Mesh();

        Vector3[] vertices = new Vector3[4];
        vertices[0] = new Vector3(0, -1, -1);
        vertices[1] = new Vector3(0, -1, 1);
        vertices[2] = new Vector3(0, 1, -1);
        vertices[3] = new Vector3(0, 1, 1);
        Vector3[] normals = new Vector3[4];
        normals[0] = Vector3.forward;
        normals[1] = Vector3.forward;
        normals[2] = Vector3.forward;
        normals[3] = Vector3.forward;
        Vector3[] uvs = new Vector3[4];
        uvs[0] = new Vector3(0, 0, 1);
        uvs[1] = new Vector3(1, 0, 1);
        uvs[2] = new Vector3(0, 1, 1);
        uvs[3] = new Vector3(1, 1, 1);
        int[] triangles = new int[] { 0, 2, 1, 1, 2, 3 };

        meshUnity.vertices  = vertices;
        meshUnity.normals   = normals;
        meshUnity.triangles = triangles;
        meshUnity.SetUVs(0, uvs.ToList());


        mf.mesh = meshUnity;
    }
Ejemplo n.º 5
0
    void getDescriotionImageStartPos()
    {
        for (int i = 0; i < itemDate["config"]["DescriotionImageStartPos"].Count; i++)
        {
            for (int j = 0; j < itemDate["config"]["DescriotionImageStartPos"][i.ToString()].Count; j++)
            {
                for (int k = 0; k < itemDate["config"]["DescriotionImageStartPos"][i.ToString()][j.ToString()].Count; k++)
                {
                    tempStartPosfloat.Add(float.Parse(itemDate["config"]["DescriotionImageStartPos"][i.ToString()][j.ToString()][k].ToString()));
                }

                Vector3 pos = new Vector3(tempStartPosfloat[0], tempStartPosfloat[1], 4.54f);
                tempStartPosVector3.Add(pos);
                tempStartPosfloat.Clear();
            }

            Vector3[] thepos = new Vector3[tempStartPosVector3.Count];

            tempStartPosVector3.CopyTo(thepos);

            ValueSheet.DescriptionImageID_PosList.Add(i, thepos.ToList());
            tempStartPosVector3.Clear();
        }
        //for (int i = 0; i < itemDate["config"]["DescriotionImageStartPos"].Count; i++)
        //{
        //    for (int j = 0; j < ValueSheet.DescriptionImageID_PosList[i].Count; j++)
        //    {
        //        Debug.Log("VIDEO ID : " + i.ToString() + "Image num : " + j.ToString() + "position" + ValueSheet.DescriptionImageID_PosList[i][j].ToString());
        //    }
        //}
    }
        public void OrientedMinimumBoundingBox_WithIrregularPolygon()
        {
            var boxPoints = new Vector3[4];

            GeometryUtils.OrientedMinimumBoundingBox2D(k_IrregularConvexPolygon, boxPoints);

            Random.InitState(0);
            DebugDraw.Polygon(k_IrregularConvexPolygon, Random.ColorHSV(), 2.5f);
            DebugDraw.Polygon(boxPoints, Color.black, 3f);

            var boxPointsList  = boxPoints.ToList();
            var pointsOnBounds = new List <Vector3>();

            foreach (var vertex in k_IrregularConvexPolygon)
            {
                var onBounds = GeometryUtils.PointOnPolygonBoundsXZ(vertex, boxPointsList, k_PointOnBoundsSmallEpsilon);
                if (onBounds)
                {
                    pointsOnBounds.Add(vertex);
                }

                var inPolygon = GeometryUtils.PointInPolygon(vertex, boxPointsList);
                Assert.True(onBounds || inPolygon);
            }

            Assert.GreaterOrEqual(pointsOnBounds.Count, 2);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Create a customized Quad from a standart Unity Quad mesh
        /// </summary>
        /// <param name="rect">Position and size</param>
        /// <param name="customMaterial">Apply an user-made material</param>
        /// <returns></returns>
        public static GameObject Create(Rect rect, Material customMaterial = null)
        {
            GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
            Mesh       mesh = (Mesh)Object.Instantiate(quad.GetComponent <MeshFilter>().sharedMesh);

            // Each Quad vertex have x: -0.5 and y: -0.5 units
            Vector2 adjust   = (Vector2.one / 2);
            var     vertices = new Vector3[]
            {
                rect.position - adjust,
                rect.position + rect.size - adjust,
                new Vector2(rect.position.x + rect.size.x, rect.position.y) - adjust,
                new Vector2(rect.position.x, rect.position.y + rect.size.y) - adjust
            };

            mesh.SetVertices(vertices.ToList());
            mesh.RecalculateBounds();
            quad.GetComponent <MeshFilter>().mesh = mesh;

            // Remove collider
            // TODO: add collider that actually works
            Object.DestroyImmediate(quad.GetComponent <Collider>());

            if (customMaterial != null)
            {
                var renderer = quad.GetComponent <MeshRenderer>();
                renderer.material = customMaterial;
            }

            return(quad);
        }
Ejemplo n.º 8
0
 /*
  * // Update is called once per frame
  * public void cableUpdate() {
  *
  *  foreach (var cable in MapUtility.Cables)
  *  {
  *      //aggiorno e salvo la posizione del cavo solo se questo � maneggiato da Cip
  *      if (cable.IsConnectedToCip)
  *      {
  *          var trail = cable.Instance.GetComponent<TrailRenderer>();
  *          var positions = new Vector3[trail.positionCount];
  *          trail.GetPositions(positions);
  *          var positionsList = positions.ToList();
  *          if (positionsList.Count == 0)
  *          {
  *              positionsList.Add(target.transform.position);
  *          }
  *          else if (positionsList.Last() == target.transform.position)
  *          {
  *              //positionsList.Remove(target.transform.position);
  *          }
  *          else if (positionsList.Count() > 1)
  *          {
  *              if (positionsList[positionsList.Count() - 2] == target.transform.position)
  *              {
  *                  positionsList.RemoveAt(positionsList.Count() - 1);
  *              }
  *              else if (positionsList.Last().x != target.transform.position.x && positionsList.Last().z != target.transform.position.z)
  *              {
  *                  positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z));
  *                  positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z));
  *              }
  *              else if (positionsList.Last().x != target.transform.position.x)
  *              {
  *                  positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z));
  *              }
  *              else if (positionsList.Last().z != target.transform.position.z)
  *              {
  *                  positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z));
  *              }
  *              else
  *              {
  *                  Debug.LogError("Something wrong with movement");
  *              }
  *          }
  *          else
  *          {
  *              if (positionsList.Last().x != target.transform.position.x && positionsList.Last().z != target.transform.position.z)
  *              {
  *                  positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z));
  *                  positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z));
  *              }
  *              else if (positionsList.Last().x != target.transform.position.x)
  *              {
  *                  positionsList.Add(new Vector3(target.transform.position.x, positionsList.Last().y, positionsList.Last().z));
  *              }
  *              else if (positionsList.Last().z != target.transform.position.z)
  *              {
  *                  positionsList.Add(new Vector3(positionsList.Last().x, positionsList.Last().y, target.transform.position.z));
  *              }
  *              else
  *              {
  *                  Debug.LogError("Something wrong with movement");
  *              }
  *          }
  *          trail.Clear();
  *          trail.AddPositions(positionsList.ToArray());
  *          //var positionas = new Vector3[trail.positionCount];
  *          //trail.GetPositions(positionas);
  *          //foreach (var vec in positionas)
  *          //    //Debug.Log(vec);
  *          /////Debug.Log("");
  *      }
  *  }
  * }
  */
 public bool isLastMove(Vector3 move)
 {
     foreach (var cable in MapUtility.Cables)
     {
         //
         if (cable.IsConnectedToCip)
         {
             var trail     = cable.Instance.GetComponent <TrailRenderer>();
             var positions = new Vector3[trail.positionCount];
             trail.GetPositions(positions);
             var positionsList = positions.ToList();
             if (trail.positionCount > 1)
             {
                 if (positionsList.ElementAt(trail.positionCount - 2).x == move.x && (positionsList.ElementAt(trail.positionCount - 2).z == move.z))
                 {
                     return(true);
                 }
                 else
                 {
                     return(false);
                 }
             }
             else
             {
                 return(false);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 9
0
 public void addPoints(List <Vector3> newPoints)
 {
     foreach (var cable in MapUtility.Cables)
     {
         //aggiorno e salvo la posizione del cavo solo se questo � maneggiato da Cip
         if (cable.IsConnectedToCip)
         {
             var trail     = cable.Instance.GetComponent <TrailRenderer>();
             var oldPoints = new Vector3[trail.positionCount];
             trail.GetPositions(oldPoints);
             var oldPointsList = oldPoints.ToList();
             foreach (var point in newPoints)
             {
                 if (trail.positionCount > 1)
                 {
                     if (point == oldPointsList[trail.positionCount - 2])
                     {
                         oldPointsList.RemoveAt(trail.positionCount);
                     }
                     else
                     {
                         oldPointsList.Add(point);
                     }
                 }
                 else
                 {
                     oldPointsList.Add(point);
                 }
             }
             trail.Clear();
             trail.AddPositions(oldPointsList.ToArray());
         }
     }
 }
    void Start()
    {
        // Get the points.
        var lineRenderer = GetComponent <LineRenderer>();

        //lineRenderer.positionCount = 100;
        //for (int i = 0; i < 100; i++)
        //{
        //    lineRenderer.SetPosition(i, new Vector3(0, Random.Range(0, 5f), transform.position.z + i));
        //}


        int pointsBefore = lineRenderer.positionCount;
        var points       = new Vector3[pointsBefore];

        lineRenderer.GetPositions(points);



        // Simplify.
        var simplifiedPoints = new List <Vector3>();

        LineUtility.Simplify(points.ToList(), tolerance, simplifiedPoints);

        // Assign back to the line renderer.
        lineRenderer.positionCount = simplifiedPoints.Count;
        lineRenderer.SetPositions(simplifiedPoints.ToArray());

        Debug.Log("Line reduced from " + pointsBefore + " to " + lineRenderer.positionCount);
    }
Ejemplo n.º 11
0
    List <Vector3> GetTrajectoryPointsReflect(Vector3 startPosition, Vector3 initialVelocity)
    {
        Vector3[] segments = new Vector3[segmentsCount];

        segments[0] = startPosition;

        Vector3 velocity = initialVelocity;

        var gravityScale = objectPrefab.GetComponent <Rigidbody2D>().gravityScale;

        for (int i = 1; i < segmentsCount; i++)
        {
            float segTime = (velocity.sqrMagnitude != 0) ? segmentLength / velocity.magnitude : 0;

            RaycastHit2D hit = Physics2D.CircleCast(segments[i - 1], 0.5f, velocity, segmentLength);
            if (hit.collider != null && (Vector2)segments[i - 1] != hit.centroid)
            {
                var hitSegTime = hit.distance / velocity.magnitude;
                segments[i] = segments[i - 1] + velocity * hitSegTime + Physics.gravity * gravityScale * hitSegTime * hitSegTime / 2;

                velocity += Physics.gravity * gravityScale * hitSegTime;
                velocity  = Vector2.Reflect(velocity, hit.normal);
            }
            else
            {
                segments[i] = segments[i - 1] + velocity * segTime + Physics.gravity * gravityScale * segTime * segTime / 2;
                velocity   += Physics.gravity * gravityScale * segTime;
            }
        }

        return(segments.ToList());
    }
        /// <summary>
        /// 指定したメッシュのすべてのシェイプキーを取得します。
        /// </summary>
        /// <param name="mesh"></param>
        /// <param name="useShapeKeyNormalsAndTangents"></param>
        /// <returns></returns>
        internal static IEnumerable <BlendShape> GetAllShapeKeys(Mesh mesh, bool useShapeKeyNormalsAndTangents)
        {
            var shapeKeys = new List <BlendShape>();

            var meshVertexCount = mesh.vertexCount;

            for (var i = 0; i < mesh.blendShapeCount; i++)
            {
                var deltaVertices = new Vector3[meshVertexCount];
                var deltaNormals  = new Vector3[meshVertexCount];
                var deltaTangents = new Vector3[meshVertexCount];

                mesh.GetBlendShapeFrameVertices(
                    i,
                    0,
                    deltaVertices,
                    useShapeKeyNormalsAndTangents ? deltaNormals : null,
                    useShapeKeyNormalsAndTangents ? deltaTangents : null
                    );

                shapeKeys.Add(new BlendShape(name: mesh.GetBlendShapeName(i))
                {
                    Positions = deltaVertices.ToList(),
                    Normals   = deltaNormals.ToList(),
                    Tangents  = deltaTangents.ToList(),
                });
            }

            return(shapeKeys);
        }
Ejemplo n.º 13
0
        public Mesh GetBasicMesh()
        {
            //NOTE: unoptimized
            var ret       = new Mesh();
            var vertices  = new Vector3[4 * tiles.Length];
            var triangles = new int[6 * tiles.Length];
            var offset    = new Vector3();
            var count     = 0;

            for (var i = 0; i < tiles.GetLength(1); ++i)
            {
                for (var j = 0; j < tiles.GetLength(0); ++j)
                {
                    var k = count * 4;
                    vertices[k]     = (Quaternion.Euler(0, 0, 45) * Vector3.up) / (float)Math.Sqrt(2) + offset;
                    vertices[k + 1] = (Quaternion.Euler(0, 0, 135) * Vector3.up) / (float)Math.Sqrt(2) + offset;
                    vertices[k + 2] = (Quaternion.Euler(0, 0, 225) * Vector3.up) / (float)Math.Sqrt(2) + offset;
                    vertices[k + 3] = (Quaternion.Euler(0, 0, 315) * Vector3.up) / (float)Math.Sqrt(2) + offset;
                    offset         += new Vector3(1f, 0);

                    triangles[count * 6]     = k;
                    triangles[count * 6 + 1] = k + 1;
                    triangles[count * 6 + 2] = k + 2;
                    triangles[count * 6 + 3] = k + 2;
                    triangles[count * 6 + 4] = k + 3;
                    triangles[count * 6 + 5] = k;
                    ++count;
                }
                offset += new Vector3(-tiles.GetLength(0), 1f);
            }

            ret.SetVertices(vertices.ToList());
            ret.SetTriangles(triangles, 0);
            return(ret);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Loads in positions saved on file
        /// </summary>
        private static void LoadPositions()
        {
            var sandboxConfig = EloBuddy.Sandbox.SandboxConfig.DataDirectory + @"\PandaTeemoReborn\";
            var xFile         = sandboxConfig + Game.MapId + @"\" + "xFile" + ".txt";
            var yFile         = sandboxConfig + Game.MapId + @"\" + "yFile" + ".txt";
            var zFile         = sandboxConfig + Game.MapId + @"\" + "zFile" + ".txt";

            if (!File.Exists(xFile) || !File.Exists(yFile) || !File.Exists(zFile))
            {
                SavePositions();
            }

            string[] xPositions = null;
            string[] yPositions = null;
            string[] zPositions = null;

            if (File.Exists(xFile) && File.Exists(yFile) && File.Exists(zFile))
            {
                xPositions = File.ReadAllLines(xFile);
                yPositions = File.ReadAllLines(yFile);
                zPositions = File.ReadAllLines(zFile);
            }

            if (xPositions == null)
            {
                return;
            }

            var xFloat = new float[xPositions.Length];
            var yFloat = new float[yPositions.Length];
            var zFloat = new float[zPositions.Length];

            for (var i = 0; i < xPositions.Length; i++)
            {
                var x = xPositions[i];
                float.TryParse(x, out xFloat[i]);
            }

            for (var i = 0; i < yPositions.Length; i++)
            {
                var y = yPositions[i];
                float.TryParse(y, out yFloat[i]);
            }

            for (var i = 0; i < zPositions.Length; i++)
            {
                var z = zPositions[i];
                float.TryParse(z, out zFloat[i]);
            }

            var positions = new Vector3[xFloat.Length];

            for (var i = 0; i < positions.Length; i++)
            {
                positions[i] = new Vector3(xFloat[i], yFloat[i], zFloat[i]);
            }

            AddShroomLocations(positions.ToList());
            AssignPosition();
        }
Ejemplo n.º 15
0
    List <Vector3> GetPath()
    {
        Vector3[] positions = new Vector3[LR.positionCount];
        LR.GetPositions(positions);
        List <Vector3> PositionList = positions.ToList();

        return(PositionList);
    }
Ejemplo n.º 16
0
        public static List <Vector3> GetCopy(List <Vector3> pSet)
        {
            Vector3[] setAorig = new Vector3[pSet.Count];
            pSet.CopyTo(setAorig);
            List <Vector3> setAorigV = setAorig.ToList();

            return(setAorigV);
        }
Ejemplo n.º 17
0
        public override void Run(VectorTileFeature feature, MeshData md)
        {
            var count    = md.Vertices.Count;
            var tempList = new Vector3[count * 2];
            var uvList   = new Vector2[count * 2];

            Vector3 lastPos = Vector3.zero;
            Vector3 norm;
            var     lastUv = 0f;

            for (int i = 1; i < count; i++)
            {
                var p1 = md.Vertices[i - 1];
                var p2 = md.Vertices[i];
                var p3 = p2;
                if (i + 1 < md.Vertices.Count)
                {
                    p3 = md.Vertices[i + 1];
                }

                if (lastPos == Vector3.zero)
                {
                    lastPos                 = Vector3.Lerp(p1, p2, 0f);
                    norm                    = GetNormal(p1, lastPos, p2) * Width; //road width
                    tempList[0]             = (lastPos + norm);
                    tempList[count * 2 - 1] = (lastPos - norm);
                    uvList[0]               = new Vector2(0, 0);
                    uvList[count * 2 - 1]   = new Vector2(1, 0);
                }
                var dist = Vector3.Distance(lastPos, p2);
                lastUv += dist;
                lastPos = p2;
                //lastPos = Vector3.Lerp(p1, p2, 1f);
                norm        = GetNormal(p1, lastPos, p3) * Width;
                tempList[i] = (lastPos + norm);
                tempList[2 * count - 1 - i] = (lastPos - norm);

                uvList[i] = new Vector2(0, lastUv);
                uvList[2 * count - 1 - i] = new Vector2(1, lastUv);
            }
            md.Vertices = tempList.ToList();
            md.UV[0].AddRange(uvList);
            var lineTri = new List <int>();
            var n       = md.Vertices.Count / 2;

            for (int i = 0; i < n - 1; i++)
            {
                lineTri.Add(i);
                lineTri.Add(i + 1);
                lineTri.Add(2 * n - 1 - i);

                lineTri.Add(i + 1);
                lineTri.Add(2 * n - i - 2);
                lineTri.Add(2 * n - i - 1);
            }
            md.Triangles.Add(lineTri);
        }
Ejemplo n.º 18
0
    public void CreateMeshCollider()
    {
        PolygonCollider2D polygonCollider = GetComponent <PolygonCollider2D>();

        if (polygonCollider == null)
        {
            Debug.LogError("You need a polygon collider on this game object");
            return;
        }
        GameObject parentGO = new GameObject(MESH_NAME);

        parentGO.layer = gameObject.layer;
        Transform parent = parentGO.transform;

        parent.parent        = transform;
        parent.localPosition = Vector3.zero;
        parent.localScale    = Vector3.one;
        MeshFilter meshFilter = parentGO.AddComponent <MeshFilter>();
        int        polyLength = polygonCollider.points.Length;

        Vector3[] vertices  = new Vector3[polyLength * 2];
        int[]     triangles = new int[polyLength * 6 + (polyLength - 2) * 3 * 2];
        for (int i = 0; i < polyLength; i++)
        {
            vertices[i * 2]      = new Vector3(polygonCollider.points[i].x, polygonCollider.points[i].y, zThickness * 0.5f);
            vertices[i * 2 + 1]  = new Vector3(polygonCollider.points[i].x, polygonCollider.points[i].y, -zThickness * 0.5f);
            triangles[i * 6]     = i * 2;
            triangles[i * 6 + 1] = i * 2 + 1;
            triangles[i * 6 + 2] = (i * 2 + 2) % (polyLength * 2);
            triangles[i * 6 + 3] = (i * 2 + 2) % (polyLength * 2);
            triangles[i * 6 + 4] = i * 2 + 1;
            triangles[i * 6 + 5] = (i * 2 + 3) % (polyLength * 2);
        }
        for (int i = 0; i < polyLength - 2; i++)
        {
            triangles[polyLength * 6 + i * 6]     = 0;
            triangles[polyLength * 6 + i * 6 + 1] = (i + 1) * 2;
            triangles[polyLength * 6 + i * 6 + 2] = (i + 2) * 2;
            triangles[polyLength * 6 + i * 6 + 3] = 1;
            triangles[polyLength * 6 + i * 6 + 4] = (i + 2) * 2 + 1;
            triangles[polyLength * 6 + i * 6 + 5] = (i + 1) * 2 + 1;
        }
        Debug.Log(string.Format("points : {0} ; triangles : {1}", vertices.ToList().ListToString(), triangles.ToList().ListToString()));
        meshFilter.mesh           = new Mesh();
        meshFilter.mesh.vertices  = vertices;
        meshFilter.mesh.triangles = triangles;
        meshFilter.mesh.RecalculateBounds();
        meshFilter.mesh.RecalculateNormals();
        MeshCollider mc = parentGO.AddComponent <MeshCollider>();

        mc.convex    = true;
        mc.isTrigger = polygonCollider.isTrigger;
    }
    List <Vector3> GetTrajectoryPoints(Vector3 startPosition, Vector3 initialVelocity)
    {
        Vector3[] segments = new Vector3[segmentsCount];

        segments[0] = startPosition;

        Vector3 velocity  = initialVelocity;
        var     collider  = objectPrefab.GetComponent <Collider>();
        var     rigidbody = objectPrefab.GetComponent <Rigidbody>();

        var drag          = rigidbody.drag;
        var gravityScale  = rigidbody.useGravity ? 1 : 0;
        var bounciness    = collider.material.bounciness;
        var bounceCombine = collider.material.bounceCombine;


        for (int i = 1; i < segmentsCount; i++)
        {
            bool hasHit = Physics.SphereCast(segments[i - 1], 0.5f, velocity, out RaycastHit hit, segmentLength);
            if (hasHit)
            {
                var hitSegTime = hit.distance / velocity.magnitude;
                segments[i] = segments[i - 1] + velocity * hitSegTime + Physics.gravity * gravityScale * hitSegTime * hitSegTime / 2;

                velocity += Physics.gravity * gravityScale * hitSegTime;

                var normalVelocity  = Vector3.Project(velocity, hit.normal);
                var tangentVelocity = velocity - normalVelocity;

                var otherBounciness    = hit.collider.material.bounciness;
                var otherBounceCombine = hit.collider.material.bounceCombine;

                var hitBounceCombine = (PhysicMaterialCombine)Mathf.Max((int)bounceCombine, (int)otherBounceCombine);

                var hitBounciness = hitBounceCombine == PhysicMaterialCombine.Average ? (bounciness + otherBounciness) / 2
                    : hitBounceCombine == PhysicMaterialCombine.Maximum ? Mathf.Max(bounciness, otherBounciness)
                    : hitBounceCombine == PhysicMaterialCombine.Minimum ? Mathf.Min(bounciness, otherBounciness)
                    : bounciness * otherBounciness;

                velocity  = tangentVelocity - normalVelocity * hitBounciness;
                velocity *= Mathf.Clamp01(1f - drag * hitSegTime);
            }
            else
            {
                float segTime = (velocity.sqrMagnitude != 0) ? segmentLength / velocity.magnitude : 0;
                segments[i] = segments[i - 1] + velocity * segTime + Physics.gravity * gravityScale * segTime * segTime / 2;
                velocity   += Physics.gravity * gravityScale * segTime;
                velocity   *= Mathf.Clamp01(1f - drag * segTime);
            }
        }

        return(segments.ToList());
    }
Ejemplo n.º 20
0
        public void When_DrawHandLine_Work()
        {
            LineRenderer   lineRenderer = GenerateLineRenderer(50);
            List <Vector3> handJoint    = GenerateFullHandJoint(1);

            _handVizualiser.DrawHandLine(handJoint, lineRenderer);

            Vector3[] actualPositions = new Vector3[50];
            lineRenderer.GetPositions(actualPositions);
            List <Vector3> expectedPositions = ExpectedLineRendererPositions(1);

            Assert.AreEqual(expectedPositions, actualPositions.ToList());
        }
Ejemplo n.º 21
0
    private List <Vector3> buildNormals()
    {
        Vector3[] normals = new Vector3[x_dim * z_dim];
        for (int i = 0; i < x_dim; i++)
        {
            for (int j = 0; j < z_dim; j++)
            {
                normals[i * z_dim + j] = new Vector3(0.0f, 1.0f, 0.0f);
            }
        }

        return(normals.ToList());
    }
Ejemplo n.º 22
0
 /// <summary>
 /// Generates a line.
 /// </summary>
 void GenerateLineVBO()
 {
     Vector3[] vecs  = new Vector3[2];
     uint[]    inds  = new uint[2];
     Vector3[] norms = new Vector3[2];
     Vector3[] texs  = new Vector3[2];
     Vector4[] cols  = new Vector4[2];
     Vector3[] tangs = new Vector3[2];
     for (uint u = 0; u < 2; u++)
     {
         inds[u]  = u;
         tangs[u] = new Vector3(1f, 0f, 0f);
     }
     for (int n = 0; n < 2; n++)
     {
         norms[n] = new Vector3(0, 0, 1);
     }
     for (int c = 0; c < 2; c++)
     {
         cols[c] = new Vector4(1, 1, 1, 1);
     }
     Vector4[] BoneIDs      = new Vector4[2];
     Vector4[] BoneWeights  = new Vector4[2];
     Vector4[] BoneIDs2     = new Vector4[2];
     Vector4[] BoneWeights2 = new Vector4[2];
     for (int n = 0; n < 2; n++)
     {
         BoneIDs[n]      = new Vector4(0, 0, 0, 0);
         BoneWeights[n]  = new Vector4(0, 0, 0, 0);
         BoneIDs2[n]     = new Vector4(0, 0, 0, 0);
         BoneWeights2[n] = new Vector4(0, 0, 0, 0);
     }
     vecs[0] = new Vector3(0, 0, 0);
     texs[0] = new Vector3(0, 0, 0);
     vecs[1] = new Vector3(1, 0, 0);
     texs[1] = new Vector3(1, 0, 0);
     Line    = new VBO()
     {
         Vertices     = vecs.ToList(),
         Indices      = inds.ToList(),
         Normals      = norms.ToList(),
         Tangents     = tangs.ToList(),
         TexCoords    = texs.ToList(),
         Colors       = cols.ToList(),
         BoneIDs      = BoneIDs.ToList(),
         BoneWeights  = BoneWeights.ToList(),
         BoneIDs2     = BoneIDs2.ToList(),
         BoneWeights2 = BoneWeights2.ToList()
     };
     Line.GenerateVBO();
 }
Ejemplo n.º 23
0
    private float CalculateTriangles(SerializedProperty originProp, SerializedProperty vertexesProp,
                                     SerializedProperty trianglesProp, SerializedProperty triangleAreasProp)
    {
        Vector3[] vertexes = new Vector3[vertexesProp.arraySize];
        float     area     = 0;

        for (int i = 0; i < vertexesProp.arraySize; ++i)
        {
            vertexes[i] = vertexesProp.GetArrayElementAtIndex(i).vector3Value;
        }

        originProp.vector3Value = PolygonAreaExtend.GetCentroid(vertexes.ToList());

        Undo.RecordObject(((MonoBehaviour)target).gameObject, "Position");
        ((MonoBehaviour)target).transform.position = originProp.vector3Value;

        PolygonHelper.Triangulate(vertexes, -GetPlane(originProp.vector3Value).normal, out var triangles);

        if (triangles.Count != trianglesProp.arraySize)
        {
            trianglesProp.ClearArray();
            for (int i = 0; i < triangles.Count; ++i)
            {
                trianglesProp.InsertArrayElementAtIndex(i);
            }
        }

        if (triangles.Count != triangleAreasProp.arraySize)
        {
            triangleAreasProp.ClearArray();
            for (int i = 0; i < triangles.Count; ++i)
            {
                triangleAreasProp.InsertArrayElementAtIndex(i);
            }
        }

        for (int i = 0; i < triangles.Count; ++i)
        {
            var prop = trianglesProp.GetArrayElementAtIndex(i);
            var tri  = triangles[i];
            prop.FindPropertyRelative("x").vector3Value = tri.x;
            prop.FindPropertyRelative("y").vector3Value = tri.y;
            prop.FindPropertyRelative("z").vector3Value = tri.z;

            var areaProp = triangleAreasProp.GetArrayElementAtIndex(i);
            areaProp.floatValue = tri.CalcTriangleArea();
            area += areaProp.floatValue;
        }

        return(area);
    }
Ejemplo n.º 24
0
        public void When_ShowHand_Work_OnLineRenderer()
        {
            LineRenderer lineRenderer    = GenerateLineRenderer(50);
            GameObject   handJointObject = Resources.Load <GameObject>("Prefabs/Hand_Joint");

            _handVizualiser.InitVizualisation("Full_Hand_Positions_Mock");
            _handVizualiser.ShowHand(lineRenderer, handJointObject);

            Vector3[] actualPositions = new Vector3[50];
            lineRenderer.GetPositions(actualPositions);
            List <Vector3> expectedPositions = ExpectedLineRendererPositions(3);

            Assert.AreEqual(expectedPositions, actualPositions.ToList());
        }
Ejemplo n.º 25
0
 /// <summary>
 /// Generates a square.
 /// </summary>
 void GenerateSquareVBO()
 {
     Vector3[] vecs         = new Vector3[6];
     uint[]    inds         = new uint[6];
     Vector3[] norms        = new Vector3[6];
     Vector3[] texs         = new Vector3[6];
     Vector4[] cols         = new Vector4[6];
     Vector4[] BoneIDs      = new Vector4[6];
     Vector4[] BoneWeights  = new Vector4[6];
     Vector4[] BoneIDs2     = new Vector4[6];
     Vector4[] BoneWeights2 = new Vector4[6];
     Vector3[] tangs        = new Vector3[6];
     for (uint n = 0; n < 6; n++)
     {
         inds[n]         = n;
         tangs[n]        = new Vector3(1, 0, 0);
         norms[n]        = new Vector3(0, 0, 1);
         cols[n]         = new Vector4(1, 1, 1, 1);
         BoneIDs[n]      = new Vector4(0, 0, 0, 0);
         BoneWeights[n]  = new Vector4(0, 0, 0, 0);
         BoneIDs2[n]     = new Vector4(0, 0, 0, 0);
         BoneWeights2[n] = new Vector4(0, 0, 0, 0);
     }
     vecs[0] = new Vector3(1, 0, 0);
     texs[0] = new Vector3(1, 0, 0);
     vecs[1] = new Vector3(1, 1, 0);
     texs[1] = new Vector3(1, 1, 0);
     vecs[2] = new Vector3(0, 1, 0);
     texs[2] = new Vector3(0, 1, 0);
     vecs[3] = new Vector3(1, 0, 0);
     texs[3] = new Vector3(1, 0, 0);
     vecs[4] = new Vector3(0, 1, 0);
     texs[4] = new Vector3(0, 1, 0);
     vecs[5] = new Vector3(0, 0, 0);
     texs[5] = new Vector3(0, 0, 0);
     Square  = new VBO()
     {
         Vertices     = vecs.ToList(),
         Indices      = inds.ToList(),
         Normals      = norms.ToList(),
         Tangents     = tangs.ToList(),
         TexCoords    = texs.ToList(),
         Colors       = cols.ToList(),
         BoneIDs      = BoneIDs.ToList(),
         BoneWeights  = BoneWeights.ToList(),
         BoneIDs2     = BoneIDs2.ToList(),
         BoneWeights2 = BoneWeights2.ToList()
     };
     Square.GenerateVBO();
 }
Ejemplo n.º 26
0
    public static List <Vector3> RotateAround(this List <Vector3> points, Vector3 pivot, Quaternion angle)
    {
        // This is likely dumb as f**k
        Vector3[] transformedPointsArray = new Vector3[] { };
        points.CopyTo(transformedPointsArray);
        List <Vector3> transformedPoints = transformedPointsArray.ToList <Vector3>();

        for (int i = 0; i < transformedPoints.Count; i++)
        {
            Vector3 direction = transformedPoints[i] - pivot;
            direction            = angle * direction;
            transformedPoints[i] = direction + pivot;
        }
        return(transformedPoints);
    }
Ejemplo n.º 27
0
        private void AlignNormals()
        {
            using (var t = new ScopeTimer("Mesh.AlignNormals"))
            {
                var alignedNormals = new Vector3[Vertices.Count];

                foreach (var tri in Triangles)
                {
                    UpdateNormal(ref alignedNormals, (int)tri.I1, (int)tri.In1);
                    UpdateNormal(ref alignedNormals, (int)tri.I2, (int)tri.In2);
                    UpdateNormal(ref alignedNormals, (int)tri.I3, (int)tri.In3);
                }

                Normals = alignedNormals.ToList();
            }
        }
Ejemplo n.º 28
0
    List <Vector3> GetTrajectoryPointsLinear(Vector3 startPosition, Vector3 initialVelocity)
    {
        Vector3[] segments = new Vector3[segmentsCount];

        segments[0] = startPosition;

        Vector3 velocity = initialVelocity;

        for (int i = 1; i < segmentsCount; i++)
        {
            float segTime = (velocity.sqrMagnitude != 0) ? segmentLength / velocity.magnitude : 0;
            segments[i] = segments[i - 1] + velocity * segTime;
        }

        return(segments.ToList());
    }
Ejemplo n.º 29
0
 public void removeLastPoint()
 {
     foreach (var cable in MapUtility.Cables)
     {
         //aggiorno e salvo la posizione del cavo solo se questo � maneggiato da Cip
         if (cable.IsConnectedToCip)
         {
             var trail     = cable.Instance.GetComponent <TrailRenderer>();
             var oldPoints = new Vector3[trail.positionCount];
             trail.GetPositions(oldPoints);
             var oldPointsList = oldPoints.ToList();
             oldPointsList.RemoveAt(trail.positionCount - 1);
             trail.Clear();
             trail.AddPositions(oldPointsList.ToArray());
         }
     }
 }
Ejemplo n.º 30
0
    /// <summary>
    /// 获取曲线上面的所有路径点
    /// </summary>
    /// <returns>The list.</returns>
    /// <param name="wayPoints">路点列表</param>
    /// <param name="pointSize">两个点之间的节点数量</param>
    public static List <Vector3> GetPoints(List <Vector3> wayPoints)
    {
        Vector3[] controlPointList = PathControlPointGenerator(wayPoints.ToArray());
        int       smoothAmount     = 0; // wayPoints.Length * pointSize;

        // 根据 路点 间的距离计算所需 路径点 的数量
        for (int i = 0, length = wayPoints.Count - 1; i < length; i++)
        {
            smoothAmount += (int)Vector3.Distance(wayPoints[i + 1], wayPoints[i]) / 4;
        }

        Vector3[] pointArr = new Vector3[smoothAmount];
        for (int index = 1; index <= smoothAmount; index++)
        {
            pointArr[index - 1] = Interp(controlPointList, (float)index / smoothAmount);
        }
        return(pointArr.ToList());
    }
Ejemplo n.º 31
0
 void GenerateLineVBO()
 {
     Vector3[] vecs = new Vector3[2];
     uint[] inds = new uint[2];
     Vector3[] norms = new Vector3[2];
     Vector3[] texs = new Vector3[2];
     Vector4[] cols = new Vector4[2];
     for (uint u = 0; u < 2; u++)
     {
         inds[u] = u;
     }
     for (int n = 0; n < 2; n++)
     {
         norms[n] = new Vector3(0, 0, 1);
     }
     for (int c = 0; c < 2; c++)
     {
         cols[c] = new Vector4(1, 1, 1, 1);
     }
     Vector4[] BoneIDs = new Vector4[2];
     Vector4[] BoneWeights = new Vector4[2];
     Vector4[] BoneIDs2 = new Vector4[2];
     Vector4[] BoneWeights2 = new Vector4[2];
     for (int n = 0; n < 2; n++)
     {
         BoneIDs[n] = new Vector4(0, 0, 0, 0);
         BoneWeights[n] = new Vector4(0, 0, 0, 0);
         BoneIDs2[n] = new Vector4(0, 0, 0, 0);
         BoneWeights2[n] = new Vector4(0, 0, 0, 0);
     }
     vecs[0] = new Vector3(0, 0, 0);
     texs[0] = new Vector3(0, 0, 0);
     vecs[1] = new Vector3(1, 0, 0);
     texs[1] = new Vector3(1, 0, 0);
     Line = new VBO();
     Line.Vertices = vecs.ToList();
     Line.Indices = inds.ToList();
     Line.Normals = norms.ToList();
     Line.TexCoords = texs.ToList();
     Line.Colors = cols.ToList();
     Line.BoneIDs = BoneIDs.ToList();
     Line.BoneWeights = BoneWeights.ToList();
     Line.BoneIDs2 = BoneIDs2.ToList();
     Line.BoneWeights2 = BoneWeights2.ToList();
     Line.GenerateVBO();
 }
Ejemplo n.º 32
0
 void GenerateSquareVBO()
 {
     Vector3[] vecs = new Vector3[6];
     uint[] inds = new uint[6];
     Vector3[] norms = new Vector3[6];
     Vector3[] texs = new Vector3[6];
     Vector4[] cols = new Vector4[6];
     Vector4[] BoneIDs = new Vector4[6];
     Vector4[] BoneWeights = new Vector4[6];
     Vector4[] BoneIDs2 = new Vector4[6];
     Vector4[] BoneWeights2 = new Vector4[6];
     for (uint n = 0; n < 6; n++)
     {
         inds[n] = n;
         norms[n] = new Vector3(0, 0, 1);
         cols[n] = new Vector4(1, 1, 1, 1);
         BoneIDs[n] = new Vector4(0, 0, 0, 0);
         BoneWeights[n] = new Vector4(0, 0, 0, 0);
         BoneIDs2[n] = new Vector4(0, 0, 0, 0);
         BoneWeights2[n] = new Vector4(0, 0, 0, 0);
     }
     vecs[0] = new Vector3(1, 0, 0);
     texs[0] = new Vector3(1, 0, 0);
     vecs[1] = new Vector3(1, 1, 0);
     texs[1] = new Vector3(1, 1, 0);
     vecs[2] = new Vector3(0, 1, 0);
     texs[2] = new Vector3(0, 1, 0);
     vecs[3] = new Vector3(1, 0, 0);
     texs[3] = new Vector3(1, 0, 0);
     vecs[4] = new Vector3(0, 1, 0);
     texs[4] = new Vector3(0, 1, 0);
     vecs[5] = new Vector3(0, 0, 0);
     texs[5] = new Vector3(0, 0, 0);
     Square = new VBO();
     Square.Vertices = vecs.ToList();
     Square.Indices = inds.ToList();
     Square.Normals = norms.ToList();
     Square.TexCoords = texs.ToList();
     Square.Colors = cols.ToList();
     Square.BoneIDs = BoneIDs.ToList();
     Square.BoneWeights = BoneWeights.ToList();
     Square.BoneIDs2 = BoneIDs2.ToList();
     Square.BoneWeights2 = BoneWeights2.ToList();
     Square.GenerateVBO();
 }
Ejemplo n.º 33
0
    /// <summary>
    /// Changes terrain geometry in realtime based on new path. Path can be obtained from <see cref="GetPath()"/> method
    /// </summary>
    /// <param name="newPath">Array of new terrain path points</param>
    public void ApplyDeform(Vector3[] newPath, bool applySmoothly = false)
    {
        if (!RealtimeDeformEnabled)
            return;

        Mesh pathMesh = gameObject.GetComponent<MeshFilter>().mesh;

        if (FixSides)
        {
            newPath[0].y = LeftFixedPoint;
            newPath[newPath.Length - 1].y = RightFixedPoint;
        }

        #region Generate vertices
        Vector3[] vertices = GetVertsPos();
        Vector3[] backupVertices = null;
        if (applySmoothly)
        {
            DesiredVertices = newPath.ToList<Vector3>();
            backupVertices = vertices;
        }
        else
        {
            int pathIndex = 0;
            for (int i = 0; i < vertices.Length; i += 2)
            {
                if (newPath[pathIndex].y < 0)
                    newPath[pathIndex].y = 0;

                if (newPath[pathIndex].y > Height)
                    newPath[pathIndex].y = Height;

                vertices[i] = newPath[pathIndex];
                pathIndex++;
            }

            pathMesh.vertices = vertices;
        }
        #endregion

        if (!applySmoothly && RealtimeDeformUpdateUv)
        {
            #region Generate UV
            Vector2[] uv = new Vector2[vertices.Length];

            for (int i = 0; i < uv.Length; i += 2)
            {
                uv[i] = new Vector2((float)i / (uv.Length - 2) * MainTextureSize, (vertices[i].y / Height) * ((float)Height / Width) * MainTextureSize);
                uv[i + 1] = new Vector2((float)i / (uv.Length - 2) * MainTextureSize, (vertices[i + 1].y / Height) * ((float)Height / Width) * MainTextureSize);
            }

            pathMesh.uv = uv;
            #endregion
        }

        pathMesh.RecalculateBounds();

        UpdateCap(false);
        if (RealtimeDeformUpdateColliders)
        {
            UpdateCollider2D();
            UpdateCollider3D(false);
        }

        if (applySmoothly && backupVertices != null)
        {
            pathMesh.vertices = vertices;

            pathMesh.RecalculateBounds();

            UpdateCap(false);
        }
    }
Ejemplo n.º 34
0
 void setVertices(Vector3[] vertices)
 {
     TargetMesh.SetVertices(vertices.ToList());
 }
Ejemplo n.º 35
0
        /// <summary>
        /// Loads in positions saved on file
        /// </summary>
        private static void LoadPositions()
        {
            var sandboxConfig = EloBuddy.Sandbox.SandboxConfig.DataDirectory + @"\PandaTeemoReborn\";
            var xFile = sandboxConfig + Game.MapId + @"\" + "xFile" + ".txt";
            var yFile = sandboxConfig + Game.MapId + @"\" + "yFile" + ".txt";
            var zFile = sandboxConfig + Game.MapId + @"\" + "zFile" + ".txt";

            if (!File.Exists(xFile) || !File.Exists(yFile) || !File.Exists(zFile))
            {
                SavePositions();
            }

            string[] xPositions = null;
            string[] yPositions = null;
            string[] zPositions = null;

            if (File.Exists(xFile) && File.Exists(yFile) && File.Exists(zFile))
            {
                xPositions = File.ReadAllLines(xFile);
                yPositions = File.ReadAllLines(yFile);
                zPositions = File.ReadAllLines(zFile);
            }

            if (xPositions == null)
            {
                return;
            }

            var xFloat = new float[xPositions.Length];
            var yFloat = new float[yPositions.Length];
            var zFloat = new float[zPositions.Length];

            for (var i = 0; i < xPositions.Length; i++)
            {
                var x = xPositions[i];
                float.TryParse(x, out xFloat[i]);
            }

            for (var i = 0; i < yPositions.Length; i++)
            {
                var y = yPositions[i];
                float.TryParse(y, out yFloat[i]);
            }

            for (var i = 0; i < zPositions.Length; i++)
            {
                var z = zPositions[i];
                float.TryParse(z, out zFloat[i]);
            }

            var positions = new Vector3[xFloat.Length];

            for (var i = 0; i < positions.Length; i++)
            {
                positions[i] = new Vector3(xFloat[i], yFloat[i], zFloat[i]);
            }

            AddShroomLocations(positions.ToList());
            AssignPosition();
        }
Ejemplo n.º 36
0
 void GenerateBoxVBO()
 {
     // TODO: Optimize?
     Vector3[] vecs = new Vector3[24];
     uint[] inds = new uint[24];
     Vector3[] norms = new Vector3[24];
     Vector3[] texs = new Vector3[24];
     Vector4[] cols = new Vector4[24];
     for (uint u = 0; u < 24; u++)
     {
         inds[u] = u;
     }
     for (int t = 0; t < 24; t++)
     {
         texs[t] = new Vector3(0, 0, 0);
     }
     for (int n = 0; n < 24; n++)
     {
         norms[n] = new Vector3(0, 0, 1); // TODO: Accurate normals somehow? Do lines even have normals?
     }
     for (int c = 0; c < 24; c++)
     {
         cols[c] = new Vector4(1, 1, 1, 1);
     }
     Vector4[] BoneIDs = new Vector4[24];
     Vector4[] BoneWeights = new Vector4[24];
     Vector4[] BoneIDs2 = new Vector4[24];
     Vector4[] BoneWeights2 = new Vector4[24];
     for (int n = 0; n < 24; n++)
     {
         BoneIDs[n] = new Vector4(0, 0, 0, 0);
         BoneWeights[n] = new Vector4(0, 0, 0, 0);
         BoneIDs2[n] = new Vector4(0, 0, 0, 0);
         BoneWeights2[n] = new Vector4(0, 0, 0, 0);
     }
     int i = 0;
     int zero = -1; // Ssh.
     vecs[i] = new Vector3(zero, zero, zero); i++;
     vecs[i] = new Vector3(1, zero, zero); i++;
     vecs[i] = new Vector3(1, zero, zero); i++;
     vecs[i] = new Vector3(1, 1, zero); i++;
     vecs[i] = new Vector3(1, 1, zero); i++;
     vecs[i] = new Vector3(zero, 1, zero); i++;
     vecs[i] = new Vector3(zero, 1, zero); i++;
     vecs[i] = new Vector3(zero, zero, zero); i++;
     vecs[i] = new Vector3(zero, zero, 1); i++;
     vecs[i] = new Vector3(1, zero, 1); i++;
     vecs[i] = new Vector3(1, zero, 1); i++;
     vecs[i] = new Vector3(1, 1, 1); i++;
     vecs[i] = new Vector3(1, 1, 1); i++;
     vecs[i] = new Vector3(zero, 1, 1); i++;
     vecs[i] = new Vector3(zero, 1, 1); i++;
     vecs[i] = new Vector3(zero, zero, 1); i++;
     vecs[i] = new Vector3(zero, zero, zero); i++;
     vecs[i] = new Vector3(zero, zero, 1); i++;
     vecs[i] = new Vector3(1, zero, zero); i++;
     vecs[i] = new Vector3(1, zero, 1); i++;
     vecs[i] = new Vector3(1, 1, zero); i++;
     vecs[i] = new Vector3(1, 1, 1); i++;
     vecs[i] = new Vector3(zero, 1, zero); i++;
     vecs[i] = new Vector3(zero, 1, 1); i++;
     Box = new VBO();
     Box.Vertices = vecs.ToList();
     Box.Indices = inds.ToList();
     Box.Normals = norms.ToList();
     Box.TexCoords = texs.ToList();
     Box.Colors = cols.ToList();
     Box.BoneIDs = BoneIDs.ToList();
     Box.BoneWeights = BoneWeights.ToList();
     Box.BoneIDs2 = BoneIDs2.ToList();
     Box.BoneWeights2 = BoneWeights2.ToList();
     Box.GenerateVBO();
 }