public void LearnSpell(AbstractSpell spell)
 {
     if (!KnownSpells.Contains(spell))
     {
         KnownSpells.Add(spell);
     }
 }
Exemple #2
0
 void Start()
 {
     EquippedSpell           = Spells[0];
     movements               = GetComponent <Movement>();
     defensives              = GetComponent <Defense>();
     MouseCtrl               = GetComponent <MouseControl>();
     movements.EquippedSpell = EquippedSpell;
     foreach (AbstractSpell AS in Spells)
     {
         AS.Init();
     }
     foreach (AbstractSpell AS in DefensiveSpells)
     {
         AS.Init();
     }
     CameraScreenDim = new Vector2(Camera.main.pixelWidth, Camera.main.pixelHeight);
     SpellImageHolder.transform.position = new Vector2(CameraScreenDim.x * .075f, CameraScreenDim.y * .125f);
     SpellImageHolder.sprite             = Spells[0].SpellImage;
     for (int i = 0; i < UnuseSpellImages.Length; i++)
     {
         UnuseSpellImages[i].transform.position = new Vector2(CameraScreenDim.x * (float)(.175f + (float)i * .05f), CameraScreenDim.y * .1f);
     }
     for (int j = 0; j < DefensiveSpellImages.Length; j++)
     {
         DefensiveSpellImages[j].transform.position = new Vector2(CameraScreenDim.x * (float)(.175f + (float)(j + 1) * .05f), CameraScreenDim.y * .21f);
     }
 }
 public void ForgetSpell(AbstractSpell spell)
 {
     if (KnownSpells.Contains(spell))
     {
         KnownSpells.Remove(spell);
     }
     else
     {
         Console.WriteLine("Character doesn't know this spell!");
     }
 }
 //Check for staff pickup
 void OnTriggerEnter2D(Collider2D col)
 {
     if (col.gameObject.layer == 12)
     {
         if (m_Spell != null)
         {
             Destroy(m_Spell.gameObject);
         }
         col.transform.SetParent(m_staffTransform);
         col.transform.localPosition         = Vector3.zero;
         col.transform.localRotation         = Quaternion.identity;
         col.gameObject.transform.localScale = new Vector3(Mathf.Abs(col.transform.localScale.x), Mathf.Abs(col.transform.localScale.y), col.transform.localScale.z);
         col.enabled       = false;
         m_Spell           = col.gameObject.GetComponent <AbstractSpell>();
         m_Spell.m_isBound = true;
         m_Spell.OnPick();
         m_Spell.SetDamageStats(ref m_damageManager);
     }
 }
Exemple #5
0
 void Start()
 {
     movements               = GetComponent <Movement>();
     defensives              = GetComponent <Defense>();
     MouseCtrl               = GetComponent <MouseControl>();
     Charstats               = GetComponent <CharacterStatus>();
     animator                = GetComponent <Animator>();
     Target                  = MouseCtrl.SelectedObject;
     EquippedSpell           = Spells[0];
     movements.EquippedSpell = Spells[0];
     foreach (AbstractSpell AS in Spells)
     {
         AS.Init();
     }
     foreach (AbstractSpell AS in DefensiveSpells)
     {
         AS.Init();
     }
 }
Exemple #6
0
    // Update is called once per frame
    void Update()
    {
        if (Controllable)
        {
            movements.attacks = Attacks.NoSpell;

            RaycastHit ObjectInfront;
            float      DistanceFromEnemy = (transform.position - Target.transform.position).magnitude;

            Collider[] DangerSurrounding = Physics.OverlapSphere(transform.position, 30, 0b10000000000000000);
            Collider[] IncomingObj       = Physics.OverlapSphere(transform.position, 30, 0b1001100000000000);
            Collider[] DetectPowerUps    = Physics.OverlapSphere(transform.position, 50, 0b1000000000000000000);

            MagicShield MS = GetComponentInChildren <MagicShield>();

            if (movements.control == Control.Forward && Physics.SphereCast(new Ray(transform.position, transform.forward), 6, out ObjectInfront, 2, ~512))
            {
                movements.rotate = GoAround(ObjectInfront.transform.gameObject);
            }
            else if (DetectPowerUps.Length > 0)
            {
                Transform PowerUpTrans = DetectPowerUps[0].transform;
                Vector2   PowerUpDir   = (new Vector2(PowerUpTrans.position.x - transform.position.x, PowerUpTrans.position.z - transform.position.z)).normalized;
                movements.rotate = Alignment(PowerUpDir, this.gameObject);
                if (movements.rotate == Rotation.NoRotate)
                {
                    movements.control = Control.Forward;
                }
                else
                {
                    movements.control = Control.Still;
                }
            }
            else if (DangerSurrounding.Length > 0 || Charstats.CurrentMana < EquippedSpell.Cost || Charstats.CurrentHealth < 150)
            {
                Debug.Log(Charstats.CurrentMana + " : " + EquippedSpell.Cost);
                if (DistanceFromEnemy < 15)
                {
                    movements.rotate = RunAwayFromEnemy(Target.transform);
                }
                else if (DistanceFromEnemy >= 15)
                {
                    movements.rotate = CircleAroundEnemy(Target.transform);
                }

                foreach (Collider Danger in DangerSurrounding)
                {
                    movements.rotate = RunAwayFromEnemy(Danger.gameObject.transform);
                }

                movements.control = Control.Forward;
            }
            else if (IncomingObj.Length > 0)
            {
                foreach (Collider IncObj in IncomingObj)
                {
                    MovingObject spellObj    = IncObj.GetComponent <MovingObject>();
                    HomingObj    homingSpell = IncObj.GetComponent <HomingObj>();
                    if (spellObj != null && spellObj.CasterName == this.gameObject.name)
                    {
                        continue;
                    }
                    if (homingSpell != null && homingSpell.Caster == this.gameObject.name)
                    {
                        continue;
                    }
                    switch (IncObj.gameObject.layer)
                    {
                    case 11:
                        if (DefensiveSpells[1].currentCoolDown < DefensiveSpells[1].Cooldown && movements.IsDoneAnimatingAttack())
                        {
                            defensives.defense = AvoidMissiles(IncObj.gameObject);
                        }
                        else if (MS == null || (MS != null && MS.gameObject.layer != 14))
                        {
                            EquippedSpell = DefensiveSpells[1];
                            CastSpell();
                        }
                        break;

                    case 12:
                        if (DefensiveSpells[0].currentCoolDown < DefensiveSpells[0].Cooldown && movements.IsDoneAnimatingAttack())
                        {
                            defensives.defense = AvoidMissiles(IncObj.gameObject);
                        }
                        else if (MS == null || (MS != null && MS.gameObject.layer != 13))
                        {
                            EquippedSpell = DefensiveSpells[0];
                            CastSpell();
                        }
                        break;

                    case 15:
                        if (movements.IsDoneAnimatingAttack())
                        {
                            defensives.defense = AvoidMissiles(IncObj.gameObject);
                        }
                        break;
                    }
                }
            }
            else if (animator.GetCurrentAnimatorClipInfo(3).Length == 0)
            {
                Vector2 EnemyDir = (new Vector2(Target.transform.position.x - transform.position.x, Target.transform.position.z - transform.position.z)).normalized;
                movements.rotate = Alignment(EnemyDir, Aim);
                GameObject Obstacle = null;

                if (DistanceFromEnemy < 15 && Spells[2].currentCoolDown >= Spells[2].Cooldown)
                {
                    EquippedSpell = Spells[2];
                    CastSpell();
                }
                else if (movements.rotate == Rotation.NoRotate)
                {
                    Vector2    EnemyFacingVec   = (new Vector2(Target.transform.forward.x, Target.transform.forward.z)).normalized;
                    float      EnemyFacingAngle = Mathf.Acos(Vector2.Dot(EnemyDir, EnemyFacingVec));
                    Vector3    RayDir           = (new Vector3(Target.transform.position.x - Aim.transform.position.x, 0, Target.transform.position.z - Aim.transform.position.z)).normalized;
                    RaycastHit Rayhit;

                    Debug.DrawRay(Aim.transform.position, RayDir * 40f);

                    if (Physics.Raycast(new Ray(Aim.transform.position + Aim.transform.right / 2, RayDir), out Rayhit, 40f, 0b100000000000000000))
                    {
                        Obstacle = Rayhit.transform.gameObject;
                    }
                    else if (EnemyFacingAngle < Mathf.PI * .4f)
                    {
                        if (Spells[4].currentCoolDown >= Spells[4].Cooldown)
                        {
                            EquippedSpell = Spells[4];
                            EquippedSpell.CastAtPosition = Target.transform.position;
                            CastSpell();
                        }
                        else
                        {
                            EquippedSpell = Spells[3];
                            CastSpell();
                        }
                    }
                    else
                    {
                        EquippedSpell = Spells[1];
                        CastSpell();
                    }
                }

                if (Obstacle != null)
                {
                    movements.control = AvoidObstacle(Obstacle);
                }
                else if (DistanceFromEnemy < 30)
                {
                    movements.control = Control.Backward;
                }
                else if (DistanceFromEnemy > 40)
                {
                    movements.control = Control.Forward;
                }
                else
                {
                    movements.control = Control.Still;
                }
            }
        }
        else
        {
            movements.control  = Control.Still;
            movements.rotate   = Rotation.NoRotate;
            movements.attacks  = Attacks.NoSpell;
            defensives.defense = Defensive.NotDefensive;
        }

        foreach (AbstractSpell AS in Spells)
        {
            AS.UpdateCoolDown();
        }
        foreach (AbstractSpell AS in DefensiveSpells)
        {
            if (AS.GlobalCoolDown)
            {
                foreach (AbstractSpell DS in DefensiveSpells)
                {
                    DS.currentCoolDown = 0;
                }
                AS.GlobalCoolDown = false;
                break;
            }
            AS.UpdateCoolDown();
        }
    }
Exemple #7
0
    private void OnGUI()
    {
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            EquippedSpell           = Spells[0];
            SpellImageHolder.sprite = Spells[0].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            EquippedSpell           = Spells[1];
            SpellImageHolder.sprite = Spells[1].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            EquippedSpell           = Spells[2];
            SpellImageHolder.sprite = Spells[2].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.Alpha4))
        {
            EquippedSpell           = Spells[3];
            SpellImageHolder.sprite = Spells[3].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.Alpha5))
        {
            EquippedSpell           = Spells[4];
            SpellImageHolder.sprite = Spells[4].SpellImage;
            if (MouseCtrl.mousePointer == null)
            {
                MouseCtrl.mousePointer = Instantiate(LocationPointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.Alpha6))
        {
            EquippedSpell           = Spells[5];
            SpellImageHolder.sprite = Spells[5].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.F1))
        {
            EquippedSpell           = DefensiveSpells[0];
            SpellImageHolder.sprite = DefensiveSpells[0].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }
        else if (Input.GetKeyDown(KeyCode.F2))
        {
            EquippedSpell           = DefensiveSpells[1];
            SpellImageHolder.sprite = DefensiveSpells[1].SpellImage;
            if (MouseCtrl.mousePointer != null)
            {
                Object.Destroy(MouseCtrl.mousePointer);
            }
        }

        for (int i = 0; i < Spells.Length; i++)
        {
            UnuseSpellImages[i].fillAmount = Spells[i].currentCoolDown / Spells[i].Cooldown;
        }
        for (int i = 0; i < DefensiveSpellImages.Length; i++)
        {
            DefensiveSpellImages[i].fillAmount = DefensiveSpells[i].currentCoolDown / DefensiveSpells[i].Cooldown;
        }

        SpellImageHolder.fillAmount = EquippedSpell.currentCoolDown / EquippedSpell.Cooldown;
    }