Pre 3 player support

This commit is contained in:
AnloGames 2023-08-18 01:20:35 +03:00
parent a1adb49918
commit 424583837a
6 changed files with 41 additions and 19 deletions

View file

@ -27,15 +27,17 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
private bool isAttacked = false; private bool isAttacked = false;
public GameObject objectAttack; public GameObject objectAttack;
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.MovEventDown += MoveDown;
}
velocity = new Vector2(0, 0); velocity = new Vector2(0, 0);
rightBorder = (int)position.X + 100; rightBorder = (int)position.X + 100;

View file

@ -231,16 +231,22 @@ namespace DangerousD.GameCore
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; GameManager.GetPlayer1.id = networkTask.objId;
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); GameManager.players.Add(remoteConnectedPlayer);
break; break;

View file

@ -99,7 +99,8 @@ namespace DangerousD.GameCore
public void Update(GameTime gameTime) public void Update(GameTime gameTime)
{ {
AppManager.Instance.DebugHUD.Set("playerId: ", GetPlayer1.id.ToString()); Player p = players.Find(x => x.id == 16);
if (p != null) AppManager.Instance.DebugHUD.Set("NextPlayerVelocity: ", p.velocity.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());
@ -117,7 +118,6 @@ namespace DangerousD.GameCore
{ {
livingEntitiesWithoutPlayers[i].Update(gameTime); livingEntitiesWithoutPlayers[i].Update(gameTime);
} }
GetPlayer1.Update(gameTime);
} }
else else
{ {
@ -125,7 +125,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)

View file

@ -9,6 +9,7 @@ using Microsoft.Xna.Framework.Graphics;
using System.Xml.Serialization; using System.Xml.Serialization;
using DangerousD.GameCore.GameObjects; using DangerousD.GameCore.GameObjects;
using System.Globalization; using System.Globalization;
using DangerousD.GameCore.GameObjects.LivingEntities;
namespace DangerousD.GameCore.Managers namespace DangerousD.GameCore.Managers
{ {
@ -106,7 +107,16 @@ namespace DangerousD.GameCore.Managers
foreach (XmlNode entity in group.ChildNodes) foreach (XmlNode entity in group.ChildNodes)
{ {
Type type = Type.GetType($"DangerousD.GameCore.GameObjects.{entityType}"); Type type = Type.GetType($"DangerousD.GameCore.GameObjects.{entityType}");
Entity inst = (Entity)Activator.CreateInstance(type, new Vector2(float.Parse(entity.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY) * _scale); Vector2 vector = new Vector2(float.Parse(entity.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX, float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY);
Entity inst;
if (type.Equals(typeof(Player)))
{
inst = (Entity)Activator.CreateInstance(type, vector * _scale, false);
}
else
{
inst = (Entity)Activator.CreateInstance(type, vector * _scale);
}
inst.SetPosition(new Vector2(inst.Pos.X, inst.Pos.Y - inst.Height)); inst.SetPosition(new Vector2(inst.Pos.X, inst.Pos.Y - inst.Height));
inst.Height *= _scale; inst.Height *= _scale;
inst.Width *= _scale; inst.Width *= _scale;

View file

@ -21,9 +21,9 @@ namespace DangerousD.GameCore.Managers
item.velocity = item.velocity + item.acceleration * delta; item.velocity = item.velocity + item.acceleration * delta;
} }
CheckCollisionsLE_MO(livingEntities, mapObjects); CheckCollisionsLE_MO(livingEntities.ToList(), mapObjects);
CheckCollisionsE_LE(entities, livingEntities); CheckCollisionsE_LE(entities, livingEntities.ToList());
CheckCollisionsLE_LE(livingEntities); CheckCollisionsLE_LE(livingEntities.ToList());
//entities dont move //entities dont move
//Living entities dont move //Living entities dont move

View file

@ -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,9 @@ namespace DangerousD.GameCore.Network
} }
else else
{ {
GetReceivingMessages(JsonConvert.DeserializeObject<List<NetworkTask>>(so.sb.ToString())); List<NetworkTask> tasks = JsonConvert.DeserializeObject<List<NetworkTask>>(so.sb.ToString());
//SendMsg(tasks, clientSocket);
GetReceivingMessages(tasks);
} }
} }
catch { } catch { }