Beispiel #1
0
        protected virtual void Update()
        {
            // Get main camera
            var mainCamera = Camera.main;

            // Begin dragging
            if (Input.GetKey(Requires) == true && down == false)
            {
                down = true;
                startMousePosition = Input.mousePosition;
            }

            // Dragging finger released?
            if (Input.GetKey(Requires) == false && down == true)
            {
                down = false;

                // Impact prefab exists?
                if (ImpactPrefab != null)
                {
                    // Main camera exists?
                    if (mainCamera != null)
                    {
                        // Find start and end world points
                        var startPos = mainCamera.ScreenToWorldPoint(startMousePosition);
                        var endPos   = mainCamera.ScreenToWorldPoint(Input.mousePosition);

                        // Extend end pos to raycast hit
                        CalculateEndPos(startPos, ref endPos);

                        // Spawn explosion there
                        Instantiate(ImpactPrefab, endPos, Quaternion.identity);
                    }
                }
            }

            // Update indicator?
            if (down == true && mainCamera != null && IndicatorPrefab != null)
            {
                if (indicatorInstance == null)
                {
                    indicatorInstance = Instantiate(IndicatorPrefab);
                }

                var startPos = mainCamera.ScreenToWorldPoint(startMousePosition);
                var endPos   = mainCamera.ScreenToWorldPoint(Input.mousePosition); CalculateEndPos(startPos, ref endPos);
                var scale    = Vector3.Distance(endPos, startPos);
                var angle    = D2dHelper.Atan2(endPos - startPos) * Mathf.Rad2Deg;

                // Transform the indicator so it lines up with the slice
                indicatorInstance.transform.position   = new Vector3(startPos.x, startPos.y, indicatorInstance.transform.position.z);
                indicatorInstance.transform.rotation   = Quaternion.Euler(0.0f, 0.0f, -angle);
                indicatorInstance.transform.localScale = new Vector3(Thickness, scale, scale);
            }
            // Destroy indicator?
            else if (indicatorInstance != null)
            {
                Destroy(indicatorInstance.gameObject);
            }
        }
Beispiel #2
0
        /// <summary>This will return the transformation matrix used to convert between world space and slice sprite space.</summary>
        public static Matrix4x4 CalculateMatrix(Vector2 startPos, Vector2 endPos, float thickness)
        {
            var mid   = (startPos + endPos) / 2.0f;
            var vec   = endPos - startPos;
            var size  = new Vector2(thickness, vec.magnitude);
            var angle = D2dHelper.Atan2(vec) * -Mathf.Rad2Deg;

            return(D2dStamp.CalculateMatrix(mid, size, angle));
        }
Beispiel #3
0
        /// <summary>This will transform the current slicer between the input positions.</summary>
        public void SetTransform(Vector2 positionA, Vector2 positionB)
        {
            var scale = Vector2.Distance(positionB, positionA);
            var angle = D2dHelper.Atan2(positionB - positionA) * Mathf.Rad2Deg;

            // Transform the indicator so it lines up with the slice
            transform.position   = positionA;
            transform.rotation   = Quaternion.Euler(0.0f, 0.0f, -angle);
            transform.localScale = new Vector3(Thickness, scale, scale);
        }
        protected virtual void Update()
        {
            // Get the main camera?
            if (mainCamera == null)
            {
                mainCamera = Camera.main;
            }

            // Begin dragging
            if (Input.GetKey(Requires) == true && down == false)
            {
                down = true;
                startMousePosition = Input.mousePosition;
            }

            // End dragging
            if (Input.GetKey(Requires) == false && down == true)
            {
                down = false;

                // Slice all Destructibles?
                if (mainCamera != null)
                {
                    var endMousePosition = Input.mousePosition;
                    var startPos         = mainCamera.ScreenToWorldPoint(startMousePosition);
                    var endPos           = mainCamera.ScreenToWorldPoint(endMousePosition);

                    D2dDestructible.SliceAll(startPos, endPos, Thickness, StampTex, Hardness);
                }
            }

            // Update indicator?
            if (down == true && mainCamera != null && IndicatorPrefab != null)
            {
                if (indicatorInstance == null)
                {
                    indicatorInstance = Instantiate(IndicatorPrefab);
                }

                var startPos   = mainCamera.ScreenToWorldPoint(startMousePosition);
                var currentPos = mainCamera.ScreenToWorldPoint(Input.mousePosition);
                var scale      = Vector3.Distance(currentPos, startPos);
                var angle      = D2dHelper.Atan2(currentPos - startPos) * Mathf.Rad2Deg;

                // Transform the indicator so it lines up with the slice
                indicatorInstance.transform.position   = new Vector3(startPos.x, startPos.y, indicatorInstance.transform.position.z);
                indicatorInstance.transform.rotation   = Quaternion.Euler(0.0f, 0.0f, -angle);
                indicatorInstance.transform.localScale = new Vector3(Thickness, scale, scale);
            }
            // Destroy indicator?
            else if (indicatorInstance != null)
            {
                Destroy(indicatorInstance.gameObject);
            }
        }
Beispiel #5
0
        protected virtual void Update()
        {
            // Get the main camera
            var mainCamera = Camera.main;

            // Begin dragging
            if (Input.GetKey(Requires) == true && down == false)
            {
                down = true;
                startMousePosition = Input.mousePosition;
            }

            // End dragging
            if (Input.GetKey(Requires) == false && down == true)
            {
                down = false;

                // Main camera exists?
                if (mainCamera != null)
                {
                    var endMousePosition = Input.mousePosition;
                    var startPos         = D2dHelper.ScreenToWorldPosition(startMousePosition, Intercept, mainCamera);
                    var endPos           = D2dHelper.ScreenToWorldPosition(endMousePosition, Intercept, mainCamera);

                    D2dSlice.All(Paint, startPos, endPos, Thickness, Shape, Color, Layers);
                }
            }

            // Update indicator?
            if (down == true && mainCamera != null && IndicatorPrefab != null)
            {
                if (indicatorInstance == null)
                {
                    indicatorInstance = Instantiate(IndicatorPrefab);
                }

                var startPos   = D2dHelper.ScreenToWorldPosition(startMousePosition, Intercept, mainCamera);
                var currentPos = D2dHelper.ScreenToWorldPosition(Input.mousePosition, Intercept, mainCamera);
                var scale      = Vector3.Distance(currentPos, startPos);
                var angle      = D2dHelper.Atan2(currentPos - startPos) * Mathf.Rad2Deg;

                // Transform the indicator so it lines up with the slice
                indicatorInstance.transform.position   = startPos;
                indicatorInstance.transform.rotation   = Quaternion.Euler(0.0f, 0.0f, -angle);
                indicatorInstance.transform.localScale = new Vector3(Thickness, scale, scale);
            }
            // Destroy indicator?
            else if (indicatorInstance != null)
            {
                Destroy(indicatorInstance.gameObject);
            }
        }
        protected virtual void Update()
        {
            // Get the main camera
            var mainCamera = Camera.main;

            // Begin dragging
            if (Input.GetKey(Requires) == true && down == false)
            {
                down = true;
                startMousePosition = Input.mousePosition;
            }

            // End dragging
            if (Input.GetKey(Requires) == false && down == true)
            {
                down = false;

                // Throw prefab?
                if (mainCamera != null && ProjectilePrefab != null)
                {
                    var projectile  = Instantiate(ProjectilePrefab);
                    var startPos    = D2dHelper.ScreenToWorldPosition(startMousePosition, Intercept, mainCamera);
                    var currentPos  = D2dHelper.ScreenToWorldPosition(Input.mousePosition, Intercept, mainCamera);
                    var angle       = D2dHelper.Atan2(currentPos - startPos) * Mathf.Rad2Deg;
                    var rigidbody2D = projectile.GetComponent <Rigidbody2D>();

                    if (rigidbody2D != null)
                    {
                        rigidbody2D.velocity = (currentPos - startPos) * ProjectileSpeed;
                    }

                    angle += Random.Range(-ProjectileSpread, ProjectileSpread);

                    projectile.transform.position = startPos;
                    projectile.transform.rotation = Quaternion.Euler(0.0f, 0.0f, -angle);
                }
            }

            // Update indicator?
            if (down == true && mainCamera != null && IndicatorPrefab != null)
            {
                if (indicatorInstance == null)
                {
                    indicatorInstance = Instantiate(IndicatorPrefab);
                }

                var startPos   = D2dHelper.ScreenToWorldPosition(startMousePosition, Intercept, mainCamera);
                var currentPos = D2dHelper.ScreenToWorldPosition(Input.mousePosition, Intercept, mainCamera);
                var scale      = Vector3.Distance(currentPos, startPos) * Scale;
                var angle      = D2dHelper.Atan2(currentPos - startPos) * Mathf.Rad2Deg;

                // Transform the indicator so it lines up with the slice
                indicatorInstance.transform.position   = startPos;
                indicatorInstance.transform.rotation   = Quaternion.Euler(0.0f, 0.0f, -angle);
                indicatorInstance.transform.localScale = new Vector3(scale, scale, scale);
            }
            // Destroy indicator?
            else if (indicatorInstance != null)
            {
                Destroy(indicatorInstance.gameObject);
            }
        }