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