Exemplo n.º 1
0
        protected override void OnFire(EWeaponState prevState)
        {
            base.OnFire(prevState);

            Transform shootTransform = MuzzleTransform;

            // Fire a ray cast from the player camera
            if (weaponOwner.CompareTag("Player"))
            {
                LNBPlayerCharacter playerOwner = weaponOwner.GetComponent <LNBPlayerCharacter>();
                Transform          eyeTran     = playerOwner.GetEyeTransform();

                // Fire ray
                int        layerMask = 1 << LayerMask.GetMask("AimRay");
                RaycastHit rayHit;
                Vector3    aimDir;
                Ray        aimRay = new Ray();
                aimRay.direction = eyeTran.forward;
                aimRay.origin    = eyeTran.position;

                // If hit something
                if (Physics.Raycast(aimRay, out rayHit, MaxDistance, layerMask))
                {
                    aimDir = rayHit.point - shootTransform.position;
                }
                else
                {
                    aimDir          = aimRay.direction * MaxDistance;
                    rayHit.distance = MaxDistance;
                }

                shootTransform.rotation = Quaternion.LookRotation(aimDir);

                                #if DD_DEBUG
                // Aim trace
                DebugExtension.DebugArrow(aimRay.origin, aimRay.direction * rayHit.distance, Color.red, 1.0f);
                //Aim Direction
                DebugExtension.DebugArrow(shootTransform.position, aimDir, Color.green, 1.0f);
                                #endif
            }

            // Spawn our projectile
            GameObject newProjObj = projectilePool.GetNextFree();
            if (newProjObj)
            {
                newProjObj.SetActive(true);
                Projectile newProjectile = newProjObj.GetComponent <Projectile>();

                if (!newProjectile)
                {
                    Debug.Log("Instantiated something that's not a projectile! Add it in your prefab!");
                    return;
                }

                newProjectile.Launch(this, weaponOwner, MuzzleTransform);
            }
        }