コード例 #1
0
        private void ShootAmmo()
        {
            var timeSinceLastShot = Time.time - _lastShotTime;

            if (timeSinceLastShot < fireRate)
            {
                return;
            }
            _lastShotTime = Time.time;

            OnShotFired?.Invoke();
            SpendAmmo();
            Ammo ammo = _ammoPoolManager.PullAmmo(_ammoPool, ammoInitialPositionReference.position,
                                                  ammoInitialRotationReference.rotation);
            Vector3 targetVector;

            if (!ignoreWeaponsDirection)
            {
                targetVector = gameObject.transform.forward;
            }
            else
            {
                targetVector = GetVectorDifference(_hitVectorCalculator.GetHitVector(), ammo.AmmoPosition).normalized;
            }
            ammo.FireAmmo(targetVector, ammoActiveTime, ammoVelocityModifier);
        }
コード例 #2
0
 private void ShotFired()
 {
     if (transform.parent.TryGetComponent <Player>(out var player))
     {
         OnShotFired?.Invoke(player.transform.position, soundDistance);
     }
 }
コード例 #3
0
 public void HandleTriggerHeld()
 {
     if (_activeConfig.isAutomatic)
     {
         int bulletsFired = 0;
         int bulletsHit   = 0;
         if (TryShoot(out bulletsFired, out bulletsHit))
         {
             OnShotFired?.Invoke(new ShotInfo(bulletsFired, bulletsHit));
             IncreaseDispersionRate();
             ShowBulletTrails();
         }
     }
 }
コード例 #4
0
    private void AddDebugCalls()
    {
        OnShotFired.AddListener(() => {
            Debug.Log("Shot fired detected in " + transform.parent.parent.name);
        });
        OnEnemyDamage.AddListener(() => {
            Debug.Log("Enemy damaged detected in " + transform.parent.parent.name);
        });

        OnPlayerEnter.AddListener(() => {
            Debug.Log("Player entered " + GetComponentInParent <Room>().name);
        });
        OnPlayerExit.AddListener(() => {
            Debug.Log("Player exited " + GetComponentInParent <Room>().name);
        });
    }
コード例 #5
0
    public void HandleTriggerPull()
    {
        int bulletsFired = 0;
        int bulletsHit   = 0;

        if (TryShoot(out bulletsFired, out bulletsHit))
        {
            OnShotFired?.Invoke(new ShotInfo(bulletsFired, bulletsHit));

            if (_activeConfig.isAutomatic)
            {
                IncreaseDispersionRate();
            }
            else
            {
                StartCoroutine(SimulateRecoilDispersionRoutine(_activeWeaponState, simulateRecoil: true));
            }

            ShowBulletTrails();
        }
    }
コード例 #6
0
    private void Awake()
    {
        AddDebugCalls();

        EnemyBase[] enemies = GetComponentsInChildren <EnemyBase>(true);
        foreach (EnemyBase enemy in enemies)
        {
            // When hyperseed is grabbed - all enemies turn aggressive
            GrabHyperseed.AddListener(() => {
                if (enemy)
                {
                    enemy.TurnAggressiveHyperseed.Invoke();
                }
            });
            // Testing - all enemies turn aggressive
            TurnGroupAggressive.AddListener(() => {
                if (enemy)
                {
                    enemy.TurnAggressive.Invoke();
                }
            });
            // Testing - all enemies turn passive
            TurnGroupPassive.AddListener(() => {
                if (enemy)
                {
                    enemy.ForceIdle();
                }
            });

            // Aggro when enemy is damaged
            OnEnemyDamage.AddListener(() => {
                if (enemy)
                {
                    enemy.TurnAggressive.Invoke();
                }
            });

            // Stop/resume aggro when player exits/enters a room
            OnPlayerExit.AddListener(() => {
                if (enemy)
                {
                    enemy.ForceIdle();
                }
            });
            OnPlayerEnter.AddListener(() => {
                if (enemy)
                {
                    enemy.ResetEnemy();
                }
            });
        }

        // Brawlers all aggro when an attack/ability is used in the room
        enemies = GetComponentsInChildren <Brawler>(true);
        foreach (Brawler enemy in enemies)
        {
            OnShotFired.AddListener(() => {
                if (enemy)
                {
                    enemy.TurnAggressive.Invoke();
                }
            });
        }

        // Remove listeners after events are called to prevent chain-calling
        // Once enemies turn aggressive they stay that way for ever, so no need for re-calling anyways
        GrabHyperseed.AddListener(() => {
            OnEnemyDamage.RemoveAllListeners();
            OnShotFired.RemoveAllListeners();

            OnPlayerEnter.RemoveAllListeners();
            OnPlayerExit.RemoveAllListeners();
        });
        OnEnemyDamage.AddListener(() => {
            OnEnemyDamage.RemoveAllListeners();
        });
        OnShotFired.AddListener(() => {
            OnShotFired.RemoveAllListeners();
        });
    }