IEnumerator LaunchFader(Sprite sprite, AoeEffectData buffData) { GameObject go = new GameObject("Fader :D"); var renderer = go.AddComponent <SpriteRenderer>(); renderer.sortingLayerName = "RuneEffects"; renderer.sprite = sprite; go.transform.position = this.transform.position; _aoeStartPoint = go.transform.position; // debgu int iterationForEffect = buffData.Frames; float growAmountPerFrame = (buffData.EndScale - buffData.StartScale) / buffData.Frames; go.transform.localScale = new Vector3(buffData.StartScale, buffData.StartScale); float t = 0; float tIncrement = 1f / iterationForEffect; go.transform.Translate(buffData.StartOffset); for (int i = 0; i < iterationForEffect; i++) { go.transform.localScale = new Vector3(go.transform.localScale.x + growAmountPerFrame, go.transform.localScale.y + growAmountPerFrame); go.transform.Rotate(new Vector3(0, 0, buffData.TotalRotation / iterationForEffect)); if (buffData.FollowsPlayer) { print(transform.position); go.transform.position = transform.position; } renderer.color = Color.Lerp(Color.white, buffData.EndColor, t); t += tIncrement; yield return(null); } Destroy(go); _aoeEffectRunning = false; //debug }
public void FireAoeEffect(Sprite sprite, AoeEffectData data, LayerMask mask) { StartCoroutine(LaunchEffect(sprite, data, mask)); }
public void LaunchAoeFader(Sprite sprite, AoeEffectData data) { StartCoroutine(LaunchFader(sprite, data)); }
// private readonly int IterationForEffect = 60; IEnumerator LaunchEffect(Sprite sprite, AoeEffectData buffData, LayerMask mask) { _aoeEffectRunning = true; //debug GameObject go = new GameObject("Jää runiiddi :D / aoe effect"); var renderer = go.AddComponent <SpriteRenderer>(); renderer.sortingLayerName = "RuneEffects"; renderer.sprite = sprite; go.transform.position = this.transform.position; _aoeStartPoint = go.transform.position; // debgu int iterationForEffect = buffData.Frames; float growAmountPerFrame = (buffData.EndScale - buffData.StartScale) / buffData.Frames; go.transform.localScale = new Vector3(buffData.StartScale, buffData.StartScale); float t = 0; float tIncrement = 1f / iterationForEffect; go.transform.Translate(buffData.StartOffset); for (int i = 0; i < iterationForEffect; i++) { go.transform.localScale = new Vector3(go.transform.localScale.x + growAmountPerFrame, go.transform.localScale.y + growAmountPerFrame); // go.transform.Translate(buffData.MovementDir * buffData.Speed * Time.deltaTime); if (buffData.FollowsPlayer) { print(transform.position); go.transform.position = transform.position; } go.transform.Rotate(new Vector3(0, 0, buffData.TotalRotation / iterationForEffect)); if (iterationForEffect % 3 == 0 || iterationForEffect <= 1) // mikä on hyvä applytys aika { float radius = go.transform.localScale.x / 2f; _aoeEffectRadius = radius; // debug _aoeStartPoint = go.transform.position; var colliders = Physics2D.CircleCastAll(go.transform.position, radius, new Vector2(0, 0), 0, mask); if (colliders != null) { foreach (var collider in colliders) { buffData.BuffToApply.Apply(collider.transform.gameObject); } } } renderer.color = Color.Lerp(Color.white, buffData.EndColor, t); t += tIncrement; yield return(null); } Destroy(go); _aoeEffectRunning = false; //debug if (buffData.AfterEffect != null) { _afterEffects.Add(buffData.AfterEffect); } }