Ejemplo n.º 1
0
    void Update()
    {
        if (LaserTarget != null)
        {
            var targetRegion = UnityExtensions.CreateRectFromCamera(_camera, LaserTargetScreenPercentage);

            if (targetRegion.Contains(LaserTarget.transform.position))
            {
                var direction = LaserTarget.transform.position - transform.position;
                if (direction != Vector3.zero)
                {
                    var offsetAngle = Mathf.Sin(Time.timeSinceLevelLoad) * LaserTargetMaxOffset;
                    var targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;

                    var fixedTargetAngle = UnityExtensions.ClampAngle(targetAngle + TARGET_ANGLE_FIX);
                    var currentAngle     = UnityExtensions.ClampAngle(transform.rotation.eulerAngles.z);
                    var angleDifference  = UnityExtensions.ClampAngle(fixedTargetAngle - currentAngle + offsetAngle);

                    var finalAngle = currentAngle + angleDifference * Time.deltaTime * 5f * LaserTargetAimRate;

                    transform.rotation = Quaternion.Euler(0f, 0f, finalAngle);
                }
            }
        }
    }
Ejemplo n.º 2
0
    IEnumerator Move()
    {
        while (this._isAlive)
        {
            yield return(Wait(0.5f));

            if (!this._isAlive)
            {
                yield break;
            }

            if (Body.velocity.sqrMagnitude >= MinSqrMagnitudeToMove)
            {
                continue;
            }

            var preferedRegion = UnityExtensions.CreateRectFromCamera(_camera, PreferedScreenPercentage);

            Vector2 moveDirection;

            if (preferedRegion.Contains(transform.position))
            {
                moveDirection = Random.insideUnitCircle;
            }
            else
            {
                var targetPosition = RandomExtensions.PointInsideRect(preferedRegion);
                moveDirection = targetPosition - new Vector2(transform.position.x, transform.position.y);
            }

            var impulse = Random.Range(MinImpulseForce, MaxImpulseForce);
            this.Body.AddForce(moveDirection.normalized * impulse, ForceMode2D.Impulse);
        }
    }