private IEnumerator SpawnSummonsCoroutine(Transform target, SpriteAnimationBehaviour animated, SpriteFrame frame) { int numPrefabs = summonPrefabs.Length; int c = timeouts != null ? timeouts.Length : 0; for (int i = 0; i < count; i++) { float timeout = 0f; if (c != 0) { timeout = timeouts[i % c]; } if (timeout > 0f) { yield return(new WaitForSeconds(timeout)); } var pre = summonPrefabs[Engine.RandomInt(0, numPrefabs)]; Vector3 p = target.position + offset + new Vector3(Engine.RandomFloat(-1f, 1f), Engine.RandomFloat(-1f, 1f), 0f) * spread; var go = Instantiate(pre, p, Quaternion.identity); go.GetComponent <BaseActor>().position = p; go.transform.position = p; Debug.Log("Spawn @" + p); } }
public override void OnDamageTarget(SpriteAnimationBehaviour animated, SpriteFrame frame, IDamagable damaged) { base.OnDamageTarget(animated, frame, damaged); if (damaged is BaseActor) { animated.StartCoroutine(KnockbackCoroutine(animated, damaged as BaseActor)); } }
private IEnumerator SpawnProjectilesCoroutine(SpriteAnimationBehaviour animated, SpriteFrame frame, bool isHoming) { BaseActor actor = animated.GetComponent <BaseActor>(); int c = timeouts != null ? timeouts.Length : 0; for (int i = 0; i < count; i++) { float timeout = 0f; if (i == 0) { if (soundOnFirstProjectile != null) { var src = animated.GetComponent <AudioSource>(); if (src != null) { src.pitch = Engine.RandomFloat(0.9f, 1.1f); src.PlayOneShot(soundOnFirstProjectile); src.pitch = 1.0f; } } } if (c != 0) { timeout = timeouts[i % c]; } bool isActor = prefab.GetComponent <BaseActor>(); if (timeout > 0f) { yield return(new WaitForSeconds(timeout)); } Vector3 pos = animated.transform.position + (Vector3)actor.TransformDirection(offset); if (isActor) { var go = Instantiate(prefab, pos, Quaternion.identity); var ac = go.GetComponent <BaseActor>(); ac.Move(actor.movementDirection); ac.transform.right = Vector3.right; } else if (isHoming) { HomingProjectileBehaviour.Fire(prefab, animated.gameObject, pos, actor.movementDirection, Mathf.FloorToInt(frame.damage.value * actor.GetDamageDealt()), animated.GetComponent <AI.DefaultEnemyAI>().Target.transform); } else { ProjectileBehaviour.Fire(prefab, animated.gameObject, pos, actor.movementDirection, Mathf.FloorToInt(frame.damage.value * actor.GetDamageDealt())); } } }
protected virtual void Initialize() { animation = GetComponent <SpriteAnimationBehaviour>(); rb = GetComponent <Rigidbody2D>(); collider = GetComponent <Collider2D>(); audioSource = GetComponent <AudioSource>(); shadowRenderer = GetComponent <SpriteRenderer>(); position = transform.position; physicsAgent = new Physics.QuadTree.Agent(transform, GetComponent <SpriteRenderer>().sprite.bounds, Engine.QuadTree); physicsAgent.ab = gameObject.AddComponent <Physics.QuadTreeAgentBehaviour>(); }
private IEnumerator KnockbackCoroutine(SpriteAnimationBehaviour user, BaseActor target) { float t = 0f; while (t < time) { var diff = (target.transform.position - user.transform.position); diff.z = 0f; target.transform.position += diff.normalized * knockback.Evaluate(t / time) * Time.deltaTime * distanceMultiplier; yield return(new WaitForEndOfFrame()); t += Time.deltaTime; } yield return(null); }
public override void OnFrameEnter(SpriteAnimationBehaviour animated, SpriteFrame frame) { base.OnFrameEnter(animated, frame); var ai = animated.GetComponent <AI.DefaultEnemyAI>(); if (ai == null) { return; } if (ai.Target == null) { return; } animated.StartCoroutine(SpawnSummonsCoroutine(ai.Target.transform, animated, frame)); }
public override void OnFrameExit(SpriteAnimationBehaviour animated, SpriteFrame frame) { base.OnFrameExit(animated, frame); Destroy(animated.gameObject); }
public override void OnFrameEnter(SpriteAnimationBehaviour animated, SpriteFrame frame) { animated.StartCoroutine(SpawnProjectilesCoroutine(animated, frame, prefab.GetComponent <HomingProjectileBehaviour>() != null)); }