Exemplo n.º 1
0
    void Update()
    {
        Vector3 pos = Input.mousePosition;

        pos.z = 0f;
        pos   = Camera.main.ScreenToWorldPoint(pos);

        for (int c = 0; c < cannons.Count; c++)
        {
            if (!cannons[c].gameObject.activeSelf)
            {
                images[c].enabled = false;
                continue;
            }
            images[c].enabled = true;
            Aimable x           = cannons[c];
            bool    aimingThere = x.TryAim(pos - x.transform.position);
            cannonIcons[c].EnableCanon((aimingThere ? (x.canFire ? 1 : 2) : 0));

            if (Input.GetMouseButton(0) && aimingThere && x.canFire)
            {
                GameObject go = Instantiate(cannonShellPrefab, x.transform.position, x.transform.rotation);
                go.GetComponent <Projectile>().range = range;
                x.currentCooldown = cannonCooldown - Random.Range(0, cannonCooldown / 10);
                Camera.main.transform.parent.GetComponent <CameraShake>().Shake(1f);
                GameController.scoreTracker.stats.shotsFired++;
            }
        }
    }
Exemplo n.º 2
0
    public void Drop(float force)
    {
        if (CurrentAimable != null && CurrentAimable is Pickable pickable)
        {
            pickable.Drop(transform.position, transform.forward, force);
        }

        CurrentAimable = null;
    }
Exemplo n.º 3
0
    private Aimable GetClosestAimable()
    {
        var     colliders      = Physics.OverlapSphere(transform.position, range);
        var     aimables       = ExtractAimablesOnly(colliders);
        var     minDistance    = range;
        Aimable closestAimable = null;

        foreach (Aimable aimable in aimables)
        {
            var distance  = Vector3.Distance(tongueScaler.position, aimable.transform.position);
            var direction = aimable.transform.position - tongueScaler.position;
            if (distance < minDistance && Vector3.Dot(direction, transform.forward) > 0)
            {
                closestAimable = aimable;
                minDistance    = distance;
            }
        }
        return(closestAimable);
    }
Exemplo n.º 4
0
    private void FindClosestHookable()
    {
        autoAimPosition.Variable.Value = transform.position;
        hasTarget = false;

        if ((Vector2)transform.localPosition == Vector2.zero)
        {
            return;
        }

        Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, aimHelpRadius, LayerList.Hook.LayerMask);
        if (colliders.Length >= 1)
        {
            for (int i = 0; i < colliders.Length; i++)
            {
                Aimable aimable = colliders[i].GetComponent <Aimable>();
                if (aimable != null)
                {
                    if (!hasTarget)
                    {
                        closestColliderDistance2D = circleCollider2D.Distance(colliders[i]);
                        if (closestColliderDistance2D.isValid)
                        {
                            autoAimPosition.Variable.Value = closestColliderDistance2D.pointB;
                            hasTarget = true;
                        }
                    }
                    else
                    {
                        ColliderDistance2D newColliderDistance2D = circleCollider2D.Distance(colliders[i]);
                        if (newColliderDistance2D.isValid && newColliderDistance2D.distance < closestColliderDistance2D.distance)
                        {
                            closestColliderDistance2D      = newColliderDistance2D;
                            autoAimPosition.Variable.Value = closestColliderDistance2D.pointB;
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 5
0
    public void DoTongue(float dropForce = 0)
    {
        if (isProtracting || isRetracting)
        {
            return;
        }

        if (CurrentAimable != null)
        {
            Drop(dropForce);
            return;
        }

        var closestAimable = GetClosestAimable();

        if (closestAimable == null)
        {
            ProtractTongue(transform.position + transform.forward * range);
            return;
        }

        CurrentAimable = closestAimable;
        ProtractTongue(CurrentAimable.transform.position);
    }