Example #1
0
    private void shoot()
    {
        _should_shoot = false;

        if (!_reload_timestamp.HasPassed())
        {
            return;
        }

        if (!Munitions.TryShoot())
        {
            Reload();
            return;
        }

        if (gameObject.GetComponentInParent <Player>() != null)
        {
            AkSoundEngine.PostEvent("Player_Shoot", gameObject);
        }
        else if (gameObject.GetComponent <EnemyBehaviour>() != null)
        {
            AkSoundEngine.PostEvent("Robot_Shoot", gameObject);
        }

        CreateShotEffect();

        if (!Physics.Raycast(_aim_camera_object.position, _aim_camera_object.forward, out var hit, _range))
        {
            create_projectile(_aim_camera_object.position + _aim_camera_object.forward * _range, _aim_camera_object.forward);

            return;
        }

        create_projectile(hit.point, (hit.point - _aim_camera_object.position).normalized);

        var hit_obj = hit.rigidbody?.GetComponent <Targetable>();

        var hit_dto = new HitInfoDto
        {
            Damage      = _damage,
            HitPosition = hit.point,
            Origin      = transform.position
        };

        hit_obj?.Hit(hit_dto);

        if (hit_obj == null)
        {
            Targetable.CreateHitEffect(hit_dto);
        }
    }
Example #2
0
    public static void CreateHitEffect(HitInfoDto hitInfoDto, ParticleSystem hitEffect = null)
    {
        if (hitEffect == null)
        {
            hitEffect = ShotManager.Instance.BasicEffect;
            AkSoundEngine.PostEvent("Bullet_Impact_Mud", FindObjectOfType <Player>().gameObject);
        }
        else
        {
            AkSoundEngine.PostEvent("Bullet_Impact_Metal", FindObjectOfType <Player>().gameObject);
        }

        var obj = Instantiate(hitEffect);

        obj.transform.position = hitInfoDto.HitPosition;
        obj.transform.LookAt(hitInfoDto.Origin);
        obj.Play();
        Destroy(obj.gameObject, 0.2f);
    }
Example #3
0
    public void Hit(HitInfoDto hitInfoDto)
    {
        CreateHitEffect(hitInfoDto, hitEffect);

        Damageable.TakeDamage(hitInfoDto.Damage);
    }