Пример #1
0
    public void Initialize()
    {
        if (GetComponents <Mesh2D>().Length > 1)
        {
            //Slicer2D.Debug.LogError("Multiple 'Mesh2D' components cannot be attached to the same game object");
            return;
        }

        // Generate Mesh from collider
        Polygon2D polygon = Polygon2DList.CreateFromGameObject(gameObject)[0];

        if (polygon != null)
        {
            polygon.CreateMesh(gameObject, materialScale, materialOffset, triangulation);

            meshFilter = GetComponent <MeshFilter>();

            // Setting Mesh material
            if (material != null)
            {
                meshRenderer = GetComponent <MeshRenderer> ();
                meshRenderer.sharedMaterial = material;

                meshRenderer.sortingLayerName = sortingLayerName;
                meshRenderer.sortingOrder     = sortingOrder;
            }
        }
    }
Пример #2
0
    void Start()
    {
        if (GetComponents <Mesh2D>().Length > 1)
        {
            Slicer2D.Debug.LogError("Multiple 'Mesh2D' components cannot be attached to the same game object");
            return;
        }

        if (GetComponent <Slicer2D>() != null)
        {
            Slicer2D.Debug.LogError("'Mesh2D' and Slicer2D components cannot be attached to the same game object");
            return;
        }

        // Generate Mesh from collider
        Polygon2D polygon = Polygon2D.CreateFromCollider(gameObject);

        if (polygon != null)
        {
            polygon.CreateMesh(gameObject, Vector2.zero, Vector2.zero, triangulation);

            // Setting Mesh material
            if (material != null)
            {
                MeshRenderer meshRenderer = GetComponent <MeshRenderer> ();
                meshRenderer.material = material;

                meshRenderer.sortingLayerName = sortingLayerName;
                meshRenderer.sortingLayerID   = sortingLayerID;
                meshRenderer.sortingOrder     = sortingOrder;
            }
        }
    }
Пример #3
0
    void Start()
    {
        Polygon2D polygon = Polygon2DList.CreateFromGameObject(gameObject)[0];

        polygon = polygon.ToOffset(new Vector2D(0.125f, -0.125f));
        mesh    = polygon.CreateMesh(Vector2.zero, Vector2.zero);
        Update();
    }
Пример #4
0
    // Sprite To Mesh

    public static void SpriteToMesh(GameObject gameObject, VirtualSpriteRenderer spriteRenderer, PolygonTriangulator2D.Triangulation triangulation = PolygonTriangulator2D.Triangulation.Advanced)
    {
        Texture2D texture = null;
        Sprite    sprite  = null;

        if (spriteRenderer.sprite != null)
        {
            sprite  = spriteRenderer.sprite;
            texture = sprite.texture;
        }

        Rect spriteRect = sprite.textureRect;

        float spriteSheetU = (float)(texture.width) / spriteRect.width;
        float spriteSheetV = (float)(texture.height) / spriteRect.height;


        Rect uvRect = new Rect((float)spriteRect.x / texture.width, (float)spriteRect.y / texture.height, (float)spriteRect.width / texture.width, (float)spriteRect.height / texture.height);

        Vector2 scale = new Vector2(spriteSheetU * spriteRect.width / sprite.pixelsPerUnit, spriteSheetV * spriteRect.height / spriteRenderer.sprite.pixelsPerUnit);

        if (spriteRenderer.flipX)
        {
            scale.x = -scale.x;
        }

        if (spriteRenderer.flipY)
        {
            scale.y = -scale.y;
        }

        float pivotX = sprite.pivot.x / spriteRect.width - 0.5f;
        float pivotY = sprite.pivot.y / spriteRect.height - 0.5f;

        float ix = -0.5f + pivotX / spriteSheetU;
        float iy = -0.5f + pivotY / spriteSheetV;

        Vector2 uvOffset = new Vector2(uvRect.center.x + ix, uvRect.center.y + iy);

        Polygon2D polygon2D = Polygon2DListCollider2D.CreateFromGameObject(gameObject)[0];

        polygon2D.CreateMesh(gameObject, scale, uvOffset, triangulation);

        MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer> ();

        if (meshRenderer == null)
        {
            meshRenderer = gameObject.AddComponent <MeshRenderer> ();
        }

        meshRenderer.sharedMaterial             = spriteRenderer.material;
        meshRenderer.sharedMaterial.mainTexture = texture;
        meshRenderer.sharedMaterial.color       = spriteRenderer.color;

        //meshRenderer.sortingLayerName = spriteRenderer.sortingLayerName;
        //meshRenderer.sortingLayerID = spriteRenderer.sortingLayerID;
        //meshRenderer.sortingOrder = spriteRenderer.sortingOrder;
    }
Пример #5
0
 public static Mesh GetStaticTileMesh()
 {
     if (staticTileMesh == null)
     {
         Polygon2D tilePoly = Polygon2D.CreateFromRect(new Vector2(0.5f + 0.01f, 0.5f + 0.01f));
         staticTileMesh = tilePoly.CreateMesh(Vector2.zero, Vector2.zero);
     }
     return(staticTileMesh);
 }
Пример #6
0
 public static Mesh GetRenderMesh()
 {
     if (preRenderMesh == null)
     {
         Polygon2D tilePoly       = Polygon2D.CreateFromRect(new Vector2(1f, 1f));
         Mesh      staticTileMesh = tilePoly.CreateMesh(new Vector2(2f, 2f), Vector2.zero);
         preRenderMesh = staticTileMesh;
     }
     return(preRenderMesh);
 }
Пример #7
0
    void Initialize()
    {
        Transform transform = renderCamera.transform;

        //DrawSelf

        foreach (DestructionModifier modifier in destructible.modifiers)
        {
            Vector3 pos = (Vector3)modifier.position;

            float ratioX = (destructible.transform.localScale.x / destructible.transform.localScale.y);

            Vector2 size = modifier.size;

            pos.x *= transform.localScale.x;
            pos.y *= transform.localScale.y * ratioX;

            size.y *= ratioX;

            Vector2 scale = new Vector2(destructible.transform.localScale.x, destructible.transform.localScale.y);

            Max2D.DrawImage(transform, modifier.material, pos, size, modifier.rotation, 0.3f, new Vector2D(scale));
        }

        foreach (Polygon2D p in destructible.erasePolygons)
        {
            Vector2 scale = new Vector2(1, 1);

            Polygon2D polygon = p.ToScale(scale);

            Mesh mesh = polygon.CreateMesh(Vector2.zero, Vector2.zero);

            EraseMesh eraseMesh = new EraseMesh();

            eraseMesh.mesh = mesh;

            destructible.EraseBrushes.Add(eraseMesh);
        }

        // Not Necessary? Why?
        foreach (EraseMesh e in destructible.EraseBrushes)
        {
            float ratioX = destructible.transform.localScale.x / destructible.transform.localScale.y;

            Vector2 scale = destructible.transform.localScale;
            scale.y *= ratioX;

            Max2D.DrawMesh(GetEraseMaterial(), e.mesh, transform, Vector2D.Zero(), transform.position.z + 0.2f, new Vector2D(scale));
        }

        SaveRenderTextureToSprite();

        destructible.initialized = true;
    }
Пример #8
0
 public Mesh GetTileDynamicMesh()
 {
     if (tileMesh == null)
     {
         if (polygons.Count > 0)
         {
             Polygon2D tilePoly = polygons[0];
             tileMesh = tilePoly.CreateMesh(Vector2.zero, Vector2.zero);
             //Polygon2D.CreateFromRect(new Vector2(0.5f + 0.01f, 0.5f + 0.01f));
         }
     }
     return(tileMesh);
 }
Пример #9
0
    private void CreatePolygon(Polygon2D newPolygon)
    {
        GameObject newGameObject = new GameObject();

        newGameObject.transform.parent = transform;
        newGameObject.AddComponent <Rigidbody2D> ();
        newGameObject.AddComponent <ColliderLineRenderer2D> ().color = Color.black;

        Slicer2D smartSlicer = newGameObject.AddComponent <Slicer2D> ();

        smartSlicer.textureType = Slicer2D.TextureType.Mesh2D;
        smartSlicer.material    = material;

        newPolygon.CreateCollider(newGameObject);
        newPolygon.CreateMesh(newGameObject, new Vector2(1, 1), Vector2.zero, PolygonTriangulator2D.Triangulation.Advanced);
    }
Пример #10
0
        public void CreateMesh(GameObject gameObject, Polygon2D polygon)
        {
            polygon.CreateMesh(gameObject, scale, offset, GetTriangulation());

            if (material)
            {
                MeshRenderer meshRenderer = gameObject.GetComponent <MeshRenderer> ();
                if (Settings.GetBatching(batchMaterial))
                {
                    Slicer2D.Profiler.IncBatchingApplied();
                    meshRenderer.sharedMaterial = material;
                }
                else
                {
                    meshRenderer.sharedMaterial = new Material(material);
                }
            }
        }
Пример #11
0
        //ポリゴン生成
        private void CreatePolygon(Polygon2D newPolygon, Transform transform)
        {
            GameObject newGameObject = new GameObject();

            newGameObject.transform.parent   = transform;
            newGameObject.transform.position = new Vector3(0, 0, visuals.zPosition + 0.01f);

            //ここで力を加えてやる
            newGameObject.AddComponent <Rigidbody2D> ();

            newGameObject.AddComponent <ColliderLineRenderer2D> ().color = Color.black;

            Slicer2D smartSlicer = newGameObject.AddComponent <Slicer2D> ();

            smartSlicer.textureType = Slicer2D.TextureType.Mesh2D;
            smartSlicer.materialSettings.material = material;

            newPolygon.CreatePolygonCollider(newGameObject);
            newPolygon.CreateMesh(newGameObject, new Vector2(1, 1), Vector2.zero, PolygonTriangulator2D.Triangulation.Advanced);
        }
Пример #12
0
    public void Draw()
    {
        if (lineBorder && meshBorder.Count > 0)
        {
            if (meshBorder.Count > 0)
            {
                foreach (Mesh m in meshBorder)
                {
                    Max2DMesh.Draw(m, GetBorderMaterial());
                }
            }
        }

        if (mesh.Count > 0)
        {
            foreach (Mesh m in mesh)
            {
                Max2DMesh.Draw(m, GetFillMaterial());
            }
        }

        if (customEndingsPosition.Count > 0)
        {
            Matrix4x4 matrix;
            foreach (Pair2D pair in customEndingsPosition)
            {
                Polygon2D polyA = Polygon2D.CreateFromRect(new Vector2(1, 1));
                //polyA.ToOffset(pair.A);
                Mesh mA = polyA.CreateMesh(new Vector2(2, 2), Vector2.zero);

                matrix = Matrix4x4.TRS(pair.A.ToVector3(zPosition), Quaternion.Euler(0, 0, 0), new Vector3(1, 1, 1));

                Graphics.DrawMesh(mA, matrix, customEndingImageMaterial, 0);

                matrix = Matrix4x4.TRS(pair.B.ToVector3(zPosition), Quaternion.Euler(0, 0, 0), new Vector3(1, 1, 1));

                Graphics.DrawMesh(mA, matrix, customEndingImageMaterial, 0);
            }
        }
    }
Пример #13
0
    static public void DrawPolygonMesh(Polygon2D polygon)
    {
        Mesh mesh = polygon.CreateMesh(Vector2.zero, Vector2.zero);

        Max2D.DrawMesh(Max2D.defaultMaterial, mesh, new Vector2D(0, 0), 0);
    }
Пример #14
0
    public static void Draw(Vector2D offset, float z)
    {
        float sunDirection = LightingManager2D.GetSunDirection();

        // Day Soft Shadows
        GL.PushMatrix();
        Max2D.defaultMaterial.SetPass(0);
        GL.Begin(GL.TRIANGLES);
        GL.Color(Color.black);

        foreach (LightingCollider2D id in LightingCollider2D.GetList())
        {
            if (id.dayHeight == false || id.height <= 0)
            {
                continue;
            }

            if (id.colliderType == LightingCollider2D.ColliderType.Mesh)
            {
                continue;
            }

            List <Polygon2D> polygons = null;
            switch (id.colliderType)
            {
            case LightingCollider2D.ColliderType.Collider:
                polygons = id.GetColliderPolygons();
                break;

            case LightingCollider2D.ColliderType.SpriteCustomPhysicsShape:
                polygons = id.GetShapePolygons();
                break;
            }

            Polygon2D poly;
            Vector3   vecA;
            Vector3   vecB;
            Vector3   vecC;

            foreach (Polygon2D polygon in polygons)
            {
                poly = polygon.ToWorldSpace(id.gameObject.transform);
                Polygon2D convexHull = Polygon2D.GenerateShadow(new Polygon2D(poly.pointsList), sunDirection, id.height);

                Mesh mesh = convexHull.CreateMesh(Vector2.zero, Vector2.zero);

                for (int i = 0; i < mesh.triangles.GetLength(0); i = i + 3)
                {
                    vecA = mesh.vertices [mesh.triangles [i]];
                    vecB = mesh.vertices [mesh.triangles [i + 1]];
                    vecC = mesh.vertices [mesh.triangles [i + 2]];
                    Max2DMatrix.DrawTriangle(vecA.x, vecA.y, vecB.x, vecB.y, vecC.x, vecC.y, offset, z);
                }
            }
        }

        GL.End();
        GL.PopMatrix();

        GL.PushMatrix();
        // Null Check?
        LightingManager2D.Get().shadowBlurMaterial.SetPass(0);
        GL.Begin(GL.TRIANGLES);
        Max2D.SetColor(Color.white);

        foreach (LightingCollider2D id in LightingCollider2D.GetList())
        {
            if (id.dayHeight == false || id.height <= 0)
            {
                continue;
            }

            if (id.colliderType == LightingCollider2D.ColliderType.Mesh)
            {
                continue;
            }

            List <Polygon2D> polygons = null;
            switch (id.colliderType)
            {
            case LightingCollider2D.ColliderType.Collider:
                polygons = id.GetColliderPolygons();
                break;

            case LightingCollider2D.ColliderType.SpriteCustomPhysicsShape:
                polygons = id.GetShapePolygons();
                break;
            }

            foreach (Polygon2D polygon in polygons)
            {
                Polygon2D poly       = polygon.ToWorldSpace(id.gameObject.transform);
                Polygon2D convexHull = Polygon2D.GenerateShadow(new Polygon2D(poly.pointsList), sunDirection, id.height);

                foreach (DoublePair2D p in DoublePair2D.GetList(convexHull.pointsList))
                {
                    Vector2D zA = new Vector2D(p.A + offset);
                    Vector2D zB = new Vector2D(p.B + offset);
                    Vector2D zC = zB.Copy();

                    Vector2D pA = zA.Copy();
                    Vector2D pB = zB.Copy();

                    zA.Push(Vector2D.Atan2(p.A, p.B) + pi2, .5f);
                    zB.Push(Vector2D.Atan2(p.A, p.B) + pi2, .5f);
                    zC.Push(Vector2D.Atan2(p.B, p.C) + pi2, .5f);

                    GL.TexCoord2(uv0, uv0);
                    Max2D.Vertex3(pB, z);
                    GL.TexCoord2(0.5f - uv0, uv0);
                    Max2D.Vertex3(pA, z);
                    GL.TexCoord2(0.5f - uv0, uv1);
                    Max2D.Vertex3(zA, z);

                    GL.TexCoord2(uv0, uv1);
                    Max2D.Vertex3(zA, z);
                    GL.TexCoord2(0.5f - uv0, uv1);
                    Max2D.Vertex3(zB, z);
                    GL.TexCoord2(0.5f - uv0, uv0);
                    Max2D.Vertex3(pB, z);

                    GL.TexCoord2(uv0, uv1);
                    Max2D.Vertex3(zB, z);
                    GL.TexCoord2(0.5f - uv0, uv0);
                    Max2D.Vertex3(pB, z);
                    GL.TexCoord2(0.5f - uv0, uv1);
                    Max2D.Vertex3(zC, z);
                }
            }
        }

        GL.End();
        GL.PopMatrix();

                #if UNITY_2018_1_OR_NEWER
        GL.PushMatrix();
        Max2D.defaultMaterial.SetPass(0);
        GL.Begin(GL.TRIANGLES);
        GL.Color(Color.black);



        // Day Soft Shadows
        foreach (LightingTilemapCollider2D id in LightingTilemapCollider2D.GetList())
        {
            if (id.map == null)
            {
                continue;
            }
            if (id.dayHeight == false)
            {
                continue;
            }
            for (int x = 0; x < id.area.size.x; x++)
            {
                for (int y = 0; y < id.area.size.y; y++)
                {
                    if (id.map[x, y] == null)
                    {
                        DrawSoftShadowTile(offset + new Vector2D(x, y), z, id.height);
                    }
                }
            }
        }

        GL.End();
        GL.PopMatrix();



        GL.PushMatrix();
        LightingManager2D.Get().shadowBlurMaterial.SetPass(0);
        GL.Begin(GL.TRIANGLES);
        Max2D.SetColor(Color.white);



        // Day Soft Shadows
        foreach (LightingTilemapCollider2D id in LightingTilemapCollider2D.GetList())
        {
            if (id.map == null)
            {
                continue;
            }
            if (id.dayHeight == false)
            {
                continue;
            }
            for (int x = 0; x < id.area.size.x; x++)
            {
                for (int y = 0; y < id.area.size.y; y++)
                {
                    if (id.map[x, y] == null)
                    {
                        DrawSoftShadowTileBlur(offset + new Vector2D(x, y), z, id.height);
                    }
                }
            }
        }

        GL.End();
        GL.PopMatrix();
                #endif

        /*
         *
         * Material material = LightingManager2D.Get().whiteSpriteMaterial;
         * foreach (LightingSprite2D id in LightingSprite2D.GetList()) {
         *      if (id.GetSpriteRenderer() == null) {
         *              continue;
         *      }
         *      material.mainTexture = id.GetSpriteRenderer().sprite.texture; //Debug.Log(sprite.pivot);
         *
         *      Vector2 p = id.transform.position;
         *      Vector2 scale = id.transform.lossyScale;
         *
         *      if (id.GetSpriteRenderer().flipX) {
         *              scale.x = -scale.x;
         *      }
         *
         *      if (id.GetSpriteRenderer().flipY) {
         *              scale.y = -scale.y;
         *      }
         *
         *      Max2D.DrawImage(material, offset.ToVector2() + p, scale, id.transform.rotation.eulerAngles.z, z);
         * } */

        float   ratio        = (float)Screen.width / Screen.height;
        Camera  bufferCamera = LightingMainBuffer2D.Get().bufferCamera;
        Vector2 size         = new Vector2(bufferCamera.orthographicSize * ratio, bufferCamera.orthographicSize);
        Vector3 pos          = Camera.main.transform.position;

        Max2D.DrawImage(LightingManager2D.Get().additiveMaterial, new Vector2D(pos), new Vector2D(size), pos.z);

        // Day Lighting Masking
        foreach (LightingCollider2D id in LightingCollider2D.GetList())
        {
            if (id.generateDayMask == false)
            {
                continue;
            }

            switch (id.maskType)
            {
            case LightingCollider2D.MaskType.SpriteCustomPhysicsShape:
                Max2D.SetColor(Color.white);
                Max2D.DrawMesh(Max2D.defaultMaterial, id.GetShapeMesh(), id.transform, offset, z);

                break;

            case LightingCollider2D.MaskType.Collider:
                Max2D.SetColor(Color.white);
                Max2D.DrawMesh(Max2D.defaultMaterial, id.GetColliderMesh(), id.transform, offset, z);

                break;

            case LightingCollider2D.MaskType.Sprite:
                if (id.spriteRenderer == null || id.spriteRenderer.sprite == null)
                {
                    break;
                }

                Material material = LightingManager2D.Get().whiteSpriteMaterial;
                material.mainTexture = id.spriteRenderer.sprite.texture;

                Max2D.DrawSprite(material, id.spriteRenderer, new Vector2(id.transform.position.x, id.transform.position.y) + offset.ToVector2(), new Vector2(1, 1), id.transform.rotation.eulerAngles.z, z);

                break;
            }
        }
    }
Пример #15
0
        // Visuals
        //GameObject visualsGameObject;
        //MeshFilter visualMeshFilter;
        //MeshRenderer visualMeshRenderer;

        public void Draw()
        {
            if (lineBorder && meshBorder.Count > 0)
            {
                if (meshBorder.Count > 0)
                {
                    foreach (Mesh m in meshBorder)
                    {
                        RendererObject renderObject = GetFreeRenderObject();
                        renderObject.drawn = true;
                        renderObject.meshRenderer.sharedMaterial = GetBorderMaterial();
                        renderObject.meshFilter.sharedMesh       = m;
                        renderObject.transform.position          = Vector3.zero;

                        Vector3 lScale = renderObject.transform.parent.lossyScale;
                        lScale.x = 1f / lScale.x;
                        lScale.y = 1f / lScale.y;
                        lScale.z = 1f / lScale.z;
                        renderObject.transform.localScale = lScale;
                    }
                }
            }

            if (mesh.Count > 0)
            {
                foreach (Mesh m in mesh)
                {
                    RendererObject renderObject = GetFreeRenderObject();
                    renderObject.drawn = true;
                    renderObject.meshRenderer.sharedMaterial = GetFillMaterial();
                    renderObject.meshFilter.sharedMesh       = m;
                    renderObject.transform.position          = Vector3.zero;

                    Vector3 lScale = renderObject.transform.parent.lossyScale;
                    lScale.x = 1f / lScale.x;
                    lScale.y = 1f / lScale.y;
                    lScale.z = 1f / lScale.z;
                    renderObject.transform.localScale = lScale;
                }
            }

            // Does not use Mesh Renderer Object
            if (customEndingsPosition.Count > 0)
            {
                Matrix4x4 matrix;
                foreach (Pair2 pair in customEndingsPosition)
                {
                    Polygon2D polyA = Polygon2D.CreateFromRect(new Vector2(1, 1));
                    //polyA.ToOffset(pair.A);
                    Mesh mA = polyA.CreateMesh(new Vector2(2, 2), Vector2.zero);

                    matrix = Matrix4x4.TRS(pair.a.ToVector3(zPosition), Quaternion.Euler(0, 0, 0), new Vector3(1, 1, 1));

                    Graphics.DrawMesh(mA, matrix, customEndingImageMaterial, 0);

                    matrix = Matrix4x4.TRS(pair.b.ToVector3(zPosition), Quaternion.Euler(0, 0, 0), new Vector3(1, 1, 1));

                    Graphics.DrawMesh(mA, matrix, customEndingImageMaterial, 0);
                }
            }
        }