Пример #1
0
 public void GetMessages(Character player, ref Battle battle, ref bool allowedToWalk, ref List<Shop> shops)
 {
     switch (character.NpcKind)
     {
         case NPCKind.Trainer:
             if (!character.BattleMessage.Said)
             {
                 character.BattleMessage.Visible = true;
                 character.Talking = true;
             }
             if (!character.Talking)
             {
                 battle = new Battle(player, character);
                 allowedToWalk = true;
             }
             break;
         case NPCKind.Healer:
             if (!character.IntroMessage.Said)
             {
                 character.IntroMessage.Visible = true;
                 character.Talking = true;
             }
             if (!character.Talking)
             {
                 if (character.ByeMessage.Said == false)
                 {
                     HealMonsters(player);
                     character.ByeMessage.Visible = true;
                 }
                 else
                 {
                     character.Talking = false;
                 }
             }
             break;
         case NPCKind.Shop:
             if (!character.IntroMessage.Said)
             {
                 character.IntroMessage.Visible = true;
                 character.Talking = true;
             }
             if (!character.Talking)
             {
                 if (character.ByeMessage.Said == false)
                 {
                     if (!shopAdded)
                     {
                         shops.Add( new Shop("Best shop around TM", character, player));
                         shopAdded = true;
                     }
                 }
                 else
                 {
                     character.Talking = false;
                 }
             }
             break;
     }
 }
Пример #2
0
 public void Update(GameTime gameTime, KeyboardState currentKeyboardState, KeyboardState previousKeyboardState,
     MouseState currentMouseState, MouseState previousMouseState,
     Character player, ref Battle currentBattle)
 {
     if (OpponentList == null) return;
     if (OpponentList.Count == 0) return;
     foreach (var opponent in OpponentList) {
         opponent.UpdateMessages(currentKeyboardState, previousKeyboardState, player);
         opponent.Update(gameTime, currentKeyboardState, previousKeyboardState);
         opponent.AI.Update(player, ref currentBattle, ref shopList, currentMouseState, previousMouseState);
     }
     foreach (var shop in shopList) {
         shop.Update(currentMouseState, previousMouseState);
     }
     Box.Update(currentMouseState, previousMouseState, gameTime);
 }
Пример #3
0
        public void GetEncounters(Character player, ref Battle battle, ref bool battling)
        {
            EncounterColliders.Clear();
            var encounterLayers = Map.TileLayers.Where(layer => layer.Properties.ContainsKey("Encounters") && layer.Properties.ContainsValue("true")).ToList();
            foreach (var layer in encounterLayers) {
                foreach (var tile in layer.Tiles) {
                    if (tile.Id != 0) {
                        encounterHitbox = new Rectangle((tile.X * tileWidth), (tile.Y * tileHeight), tileWidth, tileHeight);
                        EncounterColliders.Add(encounterHitbox);
                    }
                }
            }
            if (EncounterColliders.Count != 0) {
                foreach (var collision in EncounterColliders) {
                    if (player.Hitbox.Intersects(collision)) {
                        Random rand = new Random();

                        if (player.Position != previousPos && player.Moved >= 29f) {
                            var chanceToEncounter = rand.Next(0, 100);

                            if (chanceToEncounter <= 5) {
                                battling = true;
                                battle = new Battle(player, GetRandomMonster());
                            }
                        }
                    }
                }
            }
            previousPos = player.Position;
        }
Пример #4
0
        public static void UseMedicine(Battle b, Character player, Monster user)
        {
            List<Medicine> medicineList = new List<Medicine>();

            foreach (var medicine in player.Inventory.Medicine.Values)
            {
                if (medicine.HealAmount != 0)
                {
                    medicineList.Add(medicine);
                }

            }
            if (medicineList.Count != 0)
            {
                Random r = new Random();
                var medicine = medicineList[r.Next(0, medicineList.Count)];
                Drawer.AddMessage(new List<string> { $"{medicine.Name} used on {user.Name}." });
                medicine.Use(user, player);
            }
        }
Пример #5
0
        public static void UseBuff(Battle b, Monster user, Monster receiver)
        {
            List<Move> moveList = new List<Move>();
            foreach (var move in user.Moves)
            {
                if (move.Kind == Kind.NonDamage)
                {
                    moveList.Add(move);
                }
            }
            if (moveList.Count != 0)
            {
                Random r = new Random();

                b.Attack(user, receiver, moveList[r.Next(0, moveList.Count)]);
            }
        }
Пример #6
0
        public static void MakeDecision(Battle b, Move m, Monster user, Monster receiver, Character player)
        {
            Random random = new Random();

            switch (random.Next(1, 5))
            {
                case 1:
                    EnemyAttack(b, user, receiver);
                    break;
                case 2:
                    UseBuff(b, user, receiver);
                    break;
                case 3:
                    if (user.Ailment != Ailment.Normal)
                    {
                        if (player != null)
                        {
                            foreach (var value in player.Inventory.Medicine.Values)
                            {
                                if (Medicine.CuresAilment(user.Ailment))
                                {
                                    UseMedicine(b, player, user);
                                }
                            }
                        }
                    }
                    else
                    {
                        EnemyAttack(b, user, receiver);
                    }
                    break;
                case 4:
                    if (user.Stats.Health < user.MaxHealth / 100 * 20)
                    {
                        if (player != null)
                        {
                            if (player.Inventory.Medicine.Count != 0)
                            {
                                UseMedicine(b, player, user);
                            }
                            else
                            {
                                EnemyAttack(b, user, receiver);
                            }
                        }
                        else
                        {
                            EnemyAttack(b, user, receiver);
                        }
                    }
                    else
                    {
                        EnemyAttack(b, user, receiver);
                    }
                    break;
                case 5:
                    if (user.Ailment != Ailment.Normal)
                    {
                        foreach (var value in player.Inventory.Medicine.Values)
                        {
                            if (Medicine.CuresAilment(user.Ailment))
                            {
                                UseMedicine(b, player, user);
                            }
                        }
                    }

                    if (user.Stats.Health < user.MaxHealth / 100 * 20)
                    {
                        if (player != null)
                        {
                            if (player.Inventory.Medicine.Count != 0)
                            {
                                UseMedicine(b, player, user);
                            }
                            else
                            {
                                if (m.Damage != null)
                                {
                                    if (m.Damage > user.Stats.Health)
                                    {
                                        EnemyAttack(b, user, receiver);
                                    }
                                    else
                                    {
                                        UseBuff(b, user, receiver);
                                    }
                                }
                                else
                                {
                                    UseBuff(b, user, receiver);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (m != null)
                        {
                            if (m.Damage != 0)
                            {
                                if (m.Damage > user.Stats.Health)
                                {
                                    EnemyAttack(b, user, receiver);
                                }
                                else
                                {
                                    UseBuff(b, user, receiver);
                                }
                            }
                            else
                            {
                                UseBuff(b, user, receiver);
                            }
                        }
                        else
                        {
                            UseBuff(b, user, receiver);
                        }
                    }
                    break;
            }
        }
Пример #7
0
 public static void EnemyAttack(Battle b, Monster user, Monster receiver)
 {
     strongestAttack = Move.Glare();
     //user.GetMoves();
     foreach (var m in user.Moves.Where(x => x.Uses != 0))
     {
         m.Damage = m.GetDamage(user.Stats.SpecialAttack, receiver.Stats.SpecialDefense,
                    m.GetDamageModifier(receiver), 1);
         if (m.Damage > strongestAttack.Damage)
         {
             strongestAttack = m;
         }
     }
     b.Attack(user, receiver, strongestAttack);
 }
Пример #8
0
 public void Update(Character player, ref Battle battle, ref List<Shop> shops, MouseState cur, MouseState prev)
 {
     var playerRect = new Rectangle((int)player.Position.X, (int)player.Position.Y, 32, 32);
     character.SetLineOfSight(tiles);
     Hitbox = new Rectangle((int)character.Position.X - (character.SpriteSize.X / 2), (int)character.Position.Y - (character.SpriteSize.Y / 2),
       character.SpriteSize.X * 2, character.SpriteSize.Y * 2);
     if (character.NpcKind == NPCKind.Trainer)
     {
         if (character.LineOfSightRectangle.Intersects(playerRect))
         {
             Chase = true;
         }
         if (Chase)
             MoveToPoint(player.Position, 100, player, ref player.Controllable, ref battle, ref shops);
     }
     else
     {
         if (character.LineOfSightRectangle.Intersects(playerRect))
         {
             GetMessages(player, ref battle, ref player.Controllable, ref shops);
         }
         else
         {
             ResetMessages();
         }
     }
 }
Пример #9
0
        public void MoveToPoint(Vector2 move, float delay, Character player, ref bool allowedToWalk, ref Battle battle, ref List<Shop> shops)
        {
            if (!character.Defeated)
            {
                var distanceX = move.X - character.Position.X;
                var distanceY = move.Y - character.Position.Y;
                var moveX = distanceX / delay;
                var moveY = distanceY / delay;

                Hitbox = new Rectangle((int)character.Position.X - (character.SpriteSize.X / 2),
                    (int)character.Position.Y - (character.SpriteSize.Y / 2),
                    character.SpriteSize.X * 2, character.SpriteSize.Y * 2);
                if (!Hitbox.Contains(player.Position))
                {
                    allowedToWalk = false;
                    if (character.Direction == Direction.Right || character.Direction == Direction.Left)
                        character.Position.X += moveX * 2;
                    if (character.Direction == Direction.Down || character.Direction == Direction.Up)
                        character.Position.Y += moveY * 2;
                }
                else
                {
                    GetMessages(player, ref battle, ref allowedToWalk, ref shops);
                }
            }
            else Chase = false;
        }