This commit is contained in:
MARKPRO44 2024-08-16 12:29:47 +03:00
commit 0363086277
19 changed files with 255 additions and 81 deletions

View file

@ -21,7 +21,7 @@ namespace MonogameLibrary.UI.Elements
public int indentation = 5; public int indentation = 5;
Texture2D texture2; Texture2D texture2;
public Rectangle sliderRect = new Rectangle(0, 0, 30, 30); public Rectangle sliderRect = new Rectangle(0, 0, 40, 40);
private float sliderValue = 0; private float sliderValue = 0;
private float minValue = 0, maxValue = 1; private float minValue = 0, maxValue = 1;
SliderState sliderState = SliderState.None; SliderState sliderState = SliderState.None;
@ -56,7 +56,7 @@ namespace MonogameLibrary.UI.Elements
public override void LoadTexture(ContentManager content) public override void LoadTexture(ContentManager content)
{ {
texture2 = content.Load<Texture2D>("Textures\\GUI\\checkboxs_off"); texture2 = content.Load<Texture2D>("Textures\\GUI\\switch");
base.LoadTexture(content); base.LoadTexture(content);
} }
@ -73,11 +73,11 @@ namespace MonogameLibrary.UI.Elements
sliderRect.X += (int)(sliderValue * (rectangle.Width - sliderRect.Width - indentation * 2) + indentation); sliderRect.X += (int)(sliderValue * (rectangle.Width - sliderRect.Width - indentation * 2) + indentation);
sliderRect.Y -= sliderRect.Height / 2 - rectangle.Height / 2; sliderRect.Y -= sliderRect.Height / 2 - rectangle.Height / 2;
if (sliderState == SliderState.Moving) if (sliderState == SliderState.Moving)
_spriteBatch.Draw(texture2, sliderRect, Color.DarkRed); _spriteBatch.Draw(texture2, sliderRect, Color.Gray);
else if(sliderState == SliderState.HoveringOverSliderButton) else if(sliderState == SliderState.HoveringOverSliderButton)
_spriteBatch.Draw(texture2, sliderRect, new Color(200,0 ,0)); _spriteBatch.Draw(texture2, sliderRect, Color.DarkGray);
else else
_spriteBatch.Draw(texture2, sliderRect, Color.Red); _spriteBatch.Draw(texture2, sliderRect, Color.White);
DrawText(_spriteBatch); DrawText(_spriteBatch);
} }
} }

View file

@ -27,6 +27,13 @@
/processorParam:TextureFormat=Compressed /processorParam:TextureFormat=Compressed
/build:Fonts/Font2.spritefont /build:Fonts/Font2.spritefont
#begin Fonts/Font3.spritefont
/importer:FontDescriptionImporter
/processor:FontDescriptionProcessor
/processorParam:PremultiplyAlpha=True
/processorParam:TextureFormat=Compressed
/build:Fonts/Font3.spritefont
#begin Textures/GUI/checkboxs_off-on.png #begin Textures/GUI/checkboxs_off-on.png
/importer:TextureImporter /importer:TextureImporter
/processor:TextureProcessor /processor:TextureProcessor
@ -75,3 +82,39 @@
/processorParam:TextureFormat=Color /processorParam:TextureFormat=Color
/build:Textures/GUI/MenuBackground.jpg /build:Textures/GUI/MenuBackground.jpg
#begin Textures/GUI/mouse.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:Textures/GUI/mouse.png
#begin Textures/GUI/Switch_backgrownd.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:Textures/GUI/Switch_backgrownd.png
#begin Textures/GUI/switch.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
/processorParam:ColorKeyEnabled=True
/processorParam:GenerateMipmaps=False
/processorParam:PremultiplyAlpha=True
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
/build:Textures/GUI/switch.png

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file contains an xml description of a font, and will be read by the XNA
Framework Content Pipeline. Follow the comments to customize the appearance
of the font in your game, and to change the characters which are available to draw
with.
-->
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type="Graphics:FontDescription">
<!--
Modify this string to change the font that will be imported.
-->
<FontName>MouldyCheeseRegular-WyMWG.ttf</FontName>
<!--
Size is a float value, measured in points. Modify this value to change
the size of the font.
-->
<Size>50</Size>
<!--
Spacing is a float value, measured in pixels. Modify this value to change
the amount of spacing in between characters.
-->
<Spacing>0</Spacing>
<!--
UseKerning controls the layout of the font. If this value is true, kerning information
will be used when placing characters.
-->
<UseKerning>true</UseKerning>
<!--
Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
and "Bold, Italic", and are case sensitive.
-->
<Style>Regular</Style>
<!--
If you uncomment this line, the default character will be substituted if you draw
or measure text that contains characters which were not included in the font.
-->
<!-- <DefaultCharacter>*</DefaultCharacter> -->
<!--
CharacterRegions control what letters are available in the font. Every
character from Start to End will be built and made available for drawing. The
default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
character set. The characters are ordered according to the Unicode standard.
See the documentation for more information.
-->
<CharacterRegions>
<CharacterRegion>
<Start>&#32;</Start>
<End>&#126;</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -27,10 +27,12 @@ namespace ZoFo.GameCore
public void GameEndedUnexpectedly(){ } public void GameEndedUnexpectedly(){ }
public void JoinRoom(){ } public void JoinRoom(string ip)
{
public void JoinYourself(){ } networkManager.JoinRoom(ip);
}
public void JoinYourself(){ networkManager.JoinYourself(); }
internal void Update(GameTime gameTime) internal void Update(GameTime gameTime)
{ {
} }

View file

@ -21,6 +21,8 @@ public abstract class AbstractGUI
protected DrawableUIElement SelectedElement; protected DrawableUIElement SelectedElement;
private bool isStartedPrint = false; private bool isStartedPrint = false;
private bool isPressed = false; private bool isPressed = false;
private Texture2D mouse;
private MouseState mouseState;
public AbstractGUI() public AbstractGUI()
{ {
@ -37,20 +39,20 @@ public abstract class AbstractGUI
public virtual void LoadContent() public virtual void LoadContent()
{ {
Manager.LoadContent(AppManager.Instance.Content, "Font"); Manager.LoadContent(AppManager.Instance.Content, "Font");
mouse = AppManager.Instance.Content.Load<Texture2D>("Textures\\GUI\\mouse");
} }
public virtual void Update(GameTime gameTime) public virtual void Update(GameTime gameTime)
{ {
Manager.Update(gameTime); Manager.Update(gameTime);
mouseState = Mouse.GetState();
} }
public virtual void Draw(SpriteBatch spriteBatch) public virtual void Draw(SpriteBatch spriteBatch)
{ {
Manager.Draw(spriteBatch); Manager.Draw(spriteBatch);
} spriteBatch.Begin();
spriteBatch.Draw(mouse, new Rectangle(mouseState.Position.X, mouseState.Position.Y, 20, 40), Color.Red);
public virtual void ResolutioChenges() spriteBatch.End();
{
} }
} }

View file

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading;
using System.Xml; using System.Xml;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content;
@ -39,7 +40,7 @@ public class MainMenuGUI : AbstractGUI
}; };
playButton.LeftButtonPressed += () => playButton.LeftButtonPressed += () =>
{ {
AppManager.Instance.SetGUI(new SelectModeMenu());
}; };
Elements.Add(playButton); Elements.Add(playButton);
Button optionButton = new Button(Manager) Button optionButton = new Button(Manager)
@ -73,7 +74,6 @@ public class MainMenuGUI : AbstractGUI
} }
public override void Update(GameTime gameTime) public override void Update(GameTime gameTime)
{ {
base.Update(gameTime); base.Update(gameTime);

View file

@ -30,11 +30,11 @@ public class OptionsGUI : AbstractGUI
Label label_OverallVolume = new Label(Manager) Label label_OverallVolume = new Label(Manager)
{ fontName = "Fonts\\Font", scale = 0.2f, text = "All Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3, 50, 50), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; { fontName = "Fonts\\Font", scale = 0.2f, text = "All Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_OverallVolume); Elements.Add(label_OverallVolume);
var slider_OverallVolume = new Slider(Manager) var slider_OverallVolume = new Slider(Manager)
{ rectangle = new Rectangle(width / 2, height / 3, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\checkbox_on", MinValue = 0, MaxValue = 1 }; { rectangle = new Rectangle(width / 2, height / 3, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\Switch_backgrownd", MinValue = 0, MaxValue = 1 };
slider_OverallVolume.SliderChanged += (newVal) => slider_OverallVolume.SliderChanged += (newVal) =>
{ {
@ -42,11 +42,11 @@ public class OptionsGUI : AbstractGUI
Elements.Add(slider_OverallVolume); Elements.Add(slider_OverallVolume);
Label label_MusicVolume = new Label(Manager) Label label_MusicVolume = new Label(Manager)
{ fontName = "Fonts\\Font", scale = 0.2f, text = "Music Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 1, 50, 50), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; { fontName = "Fonts\\Font", scale = 0.2f, text = "Music Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 1, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_MusicVolume); Elements.Add(label_MusicVolume);
var slider_MusicVolume = new Slider(Manager) var slider_MusicVolume = new Slider(Manager)
{ rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 1, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\checkboxs_on", MinValue = 0, MaxValue = 1 }; { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 1, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\Switch_backgrownd", MinValue = 0, MaxValue = 1 };
slider_MusicVolume.SliderChanged += (newVal) => slider_MusicVolume.SliderChanged += (newVal) =>
{ {
@ -55,11 +55,11 @@ public class OptionsGUI : AbstractGUI
Label label_EffectsVolume = new Label(Manager) Label label_EffectsVolume = new Label(Manager)
{ fontName = "Fonts\\Font", scale = 0.2f, text = "Effects Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 2, 50, 50), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; { fontName = "Fonts\\Font", scale = 0.2f, text = "Effects Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 2, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_EffectsVolume); Elements.Add(label_EffectsVolume);
var slider_EffectsVolume = new Slider(Manager) var slider_EffectsVolume = new Slider(Manager)
{ rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 2, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\checkboxs_on", MinValue = 0, MaxValue = 1 }; { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 2, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\Switch_backgrownd", MinValue = 0, MaxValue = 1 };
slider_EffectsVolume.SliderChanged += (newVal) => slider_EffectsVolume.SliderChanged += (newVal) =>
{ {
@ -67,7 +67,7 @@ public class OptionsGUI : AbstractGUI
Elements.Add(slider_EffectsVolume); Elements.Add(slider_EffectsVolume);
Label lblSwitchMode = new Label(Manager) Label lblSwitchMode = new Label(Manager)
{ fontName = "Fonts\\Font", scale = 0.2f, text = "Left/Right Mode", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 3, 50, 50), mainColor = Color.Transparent}; { fontName = "Fonts\\Font", scale = 0.2f, text = "Resolution set", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(lblSwitchMode); Elements.Add(lblSwitchMode);
//var button_left_right_mode = new CheckBox(Manager) { rectangle = new Rectangle(rightBorder - checkboxlength, lblSwitchMode.rectangle.Y - 12, checkboxlength, checkboxlength) }; //var button_left_right_mode = new CheckBox(Manager) { rectangle = new Rectangle(rightBorder - checkboxlength, lblSwitchMode.rectangle.Y - 12, checkboxlength, checkboxlength) };
@ -76,10 +76,10 @@ public class OptionsGUI : AbstractGUI
Label label_IsFullScreen = new Label(Manager) Label label_IsFullScreen = new Label(Manager)
{ fontName = "Fonts\\Font", scale = 0.2f, text = "Full Screen", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 4, 50, 50), mainColor = Color.Transparent}; { fontName = "Fonts\\Font", scale = 0.2f, text = "Full Screen", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 4, width / 40, width / 40), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_IsFullScreen); Elements.Add(label_IsFullScreen);
var button_FullScreen = new CheckBox(Manager) { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 4, width / 30, width / 30) }; var button_FullScreen = new CheckBox(Manager) { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 4, width / 40, width / 40) };
button_FullScreen.Checked += (newCheckState) => button_FullScreen.Checked += (newCheckState) =>
{ {
@ -88,11 +88,11 @@ public class OptionsGUI : AbstractGUI
Button bTExit = new Button(Manager) Button bTExit = new Button(Manager)
{ fontName = "Fonts\\Font", scale = 0.2f, text = "<-", rectangle = new Rectangle(width / 30, height / 30, 40, 40), textureName = "Textures\\GUI\\checkboxs_off" }; { fontName = "Fonts\\Font3", scale = 0.4f, text = "<-", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width / 30, height / 30, width / 40, width / 40), textureName = "Textures\\GUI\\checkboxs_off"};
Elements.Add(bTExit); Elements.Add(bTExit);
bTExit.LeftButtonPressed += () => bTExit.LeftButtonPressed += () =>
{ {
AppManager.Instance.SetGUI(new MainMenuGUI());
}; };
} }

View file

@ -9,19 +9,60 @@ using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Base;
using MonogameLibrary.UI.Elements; using MonogameLibrary.UI.Elements;
using ZoFo.GameCore.GameManagers;
namespace ZoFo.GameCore.GUI; namespace ZoFo.GameCore.GUI;
public class SelectModeMenu : AbstractGUI public class SelectModeMenu : AbstractGUI
{ {
private DrawableUIElement menuBackground;
protected override void CreateUI() protected override void CreateUI()
{ {
// int width = AppManager.Instance.inGameHUDHelperResolution.X; int width = AppManager.Instance.CurentScreenResolution.X;
// int height = AppManager.Instance.inGameHUDHelperResolution.Y; int height = AppManager.Instance.CurentScreenResolution.Y;
menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures\\GUI\\MenuBackground" };
Elements.Add(menuBackground);
menuBackground.LoadTexture(AppManager.Instance.Content);
Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 6, (int)(width / 4), (int)(height / 20)), text = "Select mode", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font"});
Button playButton = new Button(Manager)
{
rectangle = new Rectangle(width / 4 - (width / 7) / 2, height / 2, (int)(width / 7), (int)(height / 20)),
text = "singleplayer",
scale = 0.3f,
fontColor = Color.White,
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
playButton.LeftButtonPressed += () =>
{
// single
// ваш код здесь
};
Elements.Add(playButton);
Button optionButton = new Button(Manager)
{
rectangle = new Rectangle(width / 2 + width / 4 - (width / 7) / 2, height / 2, (int)(width / 7), (int)(height / 20)),
text = "multiplayer",
scale = 0.3f,
fontColor = Color.White,
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
optionButton.LeftButtonPressed += () =>
{
// multi
// ваш код здесь
};
Elements.Add(optionButton);
} }
public override void Update(GameTime gameTime) public override void Update(GameTime gameTime)
{ {
base.Update(gameTime);
} }
} }

View file

@ -45,7 +45,7 @@ namespace ZoFo.GameCore.GameManagers
{ {
_graphics = new GraphicsDeviceManager(this); _graphics = new GraphicsDeviceManager(this);
SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y); SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y);
FulscrreenSwitch(); // FulscrreenSwitch();
Content.RootDirectory = "Content"; Content.RootDirectory = "Content";
@ -58,6 +58,7 @@ namespace ZoFo.GameCore.GameManagers
currentGUI = new MainMenuGUI(); currentGUI = new MainMenuGUI();
debugHud = new DebugHUD(); debugHud = new DebugHUD();
IsMouseVisible = false;
} }
@ -67,7 +68,6 @@ namespace ZoFo.GameCore.GameManagers
debugHud.Initialize(); debugHud.Initialize();
base.Initialize(); base.Initialize();
} }
@ -115,8 +115,8 @@ namespace ZoFo.GameCore.GameManagers
debugHud.Draw(_spriteBatch);
currentGUI.Draw(_spriteBatch); currentGUI.Draw(_spriteBatch);
debugHud.Draw(_spriteBatch);
switch (gamestate) switch (gamestate)
{ {
case GameState.ClientPlaying: case GameState.ClientPlaying:
@ -158,5 +158,8 @@ namespace ZoFo.GameCore.GameManagers
{ {
_graphics.IsFullScreen = !_graphics.IsFullScreen; _graphics.IsFullScreen = !_graphics.IsFullScreen;
} }
public void SetServer(Server server) { this.server = server; }
public void SetClient(Client client) { this.client = client; }
} }
} }

View file

@ -5,6 +5,7 @@ using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates; using System.Security.Cryptography.X509Certificates;
using System.Text; using System.Text;
using System.Text.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using ZoFo.GameCore.GameManagers.NetworkManager.Updates; using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
@ -20,6 +21,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
List<IUpdateData> updates = new List<IUpdateData>(); List<IUpdateData> updates = new List<IUpdateData>();
public delegate void OnDataSent(string Data); public delegate void OnDataSent(string Data);
public event OnDataSent GetDataSent; // event public event OnDataSent GetDataSent; // event
public ClientNetworkManager()
{
Init();
}
public void Init() //create endPoint, socket public void Init() //create endPoint, socket
{ {
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@ -27,11 +34,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void SendData() public void SendData()
{ {
while(socket.Connected) byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(updates)); //нужно сериализовать
{
byte[] bytes = Encoding.UTF8.GetBytes(updates.ToString());
socket.Send(bytes); socket.Send(bytes);
} }
public void AddData(IUpdateData UpdateData)
{
updates.Add(UpdateData);
} }
public void StopConnection() public void StopConnection()
@ -47,10 +56,9 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
/// <param name="port"></param> /// <param name="port"></param>
public void JoinRoom(string ip) // multyplayer public void JoinRoom(string ip) // multyplayer
{ {
endPoint = new IPEndPoint(IPAddress.Parse(ip), port); endPoint = new IPEndPoint(IPAddress.Parse(ip), port);
socket.Connect(endPoint); socket.Connect(endPoint);
SendData(); SendData();
Thread listen = new Thread(StartListening); Thread listen = new Thread(StartListening);
listen.Start(); listen.Start();
@ -62,9 +70,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void JoinYourself() // single player public void JoinYourself() // single player
{ {
endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port); endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
socket.Connect(endPoint); socket.Connect(endPoint);
SendData(); SendData();
Thread listen = new Thread(StartListening); Thread listen = new Thread(StartListening);
listen.Start(); listen.Start();

View file

@ -16,7 +16,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{ {
public class ServerNetworkManager public class ServerNetworkManager
{ {
private IPAddress ip = IPAddress.Any; private IPAddress ip =IPAddress.Parse("127.0.0.1"); //IPAddress.Any
private int port = 7632; private int port = 7632;
private IPEndPoint endPoint; private IPEndPoint endPoint;
private Socket socket; private Socket socket;
@ -25,12 +25,18 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public delegate void OnDataSend(string data); public delegate void OnDataSend(string data);
public event OnDataSend GetDataSend; // event public event OnDataSend GetDataSend; // event
Dictionary<Socket, Thread> managerThread; Dictionary<Socket, Thread> managerThread;
Thread serverTheread;
public ServerNetworkManager() { Init(); }
public void Init() //create Socket public void Init() //create Socket
{ {
endPoint = new IPEndPoint(ip, port); endPoint = new IPEndPoint(ip, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
managerThread = new Dictionary<Socket, Thread>(); managerThread = new Dictionary<Socket, Thread>();
clients = new List<Socket>();
updates = new List<IUpdateData>();
managerThread = new Dictionary<Socket, Thread>();
} }
/// <summary> /// <summary>
/// отправляет клиенту Data /// отправляет клиенту Data
@ -52,7 +58,6 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{ {
updates.Add(data); updates.Add(data);
} }
public void CloseConnection() //По сути коне игры и отключение игроков public void CloseConnection() //По сути коне игры и отключение игроков
{ {
foreach (var item in clients) foreach (var item in clients)
@ -74,6 +79,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients.Clear(); clients.Clear();
} }
public void Start(object players)
{
serverTheread = new Thread(StartWaitingForPlayers);
serverTheread.Start(players);
}
//Потоки Клиентов //Потоки Клиентов
public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться
{ {

View file

@ -37,20 +37,26 @@ namespace ZoFo.GameCore
{ {
networkManager.AddData(data); networkManager.AddData(data);
} }
public void CreateRoom(int players) //Создает комнату и запускает ожидание подключений /// <summary>
/// Создает комнату и запускает ожидание подключений
/// </summary>
/// <param name="players"></param>
public void CreateRoom(int players)
{ {
networkManager.StartWaitingForPlayers(players); networkManager.Start(players);
} }
// public void StartGame() { } принудительный запуск // public void StartGame() { } принудительный запуск
public void EndGame() //Добавляет UpdateGameEnded и отключает игроков
/// <summary>
/// Добавляет UpdateGameEnded и отключает игроков
/// </summary>
public void EndGame()
{ {
UpdateGameEnded gameEnded = new UpdateGameEnded(); UpdateGameEnded gameEnded = new UpdateGameEnded();
networkManager.AddData(gameEnded); networkManager.AddData(gameEnded);
networkManager.CloseConnection(); networkManager.CloseConnection();
} }
public void Update(GameTime gameTime) public void Update(GameTime gameTime)
{ {
} }