From 1cfebd30bbbb7a844a41d0e2282a7739301bf350 Mon Sep 17 00:00:00 2001
From: AnloGames <7383an@gmail.com>
Date: Thu, 17 Aug 2023 12:35:26 +0300
Subject: [PATCH] Login And Sound Network Pripilivanie
---
DangerousD/GameCore/GUI/LobbyGUI.cs | 60 +++++++++-----------
DangerousD/GameCore/GUI/MenuGUI.cs | 1 +
DangerousD/GameCore/Managers/AppManager.cs | 24 +++++++-
DangerousD/GameCore/Managers/SoundManager.cs | 10 +++-
DangerousD/GameCore/Network/NetworkTask.cs | 24 ++++++++
5 files changed, 83 insertions(+), 36 deletions(-)
diff --git a/DangerousD/GameCore/GUI/LobbyGUI.cs b/DangerousD/GameCore/GUI/LobbyGUI.cs
index 7ebc2db..2927758 100644
--- a/DangerousD/GameCore/GUI/LobbyGUI.cs
+++ b/DangerousD/GameCore/GUI/LobbyGUI.cs
@@ -33,8 +33,32 @@ namespace DangerousD.GameCore.GUI
Elements.Add(new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5,
screenWidth / 30 * 26, screenHeight / 15 * 10) });
- // Buttons
+ // Buttons and ip textbox
{
+ TextBox searchBarTextBox = new TextBox(Manager)
+ {
+ rectangle = new Rectangle(screenWidth / 30 * 14, screenHeight / 30,
+ screenWidth / 30 * 10, screenHeight / 30 * 3),
+ text = "ip",
+ scale = 0.16f,
+ fontColor = Color.Gray,
+ fontName = "font2",
+ textAligment = TextAligment.Left
+
+ };
+ searchBarTextBox.TextChanged += input => {
+ if (searchBarTextBox.fontColor == Color.Gray)
+ {
+ searchBarTextBox.text = ""; searchBarTextBox.fontColor = Color.Black;
+ }
+ };
+ searchBarTextBox.StopChanging += input => {
+ if (input.Length == 0)
+ {
+ searchBarTextBox.fontColor = Color.Gray;
+ searchBarTextBox.text = "ip";
+ }
+ };
Button backButton = new ButtonText(Manager)
{
rectangle = new Rectangle(screenWidth / 30, screenHeight / 30, 60, 50),
@@ -57,8 +81,7 @@ namespace DangerousD.GameCore.GUI
};
hostButton.LeftButtonPressed += () => {
- AppManager.Instance.NetworkManager.HostInit("");
-
+ AppManager.Instance.NetworkManager.HostInit(AppManager.Instance.IpAddress);
};
@@ -83,7 +106,7 @@ namespace DangerousD.GameCore.GUI
fontName = "font2"
};
joinSelectedButton.LeftButtonPressed += () => {
-
+ AppManager.Instance.NetworkManager.ClientInit(AppManager.Instance.IpAddress);
};
Button joinByIpButton = new ButtonText(Manager)
{
@@ -94,34 +117,7 @@ namespace DangerousD.GameCore.GUI
fontName = "font2"
};
joinByIpButton.LeftButtonPressed += () => {
-
- };
- }
-
- // SearchBar
- {
- TextBox searchBarTextBox = new TextBox(Manager) {
- rectangle = new Rectangle(screenWidth / 30 * 14, screenHeight / 30,
- screenWidth / 30 * 10, screenHeight / 30 * 3),
- text = "ip",
- scale = 0.16f,
- fontColor = Color.Gray,
- fontName = "font2",
- textAligment = TextAligment.Left
-
- };
- searchBarTextBox.TextChanged += input => {
- if (searchBarTextBox.fontColor == Color.Gray)
- {
- searchBarTextBox.text = ""; searchBarTextBox.fontColor = Color.Black;
- }
- };
- searchBarTextBox.StopChanging += input => {
- if (input.Length == 0)
- {
- searchBarTextBox.fontColor = Color.Gray;
- searchBarTextBox.text = "ip";
- }
+ AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text);
};
}
}
diff --git a/DangerousD/GameCore/GUI/MenuGUI.cs b/DangerousD/GameCore/GUI/MenuGUI.cs
index f619d5f..b1ac08d 100644
--- a/DangerousD/GameCore/GUI/MenuGUI.cs
+++ b/DangerousD/GameCore/GUI/MenuGUI.cs
@@ -35,6 +35,7 @@ internal class MenuGUI : AbstractGui
butSingle.LeftButtonPressed += () =>
{
AppManager.Instance.ChangeGameState(GameState.Game);
+ AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.SinglePlayer);
};
var butMulti = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 190, 300, 50), text = "Multiplayer", fontName = "ButtonFont" };
Elements.Add(butMulti);
diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs
index f4c7a78..d0bf9b9 100644
--- a/DangerousD/GameCore/Managers/AppManager.cs
+++ b/DangerousD/GameCore/Managers/AppManager.cs
@@ -17,7 +17,8 @@ namespace DangerousD.GameCore
public enum MultiPlayerStatus { SinglePlayer, Host, Client }
public class AppManager : Game
{
- public static AppManager Instance { get; private set; }
+ public static AppManager Instance { get; private set; }
+ public string IpAddress { get; private set; } = "127.0.0.1";
private GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch;
public GameState gameState { get; private set; }
@@ -173,7 +174,26 @@ namespace DangerousD.GameCore
public void NetworkSync(NetworkTask networkTask)
{
-
+ switch (networkTask.operation)
+ {
+ case NetworkTaskOperationEnum.TakeDamage:
+ break;
+ case NetworkTaskOperationEnum.SendSound:
+ SoundManager.StartSound(networkTask.name, networkTask.position, GameManager.GetPlayer1.Pos);
+ break;
+ case NetworkTaskOperationEnum.CreateEntity:
+ break;
+ case NetworkTaskOperationEnum.SendPosition:
+ break;
+ case NetworkTaskOperationEnum.ChangeState:
+ break;
+ case NetworkTaskOperationEnum.ConnectToHost:
+ break;
+ case NetworkTaskOperationEnum.GetClientPlayerId:
+ break;
+ default:
+ break;
+ }
}
public void SetMultiplayerState(MultiPlayerStatus multiPlayerStatus)
{
diff --git a/DangerousD/GameCore/Managers/SoundManager.cs b/DangerousD/GameCore/Managers/SoundManager.cs
index b32ab35..382541e 100644
--- a/DangerousD/GameCore/Managers/SoundManager.cs
+++ b/DangerousD/GameCore/Managers/SoundManager.cs
@@ -33,8 +33,11 @@ namespace DangerousD.GameCore
sound.SoundEffect.IsLooped = false;
sound.SoundEffect.Play();
PlayingSounds.Add(sound);
+ if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Host)
+ {
+ AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(Vector2.Zero, soundName));
+ }
}
-
public void StartSound(string soundName, Vector2 soundPos, Vector2 playerPos) // запустить звук у которого есть позиция
{
var sound = new Sound(Sounds[soundName], soundPos);
@@ -42,7 +45,10 @@ namespace DangerousD.GameCore
sound.SoundEffect.Volume = (float)sound.GetDistance(playerPos) / MaxSoundDistance;
sound.SoundEffect.Play();
PlayingSounds.Add(sound);
- AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(sound.Position, soundName));
+ if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Host)
+ {
+ AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(soundPos, soundName));
+ }
}
public void StopAllSounds() // остановка всех звуков
{
diff --git a/DangerousD/GameCore/Network/NetworkTask.cs b/DangerousD/GameCore/Network/NetworkTask.cs
index a1fb999..1dbb508 100644
--- a/DangerousD/GameCore/Network/NetworkTask.cs
+++ b/DangerousD/GameCore/Network/NetworkTask.cs
@@ -13,6 +13,7 @@ namespace DangerousD.GameCore.Network
public NetworkTaskOperationEnum operation { get; set; }
public string name { get; set; }
public int value { get; set; }
+ public bool isParam { get; set; }
public int objId { get; set; }
public Vector2 position { get; set; }
public Vector2 velocity { get; set; }
@@ -102,5 +103,28 @@ namespace DangerousD.GameCore.Network
operation = NetworkTaskOperationEnum.GetClientPlayerId;
objId = PlayerId;
}
+
+ ///
+ /// Универсальный конструктор для нестандартных операций. То, что не нужно(кроме операции) делать null.
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public NetworkTask(NetworkTaskOperationEnum operation, string name, int value, bool isParam, int objId, Vector2 position, Vector2 velocity, Type type)
+ {
+ this.operation = operation;
+ this.name = name;
+ this.value = value;
+ this.isParam = isParam;
+ this.objId = objId;
+ this.position = position;
+ this.velocity = velocity;
+ this.type = type;
+ }
}
}