Login And Sound Network Pripilivanie

This commit is contained in:
AnloGames 2023-08-17 12:35:26 +03:00
parent ea4a2f31fc
commit 1cfebd30bb
5 changed files with 83 additions and 36 deletions

View file

@ -33,8 +33,32 @@ namespace DangerousD.GameCore.GUI
Elements.Add(new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5, Elements.Add(new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5,
screenWidth / 30 * 26, screenHeight / 15 * 10) }); 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) Button backButton = new ButtonText(Manager)
{ {
rectangle = new Rectangle(screenWidth / 30, screenHeight / 30, 60, 50), rectangle = new Rectangle(screenWidth / 30, screenHeight / 30, 60, 50),
@ -57,8 +81,7 @@ namespace DangerousD.GameCore.GUI
}; };
hostButton.LeftButtonPressed += () => { hostButton.LeftButtonPressed += () => {
AppManager.Instance.NetworkManager.HostInit(""); AppManager.Instance.NetworkManager.HostInit(AppManager.Instance.IpAddress);
}; };
@ -83,7 +106,7 @@ namespace DangerousD.GameCore.GUI
fontName = "font2" fontName = "font2"
}; };
joinSelectedButton.LeftButtonPressed += () => { joinSelectedButton.LeftButtonPressed += () => {
AppManager.Instance.NetworkManager.ClientInit(AppManager.Instance.IpAddress);
}; };
Button joinByIpButton = new ButtonText(Manager) Button joinByIpButton = new ButtonText(Manager)
{ {
@ -94,34 +117,7 @@ namespace DangerousD.GameCore.GUI
fontName = "font2" fontName = "font2"
}; };
joinByIpButton.LeftButtonPressed += () => { joinByIpButton.LeftButtonPressed += () => {
AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text);
};
}
// 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";
}
}; };
} }
} }

View file

@ -35,6 +35,7 @@ internal class MenuGUI : AbstractGui
butSingle.LeftButtonPressed += () => butSingle.LeftButtonPressed += () =>
{ {
AppManager.Instance.ChangeGameState(GameState.Game); 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" }; var butMulti = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 190, 300, 50), text = "Multiplayer", fontName = "ButtonFont" };
Elements.Add(butMulti); Elements.Add(butMulti);

View file

@ -17,7 +17,8 @@ namespace DangerousD.GameCore
public enum MultiPlayerStatus { SinglePlayer, Host, Client } public enum MultiPlayerStatus { SinglePlayer, Host, Client }
public class AppManager : Game 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 GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch; private SpriteBatch _spriteBatch;
public GameState gameState { get; private set; } public GameState gameState { get; private set; }
@ -173,7 +174,26 @@ namespace DangerousD.GameCore
public void NetworkSync(NetworkTask networkTask) 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) public void SetMultiplayerState(MultiPlayerStatus multiPlayerStatus)
{ {

View file

@ -33,8 +33,11 @@ namespace DangerousD.GameCore
sound.SoundEffect.IsLooped = false; sound.SoundEffect.IsLooped = false;
sound.SoundEffect.Play(); sound.SoundEffect.Play();
PlayingSounds.Add(sound); 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) // запустить звук у которого есть позиция public void StartSound(string soundName, Vector2 soundPos, Vector2 playerPos) // запустить звук у которого есть позиция
{ {
var sound = new Sound(Sounds[soundName], soundPos); var sound = new Sound(Sounds[soundName], soundPos);
@ -42,7 +45,10 @@ namespace DangerousD.GameCore
sound.SoundEffect.Volume = (float)sound.GetDistance(playerPos) / MaxSoundDistance; sound.SoundEffect.Volume = (float)sound.GetDistance(playerPos) / MaxSoundDistance;
sound.SoundEffect.Play(); sound.SoundEffect.Play();
PlayingSounds.Add(sound); 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() // остановка всех звуков public void StopAllSounds() // остановка всех звуков
{ {

View file

@ -13,6 +13,7 @@ namespace DangerousD.GameCore.Network
public NetworkTaskOperationEnum operation { get; set; } public NetworkTaskOperationEnum operation { get; set; }
public string name { get; set; } public string name { get; set; }
public int value { get; set; } public int value { get; set; }
public bool isParam { get; set; }
public int objId { get; set; } public int objId { get; set; }
public Vector2 position { get; set; } public Vector2 position { get; set; }
public Vector2 velocity { get; set; } public Vector2 velocity { get; set; }
@ -102,5 +103,28 @@ namespace DangerousD.GameCore.Network
operation = NetworkTaskOperationEnum.GetClientPlayerId; operation = NetworkTaskOperationEnum.GetClientPlayerId;
objId = PlayerId; objId = PlayerId;
} }
/// <summary>
/// Универсальный конструктор для нестандартных операций. То, что не нужно(кроме операции) делать null.
/// </summary>
/// <param name="operation"></param>
/// <param name="name"></param>
/// <param name="value"></param>
/// <param name="isParam"></param>
/// <param name="objId"></param>
/// <param name="position"></param>
/// <param name="velocity"></param>
/// <param name="type"></param>
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;
}
} }
} }