Another Network Improvment(2 players support)
This commit is contained in:
commit
a0cb764e11
5 changed files with 42 additions and 20 deletions
|
@ -15,6 +15,7 @@ namespace DangerousD.GameCore
|
||||||
protected Vector2 _pos;
|
protected Vector2 _pos;
|
||||||
public Vector2 Pos => _pos;
|
public Vector2 Pos => _pos;
|
||||||
public int id;
|
public int id;
|
||||||
|
public bool isIdFromHost = false;
|
||||||
public int Width { get; set; }
|
public int Width { get; set; }
|
||||||
public int Height { get; set; }
|
public int Height { get; set; }
|
||||||
public Rectangle Rectangle => new Rectangle((int)Pos.X, (int)Pos.Y, Width, Height);
|
public Rectangle Rectangle => new Rectangle((int)Pos.X, (int)Pos.Y, Width, Height);
|
||||||
|
|
|
@ -32,16 +32,17 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
|
||||||
private int bullets;
|
private int bullets;
|
||||||
public bool FallingThroughPlatform = false;
|
public bool FallingThroughPlatform = false;
|
||||||
|
|
||||||
public Player(Vector2 position) : base(position)
|
public Player(Vector2 position, bool isNetworkPlayer = false) : base(position)
|
||||||
{
|
{
|
||||||
Width = 16;
|
Width = 16;
|
||||||
Height = 32;
|
Height = 32;
|
||||||
|
|
||||||
AppManager.Instance.InputManager.ShootEvent += Shoot;
|
if (!isNetworkPlayer)
|
||||||
|
{
|
||||||
AppManager.Instance.InputManager.MovEventJump += Jump;
|
AppManager.Instance.InputManager.ShootEvent += Shoot;
|
||||||
AppManager.Instance.InputManager.MovEventDown += MoveDown;
|
AppManager.Instance.InputManager.MovEventJump += Jump;
|
||||||
AppManager.Instance.InputManager.ShootEvent += Shoot;
|
AppManager.Instance.InputManager.MovEventDown += MoveDown;
|
||||||
|
}
|
||||||
|
|
||||||
velocity = new Vector2(0, 0);
|
velocity = new Vector2(0, 0);
|
||||||
rightBorder = (int)position.X + 100;
|
rightBorder = (int)position.X + 100;
|
||||||
|
|
|
@ -12,6 +12,7 @@ using MonogameLibrary.UI.Base;
|
||||||
using DangerousD.GameCore.Managers;
|
using DangerousD.GameCore.Managers;
|
||||||
using DangerousD.GameCore.GameObjects.LivingEntities;
|
using DangerousD.GameCore.GameObjects.LivingEntities;
|
||||||
using DangerousD.GameCore.GameObjects;
|
using DangerousD.GameCore.GameObjects;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace DangerousD.GameCore
|
namespace DangerousD.GameCore
|
||||||
{
|
{
|
||||||
|
@ -111,6 +112,8 @@ namespace DangerousD.GameCore
|
||||||
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
|
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
|
||||||
Exit();
|
Exit();
|
||||||
|
|
||||||
|
if (GameManager.GetPlayer1 != null)
|
||||||
|
DebugHUD.Set("Objid: ", GameManager.GetPlayer1.id.ToString());
|
||||||
InputManager.Update();
|
InputManager.Update();
|
||||||
SoundManager.Update();
|
SoundManager.Update();
|
||||||
|
|
||||||
|
@ -225,24 +228,40 @@ namespace DangerousD.GameCore
|
||||||
case NetworkTaskOperationEnum.CreateEntity:
|
case NetworkTaskOperationEnum.CreateEntity:
|
||||||
break;
|
break;
|
||||||
case NetworkTaskOperationEnum.SendPosition:
|
case NetworkTaskOperationEnum.SendPosition:
|
||||||
LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId);
|
if (networkTask.objId != GameManager.GetPlayer1.id)
|
||||||
entity.SetPosition(networkTask.position);
|
{
|
||||||
|
LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId);
|
||||||
|
entity.SetPosition(networkTask.position);
|
||||||
|
if (multiPlayerStatus == MultiPlayerStatus.Host)
|
||||||
|
{
|
||||||
|
NetworkTasks.Add(networkTask);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NetworkTaskOperationEnum.ChangeState:
|
case NetworkTaskOperationEnum.ChangeState:
|
||||||
break;
|
break;
|
||||||
case NetworkTaskOperationEnum.ConnectToHost:
|
case NetworkTaskOperationEnum.ConnectToHost:
|
||||||
Player connectedPlayer = new Player(Vector2.Zero);
|
Player connectedPlayer = new Player(Vector2.Zero, true);
|
||||||
NetworkTasks.Add(new NetworkTask(connectedPlayer.id));
|
NetworkTasks.Add(new NetworkTask(connectedPlayer.id));
|
||||||
NetworkTask task = new NetworkTask();
|
NetworkTask task = new NetworkTask();
|
||||||
NetworkTasks.Add(task.AddConnectedPlayer(GameManager.GetPlayer1.id, GameManager.GetPlayer1.Pos));
|
foreach (Player player in GameManager.players)
|
||||||
|
{
|
||||||
|
if (player.id != connectedPlayer.id)
|
||||||
|
{
|
||||||
|
NetworkTasks.Add(task.AddConnectedPlayer(player.id, player.Pos));
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NetworkTaskOperationEnum.GetClientPlayerId:
|
case NetworkTaskOperationEnum.GetClientPlayerId:
|
||||||
GameManager.GetPlayer1.id = networkTask.objId;
|
if (!GameManager.GetPlayer1.isIdFromHost)
|
||||||
|
{
|
||||||
|
GameManager.GetPlayer1.id = networkTask.objId;
|
||||||
|
GameManager.GetPlayer1.isIdFromHost = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NetworkTaskOperationEnum.AddConnectedPlayer:
|
case NetworkTaskOperationEnum.AddConnectedPlayer:
|
||||||
Player remoteConnectedPlayer = new Player(networkTask.position);
|
Player remoteConnectedPlayer = new Player(networkTask.position, true);
|
||||||
remoteConnectedPlayer.id = networkTask.objId;
|
remoteConnectedPlayer.id = networkTask.objId;
|
||||||
GameManager.players.Add(remoteConnectedPlayer);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -129,7 +129,6 @@ namespace DangerousD.GameCore
|
||||||
|
|
||||||
public void Update(GameTime gameTime)
|
public void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
AppManager.Instance.DebugHUD.Set("playerId: ", GetPlayer1.id.ToString());
|
|
||||||
if (AppManager.Instance.NetworkTasks.Count > 0)
|
if (AppManager.Instance.NetworkTasks.Count > 0)
|
||||||
{
|
{
|
||||||
AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList());
|
AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList());
|
||||||
|
@ -147,7 +146,6 @@ namespace DangerousD.GameCore
|
||||||
{
|
{
|
||||||
livingEntitiesWithoutPlayers[i].Update(gameTime);
|
livingEntitiesWithoutPlayers[i].Update(gameTime);
|
||||||
}
|
}
|
||||||
GetPlayer1.Update(gameTime);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -155,7 +153,6 @@ namespace DangerousD.GameCore
|
||||||
{
|
{
|
||||||
livingEntitiesWithoutPlayers[i].PlayAnimation();
|
livingEntitiesWithoutPlayers[i].PlayAnimation();
|
||||||
}
|
}
|
||||||
GetPlayer1.Update(gameTime);
|
|
||||||
}
|
}
|
||||||
GetPlayer1.Update(gameTime);
|
GetPlayer1.Update(gameTime);
|
||||||
foreach (var item in otherObjects)
|
foreach (var item in otherObjects)
|
||||||
|
|
|
@ -91,7 +91,7 @@ namespace DangerousD.GameCore.Network
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
public void SendMsg(List<NetworkTask> networkTask)
|
public void SendMsg(List<NetworkTask> networkTask, Socket ignoreSocket = null)
|
||||||
{
|
{
|
||||||
byte[] Data = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(networkTask));
|
byte[] Data = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(networkTask));
|
||||||
int count = Data.Length;
|
int count = Data.Length;
|
||||||
|
@ -101,8 +101,11 @@ namespace DangerousD.GameCore.Network
|
||||||
{
|
{
|
||||||
foreach (Socket socket in clientSockets)
|
foreach (Socket socket in clientSockets)
|
||||||
{
|
{
|
||||||
socket.Send(BitConverter.GetBytes(count));
|
if (!(socket == ignoreSocket))
|
||||||
socket.Send(Data);
|
{
|
||||||
|
socket.Send(BitConverter.GetBytes(count));
|
||||||
|
socket.Send(Data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
@ -148,7 +151,8 @@ namespace DangerousD.GameCore.Network
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetReceivingMessages(JsonConvert.DeserializeObject<List<NetworkTask>>(so.sb.ToString()));
|
List<NetworkTask> tasks = JsonConvert.DeserializeObject<List<NetworkTask>>(so.sb.ToString());
|
||||||
|
GetReceivingMessages(tasks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
|
|
Loading…
Add table
Reference in a new issue