Exemple #1
0
        public static Evt_WeaponFired Spawn(FiringParameters parameters)
        {
            Evt_WeaponFired evt = pool.Spawn();

            evt.parameters = parameters;
            return(evt);
        }
    public override void Fire(FiringParameters parameters)
    {
        if (currentShotsInMagazine_.value <= 0 || !CanFire)
        {
            return;
        }
        Projectile p = ProjectileManager.RequestProjectile(projectileType);

        if (p)
        {
            p.transform.position = launchPosition.position;
            p.transform.rotation = transform.rotation;
            p.Arm(parameters.target, collidersToIgnore);

            float power = Mathf.Lerp(minPower, maxPower, parameters.power);

            if (relativeBody)
            {
                p.Body.velocity = (p.transform.forward * power) + relativeBody.velocity;
            }
            else
            {
                p.Body.velocity = p.transform.forward * power;
            }
        }

        currentShotsInMagazine_.value--;

        StartCooldown();

        if (currentShotsInMagazine_.value <= 0)
        {
            StartReloading();
        }
    }
Exemple #3
0
        public override void Spawn(List <FiringParameters> shots)
        {
            EnsureCapacity(shots.Count);
            for (int i = 0; i < shots.Count; i++)
            {
                FiringParameters parameters = shots[i];
                Quaternion       rotation   = Quaternion.LookRotation(parameters.direction);

                GameObject flash          = muzzleFlashPool.Spawn(); // todo -- build a pool that can SpawnRandom()
                Transform  flashTransform = flash.transform;
                flashTransform.position    = parameters.position;
                flashTransform.rotation    = rotation * Quaternion.Euler(0, 0, Random.Range(-360f, 360f));
                flashTransform.localScale *= Random.Range(1, 2);
                flashTransform.parent      = parent;

                Transform spawned = projectilePool.Spawn().transform;
                spawned.position = parameters.position;
                spawned.rotation = rotation;
                spawned.parent   = parent;

                PositionDirection orientation;
                lifeTimes[activeCount]    = 0;
                transforms[activeCount]   = spawned;
                orientation.direction     = spawned.forward;
                orientation.position      = spawned.position;
                orientations[activeCount] = orientation;
                ownerIds[activeCount]     = parameters.ownerId;
                flashes.Add(new MuzzleFlash(flash));
                activeCount++;
            }
        }