예제 #1
0
 public bool CastSpell(Spell spell, int CurrentTime)
 {
     if (!IsExhausted(CurrentTime) && Mana >= spell.ManaCost)
     {
         SpendMana(spell.ManaCost);
         Exhaustion = CurrentTime;
         return true;
     }
     return false;
 }
예제 #2
0
        public List<DamageObject> PlayerCastSpell(Player player, Spell spell, Creature target, GameTime gameTime)
        {
            List<DamageObject> DamagedMonsters = new List<DamageObject>();
            int currentTime = (int)gameTime.TotalGameTime.TotalMilliseconds;
            if (!spell.TargetSpell)
            {
                for (int i = 0; i < spell.Area.Length / 3; i++)
                {
                    for (int j = 0; j < spell.Area.Length / 3; j++)
                    {
                        if (spell.Area[i + j])
                        {
                            /* TODO: Make area spell healing possible! */
                            int creatureID = GetCreatureIDFromTile(new Coordinates(player.Position.X - Coordinates.Step + (i * Coordinates.Step), player.Position.Y - Coordinates.Step + (j * Coordinates.Step)));
                            if (creatureID != -1)
                            {
                                Creature creature = GetCreatureByID(creatureID);
                                if (creature.Health > 0)
                                {
                                    int DamageDealt = creature.ReceiveDamage(spell.Damage + (player.MagicStrength * 2), 0);
                                    DamagedMonsters.Add(new DamageObject(creature, DamageDealt, spell.HealSpell, currentTime, currentTime + DamageObject.DamageDuration));
                                    if (creature.Health < 1)
                                    {
                                        player.ReceiveExperience(creature.Experience);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                if(spell.HealSpell)
                {
                    int damage = spell.Damage + (player.MagicStrength * 2);
                    if (player.Health + damage > player.MaxHealth)
                    {
                        damage = player.MaxHealth - player.Health;
                        player.Health = player.MaxHealth;
                    }
                    else
                    {
                        player.Health += damage;
                    }
                    DamagedMonsters.Add(new DamageObject(player, damage, spell.HealSpell, currentTime, currentTime + DamageObject.DamageDuration));
                }
                else
                {
                    int DamageDealt = target.ReceiveDamage(spell.Damage + (player.MagicStrength * 2), 0);
                    DamagedMonsters.Add(new DamageObject(target, DamageDealt, spell.HealSpell, currentTime, currentTime + DamageObject.DamageDuration));
                    if (target.Health < 1)
                    {
                        player.ReceiveExperience(target.Experience);
                    }
                }
            }

            return DamagedMonsters;
        }
예제 #3
0
 public bool IsExhausted(int CurrentTime, Spell castSpell)
 {
     if (CurrentTime - Exhaustion > castSpell.Cooldown)
     {
         return false;
     }
     return true;
 }
예제 #4
0
 public bool CastSpell(Spell spell, int CurrentTime)
 {
     if (!IsExhausted(CurrentTime, spell) && Mana >= spell.ManaCost)
     {
         if (EntityType == Entity.PlayerEntity)
         {
             SpendMana(spell.ManaCost);
         }
         Exhaustion = CurrentTime;
         return true;
     }
     return false;
 }
예제 #5
0
파일: Map.cs 프로젝트: Szune/Elysian-Fields
        internal List<DamageObject> PlayerCastSpell(Player player, Spell spell, Creature target, GameTime gameTime)
        {
            List<DamageObject> DamagedMonsters = new List<DamageObject>();
            int currentTime = (int)gameTime.TotalGameTime.TotalMilliseconds;
            if (spell.AreaSpell)
            {
                Coordinates TopLeftOfScreen = new Coordinates(player.Position.X - 7, player.Position.Y - 5);
                /* TODO: Make area spell healing possible! */
                int n = 1;
                int y = 0;
                int x = 0;
                int experience = 0;
                for (int i = 0; i < spell.Area.Length; i++)
                {
                    if (n % 15 == 0)
                    {
                        y++;
                        x = -1;
                    }
                    if (spell.Area[i] == 1)
                    {
                        //spriteBatch.Draw(spell.Sprite, new Vector2((float)(SpellDamage[index].Position.X - map.Players[0].Position.X + (Utility.ScreenX) - 7 + x) * Coordinates.Step, (float)(SpellDamage[index].Position.Y - map.Players[0].Position.Y + (Utility.ScreenY) - 5 + y) * Coordinates.Step), null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
                        List<Creature> CastOnCreatures = GetCreaturesFromTile(new Coordinates(TopLeftOfScreen.X + x, TopLeftOfScreen.Y + y, player.Position.Z));
                        for (int c = 0; c < CastOnCreatures.Count; c++)
                        {

                            Creature creature = CastOnCreatures[c];
                            if (creature.Health > 0)
                            {
                                int DamageDealt = creature.ReceiveDamage(spell.Damage + (player.MagicStrength * 2), 0);
                                int text_type = 0;
                                if (spell.HealSpell)
                                {
                                    text_type = DamageObject.Text_Healing;
                                }
                                else
                                {
                                    text_type = DamageObject.Text_Damage;
                                }
                                DamagedMonsters.Add(new DamageObject(creature, DamageDealt, text_type, currentTime, currentTime + DamageObject.DamageDuration));
                                if (creature.Health < 1)
                                {
                                    experience += CreatureDie(creature, player);
                                }
                            }
                        }
                    }
                    n++;
                    x++;
                }
                if (experience > 0)
                {
                    DamagedMonsters.Add(new DamageObject(player, experience, DamageObject.Text_Experience, currentTime, currentTime + DamageObject.DamageDuration));
                }
            }
            else
            {
                if (spell.HealSpell)
                {
                    int damage = spell.Damage + (player.MagicStrength * 2);
                    if (player.Health + damage > player.MaxHealth)
                    {
                        damage = player.MaxHealth - player.Health;
                        player.Health = player.MaxHealth;
                    }
                    else
                    {
                        player.Health += damage;
                    }
                    int text_type = 0;
                    if (spell.HealSpell)
                    {
                        text_type = DamageObject.Text_Healing;
                    }
                    else
                    {
                        text_type = DamageObject.Text_Damage;
                    }
                    DamagedMonsters.Add(new DamageObject(player, damage, text_type, currentTime, currentTime + DamageObject.DamageDuration));
                }
                else
                {
                    int DamageDealt = target.ReceiveDamage(spell.Damage + (player.MagicStrength * 2), 0);
                    int text_type = 0;
                    if (spell.HealSpell)
                    {
                        text_type = DamageObject.Text_Healing;
                    }
                    else
                    {
                        text_type = DamageObject.Text_Damage;
                    }
                    DamagedMonsters.Add(new DamageObject(target, DamageDealt, text_type, currentTime, currentTime + DamageObject.DamageDuration));
                    if (target.Health < 1)
                    {
                        int experience = CreatureDie(target, player);
                        DamagedMonsters.Add(new DamageObject(player, experience, DamageObject.Text_Experience, currentTime, currentTime + DamageObject.DamageDuration));
                    }
                }
            }

            return DamagedMonsters;
        }
예제 #6
0
 private void DrawSpell(Spell spell, GameTime gameTime, int index)
 {
     if (gameTime.TotalGameTime.TotalMilliseconds < SpellDamage[index].EndTime)
     {
         if (!spell.TargetSpell)
         {
             for (int i = 0; i < spell.Area.Length / 3; i++)
             {
                 for (int j = 0; j < spell.Area.Length / 3; j++)
                 {
                     if (spell.Area[i + j])
                     {
                         spriteBatch.Draw(spell.Sprite, new Vector2((float)SpellDamage[index].Position.X - Coordinates.Step + (i * Coordinates.Step), (float)SpellDamage[index].Position.Y - Coordinates.Step + (j * Coordinates.Step)), null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
                     }
                 }
             }
         }
         else
         {
             spriteBatch.Draw(spell.Sprite, new Vector2((float)SpellDamage[index].creature.Position.X, (float)SpellDamage[index].creature.Position.Y), null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
         }
     }
     else
     {
         SpellDamage.RemoveAt(index);
     }
 }
예제 #7
0
 private void DrawSpell(Spell spell, GameTime gameTime, int index)
 {
     if (gameTime.TotalGameTime.TotalMilliseconds < SpellDamage[index].EndTime)
     {
         if (spell.AreaSpell)
         {
             int c = 1;
             int y = 0;
             int x = 0;
             for (int i = 0; i < spell.Area.Length; i++)
             {
                 if (c % 15 == 0)
                 {
                     y++;
                     x = -1;
                 }
                 if (spell.Area[i] == 1)
                 {
                     spriteBatch.Draw(spell.Sprite, new Vector2((float)(SpellDamage[index].Position.X - map.Players[0].Position.X + (Utility.ScreenX) - 7 + x) * Coordinates.Step, (float)(SpellDamage[index].Position.Y - map.Players[0].Position.Y + (Utility.ScreenY) - 5 + y) * Coordinates.Step), null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
                 }
                 c++;
                 x++;
             }
         }
         else
         {
             spriteBatch.Draw(spell.Sprite, new Vector2((float)(SpellDamage[index].creature.Position.X - map.Players[0].Position.X + Utility.ScreenX) * Coordinates.Step, (float)(SpellDamage[index].creature.Position.Y - map.Players[0].Position.Y + Utility.ScreenY) * Coordinates.Step), null, Color.White, 0f, Vector2.Zero, 1f, SpriteEffects.None, 0f);
         }
     }
     else
     {
         SpellDamage.RemoveAt(index);
     }
 }