Exemple #1
0
        public override bool CanMove(Vector2 direction, Room room)
        {
            var collisionChecker = new CollisionChecker();

            direction.Normalize();
            var movedEnemy = new Enemy(_x + _speed * direction.X, _y + _speed * direction.Y,
                                       _width, _height, _speed, _attackSpeed, _leftTexture, _rightTexture, _shotChar, _hp, _damage,
                                       _shotSpeed, _shotRange, _name);

            if (collisionChecker.IsCollided(movedEnemy, room))
            {
                return(false);
            }

            foreach (var t in room.Enemies)
            {
                if (collisionChecker.IsCollided(movedEnemy, t) && t != this)
                {
                    return(false);
                }
            }

            if (collisionChecker.IsCollided(room.Players[0], movedEnemy))
            {
                return(false);
            }



            return(base.CanMove(direction, room));
        }
Exemple #2
0
        public override bool CanMove(Vector2 direction, Room room)
        {
            var collisionChecker = new CollisionChecker();

            direction.Normalize();
            var movedPlayer = new Player(_id, _x + _speed * direction.X, _y + _speed * direction.Y,
                                         _width, _height, _speed, _attackSpeed, _leftTexture, _rightTexture, _shotChar, _hp, _damage,
                                         _shotSpeed, _shotRange, _name);

            if (collisionChecker.IsCollided(movedPlayer, room))
            {
                return(false);
            }
            foreach (var t in room.Obstacles)
            {
                if (collisionChecker.IsCollided(movedPlayer, t))
                {
                    return(false);
                }
            }
            foreach (var t in room.Enemies)
            {
                if (collisionChecker.IsCollided(movedPlayer, t))
                {
                    return(false);
                }
            }

            if (room is ChallengeRoom)
            {
                var chalRoom = room as ChallengeRoom;
                foreach (var t in chalRoom.Levers)
                {
                    if (collisionChecker.IsCollided(movedPlayer, t))
                    {
                        Console.WriteLine("Collision");
                        return(false);
                    }
                }
            }
            return(base.CanMove(direction, room));
        }
        public void Run()
        {
            //var player = _room.Players[0];
            foreach (var player in _room.Players)
            {
                foreach (var t in _room.Players)
                {
                    NetCommandBuilder.AppendToRoomCommand(player, "player_move/" + _room.Players.IndexOf(t) + "/"
                                                          + t.X + "/" + t.Y + "/" + t.Texture);
                }
            }

            foreach (var t in _room.Enemies)
            {
                if (!t.IsWaiting)
                {
                    _room.EnemyControllers[t].Control();
                    foreach (var player in _room.Players)
                    {
                        NetCommandBuilder.AppendToRoomCommand(player, "enemy_move/" + _room.Enemies.IndexOf(t) + "/"
                                                              + t.X + "/" + t.Y + "/" + t.Texture);
                    }
                    //NetCommandBuilder.AppendToRoomCommand("enemy_move/" + _room.Enemies.IndexOf(t) + "/"
                    //    +  t.X + "/" + t.Y + "/" + t.Texture);

                    //if (t is Boss)
                    //{
                    //    var bEnemy = t as Boss;
                    //    var bRoom = _room as BossRoom;
                    //    if (bEnemy.CanUseSkill && bEnemy.Hp < bEnemy.MaxHp / 2)
                    //    {
                    //        bEnemy.UseSkill(bEnemy, bRoom);
                    //    }
                    //}
                }
            }

            if (_room.SummonedEnemies.Count != 0)
            {
                foreach (var t in _room.SummonedEnemies)
                {
                    t.IsWaiting = false;
                    _room.Enemies.Add(t);
                    foreach (var player in _room.Players)
                    {
                        NetCommandBuilder.AppendToRoomCommand(player, "enemy_add/" + t.X + "/" + t.Y + "/" +
                                                              t.Form.Width + "/" + t.Form.Height + "/" + t.Texture);
                    }
                }
                _room.SummonedEnemies.Clear();
            }


            foreach (var t in _room.Shots)
            {
                t.Move();
                foreach (var player in _room.Players)
                {
                    NetCommandBuilder.AppendToRoomCommand(player, "shot_move/" + _room.Shots.IndexOf(t) + "/"
                                                          + t.X + "/" + t.Y + "/" + t.Texture);
                }
            }
            foreach (var t in _room.Shots)
            {
                if (ShotIsRemoved(t))
                {
                    foreach (var player in _room.Players)
                    {
                        NetCommandBuilder.AppendToRoomCommand(player, "shot_remove/" + _room.Shots.IndexOf(t));
                    }
                }
            }
            _room.Shots.RemoveAll(ShotIsRemoved);

            var collisionChecker = new CollisionChecker();

            foreach (var t in _room.Shots)
            {
                foreach (var player in _room.Players)
                {
                    if (collisionChecker.IsCollided(t, _room))
                    {
                        OnShotBorderCollision?.Invoke(t, _room);
                    }
                    if (collisionChecker.IsCollided(t, player))
                    {
                        if (t.Owner.GetType() != player.GetType())
                        {
                            OnShotPlayerCollision?.Invoke(t, player);
                        }
                    }
                }
                foreach (var item in _room.Enemies)
                {
                    if (collisionChecker.IsCollided(t, item))
                    {
                        if (t.Owner != item)
                        {
                            OnShotEnemyCollision?.Invoke(t, item);
                        }
                    }
                }
            }

            foreach (var t in _room.Items)
            {
                foreach (var player in _room.Players)
                {
                    if (collisionChecker.IsCollided(player, t) && t.IsAvailable)
                    {
                        OnPlayerItemCollision?.Invoke(player, t);
                    }
                }
            }
            foreach (var t in _room.Shots)
            {
                if (ShotIsRemoved(t))
                {
                    foreach (var player in _room.Players)
                    {
                        NetCommandBuilder.AppendToRoomCommand(player, "shot_remove/" + _room.Shots.IndexOf(t));
                    }
                }
            }
            _room.Shots.RemoveAll(ShotIsRemoved);
            foreach (var t in _room.Enemies)
            {
                if (EnemyIsDead(t))
                {
                    foreach (var player in _room.Players)
                    {
                        NetCommandBuilder.AppendToRoomCommand(player, "enemy_remove/" + _room.Enemies.IndexOf(t));
                    }
                }
            }
            _room.Enemies.RemoveAll(EnemyIsDead);
            _room.Items.RemoveAll(ItemIsPicked);
            //Network.NetWorker.Send(Encoding.UTF8.GetBytes(NetCommandBuilder.Command));
        }
Exemple #4
0
        public void Run()
        {
            foreach (var player in Players.GamePlayers)
            {
                if (!_currentRooms.ContainsKey(player))
                {
                    _currentRooms[player] = _level.Rooms[_level.StartRoomIndex];
                    LoadRoom(player, _level.Rooms[_level.StartRoomIndex]);

                    foreach (var t in _level.Rooms[_level.StartRoomIndex].Players)
                    {
                        NetCommandBuilder.AppendToRoomCommand(t, "player_add/" + player.X + "/" + player.Y + "/" +
                                                              player.Width + "/" + player.Height + "/" + player.Texture);
                    }

                    _level.Rooms[_level.StartRoomIndex].Players.Add(player);



                    NetCommandBuilder.AppendToRoomCommand(player, "player_add/" + player.X + "/" + player.Y + "/" +
                                                          player.Width + "/" + player.Height + "/" + player.Texture);
                }


                var currentRoom = _currentRooms[player];
                if (_commands.ContainsKey(player))
                {
                    _controller.Control(player, currentRoom, _commands[player]);
                }
                _level.RoomSupervisors[currentRoom].Run();

                //new PlayerUpdater(_playerRemotes).Update(player);
                var collisionChecker = new CollisionChecker();
                if (currentRoom.Enemies.Count == 0 && !(currentRoom is ChallengeRoom))
                {
                    var doors = currentRoom.GetAllDoors();
                    foreach (var t in doors)
                    {
                        t.IsLocked = false;
                    }
                }


                if ((currentRoom.TopDoor != null) && (collisionChecker.IsCollided(player, currentRoom.TopDoor)))
                {
                    if (!currentRoom.TopDoor.IsLocked)
                    {
                        //currentRoom.Shots.Clear();
                        var index = currentRoom.Players.IndexOf(player);
                        currentRoom.Players.Remove(player);



                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_remove/" + index);
                        }

                        currentRoom = currentRoom.TopDoor.NextRoom;
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_add/" + player.X + "/" + player.Y + "/" +
                                                                  player.Width + "/" + player.Height + "/" + player.Texture);
                        }
                        LoadRoom(player, currentRoom);
                        currentRoom.Players.Add(player);
                        player.MoveTo(currentRoom.BotDoor.Form.Left, currentRoom.BotDoor.Form.Top + 0.25f);
                        _currentRooms[player] = currentRoom;
                        foreach (var t in currentRoom.Enemies)
                        {
                            t.Timer.Start();
                        }
                    }
                    NetCommandBuilder.AppendToLevelCommand(player, "change_room/" + _level.Rooms.IndexOf(currentRoom));
                }
                if ((currentRoom.BotDoor != null) && (collisionChecker.IsCollided(player, currentRoom.BotDoor)))
                {
                    if (!currentRoom.BotDoor.IsLocked)
                    {
                        //currentRoom.Shots.Clear();
                        var index = currentRoom.Players.IndexOf(player);
                        currentRoom.Players.Remove(player);
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_remove/" + index);
                        }
                        currentRoom = currentRoom.BotDoor.NextRoom;
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_add/" + player.X + "/" + player.Y + "/" +
                                                                  player.Width + "/" + player.Height + "/" + player.Texture);
                        }
                        LoadRoom(player, currentRoom);
                        currentRoom.Players.Add(player);
                        player.MoveTo(currentRoom.TopDoor.Form.Left, currentRoom.TopDoor.Form.Bottom);
                        _currentRooms[player] = currentRoom;
                        foreach (var t in currentRoom.Enemies)
                        {
                            t.Timer.Start();
                        }
                        NetCommandBuilder.AppendToLevelCommand(player, "change_room/" + _level.Rooms.IndexOf(currentRoom));
                    }
                }
                if ((currentRoom.LeftDoor != null) && (collisionChecker.IsCollided(player, currentRoom.LeftDoor)))
                {
                    if (!currentRoom.LeftDoor.IsLocked)
                    {
                        //currentRoom.Shots.Clear();
                        var index = currentRoom.Players.IndexOf(player);
                        currentRoom.Players.Remove(player);
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_remove/" + index);
                        }
                        currentRoom = currentRoom.LeftDoor.NextRoom;
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_add/" + player.X + "/" + player.Y + "/" +
                                                                  player.Width + "/" + player.Height + "/" + player.Texture);
                        }
                        LoadRoom(player, currentRoom);
                        currentRoom.Players.Add(player);
                        player.MoveTo(currentRoom.RightDoor.Form.Left - player.Form.Width - 0.005f,
                                      currentRoom.RightDoor.Form.Top);
                        _currentRooms[player] = currentRoom;
                        foreach (var t in currentRoom.Enemies)
                        {
                            t.Timer.Start();
                        }
                        NetCommandBuilder.AppendToLevelCommand(player, "change_room/" + _level.Rooms.IndexOf(currentRoom));
                    }
                }
                if ((currentRoom.RightDoor != null) && (collisionChecker.IsCollided(player, currentRoom.RightDoor)))
                {
                    if (!currentRoom.RightDoor.IsLocked)
                    {
                        // currentRoom.Shots.Clear();
                        var index = currentRoom.Players.IndexOf(player);
                        currentRoom.Players.Remove(player);
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_remove/" + index);
                        }
                        currentRoom = currentRoom.RightDoor.NextRoom;
                        foreach (var t in currentRoom.Players)
                        {
                            NetCommandBuilder.AppendToRoomCommand(t, "player_add/" + player.X + "/" + player.Y + "/" +
                                                                  player.Width + "/" + player.Height + "/" + player.Texture);
                        }
                        LoadRoom(player, currentRoom);
                        currentRoom.Players.Add(player);
                        player.MoveTo(currentRoom.LeftDoor.Form.Right, currentRoom.LeftDoor.Form.Top);
                        _currentRooms[player] = currentRoom;
                        foreach (var t in currentRoom.Enemies)
                        {
                            t.Timer.Start();
                        }
                        NetCommandBuilder.AppendToLevelCommand(player, "change_room/" + _level.Rooms.IndexOf(currentRoom));
                    }
                }
                //NetCommandBuilder.AppendToLevelCommand(player, "change_room/" + _level.Rooms.IndexOf(currentRoom));
            }
        }
Exemple #5
0
        public void Run()
        {
            var player = _room.Player;

            foreach (var t in _room.Enemies)
            {
                if (!t.IsWaiting)
                {
                    //var distance = new Vector2(player.X - t.X, player.Y - t.Y).Length;
                    //var direction = new Vector2(player.X - t.X, player.Y - t.Y);
                    ////var direction = new Vector2(t.X - player.X, t.Y - player.Y);
                    //if (direction.X < 0)
                    //{
                    //    t.TurnLeft();
                    //}
                    //if (direction.X > 0)
                    //{
                    //    t.TurnRight();
                    //}
                    //if (distance > 0.8f * t.ShotRange)
                    //{
                    //    if (t.CanMove(direction, _room))
                    //    {
                    //        t.Move(direction);
                    //    }
                    //}
                    //else
                    //{
                    //    direction = new Vector2(player.X - t.XAttack, player.YAttack - t.Y);
                    //    t.Shoot(_room, new Shot(t.XAttack, t.YAttack, direction, t));
                    //}

                    _room.EnemyControllers[t].Control();

                    if (t is Boss)
                    {
                        var bEnemy = t as Boss;
                        var bRoom  = _room as BossRoom;
                        if (bEnemy.CanUseSkill && bEnemy.Hp < bEnemy.MaxHp / 2)
                        {
                            bEnemy.UseSkill(bEnemy, bRoom);
                        }
                    }
                }
            }

            if (_room.SummonedEnemies.Count != 0)
            {
                foreach (var t in _room.SummonedEnemies)
                {
                    t.IsWaiting = false;
                    _room.Enemies.Add(t);
                }
                _room.SummonedEnemies.Clear();
            }


            foreach (var t in _room.Shots)
            {
                t.Move();
            }
            _room.Shots.RemoveAll(ShotIsRemoved);

            var collisionChecker = new CollisionChecker();

            foreach (var t in _room.Shots)
            {
                if (collisionChecker.IsCollided(t, _room))
                {
                    OnShotBorderCollision(t, _room);
                }
                if (collisionChecker.IsCollided(t, player))
                {
                    if (t.Owner.GetType() != player.GetType())
                    {
                        OnShotPlayerCollision?.Invoke(t, player);
                    }
                }
                foreach (var item in _room.Enemies)
                {
                    if (collisionChecker.IsCollided(t, item))
                    {
                        if (t.Owner != item)
                        {
                            OnShotEnemyCollision(t, item);
                        }
                    }
                }
            }

            foreach (var t in _room.Items)
            {
                if (collisionChecker.IsCollided(player, t) && t.IsAvailable)
                {
                    OnPlayerItemCollision(player, t);
                }
            }
            _room.Shots.RemoveAll(ShotIsRemoved);
            _room.Enemies.RemoveAll(EnemyIsDead);
            _room.Items.RemoveAll(ItemIsPicked);
        }
Exemple #6
0
        public void Run(Player player, Room room)
        {
            foreach (var t in room.Enemies)
            {
                if (!t.IsWaiting)
                {
                    //var distance = new Vector2(player.X - t.X, player.Y - t.Y).Length;
                    //var direction = new Vector2(player.X - t.X, player.Y - t.Y);
                    ////var direction = new Vector2(t.X - player.X, t.Y - player.Y);
                    //if (direction.X < 0)
                    //{
                    //    t.TurnLeft();
                    //}
                    //if (direction.X > 0)
                    //{
                    //    t.TurnRight();
                    //}
                    //if (distance > 0.8f * t.ShotRange)
                    //{
                    //    if(t.CanMove(direction, room))
                    //    {
                    //        t.Move(direction);
                    //    }
                    //}
                    //else
                    //{
                    //    direction = new Vector2(player.X - t.XAttack, player.YAttack - t.Y);
                    //    t.Shoot(room, new Shot(t.XAttack, t.YAttack, direction, t));
                    //}



                    if (t is Boss)
                    {
                        var bEnemy = t as Boss;
                        var bRoom  = room as BossRoom;
                        if (bEnemy.CanUseSkill && bEnemy.Hp < bEnemy.MaxHp / 2)
                        {
                            bEnemy.UseSkill(bEnemy, bRoom);
                        }
                    }
                }
            }

            if (room.SummonedEnemies.Count != 0)
            {
                foreach (var t in room.SummonedEnemies)
                {
                    t.IsWaiting = false;
                    room.Enemies.Add(t);
                }
                room.SummonedEnemies.Clear();
            }


            foreach (var t in room.Shots)
            {
                t.Move();
            }
            room.Shots.RemoveAll(ShotIsRemoved);

            var collisionChecker = new CollisionChecker();

            foreach (var t in room.Shots)
            {
                if (collisionChecker.IsCollided(t, room))
                {
                    OnShotBorderCollision(t, room);
                }
                if (collisionChecker.IsCollided(t, player))
                {
                    if (t.Owner.GetType() != player.GetType())
                    {
                        OnShotPlayerCollision?.Invoke(t, player);
                    }
                }
                foreach (var item in room.Enemies)
                {
                    if (collisionChecker.IsCollided(t, item))
                    {
                        if (t.Owner != item)
                        {
                            OnShotEnemyCollision(t, item);
                        }
                    }
                }
            }

            foreach (var t in room.Items)
            {
                if (collisionChecker.IsCollided(player, t) && t.IsAvailable)
                {
                    OnPlayerItemCollision(player, t);
                }
            }

            if (room is BossRoom)
            {
                var bRoom = room as BossRoom;
                if (collisionChecker.IsCollided(player, bRoom.FinishZone))
                {
                    if (bRoom.FinishZone.IsActive)
                    {
                        if (bRoom.Boss.IsFinal)
                        {
                            //_game.Win();
                        }
                        else
                        {
                            _game.GoToNextLevel();
                        }
                    }
                }
            }

            if (room is ChallengeRoom)
            {
                var chalRoom = room as ChallengeRoom;
                if (collisionChecker.IsCollided(player, chalRoom.Note))
                {
                    //new TaskDrawer(_game.Textures).Draw(chalRoom.Note);
                }
            }

            room.Shots.RemoveAll(ShotIsRemoved);
            room.Enemies.RemoveAll(EnemyIsDead);
            room.Items.RemoveAll(ItemIsPicked);
        }
Exemple #7
0
        public void Run()
        {
            if (_currentRoom is ChallengeRoom)
            {
                var chalRoom = _currentRoom as ChallengeRoom;
                new RoomDrawer(_textures).Draw(chalRoom);
            }
            else
            {
                new RoomDrawer(_textures).Draw(_currentRoom);
            }

            new PlayerDrawer(_textures).Draw(_player);
            new PlayerStatsDrawer(_textures).Draw(_player);
            new MinimapDrawer(_textures).Draw(_currentRoom);
            _player.Controller.Control(_player, _currentRoom);

            _roomSupervisor.Run(_player, _currentRoom);
            var collisionChecker = new CollisionChecker();

            if (_currentRoom.Enemies.Count == 0 && !(_currentRoom is ChallengeRoom))
            {
                foreach (var t in _currentRoom.Items)
                {
                    if (!collisionChecker.IsCollided(_player, t))
                    {
                        t.IsAvailable = true;
                    }
                }
                var doors = _currentRoom.GetAllDoors();
                foreach (var t in doors)
                {
                    t.IsLocked = false;
                }
                if (_currentRoom is BossRoom)
                {
                    var bRoom = _currentRoom as BossRoom;
                    if (!collisionChecker.IsCollided(_player, bRoom.FinishZone))
                    {
                        bRoom.FinishZone.IsActive = true;
                    }
                }
            }
            if (_currentRoom is ChallengeRoom)
            {
                var isTrueState = true;
                var chalRoom    = _currentRoom as ChallengeRoom;
                for (var i = 0; i < chalRoom.Levers.Count; i++)
                {
                    if (chalRoom.Levers[i].CurrentState != chalRoom.Note.TrueState[i])
                    {
                        isTrueState = false;
                    }
                }
                if (isTrueState)
                {
                    foreach (var t in _currentRoom.Items)
                    {
                        if (!collisionChecker.IsCollided(_player, t))
                        {
                            t.IsAvailable = true;
                        }
                    }
                    var doors = _currentRoom.GetAllDoors();
                    foreach (var t in doors)
                    {
                        t.IsLocked = false;
                    }
                }
            }

            if ((_currentRoom.TopDoor != null) && (collisionChecker.IsCollided(_player, _currentRoom.TopDoor)))
            {
                if (!_currentRoom.TopDoor.IsLocked)
                {
                    _currentRoom.Shots.Clear();
                    _currentRoom = _currentRoom.TopDoor.NextRoom;
                    //_currentRoom.Player = _game.Player;
                    _player.MoveTo(_currentRoom.BotDoor.Form.Left, _currentRoom.BotDoor.Form.Top + 0.25f);
                    foreach (var t in _currentRoom.Enemies)
                    {
                        t.Timer.Start();
                    }
                }
            }
            if ((_currentRoom.BotDoor != null) && (collisionChecker.IsCollided(_player, _currentRoom.BotDoor)))
            {
                if (!_currentRoom.BotDoor.IsLocked)
                {
                    _currentRoom.Shots.Clear();
                    _currentRoom = _currentRoom.BotDoor.NextRoom;
                    //_currentRoom.Player = _game.Player;
                    _player.MoveTo(_currentRoom.TopDoor.Form.Left, _currentRoom.TopDoor.Form.Bottom);
                    foreach (var t in _currentRoom.Enemies)
                    {
                        t.Timer.Start();
                    }
                }
            }
            if ((_currentRoom.LeftDoor != null) && (collisionChecker.IsCollided(_player, _currentRoom.LeftDoor)))
            {
                if (!_currentRoom.LeftDoor.IsLocked)
                {
                    _currentRoom.Shots.Clear();
                    _currentRoom = _currentRoom.LeftDoor.NextRoom;
                    //_currentRoom.Player = _game.Player;
                    _player.MoveTo(_currentRoom.RightDoor.Form.Left - _player.Form.Width - 0.005f, _currentRoom.RightDoor.Form.Top);
                    foreach (var t in _currentRoom.Enemies)
                    {
                        t.Timer.Start();
                    }
                }
            }
            if ((_currentRoom.RightDoor != null) && (collisionChecker.IsCollided(_player, _currentRoom.RightDoor)))
            {
                if (!_currentRoom.RightDoor.IsLocked)
                {
                    _currentRoom.Shots.Clear();
                    _currentRoom = _currentRoom.RightDoor.NextRoom;
                    //_currentRoom.Player = _game.Player;
                    _player.MoveTo(_currentRoom.LeftDoor.Form.Right, _currentRoom.LeftDoor.Form.Top);
                    foreach (var t in _currentRoom.Enemies)
                    {
                        t.Timer.Start();
                    }
                }
            }
        }