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++; } } }
public void Drop(float force) { if (CurrentAimable != null && CurrentAimable is Pickable pickable) { pickable.Drop(transform.position, transform.forward, force); } CurrentAimable = null; }
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); }
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; } } } } } }
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); }