コード例 #1
0
        /// <summary>
        /// Returns color of normal
        /// </summary>
        /// <param name="c"></param>
        /// <param name="normals"></param>
        /// <param name="material"></param>
        /// <returns></returns>
        private Color GetNormalColor(LVDCollision c, Vector2 normals, LVDCollisionMaterial material)
        {
            float angle = (float)(Math.Atan2(normals.Y, normals.X) * 180 / Math.PI);

            if (c.PassThrough)
            {
                return(Color.FromArgb(128, Color.Yellow));
            }
            else if (material.GetFlag(4) && ((angle <= 0 && angle >= -70) || (angle <= -110 && angle >= -180) || angle == 180))
            {
                return(Color.FromArgb(128, Color.Purple));
            }
            else if ((angle <= 0 && angle >= -70) || (angle <= -110 && angle >= -180) || angle == 180)
            {
                return(Color.FromArgb(128, Color.Lime));
            }
            else if (normals.Y < 0)
            {
                return(Color.FromArgb(128, Color.Red));
            }
            else
            {
                return(Color.FromArgb(128, Color.Cyan));
            }
        }
コード例 #2
0
        /// <summary>
        /// deletes lvdvector2
        /// </summary>
        /// <param name="v"></param>
        private void DeleteVertex(LVDVector2 v)
        {
            LVDCollision remove = null;

            foreach (var col in LVD.Collisions)
            {
                int index = col.Vertices.IndexOf(v);
                if (index == -1)
                {
                    continue;
                }

                if (index >= 1)
                {
                    PropertyGrid.SelectedObject = col.Vertices[index - 1];
                }

                if (col.Normals.Count > 0)
                {
                    if (index == col.Normals.Count)
                    {
                        col.Normals.RemoveAt(index - 1);
                        col.Materials.RemoveAt(index - 1);
                    }
                    else
                    {
                        col.Normals.RemoveAt(index);
                        col.Materials.RemoveAt(index);
                    }
                }

                col.Vertices.RemoveAt(index);

                if (index == col.Vertices.Count)
                {
                    index--;
                }

                if (col.Normals.Count > 0 && index > 0)
                {
                    col.Normals[index - 1] = LVDVector2.GenerateNormal(col.Vertices[index - 1], col.Vertices[index]);
                }

                if (col.Vertices.Count < 2)
                {
                    remove = col;
                }

                break;
            }

            // remove collision that is marked for removal
            if (remove != null)
            {
                LVD.Collisions.Remove(remove);
                RefreshNodes();
            }
        }
コード例 #3
0
        /// <summary>
        /// Renders a collision wall
        /// </summary>
        /// <param name="col"></param>
        /// <param name="p1"></param>
        /// <param name="p2"></param>
        /// <param name="mat"></param>
        /// <param name="normal"></param>
        private void RenderWall(LVDCollision col, LVDVector2 p1, LVDVector2 p2, LVDCollisionMaterial mat, Vector2 normal)
        {
            Vector2 v1  = new Vector2(p1.X, p1.Y);
            Vector2 v2  = new Vector2(p2.X, p2.Y);
            Vector2 mid = (v1 + v2) / 2;
            Vector2 nrm = mid + normal * 3;

            Vector3 p1Color = GetElementColor(p1);
            Vector3 p2Color = GetElementColor(p2);

            if (PropertyGrid.SelectedObject == col)
            {
                p1Color = FlashColor;
                p2Color = FlashColor;
            }

            // material
            var materialColor = GetMatlColor(mat);

            GL.Color4(materialColor.R / 255f, materialColor.G / 255f, materialColor.B / 255f, 0.75f);
            GL.Begin(PrimitiveType.Quads);
            GL.Vertex3(p1.X, p1.Y, 0);
            GL.Vertex3(p1.X, p1.Y, -PlatformWidth);
            GL.Vertex3(p2.X, p2.Y, -PlatformWidth);
            GL.Vertex3(p2.X, p2.Y, 0);
            GL.End();

            GL.LineWidth(2f);
            GL.Begin(PrimitiveType.Lines);

            // point line 1
            GL.Color3(p1Color);
            GL.Vertex3(v1.X, v1.Y, 0);
            GL.Color3(p1Color);
            GL.Vertex3(v1.X, v1.Y, -PlatformWidth);

            // point line 2
            GL.Color3(p2Color);
            GL.Vertex3(v2.X, v2.Y, 0);
            GL.Color3(p2Color);
            GL.Vertex3(v2.X, v2.Y, -PlatformWidth);

            // front line
            GL.Color3(p1Color);
            GL.Vertex3(v1.X, v1.Y, 0);
            GL.Color3(p2Color);
            GL.Vertex3(v2.X, v2.Y, 0);

            // back line
            GL.Color3(p1Color);
            GL.Vertex3(v1.X, v1.Y, -PlatformWidth);
            GL.Color3(p2Color);
            GL.Vertex3(v2.X, v2.Y, -PlatformWidth);

            // normal
            GL.Color3(GetNormalColor(col, normal, mat));
            GL.Vertex3(mid.X, mid.Y, -PlatformWidth / 2);
            GL.Color3(GetNormalColor(col, normal, mat));
            GL.Vertex3(nrm.X, nrm.Y, -PlatformWidth / 2);

            GL.End();
        }