예제 #1
0
    public bool DoesAbilityEmitOnSelf(string abilityId)
    {
        AbilityParticleSystem abilityPs = GetParticleSystem(abilityId);

        if (abilityPs == null)
        {
            return(false);
        }
        return(abilityPs.extraEmitOnSelf);
    }
예제 #2
0
    public float EmitAbilityParticle(AbilityParticleSystem abilityPs, ParticleSystem.EmitParams emitParams, float scaling, Transform parent)
    {
        if (abilityPs == null)
        {
            return(0);
        }

        emitParams.applyShapeToPosition = true;

        abilityPs.Emit(emitParams, abilityPs.emitCount, scaling);
        return(abilityPs.waitUntilNextEmit);
    }
예제 #3
0
    public float EmitAbilityParticle_Rotated(string abilityId, ParticleSystem.EmitParams emitParams, float scaling, float rotationAngle, Transform parent)
    {
        AbilityParticleSystem abilityPs = GetParticleSystem(abilityId);

        if (abilityPs == null)
        {
            return(0);
        }

        emitParams.applyShapeToPosition = true;

        abilityPs.Emit(emitParams, abilityPs.emitCount, scaling, rotationAngle, parent);
        return(abilityPs.waitUntilNextEmit);
    }
예제 #4
0
 private void LateUpdate()
 {
     for (int i = inUseParticlesSystems.Count - 1; i > 0; i--)
     {
         AbilityParticleSystem abs = inUseParticlesSystems[i];
         if (abs == null)
         {
             inUseParticlesSystems.Remove(abs);
         }
         else if (!abs.ps.IsAlive())
         {
             perActorParticleSystems[abs.abilityId].Push(abs);
             inUseParticlesSystems.Remove(abs);
         }
     }
 }
예제 #5
0
    public AbilityParticleSystem GetParticleSystem(string abilityId)
    {
        if (!particleSystems.ContainsKey(abilityId))
        {
            AbilityParticleSystem abs = ResourceManager.Instance.GetAbilityParticleSystem(abilityId);
            if (abs == null)
            {
                AbilityBase abilityBase = ResourceManager.Instance.GetAbilityBase(abilityId);
                abs = ResourceManager.Instance.GetAbilityParticleSystem(abilityBase.effectSprite);
            }
            if (abs != null)
            {
                abs.abilityId = abilityId;
                particleSystems.Add(abilityId, abs);
                if (abs.useDifferentForSameFrame)
                {
                    perActorParticleSystems.Add(abilityId, new Stack <AbilityParticleSystem>());
                    perActorParticleSystems[abilityId].Push(abs);
                }
            }
            else
            {
                particleSystems.Add(abilityId, null);
            }
        }

        particleSystems.TryGetValue(abilityId, out AbilityParticleSystem abilityPs);
        if (abilityPs != null)
        {
            if (abilityPs.useDifferentForSameFrame)
            {
                abilityPs = perActorParticleSystems[abilityId].Pop();
                inUseParticlesSystems.Add(abilityPs);
                if (perActorParticleSystems[abilityId].Count == 0)
                {
                    perActorParticleSystems[abilityId].Push(Instantiate(abilityPs));
                }
            }
            return(abilityPs);
        }
        else
        {
            return(null);
        }
    }