Exemplo n.º 1
0
    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.");
					}
				}
			}
		}
	}
Exemplo n.º 3
0
    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));
    }
Exemplo n.º 4
0
    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);
        }
    }
Exemplo n.º 5
0
    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;
        }
    }
Exemplo n.º 6
0
    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));
    }
Exemplo n.º 7
0
    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);
    }
Exemplo n.º 8
0
    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);
    }
Exemplo n.º 9
0
    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();
		}
	}