public override IEnumerator DoPattern(Character owner, Transform origin, MoveInteraction interaction = null) { yield return(new WaitForSeconds(interaction.timeStep.x)); Vector3 translation = (end - start) / (burstCount + 1); int currentBurst = 0; float interval = interaction.timeStep.y / (burstCount + 1); float elapsedTime = 0; float nextBurstTime = 0; GameObject particleHolder = new GameObject(); particleHolder.transform.position = origin.position; particleHolder.transform.rotation = origin.rotation; GameObject instance = Instantiate(bursterPrefab, particleHolder.transform); ParticleSystem particle = instance.GetComponent <ParticleSystem>(); while (currentBurst < burstCount) { nextBurstTime = currentBurst * interval; while (elapsedTime < nextBurstTime) { elapsedTime += Time.deltaTime; yield return(null); } particle.Stop(true); instance.transform.localPosition = start + translation * currentBurst; particle.Play(true); currentBurst++; } Destroy(particleHolder, particle.main.duration / particle.main.simulationSpeed); }
public override IEnumerator DoPattern(Character owner, Transform origin, MoveInteraction interaction = null) { yield return(new WaitForSeconds(interaction.timeStep.x)); for (int i = 0; i < missileCount; ++i) { GameObject instance = GameObject.Instantiate(missileData.missilePrefab, origin.position, origin.rotation); instance.GetComponent <MissileInstance>().owner = owner; } yield return(null); }
public MoveInteraction[] GetInteractions() { if (interactions == null) { interactions = new MoveInteraction[interactionStrings.Length]; for (int i = 0; i < interactionStrings.Length; ++i) { interactions[i] = MoveInteraction.StringToInteraction(interactionStrings[i].Replace(" ", "")); } } return(interactions); }
public override IEnumerator DoPattern(Character owner, Transform origin, MoveInteraction interaction = null) { float elapsedTime = 0; float progression = 0; float previousProgression = 0; Vector3 startPoint = origin.transform.TransformPoint(start); Vector3 endPoint = origin.transform.TransformPoint(end); Vector3 direction = endPoint - startPoint; yield return(new WaitForSeconds(interaction.timeStep.x)); HashSet <Attackable> targets = new HashSet <Attackable>(); while (elapsedTime < interaction.timeStep.y) { previousProgression = progression; elapsedTime += Time.deltaTime; progression = elapsedTime / interaction.timeStep.y; switch (collisionType) { case CollisionType.Capsule: Damage(TargetsInCapsule(startPoint + direction * previousProgression, startPoint + direction * progression, damageAreaSize), owner, targets); break; case CollisionType.Sphere: Damage(TargetsInSphere(startPoint + direction * progression, damageAreaSize), owner, targets); break; case CollisionType.Cube: Damage(TargetsInCube(startPoint + direction * progression, damageAreaSize), owner, targets); break; default: break; } yield return(null); } }
public abstract IEnumerator DoPattern(Character owner, Transform origin, MoveInteraction interaction = null);