void Update()
    {
        Ray  cursorRay        = _MainCamera.ScreenPointToRay(Input.mousePosition);
        bool cursorOnCollider = Physics.Raycast(cursorRay, out RaycastHit hitInfo, _MaxShootDistance);

        if (Input.GetButtonDown("A Button"))
        {
            _AudioSource.PlayOneShot(_ShotSound);

            // Add force for extra fun points
            if (hitInfo.rigidbody != null)
            {
                hitInfo.rigidbody.AddForce(cursorRay.direction * _BulletForce);
            }

            if (cursorOnCollider && hitInfo.transform.CompareTag("Pikmin"))
            {
                PikminAI aiComponent = hitInfo.collider.GetComponent <PikminAI> ();
                if (aiComponent != null && _ShotPikmin.Contains(aiComponent) == false)
                {
                    // Damage the pikmin, which kills it
                    aiComponent.Die(_PikminRagdollTime);

                    // Add it to the list so we can't kill it after it's dead
                    _ShotPikmin.Add(aiComponent);
                    return;
                }
            }

            var health = GetComponent <IHealth> ();
            if (health != null)
            {
                health.SubtractHealth(_ShotDamage);
            }
        }

        transform.rotation = Quaternion.LookRotation(cursorRay.direction, _MainCamera.transform.up);
    }
 public void OnAttackStart(PikminAI pikmin)
 {
     _Attacking.Add(pikmin);
 }
 public void OnAttackEnd(PikminAI pikmin)
 {
     _Attacking.Remove(pikmin);
 }
 public static void RemoveFromSquad(PikminAI pikmin, PikminColour colour, PikminMaturity maturity)
 {
     _InSquad.Remove(pikmin);
     Remove(colour, maturity, PikminStatSpecifier.InSquad);
 }
 public static void AddToSquad(PikminAI pikmin, PikminColour colour, PikminMaturity maturity)
 {
     _InSquad.Add(pikmin);
     Add(colour, maturity, PikminStatSpecifier.InSquad);
 }
Example #6
0
    void Update()
    {
        if (GameManager._Player._Paralyzed)
        {
            return;
        }

        if (Input.GetButtonDown("X Button"))
        {
            PikminStatsManager.ClearSquad();
        }

        bool attemptedGrab = false;

        if (Input.GetButtonDown("A Button"))
        {
            attemptedGrab = true;
            if (PikminStatsManager.GetTotalInSquad() > 0)
            {
                _HoldingPikmin = GetClosestPikmin();
                if (_HoldingPikmin != null)
                {
                    _HoldingPikminAI = _HoldingPikmin.GetComponent <PikminAI> ();
                    _HoldingPikminAI.StartThrowHold();
                }
            }
        }

        if (_HoldingPikmin != null)
        {
            // TODO: Add throwing
            if (Input.GetButton("A Button"))
            {
                _HoldingPikmin.transform.position = transform.position + transform.forward;
            }
            else
            {
                // Throw the Pikmin!
                _HoldingPikminAI.EndThrowHold(_ReticleTransform.position);

                _HoldingPikmin   = null;
                _HoldingPikminAI = null;
            }
        }
        else if (attemptedGrab && _PunchTimer <= 0)
        {
            // We couldn't grab a Pikmin, we can punch now

            Collider[] pCollided = Physics.OverlapBox(transform.position + transform.forward - transform.right / 2, _PunchBoxSize / 2, transform.rotation, _PunchAffectedLayers);
            foreach (var pHit in pCollided)
            {
                var hComponent = pHit.GetComponent <IHealth> ();

                // Hit the object!
                hComponent.SubtractHealth(_PunchDamage);
                // TODO: figure out a particular system to allow for custom hit particles / sounds
            }

            _PunchTimer = _PunchCooldown;
        }

        // Decrease the punch timer if we've punched, effectively acts as a cooldown so you can't spam
        if (_PunchTimer > 0)
        {
            _PunchTimer -= Time.deltaTime;
        }
    }