Exemple #1
0
 public void GenerateMeshes(Transform transform)
 {
     // New Event Meshes That Erase Generation
     foreach (DestructionEvent e in destructible.eraseEvents)
     {
         EraseMesh mesh = e.eraseBrush.GetMesh(transform, destructible.transform);
         destructible.EraseBrushes.Add(mesh);
     }
 }
Exemple #2
0
    void Update()
    {
        Transform transform = renderCamera.transform;

        if (destructible.initialized == false)
        {
            Initialize();
            return;
        }

        if (destructible.eraseEvents.Count > 0 || destructible.modifiersAdded == true)
        {
            //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));
            }

            // New Event Meshes That Erase Generation
            foreach (DestructionEvent e in destructible.eraseEvents)
            {
                EraseMesh mesh = e.eraseBrush.GetMesh(transform, destructible.transform);

                destructible.EraseBrushes.Add(mesh);
            }

            // Erase Mesh
            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.eraseEvents.Clear();
            destructible.modifiersAdded = false;
        }
    }
Exemple #3
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;
    }
Exemple #4
0
    public EraseMesh GetMesh(Transform transformA, Transform transformB)
    {
        Polygon2D polygon = GetWorldShape().ToLocalSpace(transformA);

        polygon.ToOffsetItself(new Vector2D(transformA.position - transformB.position));
        polygon.ToRotationItself(transformB.rotation.eulerAngles.z * -Mathf.Deg2Rad);
        polygon.ToScaleItself(new Vector2(1.0f / transformB.localScale.x, 1.0f / transformB.localScale.y));

        Mesh mesh = PolygonTriangulator2D.Triangulate(polygon, Vector2.zero, Vector2.zero, PolygonTriangulator2D.Triangulation.Advanced);

        EraseMesh eraseMesh = new EraseMesh();

        eraseMesh.mesh = mesh;
        return(eraseMesh);
    }
Exemple #5
0
    void Update()
    {
        Transform transform = renderCamera.transform;

        if (destructible.initialized == false)
        {
            Initialize();
            return;
        }

        if (destructible.eraseEvents.Count > 0 || destructible.modifiersAdded == true)
        {
            MeshRenderer meshRenderer = destructible.gameObject.GetComponent <MeshRenderer>();
            destructible.outputMaterial.mainTexture = destructible.outputTexture;

            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));
            }

            // New Event Meshes That Erase Generation
            foreach (DestructionEvent e in destructible.eraseEvents)
            {
                EraseMesh mesh = e.eraseBrush.GetMesh(transform, destructible.transform);
                destructible.EraseBrushes.Add(mesh);
            }

            // Erase Mesh
            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));
            }

            RenderTexture.active = destructible.renderTexture;
            destructible.outputTexture.ReadPixels(new Rect(0, 0, destructible.outputTexture.width, destructible.outputTexture.height), 0, 0);
            destructible.outputTexture.Apply();

            destructible.outputMaterial.mainTexture = destructible.renderTexture;
            meshRenderer.material = destructible.outputMaterial;

            destructible.eraseEvents.Clear();
        }
    }