public bool DoesAbilityEmitOnSelf(string abilityId) { AbilityParticleSystem abilityPs = GetParticleSystem(abilityId); if (abilityPs == null) { return(false); } return(abilityPs.extraEmitOnSelf); }
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); }
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); }
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); } } }
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); } }