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(); } }
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++; } }