public override void Emit(BulletEmitParam emitParam, Transform emitter)
        {
            var bulletComponent = Instantiate(bullet).AddComponent <GameObjectBullet>();
            var absEmitParam    = emitParam.RelativeTo(emitter);

            bulletComponent.Init(absEmitParam.position, absEmitParam.velocity, absEmitParam.color, absEmitParam.size);
            if (enableLifetime)
            {
                bulletComponent.EnableLifeTime(bulletLifeTime);
            }

            PlayEmissionEffect(emitParam, emitter);
        }
Exemplo n.º 2
0
        public void OnEmit(BulletEmitParam relative, Transform emitter)
        {
            if (!enabled)
            {
                return;
            }
            Quaternion lookRotation;
            Vector3    absolutePosition;

            switch (position)
            {
            case EffectPosition.OnEmitter:
                absolutePosition = emitter.position;
                break;

            case EffectPosition.OnParticle:
                absolutePosition = emitter.position + relative.position;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            switch (rotation)
            {
            case EffectRotation.TowardsParticlePosition:
                lookRotation = Quaternion.LookRotation(relative.position - emitter.position);
                break;

            case EffectRotation.TowardsParticleVelocity:
                lookRotation = Quaternion.LookRotation(relative.velocity);
                break;

            case EffectRotation.None:
                lookRotation = Quaternion.identity;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            var ps  = Object.Instantiate(effect, absolutePosition, lookRotation, emitter);
            var psm = ps.main;

            psm.stopAction = ParticleSystemStopAction.Destroy;
            ps.Play();
        }
Exemplo n.º 3
0
        public override void Emit(BulletEmitParam relative, Transform emitter)
        {
            ParticleSystem.EmitParams ToEmitParams(in BulletEmitParam bulletEmitParam)
            {
                var result = new ParticleSystem.EmitParams();

                result.position = bulletEmitParam.position;
                result.velocity = bulletEmitParam.velocity;
                if (psr.renderMode == ParticleSystemRenderMode.Mesh)
                {
                    var startRotation3D = psm.startRotation3D
                                                ? new Vector3(
                        psm.startRotationX.Evaluate(ps.time) * psm.startRotationXMultiplier,
                        psm.startRotationY.Evaluate(ps.time) * psm.startRotationYMultiplier,
                        psm.startRotationZ.Evaluate(ps.time) * psm.startRotationZMultiplier)
                                                : new Vector3(0, 0, psm.startRotation.Evaluate(ps.time) * psm.startRotationMultiplier);
                    result.rotation3D =
                        (Quaternion.LookRotation(result.velocity == Vector3.zero ? Vector3.forward : result.velocity) *
                         Quaternion.Euler(startRotation3D)).eulerAngles;
                }
                if (!bulletEmitParam.DefaultColor)
                {
                    result.startColor = bulletEmitParam.color;
                }
                if (!bulletEmitParam.DefaultSize)
                {
                    result.startSize3D = bulletEmitParam.size;
                }

                return(result);
            }

            ps.Emit(
                psm.simulationSpace == ParticleSystemSimulationSpace.World
                                        ? ToEmitParams(relative.RelativeTo(emitter))
                                        : ToEmitParams(relative), 1);

            PlayEmissionEffect(relative, emitter);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Plays the emission effect. Call this when emitting a bullet.
 /// </summary>
 protected void PlayEmissionEffect(BulletEmitParam emitParam, Transform emitter) =>
 emissionEffect.OnEmit(emitParam, emitter);
Exemplo n.º 5
0
 public abstract void Emit(BulletEmitParam emitParam, Transform emitter);
Exemplo n.º 6
0
 /// <summary>
 /// Emits a single bullet.
 /// </summary>
 /// <param name="emitParam">Parameters of the bullet</param>
 /// <param name="bullet">The bullet type to emit</param>
 /// <param name="emitter">Bullet will be emitted relative to it</param>
 public void Emit(BulletEmitParam emitParam, IBulletSystem bullet, Transform emitter) =>
 GetBulletController(bullet).Emit(emitParam, emitter);
Exemplo n.º 7
0
 /// <summary>
 /// Emits a single bullet from this emitter.
 /// </summary>
 /// <param name="emitParam">Parameters of the bullet</param>
 /// <param name="bullet">The bullet type to emit</param>
 public virtual void Emit(BulletEmitParam emitParam, IBulletSystem bullet) =>
 Emit(emitParam, bullet, transform);
Exemplo n.º 8
0
 /// <summary>
 /// Emit a bullet.
 /// </summary>
 /// <param name="emitParam">Parameter of the bullet.</param>
 public Emit(BulletEmitParam emitParam) => emitParams = new[] { emitParam };