void CastIceBlast(Wizard player, int directionModifier) { if (player.GetMana() >= COST_SMALL) { SpellProjectile newProj = new SpellProjectile(10, player.GetProjectileSpeed(), new Vector3(0, directionModifier * 1), player.GetPosition(), projectile, player, 3, COST_SMALL); } }
// SPELLS void CastFireball(Wizard player, int directionModifier) { if (player.GetMana() >= COST_SMALL) { SpellProjectile newProj = new SpellProjectile(10, player.GetProjectileSpeed(), new Vector3(directionModifier * 1, 0), player.GetPosition(), projectile, player, 0, COST_SMALL); } }
private void ChaosOrbAttack() { pos_ += Direction * Time.deltaTime * 7; transform.position = pos_; if (ChaosOrbCD_ <= 0 && ChaosOrbReseveObject != null) { var randomRotSpeed = Random.Range(0, 360); transform.rotation = Quaternion.Euler(0, randomRotSpeed, 0); if (aoeSizeMeteor > 0) { var randomSpot = Random.Range(0.5f, 10f); spellCastLocation = transform.position + transform.forward * randomSpot; } GameObject test123 = Instantiate(ChaosOrbReseveObject, this.transform); SpellProjectile spell = test123.GetComponent <SpellProjectile>(); spell.BlessedAim = BlessedAim; spell.CompOrbPlayer = true; spell.ThePlayer = gameObject; spell.ChaosOrb_ = false; spell.CritVis = CritVis; spell.CritVisCompOrb = gameObject; spell.projectilespeed = projectilespeed; spell.damage = damage; spell.spellCastLocation = spellCastLocation; spell.aoeSizeMeteor = aoeSizeMeteor; spell.ghostCast = ghostCast; spell.cone = cone; spell.spellName = spellName; spell.channeling = channeling; spell.FrostBoltSlow = FrostBoltSlow; spell.SlowDuration = SlowDuration; spell.SlowPercent = SlowPercent; spell.FireBallBurn = FireBallBurn; spell.BurnDuration = BurnDuration; spell.BurnPercent = BurnPercent; spell.LBBounce = LBBounce; spell.LBBounceAmount = LBBounceAmount; spell.BoostCrit = BoostCrit; spell.CritChance = CritChance; spell.CritDamage = CritDamage; spell.BHBool = BHBool; spell.BHSize = BHSize; spell.BHRadius = BHRadius; spell.BHDuration = BHDuration; spell.BHStrenght = BHStrenght; spell.Push = Push; spell.pool = pool; spell.PoolInst = PoolInst; spell.PoolDamage = damage * PoolDamage; spell.Poolduration = Poolduration; ChaosOrbCD_ = ChaosOrbCD; } ChaosOrbCD_ -= Time.deltaTime; }
void CastSpell() { if (m_ActiveSpell != null) { m_ActualHandParticles.Stop(); Destroy(m_ActualHandParticles.gameObject, m_ActualHandParticles.main.duration); SpellProjectile proj = Instantiate(m_ActiveSpell.m_ProjectilePrefab, m_SpellOrigin.position, m_SpellOrigin.rotation); proj.Initialize(m_ActiveSpell); m_ActiveSpell = null; } }
public IEnumerator SpellPreview(PlayerSpell spell) { SpellProjectile projectile = null; for (int i = 0; i < spell.projectile.Length; i++) { yield return(new WaitForSeconds(spell.delay[i])); projectile = Instantiate(spell.projectile[i], spellSpawnTransforms[spell.spawnTransformID].position, Quaternion.identity, transform); projectile.LockOnTarget(Camera.main.transform); projectile.DoExplosion(0.5f); } yield return(new WaitUntil(() => projectile == null)); }
private void CompOrbCheck(SpellProjectile spell) // Checks if CompOrb is inside a collider (Raycast wont work if this is the case). { ColCounter = 0; Collider[] cols = Physics.OverlapSphere(transform.position, 0.1f); foreach (Collider col in cols) { if (col.tag == "Monster" && enemyCastingspell == false && aoeSizeMeteor == 0) { spell.CompChanCollider = true; ColCounter++; Monster enemy = col.transform.GetComponent <Monster>(); DealDamageOverTime(enemy); } } if (ColCounter == 0) { spell.CompChanCollider = false; } }
public virtual void ModifyProjectile(Player player, Projectile projectile, Vector2 executePosition = new Vector2()) { if (modifiers.splitModifier > 0) { projectile.scale *= (float)Math.Pow(0.9, modifiers.splitModifier + 1); } if (projectile.modProjectile is SpellProjectile) { SpellProjectile spellProjectile = (SpellProjectile)projectile.modProjectile; spellProjectile.Element = Element; projectile.netUpdate = true; } if (Style == SpellStyle.Default || Style == SpellStyle.HoldRelease) { ChooseElement(); } else { projectile.damage += (int)(projectile.damage * getChargePercentage()); projectile.knockBack += projectile.knockBack * getChargePercentage(); } }
public SpellProjectileInfo(SpellProjectile spellProjectile) { var caster = spellProjectile.ProjectileSource; var target = spellProjectile.ProjectileTarget; SpellProjectile = spellProjectile; if (caster?.Location != null) { CasterPos = new Position(caster.Location); } if (target?.Location != null) { TargetPos = new Position(target.Location); } if (spellProjectile.PhysicsObj.Position != null) { StartPos = new Physics.Common.Position(spellProjectile.PhysicsObj.Position); } CachedVelocity = target?.PhysicsObj.CachedVelocity; }
void Shoot() { GameObject test123 = Instantiate(currentspellObject, transform.position, transform.rotation, transform); SpellProjectile spell = test123.GetComponent <SpellProjectile>(); if (!Rotating) { spell.damage = 0.5f; } else { spell.damage = 0.2f; } spell.SlowDuration = 2; spell.SlowPercent = 1.25f; spell.BurnDuration = 2; spell.BurnPercent = 0.3f; spell.FireBallBurn = FireType; spell.FrostBoltSlow = FrostType; spell.cone = true; spell.enemyCastingspell = true; spell.FireTrailCone = true; ShapeCone(test123); }
private void CompOrbAttack() { if (channeling && aoeSizeMeteor == 0) { OrbChannelTargetUpdate(); if (CompColObject != null) { CompOrbCheck(CompColObject); } } if (CompOrbCD_ <= 0 && chanDur_ <= 0) { GameObject[] enemies = GameObject.FindGameObjectsWithTag("Monster"); float shortestDistance = Mathf.Infinity; GameObject nearestEnemy = null; foreach (GameObject enemy in enemies) { float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position); if (distanceToEnemy < shortestDistance) { shortestDistance = distanceToEnemy; nearestEnemy = enemy; } } if (nearestEnemy != null && shortestDistance <= 50) { spellCastLocation = nearestEnemy.transform.position; Vector3 dir = nearestEnemy.transform.position - this.transform.localPosition; transform.rotation = Quaternion.LookRotation(new Vector3(dir.x, 0, dir.z)); GameObject test123 = Instantiate(CompOrbReseveObject, this.transform); SpellProjectile spell = test123.GetComponent <SpellProjectile>(); spell.chanDur = chanDur; spell.CritVis = CritVis; spell.CritVisCompOrb = gameObject; spell.ChaosOrbReseveObject = ChaosOrbReseveObject; spell.ChaosOrbDuration = ChaosOrbDuration; spell.ChaosOrb_ = ChaosOrb_; spell.ChaosOrbCD = ChaosOrbCD; spell.BlessedAim = BlessedAim; spell.CompOrbPlayer = true; spell.ThePlayer = gameObject; spell.CompOrb = false; spell.projectilespeed = projectilespeed; spell.damage = damage; spell.spellCastLocation = spellCastLocation; spell.aoeSizeMeteor = aoeSizeMeteor; spell.ghostCast = ghostCast; spell.cone = cone; spell.spellName = spellName; spell.channeling = channeling; spell.FrostBoltSlow = FrostBoltSlow; spell.SlowDuration = SlowDuration; spell.SlowPercent = SlowPercent; spell.FireBallBurn = FireBallBurn; spell.BurnDuration = BurnDuration; spell.BurnPercent = BurnPercent; spell.LBBounce = LBBounce; spell.LBBounceAmount = LBBounceAmount; spell.BoostCrit = BoostCrit; spell.CritChance = CritChance; spell.CritDamage = CritDamage; spell.BHBool = BHBool; spell.BHSize = BHSize; spell.BHRadius = BHRadius; spell.BHDuration = BHDuration; spell.BHStrenght = BHStrenght; spell.Push = Push; spell.pool = pool; spell.PoolInst = PoolInst; spell.PoolDamage = damage * PoolDamage; spell.Poolduration = Poolduration; CompColObject = spell; if (channeling) { chanDur_ = chanDur; } CompOrbCD_ = CompOrbCD; if (HastenBool) { var randomInt = Random.Range(0, 100); if (randomInt <= HastenChance) { CompOrbCD_ = 0.15f; GameObject Haste = Instantiate(HastenVis, transform); Destroy(Haste, 2.5f); } } } else { CompOrbCD_ = 0.1f; // so spell wont go on CD if there is no enemy nearby., check again every 0.1 sec. } } chanDur_ -= Time.deltaTime; CompOrbCD_ -= Time.deltaTime; }
public void SplitCastSpell(Vector3 splitLoc, Quaternion splitRot, int LeftOrRight) { GameObject test123 = Instantiate(currentspellObject, this.transform.position, splitRot); SpellProjectile spell = test123.GetComponent <SpellProjectile>(); if (player_.BlobWeaponEquppied) { player_.CastExtraBlob(splitRot); } if (LeftOrRight == 1) { spell.SplitChanLeft = true; } else { spell.SplitChanRight = true; } spell.channeling = channel; spell.chanDur = chanDur; spell.projectilespeed = projectilespeed; spell.damage = damage; spell.spellCastLocation = splitLoc; spell.aoeSizeMeteor = aoeSizeMeteor; spell.ghostCast = ghostCast; spell.cone = cone; spell.spellName = spellname; spell.FrostBoltSlow = FrostBoltSlow; spell.SlowPercent = SlowPercent; spell.SlowDuration = SlowDuration; spell.FireBallBurn = FireBallBurn; spell.LBBounce = LBBounce; spell.BurnPercent = BurnPercent; spell.BurnDuration = BurnDuration; spell.BoostCrit = BoostCrit; spell.CritChance = CritChance; spell.CritDamage = CritDamage; spell.MadnessStaff = MadWeapon; // spell.ConeRote = splitRot; //BlackHole spell.BHBool = BHBool; spell.BHSize = BHSize; spell.BHRadius = BHRadius; spell.BHDuration = spellSlotCD * BHDuration; spell.BHStrenght = BHStrenght; //Push spell.Push = Push; //Pool spell.pool = pool; //spell.Poolduration = Poolduration; spell.PoolDamage = damage * PoolDamage; spell.Poolduration = spellSlotCD * Poolduration; spell.PoolInst = PoolInst; spell.BlessedAim = BlessedAim; spell.ChaosOrb_ = ChaosOrb_; spell.ChaosOrbReseveObject = currentspellObjectChaosOrbReserve; spell.ChaosOrbCD = (spellSlotCD) * ChaosOrbAttackCD; spell.ChaosOrbDuration = ChaosOrbDuration; spell.CritVis = CritVisual; }
protected override IEnumerator Attacking() { isAttacking = true; agent.updateRotation = true; List <Move> availableAttacks = GetAvailableMoves(); if (availableAttacks.Count > 0) { //choose random attack currentMove = availableAttacks[Random.Range(0, availableAttacks.Count)]; battleManager.CurrentMove = currentMove; Vector3 startPos = transform.position; Quaternion startRot = transform.rotation; EnemyMelee melee = currentMove as EnemyMelee; EnemySelfBuff selfBuff = currentMove as EnemySelfBuff; EnemySpell spell = currentMove as EnemySpell; SpellProjectile projectile = null; if (melee) { hurtbox.enabled = false; agent.SetDestination(player.GetAttackPosition().position); agent.stoppingDistance = attackPositionOffset; yield return(new WaitUntil(() => !agent.pathPending)); yield return(new WaitUntil(() => agent.pathStatus == NavMeshPathStatus.PathComplete && agent.remainingDistance <= attackPositionOffset)); } animator.SetTrigger(currentMove.animationName); if (melee) { if (melee.hitboxDelay > 0) { StartCoroutine(HandleHitbox(melee)); } else { hitboxes[melee.hitboxID].enabled = true; } } yield return(new WaitUntil(() => animator.GetCurrentAnimatorClipInfo(0)[0].clip.name.Contains(currentMove.animationName))); PayForAttack(); if (spell != null) { transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(player.transform.position - transform.position), Time.deltaTime); for (int i = 0; i < spell.projectile.Length; i++) { yield return(new WaitForSeconds(spell.delay[i])); projectile = Instantiate(spell.projectile[i], spellSpawnTransforms[spell.spawnTransformID].position, transform.rotation, transform); projectile.LockOnTarget(player.GetProjectileTarget()); } } if (selfBuff != null) { perks.Add(selfBuff.buff); } yield return(new WaitUntil(() => !animator.GetCurrentAnimatorClipInfo(0)[0].clip.name.Contains(currentMove.animationName))); if (melee != null) { agent.SetDestination(startPos); agent.stoppingDistance = 0f; hitboxes[melee.hitboxID].enabled = false; yield return(new WaitUntil(() => !agent.pathPending)); yield return(new WaitUntil(() => agent.pathStatus == NavMeshPathStatus.PathComplete && agent.remainingDistance == 0)); hurtbox.enabled = true; while (transform.rotation != startRot) { transform.rotation = Quaternion.RotateTowards(transform.rotation, startRot, 10f); yield return(null); } } yield return(new WaitUntil(() => projectile == null)); } yield return(base.Attacking()); }
/*For the last argument in the SpellProjectile constructor: * 0: Fireball * 1: Arrow * 2: DeafeningBlast * 3: IceBullet*/ void Invoke(int playerNumber) { if (playerNumber == 1) { if (CompareRecipes(player1.GetBalls(), RECIPE_FIREBALL)) { CastFireball(player1, p1Dir); ui.change_mana(player1.GetMana(), true); } else if (CompareRecipes(player1.GetBalls(), RECIPE_ICESHOT)) { CastIceBlast(player1, p1Diry); ui.change_mana(player1.GetMana(), true); } else if (CompareRecipes(player1.GetBalls(), RECIPE_SPREAD)) { if (player1.GetMana() >= COST_MED) { SpellProjectile newProj = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, 0), player1.GetPosition(), projectile, player1, 0, COST_MED); SpellProjectile newProj1 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, 0.1f), player1.GetPosition(), projectile, player1, 0, 0); SpellProjectile newProj2 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, -0.1f), player1.GetPosition(), projectile, player1, 0, 0); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_ICESPREAD)) { if (player1.GetMana() >= COST_MED) { SpellProjectile newProj = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, COST_MED); SpellProjectile newProj1 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0.1f, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, 0); SpellProjectile newProj2 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(-0.1f, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, 0); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_DEAFBLAST)) { if (player1.GetMana() >= COST_LARGE) { SpellProjectile newProj = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(1, 0), player1.GetPosition() , projectile, player1, 2, COST_LARGE); SpellProjectile newProj2 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0, 1), player1.GetPosition() , projectile, player1, 2, 0); SpellProjectile newProj3 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(-1, 0), player1.GetPosition() , projectile, player1, 2, 0); SpellProjectile newProj4 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0, -1), player1.GetPosition() , projectile, player1, 2, 0); SpellProjectile newProj5 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(1, 1).normalized, player1.GetPosition() , projectile, player1, 2, 0); SpellProjectile newProj6 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(-1, 1).normalized, player1.GetPosition() , projectile, player1, 2, 0); SpellProjectile newProj7 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(-1, -1).normalized, player1.GetPosition() , projectile, player1, 2, 0); SpellProjectile newProj8 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(1, -1).normalized, player1.GetPosition() , projectile, player1, 2, 0); ui.change_mana(player1.GetMana(), true); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_BIGSPREAD)) { if (player1.GetMana() >= COST_LARGE) { SpellProjectile newProj = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, 0), player1.GetPosition(), projectile, player1, 0, COST_LARGE); SpellProjectile newProj1 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, 0.1f), player1.GetPosition(), projectile, player1, 0, 0); SpellProjectile newProj2 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, -0.1f), player1.GetPosition(), projectile, player1, 0, 0); SpellProjectile newProj3 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, 0.05f), player1.GetPosition(), projectile, player1, 0, 0); SpellProjectile newProj4 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(p1Dir * 1, -0.05f), player1.GetPosition(), projectile, player1, 0, 0); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_BIGICESPREAD)) { if (player1.GetMana() >= COST_LARGE) { SpellProjectile newProj = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, COST_LARGE); SpellProjectile newProj1 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0.1f, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, 0); SpellProjectile newProj2 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(-0.1f, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, 0); SpellProjectile newProj3 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(0.05f, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, 0); SpellProjectile newProj4 = new SpellProjectile(10, player1.GetProjectileSpeed(), new Vector3(-0.05f, p1Diry * 1), player1.GetPosition(), projectile, player1, 3, 0); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_SUNSTRIKE)) { if (player1.GetMana() >= COST_SMALL) { SpellAOE spellaoe = new SpellAOE(10, COST_SMALL, 0.5f, 1, player2.GetPosition(), AOE, player1); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_CATACLYSM)) { if (player1.GetMana() >= COST_MED) { SpellAOE spellaoe = new SpellAOE(10, COST_MED, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe1 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe2 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe3 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe4 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe5 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe6 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe7 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe8 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); } } else if (CompareRecipes(player1.GetBalls(), RECIPE_DOOMSDAY)) { if (player1.GetMana() >= COST_LARGE) { SpellAOE spellaoe = new SpellAOE(10, COST_LARGE, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe1 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe2 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe3 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe4 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe5 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe6 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe7 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe8 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe9 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe10 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe11 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe12 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe13 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe14 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe15 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe16 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe17 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe18 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe19 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe20 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); SpellAOE spellaoe21 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player1); } } ResetBalls(1); // Resets the balls } else { if (CompareRecipes(player2.GetBalls(), RECIPE_FIREBALL)) { CastFireball(player2, p2Dir); ui.change_mana(player2.GetMana(), false); } else if (CompareRecipes(player2.GetBalls(), RECIPE_ICESHOT)) { CastIceBlast(player2, p2Diry); ui.change_mana(player2.GetMana(), false); } else if (CompareRecipes(player2.GetBalls(), RECIPE_SPREAD)) { if (player2.GetMana() >= COST_MED) { SpellProjectile newProj = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, 0), player2.GetPosition(), projectile, player2, 0, COST_MED); SpellProjectile newProj1 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, 0.1f), player2.GetPosition(), projectile, player2, 0, 0); SpellProjectile newProj2 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, -0.1f), player2.GetPosition(), projectile, player2, 0, 0); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_ICESPREAD)) { if (player2.GetMana() >= COST_MED) { SpellProjectile newProj = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, COST_MED); SpellProjectile newProj1 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0.1f, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, 0); SpellProjectile newProj2 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(-0.1f, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, 0); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_DEAFBLAST)) { if (player2.GetMana() >= COST_LARGE) { SpellProjectile newProj = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(1, 0), player2.GetPosition() , projectile, player2, 2, COST_LARGE); SpellProjectile newProj2 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0, 1), player2.GetPosition() , projectile, player2, 2, 0); SpellProjectile newProj3 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(-1, 0), player2.GetPosition() , projectile, player2, 2, 0); SpellProjectile newProj4 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0, -1), player2.GetPosition() , projectile, player2, 2, 0); SpellProjectile newProj5 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(1, 1).normalized, player2.GetPosition() , projectile, player2, 2, 0); SpellProjectile newProj6 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(-1, 1).normalized, player2.GetPosition() , projectile, player2, 2, 0); SpellProjectile newProj7 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(-1, -1).normalized, player2.GetPosition() , projectile, player2, 2, 0); SpellProjectile newProj8 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(1, -1).normalized, player2.GetPosition() , projectile, player2, 2, 0); ui.change_mana(player2.GetMana(), false); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_BIGSPREAD)) { if (player2.GetMana() >= COST_LARGE) { SpellProjectile newProj = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, 0), player2.GetPosition(), projectile, player2, 0, COST_LARGE); SpellProjectile newProj1 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, 0.1f), player2.GetPosition(), projectile, player2, 0, 0); SpellProjectile newProj2 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, -0.1f), player2.GetPosition(), projectile, player2, 0, 0); SpellProjectile newProj3 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, 0.05f), player2.GetPosition(), projectile, player2, 0, 0); SpellProjectile newProj4 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(p2Dir * 1, -0.05f), player2.GetPosition(), projectile, player2, 0, 0); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_BIGICESPREAD)) { if (player2.GetMana() >= COST_LARGE) { SpellProjectile newProj = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, COST_LARGE); SpellProjectile newProj1 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0.1f, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, 0); SpellProjectile newProj2 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(-0.1f, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, 0); SpellProjectile newProj3 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(0.05f, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, 0); SpellProjectile newProj4 = new SpellProjectile(10, player2.GetProjectileSpeed(), new Vector3(-0.05f, p2Diry * 1), player2.GetPosition(), projectile, player2, 3, 0); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_SUNSTRIKE)) { if (player2.GetMana() >= COST_SMALL) { SpellAOE newAOE = new SpellAOE(10, COST_SMALL, 0.5f, 1, player1.GetPosition(), AOE, player2); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_CATACLYSM)) { if (player2.GetMana() >= COST_MED) { SpellAOE newAOE = new SpellAOE(10, COST_MED, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE1 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE2 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE3 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE4 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE5 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE6 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE7 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE8 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); } } else if (CompareRecipes(player2.GetBalls(), RECIPE_DOOMSDAY)) { if (player2.GetMana() >= COST_LARGE) { SpellAOE newAOE = new SpellAOE(10, COST_LARGE, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE1 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE2 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE3 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE4 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE5 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE6 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE7 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE8 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE9 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE10 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE11 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE12 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE13 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE14 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE15 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE16 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE17 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE18 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE19 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE20 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); SpellAOE newAOE21 = new SpellAOE(10, 0, 0.5f, 1, new Vector2(Random.Range(-80, 80), Random.Range(-20, 40)), AOE, player2); } } ResetBalls(2); // Resets the balls } }
// Use this for initialization void Start() { instance = GameObject.Find("GameManager").GetComponent <SpellProjectile>(); }
public void CastCurrentSpell() { if (currentSlot == 1 && spellSlot1rdy == true) { curSlotcd = true; } if (currentSlot == 2 && spellSlot2rdy == true) { curSlotcd = true; } if (currentSlot == 3 && spellSlot3rdy == true) { curSlotcd = true; } if (MadWeapon) { curSlotcd = true; currentSlot = 4; } if (curSlotcd) { player_.AttackAnim(); player_.StopMoveForSpellCast(); curSlotcd = false; if (cone || channel || aoeSizeMeteor > 0) { if (cone) { currentspellObject = currentConeObject; } if (channel) { currentspellObject = currentChannel; } if (cone && channel) { currentspellObject = currentChannelCone; } if (aoeSizeMeteor > 0 && !channel) { currentspellObject = currentMeteor; } if (aoeSizeMeteor > 0 && spellname != "Lightningbolt" && channel) { currentspellObject = currentChanMet; } } if (ChaosOrb_) { if (currentspellObject != currentspellObjectCompOrbReserve) { currentspellObjectChaosOrbReserve = currentspellObject; currentspellObjectChaosOrbReserve1 = currentspellObject; } currentspellObject = ChaosOrbObject; } if (CompOrb) // CompOrb Testing. { currentspellObjectCompOrbReserve = currentspellObject; currentspellObject = CompOrbObject; } damage = (damage1Pure + damage2Pure + damage3Pure) * damage1Per * damage2Per * damage3Per * damage4Per; // fixes the damage calculation order. spellSlotCD = (cd1Pure + cd2Pure + cd3Pure + cd4Pure) * cd1Per * cd2Per * cd3Per * cd4Per; GameObject test123 = Instantiate(currentspellObject, this.transform); SpellProjectile spell = test123.GetComponent <SpellProjectile>(); spell.BlessedAim = BlessedAim; spell.ChaosOrbDuration = ChaosOrbDuration; spell.CompOrb = CompOrb; spell.CompOrbDur = CompOrbDur; spell.HastenBool = HastenBool; spell.HastenChance = HastenChance; spell.HastenVis = HastenVisual; spell.ChaosOrb_ = ChaosOrb_; spell.projectilespeed = projectilespeed; spell.damage = damage; spell.spellCastLocation = spellCastLocation; spell.aoeSizeMeteor = aoeSizeMeteor; spell.ghostCast = ghostCast; spell.cone = cone; spell.spellName = spellname; spell.channeling = channel; spell.MadnessStaff = MadWeapon; // Frostbolt slow effects spell.FrostBoltSlow = FrostBoltSlow; spell.SlowDuration = SlowDuration; spell.SlowPercent = SlowPercent; // Fireball burn effects spell.FireBallBurn = FireBallBurn; spell.BurnDuration = BurnDuration; spell.BurnPercent = BurnPercent; // LB Bounce effect spell.LBBounce = LBBounce; spell.LBBounceAmount = LBBounceAmount; //Boost spell.BoostCrit = BoostCrit; spell.CritChance = CritChance; spell.CritDamage = CritDamage; spell.CritVis = CritVisual; //BlackHole spell.BHBool = BHBool; spell.BHSize = BHSize; spell.BHRadius = BHRadius; spell.BHDuration = spellSlotCD * BHDuration; spell.BHStrenght = BHStrenght; //Push spell.Push = Push; //Pool spell.pool = pool; spell.PoolInst = PoolInst; //spell.Poolduration = Poolduration; spell.PoolDamage = damage * PoolDamage; spell.Poolduration = spellSlotCD * Poolduration; if (channel == true) { spell.chanDur = chanDur; } if (CD1 <= baseCasttimeCD) { CD1 = baseCasttimeCD; CD1_ = baseCasttimeCD; } if (CD2 <= baseCasttimeCD) { CD2 = baseCasttimeCD; CD2_ = baseCasttimeCD; } if (CD3 <= baseCasttimeCD) { CD3 = baseCasttimeCD; CD3_ = baseCasttimeCD; } if (player_.BlobWeaponEquppied) { player_.CastExtraBlob(player_.transform.rotation); } if (doubleCast) { currentspellObject1 = currentspellObject; projectilespeed1 = projectilespeed; damage1 = damage; spellCastLocation1 = spellCastLocation; aoeSizeMeteor1 = aoeSizeMeteor; ghostCast1 = ghostCast; cone1 = cone; spellname1 = spellname; channel1 = channel; FrostBoltSlow1 = FrostBoltSlow; SlowPercent1 = SlowPercent; MadWeapon1 = MadWeapon; SlowDuration1 = SlowDuration; FireBallBurn1 = FireBallBurn; LBBounce1 = LBBounce; LBBounceAmount1 = LBBounceAmount; BurnPercent1 = BurnPercent; BurnDuration1 = BurnDuration; BoostCrit1 = BoostCrit; CritChance1 = CritChance; CritDamage1 = CritDamage; chanDur1 = chanDur; ChaosOrbDuration1 = ChaosOrbDuration; //BlackHole BHBool1 = BHBool; BHSize1 = BHSize; BHRadius1 = BHRadius; BHDuration1 = spellSlotCD * BHDuration; BHStrenght1 = BHStrenght; //Push Push1 = Push; //Pool pool1 = pool; PoolInst1 = PoolInst; //spell.Poolduration = Poolduration; PoolDamage1 = damage * PoolDamage; Poolduration1 = spellSlotCD * Poolduration; // Blessed aim BlessedAim1 = BlessedAim; // Chaos ChaosOrb1 = ChaosOrb_; MultiChanCounter = 0; var MultiCast = Random.Range(1, 101); if (MultiCast > 50) { Invoke("DoubleCastSpell1", 0.15f); // player_.MultiVis(0); StartCoroutine(MultiVisIE(0, 0.15f)); } if (MultiCast > 75) { Invoke("DoubleCastSpell1", 0.3f); // player_.MultiVis(1); StartCoroutine(MultiVisIE(1, 0.3f)); } if (MultiCast > 90) { Invoke("DoubleCastSpell1", 0.45f); // player_.MultiVis(-1); StartCoroutine(MultiVisIE(-1, 0.45f)); } } if (splitCast) { float minC = 1f; float maxC = 25f; float spreadC = 36; if (cone) { maxC = 1f; minC = 1f; spreadC = 60f; } if (channel) { maxC = 1f; minC = 1f; spreadC = 30; } ; Vector3 dist = spellCastLocation - this.transform.position; float spread = Mathf.Clamp(dist.magnitude, minC, maxC); spread = -1 * (spread - spreadC); Quaternion dir = transform.rotation; //Quaternion dir = Quaternion.Euler(0, transform.rotation.y, transform.rotation.z); Vector3 rot = dir.eulerAngles; rot = new Vector3(rot.x, rot.y + spread, rot.z); Vector3 rot2 = dir.eulerAngles; rot2 = new Vector3(rot2.x, rot2.y - spread, rot2.z); Quaternion targetRotation1 = Quaternion.Euler(rot); Quaternion targetRotation2 = Quaternion.Euler(rot2); Vector3 spellLoc1 = spellCastLocation + (test123.transform.right * 4f); Vector3 spellLoc2 = spellCastLocation + (test123.transform.right * -4f); SplitCastSpell(spellLoc1, targetRotation1, 2); SplitCastSpell(spellLoc2, targetRotation2, 1); } if (ChaosOrb_) // Testing. { spell.ChaosOrbReseveObject = currentspellObjectChaosOrbReserve; spell.ChaosOrbCD = spellSlotCD * ChaosOrbAttackCD; //WILL BE LONGER, takes extra cd from Chaos ability itself. ChaosOrbCD1 = spellSlotCD * ChaosOrbAttackCD; currentspellObject = currentspellObjectChaosOrbReserve; } if (CompOrb) // Testing. { spell.CompOrbReseveObject = currentspellObjectCompOrbReserve; spell.CompOrbCD = spellSlotCD; currentspellObject = currentspellObjectCompOrbReserve; } if (CompOrb) // teesting. { spellSlotCD = CompOrbCD; } SetSlotCD(currentSlot); // CompanionOrb, fixed CD. fix } else if (!player_.channelingNow && !player_.attackingRightNow) { player_.PlayerIsIdle(); } }
public void BoltBounce(bool bounce, bool channel, GameObject bolt, GameObject Current, bool Monster) { if (channel && ChannelTimer > 0) { noBounce = true; } else { noBounce = false; } if (bounce && noBounce == false) { if (!Monster) { MonsterList = GameObject.FindGameObjectsWithTag("Monster"); } else { MonsterList = GameObject.FindGameObjectsWithTag("Player"); } foreach (GameObject enemy in MonsterList) { // if not null might need float dist = Vector3.Distance(enemy.transform.position, transform.position); if (dist < 20 && dist > 1) { MonsterList2.Add(enemy); } } if (MonsterList2.Count >= 1) { var randomTarget = Random.Range(0, MonsterList2.Count); var Rot = Quaternion.LookRotation((MonsterList[randomTarget].transform.position - transform.position).normalized); var Pos2 = Vector3.MoveTowards(this.transform.position, MonsterList[randomTarget].transform.position, BounceDistance); GameObject Bounce = Instantiate(bolt, new Vector3(Pos2.x, 2.6f, Pos2.z), Rot, this.transform); SpellProjectile spell = Bounce.GetComponent <SpellProjectile>(); if (Current.GetComponent <SpellProjectile>() != null) { if (!spell.enabled) { spell.enabled = true; } SpellProjectile curr = Current.GetComponent <SpellProjectile>(); spell.damage = curr.damage; spell.projectilespeed = curr.projectilespeed; spell.ghostCast = false; spell.spellName = curr.spellName; spell.LBBounce = curr.LBBounce; spell.Push = curr.Push; spell.LBBounceAmount = curr.LBBounceAmount - 1; spell.enemyCastingspell = Monster; } else { Poolscript curr = Current.GetComponent <Poolscript>(); spell.damage = curr.damage; spell.projectilespeed = curr.projectilespeed; spell.ghostCast = false; spell.spellName = curr.spellName; spell.LBBounce = curr.LBBounce; spell.LBBounceAmount = curr.LBBounceAmount - 1; spell.enemyCastingspell = Monster; } Bounce.transform.parent = null; Bounce.transform.localScale = new Vector3(1f, 1f, 1f); spell.spellCastLocation = MonsterList2[randomTarget].transform.position; spell.channeling = false; spell.cone = false; spell.aoeSizeMeteor = 0; spell.BHBool = false; if (spell.LBBounceAmount <= 0) { spell.LBBounce = false; // could make it count --; } if (channel) { Bounce.gameObject.GetComponent <Collider>().enabled = true; spell.lightChild1.GetComponent <ParticleSystemRenderer>().lengthScale = 1; spell.lightChild2.GetComponent <ParticleSystemRenderer>().lengthScale = 1; spell.lightChild3.GetComponent <ParticleSystemRenderer>().lengthScale = 1; spell.lightChild4.GetComponent <ParticleSystemRenderer>().lengthScale = 1; spell.lightChild5.GetComponent <ParticleSystemRenderer>().lengthScale = 1; spell.lightChild6.GetComponent <ParticleSystemRenderer>().lengthScale = 1; ChannelTimer = 0.75f; } } MonsterList2.Clear(); } ChannelTimer -= Time.deltaTime; }
public void DoubleCastSpell1() { GameObject test1234 = Instantiate(currentspellObject1, this.transform); //test1234.GetComponentInChildren<GameObject>().transform.Find("SubFire").gameObject.SetActive(false); SpellProjectile spell2 = test1234.GetComponent <SpellProjectile>(); MultiChanCounter++; if (player_.BlobWeaponEquppied) { player_.CastExtraBlob(player_.transform.rotation); } switch (MultiChanCounter) { case 1: MultiChan1 = true; MultiChan2 = false; MultiChan3 = false; break; case 2: MultiChan1 = false; MultiChan2 = true; MultiChan3 = false; break; case 3: MultiChan1 = false; MultiChan2 = false; MultiChan3 = true; break; } spell2.MultiChan1 = MultiChan1; spell2.MultiChan2 = MultiChan2; spell2.MultiChan3 = MultiChan3; spell2.projectilespeed = projectilespeed1; spell2.damage = damage1; spell2.spellCastLocation = spellCastLocation1; spell2.aoeSizeMeteor = aoeSizeMeteor1; spell2.ghostCast = ghostCast1; spell2.cone = cone1; spell2.channeling = channel1; spell2.MadnessStaff = MadWeapon1; spell2.chanDur = chanDur1; spell2.spellName = spellname1; spell2.FrostBoltSlow = FrostBoltSlow1; spell2.SlowPercent = SlowPercent1; spell2.SlowDuration = SlowDuration1; spell2.FireBallBurn = FireBallBurn1; spell2.LBBounce = LBBounce1; spell2.LBBounceAmount = LBBounceAmount1; spell2.BurnPercent = BurnPercent1; spell2.BurnDuration = BurnDuration1; spell2.BoostCrit = BoostCrit1; spell2.CritChance = CritChance1; spell2.CritDamage = CritDamage1; //BlackHole spell2.BHBool = BHBool1; spell2.BHSize = BHSize1; spell2.BHRadius = BHRadius1; spell2.BHDuration = BHDuration1; spell2.BHStrenght = BHStrenght1; //Push spell2.Push = Push1; //Pool spell2.pool = pool1; //spell.Poolduration = Poolduration; spell2.PoolDamage = PoolDamage1; spell2.Poolduration = Poolduration1; spell2.PoolInst = PoolInst1; //Blessed aim spell2.BlessedAim = BlessedAim1; spell2.ChaosOrb_ = ChaosOrb1; spell2.ChaosOrbReseveObject = currentspellObjectChaosOrbReserve1; spell2.ChaosOrbCD = ChaosOrbCD1; spell2.ChaosOrbDuration = ChaosOrbDuration1; spell2.CritVis = CritVisual; }
protected override IEnumerator Attacking() { isAttacking = true; Vector3 startPos = transform.position; Quaternion startRot = transform.rotation; animator.SetBool("blocking", false); hurtbox.enabled = false; yield return(new WaitUntil(() => attackChosen)); yield return(new WaitUntil(() => TargetChosen())); battleManager.CurrentMove = currentMove; try { for (int i = 0; i < currentMove.particleEffects.Length; i++) { StartCoroutine(PlayParticles(currentMove.particleDelay[i], currentMove.particleEffects[i], spellSpawnTransforms[currentMove.particleSpawnPositionID[i]], currentMove.particleDuration[i], currentMove.releaseOnInit[i])); } } catch (NullReferenceException) { Debug.Log("particles are null"); } PlayerMelee melee = currentMove as PlayerMelee; PlayerSpell spell = currentMove as PlayerSpell; PlayerSelfBuff selfBuff = currentMove as PlayerSelfBuff; SpellProjectile projectile = null; if (melee != null) { walkingForward = true; agent.SetDestination(currentTarget.GetAttackPosition().position); agent.stoppingDistance = attackPositionOffset; yield return(new WaitUntil(() => !agent.pathPending)); yield return(new WaitUntil(() => agent.pathStatus == NavMeshPathStatus.PathComplete && agent.remainingDistance <= attackPositionOffset)); hitboxes[melee.hitboxID].enabled = true; } animator.SetTrigger(name: currentMove.animationName); yield return(new WaitUntil(() => animator.GetCurrentAnimatorClipInfo(0)[0].clip.name.Contains(currentMove.animationName))); PayForAttack(); if (selfBuff != null) { Debug.Log($"{selfBuff.EnhanceDuration(this, selfBuff.buff.duration)}"); AddPerk(selfBuff.buff, selfBuff.EnhanceDuration(this, selfBuff.buff.duration)); } if (spell != null) { if (spell.type == SpellType.Areal) { yield return(new WaitForSeconds(spell.delay[0])); foreach (Enemy enemy in battleManager.GetEnemies()) { for (int i = 0; i < spell.projectile.Length; i++) { //yield return new WaitForSeconds(spell.delay[i]); projectile = Instantiate(spell.projectile[i], spellSpawnTransforms[0].position, transform.rotation, transform.parent); projectile.LockOnTarget(enemy.GetProjectileTarget()); } } } else { bool isMultiple = spell.type == SpellType.Multiple; if (!isMultiple) { transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(currentTarget.transform.position - transform.position), Time.deltaTime); } Enemy[] aliveEnemies = battleManager.GetEnemies().FindAll(enemy => !enemy.IsDead()).ToArray(); for (int i = 0; i < spell.projectile.Length; i++) { yield return(new WaitForSeconds(spell.delay[i])); projectile = Instantiate(spell.projectile[i], spellSpawnTransforms[spell.spawnTransformID].position, transform.rotation, transform); projectile.LockOnTarget(isMultiple ? aliveEnemies[Mathf.Min(aliveEnemies.Length - 1, i)].GetProjectileTarget() : currentTarget.GetProjectileTarget()); } } } yield return(new WaitUntil(() => !animator.GetCurrentAnimatorClipInfo(0)[0].clip.name.Contains(currentMove.animationName))); if (melee != null) { walkingForward = false; agent.updateRotation = false; agent.SetDestination(startPos); agent.stoppingDistance = 0f; hitboxes[melee.hitboxID].enabled = false; yield return(new WaitUntil(() => !agent.pathPending)); yield return(new WaitUntil(() => agent.pathStatus == NavMeshPathStatus.PathComplete && agent.remainingDistance == 0)); agent.updateRotation = true; transform.rotation = startRot; } yield return(new WaitUntil(() => projectile == null)); attackChosen = false; bool doBlock = attributes.probabilityOfBlock + (currentMove as PlayerMove).probOfBlock > UnityEngine.Random.Range(0, 1f); animator.SetBool("blocking", doBlock); hurtbox.enabled = true; yield return(base.Attacking()); }
public void WeaponAttack() { if (spellSlot1rdy == true && player_.DieOnce == false) { switch (CurrentWeapon) { case 0: spellSlotCD = 0.5f; break; case 1: WeaponSpider spell = Weapons[CurrentWeapon].GetComponent <WeaponSpider>(); spellSlotCD = spell.cooldown; GameObject spider1 = Instantiate(spell.ItemObject, transform.position, transform.rotation, transform); GameObject spider2 = Instantiate(spell.ItemObject, transform.position, transform.rotation, transform); spider1.transform.position += spider1.transform.right * 2; spider2.transform.position += spider2.transform.right * -2; spider1.transform.parent = null; spider2.transform.parent = null; break; case 2: Blink spell2 = Weapons[CurrentWeapon].GetComponent <Blink>(); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit) && hit.collider.gameObject.tag == "Floor" || hit.collider.gameObject.tag == "Monster" || hit.collider.gameObject.tag == "Token" || hit.collider.gameObject.tag == "Door") { TelePortDoor = false; Tele1Effect = Instantiate(TelePortEffect, Player1.transform.position, Player1.transform.rotation); Tele1Effect.transform.parent = Player1.transform; ParticleSystem Tele1Effect2 = Instantiate(TelePortEffect, hit.point, Player1.transform.rotation); TeleLoc = hit.point; Destroy(Tele1Effect.transform.gameObject, 3.1f); Destroy(Tele1Effect2.transform.gameObject, 3.1f); Invoke("TelePortPlayer", 1f); spellSlotCD = spell2.cooldown; } else { spellSlotCD = 0.5f; } break; case 3: Blink spell3 = Weapons[CurrentWeapon].GetComponent <Blink>(); Ray ray2 = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit2; if (Physics.Raycast(ray2, out hit2)) { // Code Here. Vector3 Pos = new Vector3(Player1.transform.position.x, 1.5f, Player1.transform.position.z); Player1.transform.LookAt(hit2.point); GameObject PoolObj = Instantiate(spell3.ItemObject, Pos + Player1.transform.forward * 4, transform.rotation, transform); PoolObj.transform.parent = null; PoolObj.transform.localScale = new Vector3(1, 1, 1); PoolObj.GetComponent <BigBoyFire>().PoolNumb = 10; PoolObj.GetComponent <BigBoyFire>().PlayerCasting = true; PoolObj.GetComponent <BigBoyFire>().duration = 3f; PoolObj.GetComponent <BigBoyFire>().damage = 1f; spellSlotCD = spell3.cooldown; } else { spellSlotCD = 0.5f; } break; case 4: Blink spell4 = Weapons[CurrentWeapon].GetComponent <Blink>(); // Code Here. float OrbFacing = transform.rotation.eulerAngles.x; float attackTimer = 0; for (int i = 0; i < 5; i++) { GameObject P1 = Instantiate(spell4.ItemObject, transform); player_.SpellsCastInThisRoom.Add(P1); P1.transform.Rotate(0, OrbFacing, 0); P1.transform.position = new Vector3(transform.position.x, 3, transform.position.z) + P1.transform.forward * 1.5f; P1.GetComponent <OldKingAttack3>().FloatUpTimer += attackTimer; P1.GetComponent <OldKingAttack3>().damage = 1; P1.GetComponent <OldKingAttack3>().PlayerCast = true; OrbFacing += 72; //360/5 attackTimer += 0.2f; } spellSlotCD = spell4.cooldown; break; case 5: Blink spell5 = Weapons[CurrentWeapon].GetComponent <Blink>(); player_.BlobWeaponEquppied = true; player_.W5.SetActive(true); player_.BlobWeaponObject = spell5.ItemObject; spellSlotCD = spell5.cooldown; break; case 6: Blink spell6 = Weapons[CurrentWeapon].GetComponent <Blink>(); player_.TimeStaffCDS(); player_.ResetCDVis(spell6.ItemObject); spellSlotCD = spell6.cooldown; break; case 7: Blink spell7 = Weapons[CurrentWeapon].GetComponent <Blink>(); Collider[] cols = Physics.OverlapSphere(transform.position, 35); bool AnySpells = false; foreach (Collider c in cols) { Monster e = c.GetComponent <Monster>(); if (e != null && e.tag == "Monster") { AnySpells = true; //Monster enemy = e.GetComponent<Monster>(); GameObject test123 = Instantiate(spell7.ItemObject, transform.position, transform.rotation, transform); SpellProjectile Frostmeteor = test123.GetComponent <SpellProjectile>(); Frostmeteor.projectilespeed = 30; Frostmeteor.damage = 1; Frostmeteor.FrostBoltSlow = true; Frostmeteor.SlowDuration = 3f; Frostmeteor.SlowPercent = 1.4f; Frostmeteor.aoeSizeMeteor = 3f; Frostmeteor.FrostStaff = true; Frostmeteor.spellCastLocation = e.transform.position; Frostmeteor.transform.position = new Vector3(transform.position.x, 20, transform.position.z); player_.SpellsCastInThisRoom.Add(test123); } } if (!AnySpells) { GameObject test12345 = Instantiate(spell7.ItemObject, transform.position, transform.rotation, transform); SpellProjectile Frostmeteor = test12345.GetComponent <SpellProjectile>(); Frostmeteor.projectilespeed = 15; Frostmeteor.damage = 1; Frostmeteor.FrostBoltSlow = true; Frostmeteor.SlowDuration = 3f; Frostmeteor.SlowPercent = 1.4f; Frostmeteor.aoeSizeMeteor = 3f; Frostmeteor.FrostStaff = true; Frostmeteor.spellCastLocation = transform.position; Frostmeteor.transform.position = new Vector3(transform.position.x, 20, transform.position.z); player_.SpellsCastInThisRoom.Add(test12345); } spellSlotCD = spell7.cooldown; break; case 8: Blink spell8 = Weapons[CurrentWeapon].GetComponent <Blink>(); GameObject test1234 = Instantiate(spell8.ItemObject, transform.position, transform.rotation, transform); test1234.transform.parent = null; Destroy(test1234, 1f); Collider[] cols2 = Physics.OverlapSphere(transform.position, 10); foreach (Collider c in cols2) { Monster e = c.GetComponent <Monster>(); if (e != null && e.tag == "Monster") { Monster enemy = e.GetComponent <Monster>(); enemy.Slow(true, 2, 1.25f); Vector3 directionF = (enemy.transform.position - transform.position).normalized; enemy.CancelInvoke("StopPush"); enemy.TakeDamage(1); enemy.pushDir = directionF; enemy.pushed = true; } } spellSlotCD = spell8.cooldown; break; case 9: // Blink spell9 = Weapons[CurrentWeapon].GetComponent<Blink>(); Spellbook SB_ = FindObjectOfType <Spellbook>(); CastSpell CS_ = FindObjectOfType <CastSpell>(); int curS = CastSpell.FindObjectOfType <CastSpell>().currentSlot; CS_.MadWeapon = true; SB_.LeveloneSpell(Random.Range(1, 4)); SB_.LeveltwoSpell(Random.Range(0, 4)); SB_.LevelthreeSpell(Random.Range(0, 5)); SB_.LevelfourSpell(Random.Range(0, 4)); SB_.LevelfiveSpell(Random.Range(0, 4)); SB_.LevelsixSpell(Random.Range(0, 6)); Ray ray3 = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit3; if (Physics.Raycast(ray3, out hit3)) { CS_.spellCastLocation = hit3.point; Vector3 targetPosition = hit3.point; Vector3 direction = (targetPosition - Player1.transform.position).normalized; Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x, 0, direction.z)); // flattens the vector3 Player1.transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * 999f); } CS_.CastCurrentSpell(); CS_.MadWeapon = false; switch (curS) { case 1: SB_.SlotOne(); break; case 2: SB_.SlotTwo(); break; case 3: SB_.SlotThree(); break; } // spellSlotCD = spell9.cooldown; break; } CD1 = spellSlotCD; CD1_ = spellSlotCD; } }