예제 #1
0
파일: main.cs 프로젝트: leobao1/tianhuo
 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);
     }
 }
예제 #2
0
파일: main.cs 프로젝트: leobao1/tianhuo
 // 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);
     }
 }
예제 #3
0
 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;
 }
예제 #4
0
    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;
        }
    }
예제 #5
0
    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));
    }
예제 #6
0
 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;
     }
 }
예제 #7
0
 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();
     }
 }
예제 #8
0
        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;
        }
예제 #9
0
    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);
    }
예제 #10
0
    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;
    }
예제 #11
0
    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;
    }
예제 #12
0
    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());
    }
예제 #13
0
파일: main.cs 프로젝트: leobao1/tianhuo
 /*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
     }
 }
예제 #14
0
 // Use this for initialization
 void Start()
 {
     instance = GameObject.Find("GameManager").GetComponent <SpellProjectile>();
 }
예제 #15
0
    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();
        }
    }
예제 #16
0
파일: MirrorWall.cs 프로젝트: ErteTD/Depper
    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;
    }
예제 #17
0
    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;
    }
예제 #18
0
    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());
    }
예제 #19
0
    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;
        }
    }