protected virtual void Update() { Seconds -= Time.deltaTime; if (Seconds <= 0.0f) { Destroy(gameObject); } else { if (FadeOut == true) { if (spriteRenderer == null) { spriteRenderer = GetComponent <SpriteRenderer>(); } var color = spriteRenderer.color; color.a = Mathf.Clamp01(D2D_Helper.Divide(Seconds, FadeSeconds)); spriteRenderer.color = color; } } }
protected virtual void Awake() { if (spriteRenderer == null) spriteRenderer = GetComponent<SpriteRenderer>(); // Copy texture from sprite? if (MainTex == null) { var sprite = spriteRenderer.sprite; if (sprite != null) { var texture = sprite.texture; if (texture != null) { MainTex = texture; Pivot = D2D_Helper.Divide(-sprite.bounds.min.x, -sprite.bounds.min.y, sprite.bounds.size.x, sprite.bounds.size.y); PixelsToUnits = D2D_Helper.Divide(texture.width, sprite.bounds.size.x); if (sprite.rect.x != 0 || sprite.rect.y != 0 || sprite.rect.width != texture.width || sprite.rect.height != texture.height) { Debug.LogWarning("The sprite '" + name + "' sent to D2D_DestructibleSprite is either trimmed, or is part of a multiple sprite collection. This is currently not supported."); } } } } }
private Vector2 CalculateAlphaScale(Sprite sprite) { var texture = sprite.texture; var textureRect = sprite.textureRect; var scaleX = D2D_Helper.Divide(texture.width, Mathf.Floor(textureRect.width) + AlphaShiftX) * D2D_Helper.Divide(OriginalWidth, AlphaWidth); var scaleY = D2D_Helper.Divide(texture.height, Mathf.Floor(textureRect.height) + AlphaShiftY) * D2D_Helper.Divide(OriginalHeight, AlphaHeight); return(new Vector2(scaleX, scaleY)); }
protected virtual void Update() { if (Input.GetMouseButtonDown(0) == true && Camera.main != null) { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); var distance = D2D_Helper.Divide(ray.origin.z, ray.direction.z); var point = ray.origin - ray.direction * distance; D2D_Destructible.StampAll(point, Size, Angle, StampTex, Hardness, Layers); } }
protected virtual void Update() { if (Input.GetKeyDown(Requires) == true && Prefab != null && Camera.main != null) { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); var distance = D2D_Helper.Divide(ray.origin.z, ray.direction.z); var point = ray.origin - ray.direction * distance; D2D_Helper.CloneGameObject(Prefab, null).transform.position = point; } }
private Vector2 CalculateAlphaOffset(Sprite sprite) { var scalingX = D2D_Helper.Divide(Mathf.Floor(sprite.textureRect.width), OriginalWidth); var scalingY = D2D_Helper.Divide(Mathf.Floor(sprite.textureRect.height), OriginalHeight); var texture = sprite.texture; var textureRect = sprite.textureRect; var offsetX = D2D_Helper.Divide(Mathf.Ceil(textureRect.x + AlphaX * scalingX) - AlphaShiftX / 2, texture.width); var offsetY = D2D_Helper.Divide(Mathf.Ceil(textureRect.y + AlphaY * scalingY) - AlphaShiftY / 2, texture.height); return(new Vector2(offsetX, offsetY)); }
public Vector3 CalculateAlphaTexScale() { if (spriteRenderer == null) { spriteRenderer = GetComponent <SpriteRenderer>(); } var scale = Vector3.one; var sprite = spriteRenderer.sprite; if (AlphaTex != null && sprite != null) { scale.x = D2D_Helper.Divide(sprite.bounds.size.x, sprite.rect.width) * D2D_Helper.Divide(Mathf.Floor(sprite.textureRect.width) + AlphaShiftX, AlphaWidth) * D2D_Helper.Divide(AlphaWidth, OriginalWidth); scale.y = D2D_Helper.Divide(sprite.bounds.size.y, sprite.rect.height) * D2D_Helper.Divide(Mathf.Floor(sprite.textureRect.height) + AlphaShiftY, AlphaHeight) * D2D_Helper.Divide(AlphaHeight, OriginalHeight); } return(scale); }
public Vector3 CalculateAlphaTexOffset() { if (spriteRenderer == null) { spriteRenderer = GetComponent <SpriteRenderer>(); } var offset = Vector3.one; var sprite = spriteRenderer.sprite; if (AlphaTex != null && sprite != null) { var scalingX = D2D_Helper.Divide(Mathf.Floor(sprite.textureRect.width), OriginalWidth); var scalingY = D2D_Helper.Divide(Mathf.Floor(sprite.textureRect.height), OriginalHeight); offset.x = sprite.bounds.min.x + sprite.bounds.size.x * (D2D_Helper.Divide(Mathf.Ceil(sprite.textureRectOffset.x) + AlphaX * scalingX - AlphaShiftX / 2, sprite.rect.width)); offset.y = sprite.bounds.min.y + sprite.bounds.size.y * (D2D_Helper.Divide(Mathf.Ceil(sprite.textureRectOffset.y) + AlphaY * scalingY - AlphaShiftY / 2, sprite.rect.height)); } return(offset); }
public void AddTriangle(D2D_Point a, D2D_Point b, D2D_Point c) { if (a.Y != b.Y || a.Y != c.Y) { // Make a highest, and c lowest if (b.Y > a.Y) { D2D_Helper.Swap(ref a, ref b); } if (c.Y > a.Y) { D2D_Helper.Swap(ref c, ref a); } if (c.Y > b.Y) { D2D_Helper.Swap(ref b, ref c); } var fth = a.Y - c.Y; // Full triangle height var tth = a.Y - b.Y; // Top triangle height var bth = b.Y - c.Y; // Bottom triangle height // Find a to c intercept along b plane var inx = c.X + (a.X - c.X) * D2D_Helper.Divide(bth, fth); var d = new D2D_Point((int)inx, b.Y); // Top triangle var abs = D2D_Helper.Divide(a.X - b.X, tth); // A/B slope var ads = D2D_Helper.Divide(a.X - d.X, tth); // A/D slope AddTriangle(b.X, d.X, abs, ads, b.Y, 1, tth); // Bottom triangle var cbs = D2D_Helper.Divide(c.X - b.X, bth); // C/B slope var cds = D2D_Helper.Divide(c.X - d.X, bth); // C/D slope AddTriangle(b.X, d.X, cbs, cds, b.Y, -1, bth); } }
private void UpdateColliders() { if (ColliderType != D2D_SpriteColliderType.None) { var cellTransform = default(Transform); switch (ColliderType) { case D2D_SpriteColliderType.Edge: { DestroyAutoPolygonCollider(); DestroyPolygonColliders(); if (edgeColliders == null) { edgeColliders = D2D_Helper.CreateGameObject("Edge Colliders", transform).AddComponent<D2D_EdgeColliders>(); edgeColliders.RebuildAllColliders(AlphaTex); } cellTransform = edgeColliders.transform; } break; case D2D_SpriteColliderType.Polygon: { DestroyAutoPolygonCollider(); DestroyEdgeColliders(); if (polygonColliders == null) { polygonColliders = D2D_Helper.CreateGameObject("Polygon Colliders", transform).AddComponent<D2D_PolygonColliders>(); polygonColliders.RebuildAllColliders(AlphaTex); } cellTransform = polygonColliders.transform; } break; case D2D_SpriteColliderType.AutoPolygon: { DestroyPolygonColliders(); DestroyEdgeColliders(); if (autoPolygonCollider == null) { autoPolygonCollider = D2D_Helper.CreateGameObject("Auto Polygon Collider", transform).AddComponent<D2D_AutoPolygonCollider>(); autoPolygonCollider.RebuildCollider(AlphaTex); } cellTransform = autoPolygonCollider.transform; } break; } if (cellTransform != null) { var cellScale = Vector3.one; var cellOffset = Vector3.zero; if (sprite != null && MainTex != null && AlphaTex != null) { cellScale = D2D_Helper.Reciprocal(PixelsToUnits) * D2D_Helper.Divide(MainTex.width, MainTex.height, AlphaTex.width, AlphaTex.height); cellOffset = sprite.bounds.min; cellOffset.z = 0.0f; } if (cellTransform.localPosition != cellOffset) { cellTransform.localPosition = cellOffset; } if (cellTransform.localScale != cellScale) { cellTransform.localScale = cellScale; } } } else { DestroyAutoPolygonCollider(); DestroyPolygonColliders(); DestroyEdgeColliders(); } }