IEnumerator AbilTwoAsync() { yield return(new WaitForSeconds(0.7f)); GameObject obj = Instantiate(TrackerPrefab, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.localScale = new Vector3(2.5f, 2.5f, 2.5f); pbh.speed = 8f + Level / 5f; Damage dmg = new Damage(0f, Random.Range(150f, 200f) * Level, true, false, true); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 5f + Level / 2f; TrackingBehave tbh = obj.GetComponent <TrackingBehave>(); tbh.RotSpeed = 2.5f + Level / 5f; tbh.Target = player; inUse = false; animator.SetBool("attack2bool", false); float choice = Random.Range(0f, 1f); if (choice < 0.8) { nextAttack = 0; } else { nextAttack = 1; } }
protected override void Activate() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.Translate(Vector3.forward * 1.3f); obj.transform.localScale = new Vector3(3.3f, 1f, 3.3f); Damage dmg; if (cost < 0.00001) { dmg = new Damage(Random.Range(dmgMin, dmgMax), 0, false, true, false); } else { float hplost = StatBlock.CalcMult(stats.HealthCur, stats.PhantomHpMult) * cost; stats.HealthCur -= hplost; Debug.Log("Cost player " + hplost + " hp."); dmg = new Damage(Random.Range(dmgMin, dmgMax), hplost / 2f, false, true, true); } pbh.dmg = stats.RealDamage(dmg); pbh.dmg.callback = this; }
IEnumerator FireProjectile() { int currRot = -(int)size; //30 int currCast = 0; while (currCast < projCount) { //needs to file projectile along cone shape GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0f, 2f, 0f), new Quaternion()); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.Rotate(new Vector3(Random.Range(0, 10), currRot, 0)); currRot += (int)((2 * size) / projCount); obj.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f); pbh.speed = 15f; Damage dmg = new Damage(0f, 0.45f * Random.Range(dmgMin, dmgMax), true, false, false); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 2f; pbh.friendly = true; ++currCast; } yield return(null); }
IEnumerator AbilOneAsync(GameObject target) { target.GetComponent <StatBlock>().HealthCur = -100; bonusDmg += 20 * Level; playerTracker.pause = true; transform.rotation = new Quaternion(); transform.position = target.transform.position + new Vector3(0f, 0f, -2f); yield return(new WaitForSeconds(0.5f)); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { GameObject obj = Instantiate(RangedAttackPrefab, target.transform.position, Quaternion.Euler(0, Random.Range(0f, 360f), 0)); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.localScale = new Vector3(2.5f, 2.5f, 2.5f); obj.transform.Translate(Vector3.forward * 0.5f); Damage dmg = new Damage(0f, bonusDmg / 3f + Random.Range(20 * Level, 30 * Level), true, false, true); dmg.buffs.Add(poison.Instance); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 2.5f; pbh.speed = 16f; } yield return(new WaitForSeconds(0.2f)); } transform.localScale = transform.localScale + new Vector3(0.3f, 0.3f, 0.3f); stats.HealthCur += 600 * Level; if (!isDead) { playerTracker.pause = false; } inUse = false; nextAttack = 0; }
IEnumerator RainFire(bool aim) { float range = 4.5f; Vector3 target; if (aim) { target = player.transform.position + new Vector3(Random.Range(-range, range), 0.5f, Random.Range(-range, range)); } else { target = new Vector3(Random.Range(arenaStart.x + 2, arenaEnd.x - 2), arenaStart.y + 0.5f, Random.Range(arenaStart.z + 2, arenaEnd.z - 2)); } GameObject o = Instantiate(WarningPrefab, target, Quaternion.Euler(90, 0, 0)); yield return(new WaitForSeconds(2.25f)); GameObject obj = Instantiate(LargeFlamePrefab, target, Quaternion.Euler(90, 0, 0)); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.GetComponent <SphereCollider>().radius = 0.31f; obj.transform.localScale = new Vector3(6.5f, 6.5f, 6.5f); pbh.speed = 0f; pbh.destroyable = false; Damage dmg = new Damage(0f, Random.Range(70f, 100f) * Level, false, false, true); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 0.2f; Destroy(o); }
protected override void Activate() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); //obj.transform.LookAt(mpd.CalculateWorldPosition()); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); pbh.speed = projSpeed; Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), false, false, true); pbh.dmg = stats.RealDamage(dmg); TimedBuff tb = ignite.Instance; Stat stat = tb.Stats.Find(item => item.Name == Stat.HEALTH_REGEN); stat.Value = stats.RealDotDamage(stat.Value, igniteMult, false, true, false, false, true); tb.Duration += igniteDur; tb.IsUnique = !igniteStack; pbh.dmg.buffs.Add(tb); pbh.friendly = true; pbh.ttl = 2f; }
IEnumerator AbilZeroAsync() { playerTracker.pause = true; Vector3 rotateOffset = new Vector3(); int made = 0; while (made < 24) { GameObject obj = Instantiate(LargeFlamePrefab, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.localScale = new Vector3(2.5f, 2.5f, 2.5f); obj.transform.rotation = transform.rotation; obj.transform.Rotate(rotateOffset); obj.transform.Translate(Vector3.forward * 2); pbh.speed = 11f + Level / 2; Damage dmg = new Damage(0f, Random.Range(82.5f, 97.5f) * Level, true, false, false); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 5f; if (made > 2 && made < 8) { rotateOffset += new Vector3(0, 7f, 0); } else if (made > 16 && made < 22) { rotateOffset += new Vector3(0, 4f, 0); } else if (made > 2 && made < 22) { rotateOffset += new Vector3(0, -7f, 0); } ++made; yield return(new WaitForSeconds(0.166f)); } playerTracker.pause = false; inUse = false; float choice = Random.Range(0f, 1f); if (choice < 0.4) { nextAttack = 0; } else if (choice < 0.65) { nextAttack = 2; } else { nextAttack = 1; } }
override public void OnDeath() { int expected = 12; for (int i = 0; i < expected; ++i) { GameObject obj = Instantiate(smallProj, transform.position, Quaternion.Euler(0, 360 / expected * i, 0)); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); obj.transform.Translate(Vector3.forward * 0.5f); pbh.dmg = childDamage; pbh.ttl = 5f; } }
protected override void Activate() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); obj.transform.localScale = new Vector3(10.3f, 1f, 10.3f); Damage dmg; float hplost = StatBlock.CalcMult(stats.HealthMax, stats.PhantomHpMult) * cost; stats.HealthCur -= hplost; Debug.Log("Cost player " + hplost + " hp."); dmg = new Damage(0f, hplost * dmgRatio, false, false, true); pbh.dmg = stats.RealDamage(dmg); }
void ProjectileAttack() { // Generates projectiles GameObject projectileInstance = Instantiate(projectile, transform.position, transform.rotation); ProjectileBehave pbh = projectileInstance.GetComponent <ProjectileBehave>(); var lookPos = target.transform.position - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); projectileInstance.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); Damage dmg = new Damage(Random.Range(weaponDmgMin, weaponDmgMax), 0f, true, false, false); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 3f; }
void FireProjectile() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion()); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f); pbh.speed = projSpeed; Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), true, false, false); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 2f; pbh.friendly = true; }
IEnumerator AbilShoot() { int circleRad = (int)outerShootCount; if (innerCircle) { circleRad = (int)innerShootCount; } for (int i = 0; i < circleRad; i++) { GameObject obj = Instantiate(FireballPrefab, gameObject.transform.position + new Vector3(shootStartRadius, 0.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); obj.transform.RotateAround(transform.position, Vector3.up, 360 / circleRad * i); Damage dmg = new Damage(0f, Random.Range(82.5f * Level, 97.5f * Level), true, true, false); pbh.dmg = stats.RealDamage(dmg); pbh.speed = 0.5f; } yield return(new WaitForSeconds(0.1f)); }
IEnumerator FireProjectile() { Vector3 posMod = Vector3.zero; int rotMod = 0; int tempCount = 1; int currCount = 0; while (currCount < projCount) { GameObject obj = Instantiate(projectile, mpd.CalculateWorldPosition() + new Vector3(0, 6, 0), new Quaternion()); //at mouse position, 6m up. ProjectileBehave phb = obj.GetComponent <ProjectileBehave>(); obj.transform.Rotate(90, rotMod, 0); //rotate around pivot obj.transform.Translate(posMod); //adjust forward obj.transform.localScale = new Vector3(2f, 2f, 2f); currCount++; rotMod = rotMod + (360 / tempCount); if (currCount == 1) { posMod = new Vector3(2, 0, 0); if (projCount != 7) { tempCount = (int)((projCount - 1) / 3); } else { tempCount = 6; } } else if (currCount == ((projCount - 1) / 3) + 1 && projCount != 7) { posMod = new Vector3(4, 0, 0); tempCount = (int)(projCount - 1) - tempCount; rotMod = 0; } phb.friendly = true; phb.speed = 15; Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), true, false, false); phb.dmg = stats.RealDamage(dmg); phb.ttl = 2f; } yield return(null); }
IEnumerator AbilOneAsync() { yield return(new WaitForSeconds(0.7f)); int projCast = 0; while (projCast < 15) { ++projCast; GameObject obj = Instantiate(VolleyPrefab, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); var lookPos = player.transform.position - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.Rotate(Vector3.up * 90 * Random.Range(-0.03f, 0.03f), Space.World); obj.transform.localScale = new Vector3(1f, 1f, 1f); pbh.speed = 35f; Damage dmg = new Damage(0f, Random.Range(45f, 60f) * Level, true, false, false); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 3f; yield return(new WaitForSeconds(0.15f)); } animator.SetBool("attack2bool", false); inUse = false; float choice = Random.Range(0f, 1f); if (choice < 0.6) { nextAttack = 2; } else if (choice < 0.85) { nextAttack = 0; } else { nextAttack = 1; } }
public void ProjectileAttack(GameObject projectile, float ttl, float height = 0f) { // Generate a projectile instance and get its behave script GameObject projectileInstance = Instantiate(projectile, transform.position + new Vector3(0f, height, 0f), transform.rotation); ProjectileBehave projectileBehave = projectileInstance.GetComponent <ProjectileBehave>(); projectileBehave.ttl = ttl; var lookPos = target.transform.position - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); projectileInstance.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); // Cause damage Damage dmg = new Damage(Random.Range(dmgMin, dmgMax), 0f, false, true, false); projectileBehave.dmg = statBlock.RealDamage(dmg); }
void AttackPlayer() { GameObject o = GameObject.CreatePrimitive(PrimitiveType.Sphere); o.transform.position = transform.position; o.transform.LookAt(target.transform); o.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); Damage dmg = new Damage(Random.Range(weaponDmgMin, weaponDmgMax), 0f, true, false, false); dmg = stats.RealDamage(dmg); ProjectileBehave pb = o.AddComponent <ProjectileBehave>(); pb.dmg = dmg; pb.speed = 5f; pb.ttl = 5f; o.GetComponent <SphereCollider>().isTrigger = true; Rigidbody rb = o.AddComponent <Rigidbody>(); rb.isKinematic = true; }
IEnumerator AbilZeroAsync() { playerTracker.pause = true; yield return(new WaitForSeconds(0.25f)); Vector3 rotateOffset = new Vector3(0, -25f, 0); int made = 0; while (made < 3) { GameObject obj = Instantiate(MeleeAttackPrefab, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.rotation = transform.rotation; obj.transform.Rotate(rotateOffset); obj.transform.Translate(Vector3.forward * (transform.localScale.x / 2f)); Damage dmg = new Damage(bonusDmg + Random.Range(50 * Level, 60 * Level), 0f, true, true, false); dmg.buffs.Add(poison.Instance); pbh.dmg = stats.RealDamage(dmg); if (made == 0) { rotateOffset = new Vector3(0, 25f, 0); } if (made == 1) { rotateOffset = new Vector3(); } ++made; yield return(new WaitForSeconds(0.2f)); } yield return(new WaitForSeconds(0.2f)); if (!isDead) { playerTracker.pause = false; } inUse = false; float choice = Random.Range(0f, 1f); nextAttack = 1; }
IEnumerator AsyncMelee() { yield return(new WaitForSeconds(0.1f)); GameObject obj = Instantiate(MeleeAttackPrefab, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); obj.transform.rotation = transform.rotation; obj.transform.Translate(Vector3.forward * (transform.localScale.x / 2f)); Damage dmg = new Damage(bonusDmg + Random.Range(40, 45) * Level, 0, false, true, false); dmg.buffs.Add(poison.Instance); pbh.dmg = stats.RealDamage(dmg); yield return(new WaitForSeconds(0.3f)); if (!isDead) { playerTracker.pause = false; } inUse = false; }
IEnumerator AsyncMelee() { animator.SetTrigger("swordattack"); yield return(new WaitForSeconds(0.65f)); GameObject obj = Instantiate(MeleeAttackPrefab, gameObject.transform.position + new Vector3(0, 0.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); obj.transform.rotation = transform.rotation; obj.transform.Translate(Vector3.forward * 4.3f); Damage dmg = new Damage(Random.Range(75, 95) * Level, Random.Range(25, 35) * Level, false, true, false); pbh.dmg = stats.RealDamage(dmg); yield return(new WaitForSeconds(1.1f)); if (!isDead) { playerTracker.pause = false; } inUse = false; }
IEnumerator AbilOneAsync() { yield return(new WaitForSeconds(0.36f)); int made = 0; while (made < 75) { GameObject obj = Instantiate(FireballPrefab, gameObject.transform.position + new Vector3(0, 7.5f, 0), Quaternion.Euler(0, 0, 0)); obj.transform.rotation = transform.rotation; obj.transform.Rotate(new Vector3(Random.Range(20, 60), Random.Range(-45, 45), 0)); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); float size = Random.Range(0.95f, 1.35f); obj.transform.localScale = new Vector3(size, size, size); obj.transform.Translate(Vector3.forward * 3); pbh.speed = 18f; Damage dmg = new Damage(0f, Random.Range(45f, 75f) * size * Level, true, false, true); pbh.dmg = stats.RealDamage(dmg); pbh.ttl = 0.9f + Random.Range(-0.05f, 0.1f); ++made; yield return(new WaitForSeconds(0.016f)); } yield return(new WaitForSeconds(0.4f)); inUse = false; float choice = Random.Range(0f, 1f); if (choice < 0.4) { nextAttack = 1; } else { nextAttack = 0; } }
void FireProjectile() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 2f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponent <ProjectileBehave>(); //obj.transform.LookAt(mpd.CalculateWorldPosition()); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.localScale = new Vector3(0.4f, 0.4f, 0.4f); obj.transform.Rotate(Vector3.up * 90 * Random.Range(-projSpread, projSpread), Space.World); pbh.speed = projSpeed; Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), false, false, true); //Debug.Log("Magic Dmg: " + dmg.magicDmgReal); pbh.dmg = stats.RealDamage(dmg); //Debug.Log("Real Magic Dmg: " + pbh.dmg.magicDmgReal); pbh.friendly = true; pbh.ttl = 2f; }
IEnumerator AbilZeroAsync() { playerTracker.pause = true; yield return(new WaitForSeconds(0.4f)); int made = 0; while (made < 10) { GameObject obj = Instantiate(MeleeAttackPrefab, gameObject.transform.position + new Vector3(0, 0.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); obj.transform.rotation = transform.rotation; obj.transform.Translate(Vector3.forward * (3 + made * 3.5f)); Damage dmg = new Damage(0f, Random.Range(120f, 150f) * Level, true, true, false); pbh.dmg = stats.RealDamage(dmg); ++made; yield return(new WaitForSeconds(0.15f)); } yield return(new WaitForSeconds(1f)); if (!isDead) { playerTracker.pause = false; } inUse = false; float choice = Random.Range(0f, 1f); if (choice < 0.4) { nextAttack = 0; } else { nextAttack = 1; } }
IEnumerator AbilFarTeleport() { int x = Random.Range(-25, 25); int z = Random.Range(-6, 21); transform.position = new Vector3(x, 0, z); ProjectileBehave[] projectiles = new ProjectileBehave[farTeleportCircleCount]; for (int i = 0; i < farTeleportCircleCount; i++) { GameObject obj = Instantiate(FireballPrefab, gameObject.transform.position + new Vector3(farTeleportDistInner, 0.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); obj.transform.RotateAround(transform.position, Vector3.up, 360 / farTeleportCircleCount * i); Damage dmg = new Damage(0f, Random.Range(82.5f * Level, 97.5f * Level), true, true, false); pbh.dmg = stats.RealDamage(dmg); pbh.speed = 0.0f; projectiles[i] = pbh; } yield return(new WaitForSeconds(0.5f)); for (int i = 0; i < projectiles.Length; i++) { projectiles[i].speed = 0.5f; } }