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)); }
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)); }
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)); } }
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); }
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); }
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(); } } } }