public void LearnSpell(AbstractSpell spell) { if (!KnownSpells.Contains(spell)) { KnownSpells.Add(spell); } }
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); } }
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(); } }
// 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(); } }
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; }