From 3ec1fa3ab8f41f2d09ebfcc82aa8be9efc0cd1fe Mon Sep 17 00:00:00 2001 From: AnloGames <7383an@gmail.com> Date: Fri, 18 Aug 2023 00:03:01 +0300 Subject: [PATCH 1/2] GLOBAL NETWORK FIX --- DangerousD/GameCore/GameObjects/GameObject.cs | 7 +- .../LivingEntities/Player/Player.cs | 10 ++- DangerousD/GameCore/Managers/AppManager.cs | 18 +++- DangerousD/GameCore/Managers/GameManager.cs | 85 ++++++++++--------- DangerousD/GameCore/Managers/SoundManager.cs | 4 +- DangerousD/GameCore/Network/NetworkManager.cs | 8 +- DangerousD/GameCore/Network/NetworkTask.cs | 8 ++ .../Network/NetworkTaskOperationEnum.cs | 2 +- 8 files changed, 88 insertions(+), 54 deletions(-) diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index 96ff4ad..ceb5e5a 100644 --- a/DangerousD/GameCore/GameObjects/GameObject.cs +++ b/DangerousD/GameCore/GameObjects/GameObject.cs @@ -14,6 +14,7 @@ namespace DangerousD.GameCore { protected Vector2 _pos; public Vector2 Pos => _pos; + public int id; public int Width { get; set; } public int Height { get; set; } public Rectangle Rectangle => new Rectangle((int)Pos.X, (int)Pos.Y, Width, Height); @@ -38,10 +39,14 @@ namespace DangerousD.GameCore { } - public void LoadContent() + public void PlayAnimation() { GraphicsComponent.LoadContent(); } + public void LoadContent() + { + PlayAnimation(); + } public virtual void Update(GameTime gameTime) { diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 122f360..72e511d 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using DangerousD.GameCore.GameObjects.PlayerDeath; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Graphics; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore.GameObjects.LivingEntities { @@ -51,10 +52,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities } public override void OnCollision(GameObject gameObject) { - if (gameObject is Player) - { - isVisible = false; - } base.OnCollision(gameObject); } public override void Draw(SpriteBatch spriteBatch) @@ -124,6 +121,11 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities GraphicsComponent.StartAnimation("ZombieMoveLeft"); } } + if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer) + { + NetworkTask task = new NetworkTask(id, Pos); + AppManager.Instance.NetworkTasks.Add(task); + } } public void MoveDown() { diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index a4a1063..87483f2 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -10,6 +10,8 @@ using DangerousD.GameCore.Graphics; using DangerousD.GameCore.Network; using MonogameLibrary.UI.Base; using DangerousD.GameCore.Managers; +using DangerousD.GameCore.GameObjects.LivingEntities; +using DangerousD.GameCore.GameObjects; namespace DangerousD.GameCore { @@ -31,6 +33,7 @@ namespace DangerousD.GameCore IDrawableObject LobbyGUI; IDrawableObject DeathGUI; public DebugHUD DebugHUD; + public List NetworkTasks = new List(); public GameManager GameManager { get; private set; } = new(); public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder(); @@ -56,7 +59,7 @@ namespace DangerousD.GameCore resolution = SettingsManager.Resolution; _graphics.PreferredBackBufferWidth = resolution.X; _graphics.PreferredBackBufferHeight = resolution.Y; - _graphics.IsFullScreen = true; + _graphics.IsFullScreen = false; gameState = GameState.Menu; MenuGUI = new MenuGUI(); LoginGUI = new LoginGUI(); @@ -211,18 +214,29 @@ namespace DangerousD.GameCore case NetworkTaskOperationEnum.CreateEntity: break; case NetworkTaskOperationEnum.SendPosition: + LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId); + entity.SetPosition(networkTask.position); break; case NetworkTaskOperationEnum.ChangeState: break; case NetworkTaskOperationEnum.ConnectToHost: + Player connectedPlayer = new Player(Vector2.Zero); + NetworkTasks.Add(new NetworkTask(connectedPlayer.id)); + NetworkTask task = new NetworkTask(); + NetworkTasks.Add(task.AddConnectedPlayer(GameManager.GetPlayer1.id, GameManager.GetPlayer1.Pos)); break; case NetworkTaskOperationEnum.GetClientPlayerId: + GameManager.GetPlayer1.id = networkTask.objId; + break; + case NetworkTaskOperationEnum.AddConnectedPlayer: + Player remoteConnectedPlayer = new Player(networkTask.position); + remoteConnectedPlayer.id = networkTask.objId; + GameManager.players.Add(remoteConnectedPlayer); break; default: break; } } - } public void SetMultiplayerState(MultiPlayerStatus multiPlayerStatus) { diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index 7f19fd3..7e4851a 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -8,14 +8,18 @@ using System; using System.Collections.Generic; using System.Text; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; +using System.Linq; +using DangerousD.GameCore.GUI; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore { public class GameManager { public List GetAllGameObjects { get; private set; } - + private int currentEntityId = 0; public List livingEntities; + public List livingEntitiesWithoutPlayers; public List entities; public List mapObjects; public List BackgroundObjects; @@ -24,34 +28,43 @@ namespace DangerousD.GameCore public PhysicsManager physicsManager; public List players; public List otherObjects = new(); - - public Player GetPlayer1 => players[0]; + + public Player GetPlayer1 { get; private set; } public GameManager() { others = new List(); GetAllGameObjects = new List(); livingEntities = new List(); + livingEntitiesWithoutPlayers = new List(); mapObjects = new List(); BackgroundObjects = new List(); entities = new List(); players = new List(); mapManager = new MapManager(1); physicsManager = new PhysicsManager(); - - } - + } internal void Register(GameObject gameObject) { GetAllGameObjects.Add(gameObject); + if (gameObject is Entity) + { + gameObject.id = currentEntityId; + currentEntityId++; + } if (gameObject is Player objPl) { livingEntities.Add(gameObject as LivingEntity); players.Add(objPl); + if (GetPlayer1 is null) + { + GetPlayer1 = players[players.Count - 1]; + } } else if (gameObject is LivingEntity objLE) { + livingEntitiesWithoutPlayers.Add(objLE); livingEntities.Add(objLE); } else if (gameObject is Entity objE) @@ -70,36 +83,6 @@ namespace DangerousD.GameCore otherObjects.Add(gameObject); } } - - public void Remove(GameObject gameObject) - { - GetAllGameObjects.Remove(gameObject); - if (gameObject is Player objPl) - { - livingEntities.Remove(gameObject as LivingEntity); - players.Remove(objPl); - } - else if (gameObject is LivingEntity objLE) - { - livingEntities.Remove(objLE); - } - else if (gameObject is Entity objE) - { - entities.Remove(objE); - } - else if (gameObject is MapObject obj) - { - if (obj.IsColliderOn) - mapObjects.Remove(obj); - else - BackgroundObjects.Remove(obj); - } - else - { - otherObjects.Remove(gameObject); - } - } - public void Draw(SpriteBatch _spriteBatch) { foreach (var item in BackgroundObjects) @@ -116,21 +99,39 @@ namespace DangerousD.GameCore public void Update(GameTime gameTime) { + AppManager.Instance.DebugHUD.Set("playerId: ", GetPlayer1.id.ToString()); + if (AppManager.Instance.NetworkTasks.Count > 0) + { + AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList()); + AppManager.Instance.NetworkTasks.Clear(); + } foreach (var item in BackgroundObjects) item.Update(gameTime); foreach (var item in mapObjects) item.Update(gameTime); foreach (var item in entities) item.Update(gameTime); - - for (int i = 0; i < livingEntities.Count; i++) - livingEntities[i].Update(gameTime); + if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Client) + { + for (int i = 0; i < livingEntitiesWithoutPlayers.Count; i++) + { + livingEntitiesWithoutPlayers[i].Update(gameTime); + } + GetPlayer1.Update(gameTime); + } + else + { + for (int i = 0; i < livingEntitiesWithoutPlayers.Count; i++) + { + livingEntitiesWithoutPlayers[i].PlayAnimation(); + } + GetPlayer1.Update(gameTime); + } + GetPlayer1.Update(gameTime); foreach (var item in otherObjects) item.Update(gameTime); physicsManager.UpdateCollisions(entities, livingEntities, mapObjects, gameTime); - - } } -} +} \ No newline at end of file diff --git a/DangerousD/GameCore/Managers/SoundManager.cs b/DangerousD/GameCore/Managers/SoundManager.cs index 7da1b17..8e2df9e 100644 --- a/DangerousD/GameCore/Managers/SoundManager.cs +++ b/DangerousD/GameCore/Managers/SoundManager.cs @@ -47,7 +47,7 @@ namespace DangerousD.GameCore PlayingSounds.Add(sound); if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) { - AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(Vector2.Zero, soundName)); + AppManager.Instance.NetworkTasks.Add(new Network.NetworkTask(Vector2.Zero, soundName)); } } public void StartSound(string soundName, Vector2 soundPos, Vector2 playerPos) // запустить звук у которого есть позиция @@ -59,7 +59,7 @@ namespace DangerousD.GameCore PlayingSounds.Add(sound); if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) { - AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(soundPos, soundName)); + AppManager.Instance.NetworkTasks.Add(new Network.NetworkTask(soundPos, soundName)); } } public void StopAllSounds() // остановка всех звуков diff --git a/DangerousD/GameCore/Network/NetworkManager.cs b/DangerousD/GameCore/Network/NetworkManager.cs index caf16a1..292e210 100644 --- a/DangerousD/GameCore/Network/NetworkManager.cs +++ b/DangerousD/GameCore/Network/NetworkManager.cs @@ -25,7 +25,7 @@ namespace DangerousD.GameCore.Network { socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress address = IPAddress.Parse(IpAddress); - int port = 8000; + int port = 51873; endPoint = new IPEndPoint(address, port); } catch { } @@ -71,6 +71,7 @@ namespace DangerousD.GameCore.Network Thread acceptThread = new Thread(AcceptSockets); acceptThread.Start(); state = "Host"; + AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Host); } catch { } } @@ -84,10 +85,13 @@ namespace DangerousD.GameCore.Network Thread.Sleep(10); Thread ReceivingThread = new Thread(ReceiveMsgFromHost); ReceivingThread.Start(); + NetworkTask connectionTask = new NetworkTask("Player"); + AppManager.Instance.NetworkTasks.Add(connectionTask); + AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Client); } catch { } } - public void SendMsg(NetworkTask networkTask) + public void SendMsg(List networkTask) { byte[] Data = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(networkTask)); int count = Data.Length; diff --git a/DangerousD/GameCore/Network/NetworkTask.cs b/DangerousD/GameCore/Network/NetworkTask.cs index 1dbb508..8611d78 100644 --- a/DangerousD/GameCore/Network/NetworkTask.cs +++ b/DangerousD/GameCore/Network/NetworkTask.cs @@ -19,6 +19,7 @@ namespace DangerousD.GameCore.Network public Vector2 velocity { get; set; } public Type type { get; set; } + public NetworkTask() { } /// /// Нанести урон сущности /// @@ -126,5 +127,12 @@ namespace DangerousD.GameCore.Network this.velocity = velocity; this.type = type; } + public NetworkTask AddConnectedPlayer(int connectedPlayerId, Vector2 playerPosition) + { + operation = NetworkTaskOperationEnum.AddConnectedPlayer; + objId = connectedPlayerId; + position = playerPosition; + return this; + } } } diff --git a/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs b/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs index 86cb112..7fad430 100644 --- a/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs +++ b/DangerousD/GameCore/Network/NetworkTaskOperationEnum.cs @@ -9,6 +9,6 @@ namespace DangerousD.GameCore.Network [Serializable] public enum NetworkTaskOperationEnum { - TakeDamage, SendSound, CreateEntity, SendPosition, ChangeState, ConnectToHost, GetClientPlayerId + TakeDamage, SendSound, CreateEntity, SendPosition, ChangeState, ConnectToHost, GetClientPlayerId, AddConnectedPlayer } } From 0a9b55800da309adcab7a12ebc5f927258c840d0 Mon Sep 17 00:00:00 2001 From: Ivan Filipenkov Date: Fri, 18 Aug 2023 00:20:43 +0300 Subject: [PATCH 2/2] fix menu font --- DangerousD/Content/Content.mgcb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index dbbe74b..3c483a8 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -14,7 +14,14 @@ #---------------------------------- Content ---------------------------------# -#begin MonstersAnimations.png +#begin ButtonFont.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:ButtonFont.spritefont + +#begin checkboxs_off-on.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255