diff --git a/AnimationsFileCreator/AnimationsFileCreator.csproj b/AnimationsFileCreator/AnimationsFileCreator.csproj
new file mode 100644
index 0000000..b8c3b86
--- /dev/null
+++ b/AnimationsFileCreator/AnimationsFileCreator.csproj
@@ -0,0 +1,17 @@
+
+
+
+ Exe
+ net8.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AnimationsFileCreator/Program.cs b/AnimationsFileCreator/Program.cs
new file mode 100644
index 0000000..68768cf
--- /dev/null
+++ b/AnimationsFileCreator/Program.cs
@@ -0,0 +1,72 @@
+using DangerousD.GameCore.Graphics;
+using Microsoft.Xna.Framework;
+using Newtonsoft.Json;
+using System;
+using NativeFileDialogSharp;
+using System.IO;
+using System.Linq;
+using System.Reflection.Metadata;
+using Zofo.GameCore.ZoFo_grafics;
+
+namespace AnimationsFileCreator
+{
+ class Program
+ {
+ [STAThread]
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Добро пожаловать в костыльную программу по созданию файлов анимации для игры DungerousD");
+ Console.Write("Введите название текстуры (нажмите enter, чтобы выбрать файл во всплывающем окошке): ");
+ string textureName = Console.ReadLine();
+ if (textureName == "")
+ {
+
+ DialogResult result = Dialog.FileOpen();
+ textureName = result.Path.Split('\\').Last();
+ textureName = textureName.Split('.')[0];
+ }
+ Console.WriteLine("Введите количество кадров анимации: ");
+ int framesCount = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите длительность кадра в анимации: ");
+ int interval = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию X ректенгла анимации: ");
+ Rectangle rectangle = new Rectangle();
+ rectangle.X = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию Y ректенгла анимации: ");
+ rectangle.Y = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию Width ректенгла анимации: ");
+ rectangle.Width = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию Height ректенгла анимации: ");
+ rectangle.Height = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите название для этого файла - id анимации");
+ string id = Console.ReadLine();
+ Console.WriteLine("Введите 1 если анимация зациклена, и 0 если нет");
+ AnimationContainer container = new AnimationContainer();
+
+ int a = int.Parse(Console.ReadLine());
+ if (a==1)
+ {
+ container.IsCycle = true;
+ }
+ else
+ {
+ container.IsCycle = false;
+ }
+ Console.WriteLine("Введите отклонение анимации от стандартной (сначала X, потом enter, потом Y): ");
+ int otklx = int.Parse(Console.ReadLine());
+ int otkly = int.Parse(Console.ReadLine());
+ container.Offset =new Vector2(otklx,otkly);
+ container.FramesCount = framesCount;
+ container.FrameTime = new System.Collections.Generic.List>();
+ container.FrameTime.Add(new Tuple(0, interval));
+ container.StartSpriteRectangle = rectangle;
+ container.TextureName = textureName;
+ container.TextureFrameInterval = 1;
+ container.Id = id;
+ string json = JsonConvert.SerializeObject(container);
+ StreamWriter writer = new StreamWriter("../../../../ZoFo/Content/animations/"+id);
+ writer.WriteLine(json);
+ writer.Close();
+ }
+ }
+}
diff --git a/MonogameLibrary/UI/Elements/CheckBox.cs b/MonogameLibrary/UI/Elements/CheckBox.cs
index 5d927ca..b8eec17 100644
--- a/MonogameLibrary/UI/Elements/CheckBox.cs
+++ b/MonogameLibrary/UI/Elements/CheckBox.cs
@@ -24,6 +24,10 @@ namespace MonogameLibrary.UI.Elements
private bool isChecked;
HoverState hoverState = HoverState.None;
public bool GetChecked { get { return isChecked; } }
+ public void SetIsChecked(bool isChecked)
+ {
+ this.isChecked=isChecked;
+ }
public bool InteractUpdate(MouseState mouseState, MouseState prevmouseState)
{
if (rectangle.Intersects(new Rectangle(mouseState.Position, Point.Zero)))
diff --git a/ZoFo.sln b/ZoFo.sln
index 81a0c18..3ea9985 100644
--- a/ZoFo.sln
+++ b/ZoFo.sln
@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZoFo", "ZoFo\ZoFo.csproj",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonogameLibrary", "MonogameLibrary\MonogameLibrary.csproj", "{40880E68-4B3A-417B-A39B-95DE46AA2E7E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnimationsFileCreator", "AnimationsFileCreator\AnimationsFileCreator.csproj", "{7B143D5C-5198-4ADE-9291-ECC924B78633}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
{40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ZoFo/Content/Content.mgcb b/ZoFo/Content/Content.mgcb
index e8f4b45..fd91add 100644
--- a/ZoFo/Content/Content.mgcb
+++ b/ZoFo/Content/Content.mgcb
@@ -34,6 +34,63 @@
/processorParam:TextureFormat=Compressed
/build:Fonts/Font3.spritefont
+#begin MapData/TileMaps/main.tmj
+/copy:MapData/TileMaps/main.tmj
+
+#begin MapData/TileMaps/main.tmx
+/copy:MapData/TileMaps/main.tmx
+
+#begin MapData/TileSets/TileSet 1.tsj
+/copy:MapData/TileSets/TileSet 1.tsj
+
+#begin sounds/Loot.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Loot.wav
+
+#begin sounds/Odevanie odezdi.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Odevanie odezdi.wav
+
+#begin sounds/Pieot wodichky.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Pieot wodichky.wav
+
+#begin sounds/Sshetchik geigera.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Sshetchik geigera.wav
+
+#begin sounds/Tabletki 2.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Tabletki 2.wav
+
+#begin sounds/Tabletki.mp3
+/importer:Mp3Importer
+/processor:SongProcessor
+/processorParam:Quality=Best
+/build:sounds/Tabletki.mp3
+
+#begin sounds/Zombi napal.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Zombi napal.wav
+
+#begin sounds/Zombi stoit.wav
+/importer:WavImporter
+/processor:SoundEffectProcessor
+/processorParam:Quality=Best
+/build:sounds/Zombi stoit.wav
+
#begin Textures/GUI/background/base.png
/importer:TextureImporter
/processor:TextureProcessor
@@ -202,3 +259,15 @@
/processorParam:TextureFormat=Color
/build:Textures/GUI/switch.png
+#begin Textures/TileSets/TilesetFloor.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/TileSets/TilesetFloor.png;Textures/TileSets/TileSet 1.png
+
diff --git a/ZoFo/Content/MapData/TileMaps/main.tmj b/ZoFo/Content/MapData/TileMaps/main.tmj
new file mode 100644
index 0000000..ae7c346
--- /dev/null
+++ b/ZoFo/Content/MapData/TileMaps/main.tmj
@@ -0,0 +1,167 @@
+{ "compressionlevel":-1,
+ "height":20,
+ "infinite":true,
+ "layers":[
+ {
+ "chunks":[
+ {
+ "data":[24, 24, 24, 28, 29, 24, 24, 24, 28, 46, 29, 24, 25, 115, 45, 46,
+ 24, 24, 24, 25, 23, 24, 24, 24, 50, 2, 51, 24, 50, 2, 2, 2,
+ 24, 24, 24, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28,
+ 28, 29, 24, 28, 10, 32, 29, 24, 24, 28, 46, 29, 24, 24, 24, 50,
+ 47, 23, 24, 50, 32, 10, 32, 46, 29, 50, 2, 51, 24, 24, 24, 24,
+ 1, 32, 29, 90, 25, 23, 50, 2, 32, 29, 24, 90, 28, 29, 24, 24,
+ 51, 50, 32, 29, 50, 51, 90, 24, 25, 45, 46, 29, 25, 23, 24, 90,
+ 24, 24, 50, 32, 46, 29, 24, 28, 10, 2, 2, 51, 50, 51, 24, 90,
+ 24, 24, 24, 50, 2, 32, 46, 10, 32, 29, 24, 90, 24, 24, 24, 90,
+ 29, 24, 89, 24, 24, 50, 3, 23, 50, 32, 46, 46, 46, 46, 29, 24,
+ 51, 24, 24, 28, 29, 24, 25, 23, 24, 25, 1, 2, 3, 111, 45, 29,
+ 24, 90, 24, 50, 51, 24, 25, 23, 28, 47, 23, 89, 50, 3, 115, 23,
+ 24, 24, 24, 24, 24, 89, 50, 32, 47, 1, 51, 24, 24, 50, 2, 51,
+ 28, 29, 24, 24, 24, 24, 28, 10, 2, 51, 24, 24, 24, 24, 24, 28,
+ 10, 32, 29, 24, 24, 24, 25, 23, 28, 29, 90, 24, 24, 90, 24, 50,
+ 32, 10, 51, 24, 24, 24, 50, 32, 10, 32, 29, 24, 90, 28, 29, 24],
+ "height":16,
+ "width":16,
+ "x":-16,
+ "y":-16
+ },
+ {
+ "data":[10, 51, 24, 90, 24, 25, 23, 28, 29, 24, 24, 24, 24, 24, 24, 24,
+ 51, 24, 28, 29, 24, 50, 32, 10, 51, 24, 24, 24, 24, 24, 24, 24,
+ 29, 28, 10, 32, 46, 29, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24,
+ 51, 25, 23, 50, 2, 32, 29, 25, 23, 24, 24, 28, 29, 24, 90, 24,
+ 24, 25, 23, 24, 24, 25, 23, 50, 51, 24, 24, 50, 32, 29, 24, 90,
+ 24, 50, 32, 29, 90, 25, 45, 29, 24, 24, 24, 24, 50, 51, 24, 89,
+ 24, 89, 50, 51, 24, 25, 114, 23, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 28, 29, 24, 50, 2, 51, 24, 24, 90, 28, 29, 24, 24, 28,
+ 24, 24, 25, 23, 89, 24, 24, 24, 28, 46, 29, 25, 23, 24, 24, 50,
+ 28, 46, 10, 51, 24, 28, 46, 29, 25, 111, 45, 10, 51, 28, 29, 24,
+ 50, 2, 51, 24, 24, 25, 115, 45, 10, 3, 1, 51, 24, 25, 23, 24,
+ 24, 24, 24, 24, 24, 50, 2, 2, 32, 10, 51, 24, 90, 25, 23, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 25, 23, 24,
+ 46, 29, 24, 24, 24, 24, 24, 89, 24, 24, 24, 28, 46, 47, 23, 90,
+ 2, 32, 29, 24, 24, 28, 46, 46, 29, 24, 24, 25, 1, 3, 23, 89,
+ 24, 50, 32, 29, 24, 25, 1, 3, 23, 24, 89, 50, 32, 10, 51, 24],
+ "height":16,
+ "width":16,
+ "x":0,
+ "y":-16
+ },
+ {
+ "data":[24, 24, 24, 24, 90, 24, 89, 24, 89, 24, 50, 51, 89, 24, 24, 24,
+ 24, 28, 29, 28, 29, 24, 24, 24, 24, 28, 29, 24, 24, 24, 28, 29,
+ 24, 25, 23, 50, 51, 24, 24, 28, 29, 50, 51, 24, 24, 24, 25, 45,
+ 90, 50, 51, 28, 29, 24, 24, 25, 23, 24, 24, 28, 29, 24, 50, 3,
+ 24, 24, 28, 10, 51, 90, 90, 50, 51, 24, 24, 50, 51, 24, 24, 50,
+ 24, 24, 25, 45, 29, 24, 28, 29, 24, 24, 24, 24, 24, 28, 29, 24,
+ 90, 24, 50, 2, 51, 28, 10, 51, 90, 24, 28, 29, 24, 25, 45, 46,
+ 29, 90, 24, 24, 24, 50, 51, 24, 24, 28, 10, 32, 46, 10, 3, 1,
+ 32, 29, 24, 90, 24, 24, 24, 24, 28, 47, 23, 50, 2, 51, 50, 51,
+ 25, 23, 24, 24, 28, 46, 46, 46, 47, 114, 45, 29, 24, 24, 24, 24,
+ 50, 32, 29, 24, 50, 3, 111, 111, 115, 111, 1, 32, 29, 24, 24, 24,
+ 24, 50, 51, 24, 28, 10, 2, 2, 2, 2, 32, 10, 51, 24, 24, 89,
+ 24, 24, 89, 90, 25, 23, 24, 24, 24, 24, 50, 32, 46, 46, 29, 89,
+ 24, 24, 24, 90, 25, 23, 89, 24, 28, 29, 90, 50, 2, 2, 51, 24,
+ 24, 24, 24, 28, 10, 51, 24, 28, 47, 45, 29, 24, 24, 24, 24, 24,
+ 24, 24, 24, 25, 23, 24, 90, 50, 2, 2, 32, 46, 46, 46, 46, 46],
+ "height":16,
+ "width":16,
+ "x":16,
+ "y":-16
+ },
+ {
+ "data":[10, 32, 46, 29, 24, 24, 24, 25, 23, 50, 32, 29, 24, 50, 32, 46,
+ 51, 50, 2, 32, 29, 24, 24, 25, 45, 29, 25, 23, 24, 24, 25, 1,
+ 24, 24, 24, 25, 23, 28, 46, 10, 2, 51, 50, 51, 24, 24, 50, 51,
+ 90, 89, 90, 50, 51, 50, 2, 51, 24, 24, 28, 29, 90, 24, 24, 24,
+ 90, 28, 46, 29, 90, 24, 24, 24, 90, 24, 50, 51, 90, 24, 90, 28,
+ 29, 50, 2, 51, 24, 24, 24, 89, 24, 24, 24, 24, 24, 89, 24, 50,
+ 23, 24, 24, 28, 46, 29, 90, 90, 24, 89, 24, 28, 29, 24, 24, 24,
+ 32, 46, 29, 25, 115, 45, 29, 24, 90, 24, 24, 25, 23, 24, 24, 28,
+ 10, 2, 32, 47, 115, 1, 51, 24, 24, 24, 24, 25, 23, 24, 28, 10,
+ 32, 29, 50, 2, 2, 51, 24, 24, 24, 24, 24, 25, 23, 28, 10, 51,
+ 50, 51, 89, 24, 24, 89, 24, 28, 29, 24, 24, 50, 32, 10, 32, 46,
+ 24, 24, 90, 90, 28, 46, 29, 50, 51, 24, 24, 24, 25, 23, 25, 115,
+ 24, 90, 24, 24, 50, 2, 32, 29, 24, 24, 90, 24, 25, 45, 10, 2,
+ 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 24, 28, 10, 3, 23, 24,
+ 90, 24, 24, 24, 24, 89, 90, 50, 32, 29, 90, 50, 51, 50, 32, 46,
+ 46, 29, 24, 90, 24, 24, 24, 24, 50, 51, 28, 29, 24, 24, 50, 2],
+ "height":16,
+ "width":16,
+ "x":-16,
+ "y":0
+ },
+ {
+ "data":[46, 46, 10, 32, 46, 47, 23, 25, 23, 89, 24, 24, 25, 23, 90, 24,
+ 2, 2, 32, 47, 1, 2, 51, 25, 23, 24, 28, 29, 50, 32, 29, 24,
+ 24, 90, 50, 3, 23, 24, 28, 10, 51, 28, 47, 45, 29, 25, 23, 28,
+ 24, 24, 24, 50, 51, 28, 47, 23, 24, 50, 3, 114, 45, 10, 51, 50,
+ 29, 24, 24, 89, 24, 25, 114, 45, 46, 46, 10, 2, 2, 32, 29, 89,
+ 51, 24, 24, 24, 24, 50, 3, 111, 115, 115, 23, 24, 24, 50, 32, 29,
+ 24, 28, 29, 24, 24, 24, 25, 1, 2, 2, 51, 90, 24, 90, 50, 51,
+ 29, 50, 32, 29, 28, 29, 25, 23, 24, 24, 89, 28, 29, 24, 24, 24,
+ 51, 24, 50, 51, 50, 32, 10, 32, 46, 29, 24, 50, 51, 24, 90, 24,
+ 24, 24, 24, 24, 89, 50, 32, 10, 2, 32, 46, 29, 89, 28, 29, 24,
+ 29, 90, 24, 24, 24, 24, 50, 51, 28, 10, 3, 23, 28, 10, 51, 24,
+ 23, 89, 24, 24, 90, 24, 24, 24, 50, 32, 10, 51, 50, 51, 24, 24,
+ 51, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, 46, 46, 29, 28, 46,
+ 24, 24, 24, 90, 24, 24, 24, 24, 24, 24, 50, 3, 1, 32, 47, 115,
+ 46, 29, 24, 89, 24, 24, 24, 89, 24, 24, 24, 25, 45, 10, 3, 111,
+ 2, 51, 28, 29, 28, 29, 24, 28, 46, 46, 46, 10, 2, 51, 50, 2],
+ "height":16,
+ "width":16,
+ "x":0,
+ "y":0
+ },
+ {
+ "data":[28, 29, 28, 10, 32, 46, 29, 24, 24, 28, 10, 2, 2, 2, 2, 2,
+ 50, 51, 50, 51, 25, 115, 45, 46, 29, 50, 51, 24, 24, 24, 24, 24,
+ 29, 24, 89, 24, 50, 3, 115, 114, 23, 24, 24, 24, 24, 24, 24, 24,
+ 51, 90, 24, 89, 24, 50, 2, 2, 51, 24, 89, 24, 24, 28, 46, 29,
+ 24, 90, 24, 24, 89, 24, 90, 28, 29, 24, 24, 24, 28, 10, 2, 51,
+ 24, 24, 24, 24, 28, 29, 90, 50, 51, 28, 29, 24, 25, 23, 24, 24,
+ 28, 29, 24, 24, 50, 32, 29, 28, 29, 50, 51, 89, 50, 32, 29, 24,
+ 50, 51, 24, 24, 24, 50, 32, 10, 51, 24, 89, 24, 24, 25, 23, 24,
+ 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 24, 24, 24, 50, 51, 24,
+ 90, 24, 24, 24, 24, 24, 24, 25, 45, 29, 24, 24, 24, 89, 28, 29,
+ 24, 24, 24, 24, 28, 29, 24, 25, 1, 51, 24, 24, 24, 24, 50, 32,
+ 28, 29, 28, 29, 50, 32, 46, 10, 51, 28, 29, 24, 24, 24, 24, 50,
+ 47, 45, 10, 51, 24, 50, 2, 32, 46, 47, 23, 24, 89, 90, 24, 24,
+ 111, 115, 23, 24, 24, 90, 24, 50, 2, 2, 32, 29, 24, 89, 28, 46,
+ 1, 2, 51, 28, 46, 46, 29, 24, 28, 29, 50, 32, 29, 28, 47, 111,
+ 51, 24, 24, 50, 3, 114, 23, 24, 50, 32, 46, 47, 23, 25, 111, 111],
+ "height":16,
+ "width":16,
+ "x":16,
+ "y":0
+ }],
+ "class":"Tile",
+ "height":48,
+ "id":1,
+ "name":"\u0421\u043b\u043e\u0439 \u0442\u0430\u0439\u043b\u043e\u0432 1",
+ "opacity":1,
+ "startx":-16,
+ "starty":-32,
+ "type":"tilelayer",
+ "visible":true,
+ "width":48,
+ "x":0,
+ "y":0
+ }],
+ "nextlayerid":2,
+ "nextobjectid":1,
+ "orientation":"orthogonal",
+ "renderorder":"right-down",
+ "tiledversion":"1.10.2",
+ "tileheight":16,
+ "tilesets":[
+ {
+ "firstgid":1,
+ "source":"TileSets\/TileSet 1.tsj"
+ }],
+ "tilewidth":16,
+ "type":"map",
+ "version":"1.10",
+ "width":30
+}
\ No newline at end of file
diff --git a/ZoFo/Content/MapData/TileMaps/main.tmx b/ZoFo/Content/MapData/TileMaps/main.tmx
new file mode 100644
index 0000000..4cafd72
--- /dev/null
+++ b/ZoFo/Content/MapData/TileMaps/main.tmx
@@ -0,0 +1,116 @@
+
+
diff --git a/ZoFo/Content/MapData/TileSets/TileSet 1.tsj b/ZoFo/Content/MapData/TileSets/TileSet 1.tsj
new file mode 100644
index 0000000..3388a9e
--- /dev/null
+++ b/ZoFo/Content/MapData/TileSets/TileSet 1.tsj
@@ -0,0 +1,166 @@
+{ "class":"Tile",
+ "columns":22,
+ "grid":
+ {
+ "height":24,
+ "orientation":"orthogonal",
+ "width":24
+ },
+ "image":"..\/..\/..\/..\/Content\/Textures\/Background\/TilesetFloor.png",
+ "imageheight":417,
+ "imagewidth":352,
+ "margin":0,
+ "name":"TileSet 1",
+ "spacing":0,
+ "tilecount":572,
+ "tiledversion":"1.10.2",
+ "tileheight":16,
+ "tiles":[
+ {
+ "id":27,
+ "probability":0.5
+ },
+ {
+ "id":28,
+ "probability":0.5
+ },
+ {
+ "id":49,
+ "probability":0.5
+ },
+ {
+ "id":50,
+ "probability":0.5
+ },
+ {
+ "id":88,
+ "probability":0.100000001490116
+ },
+ {
+ "id":89,
+ "probability":0.100000001490116
+ },
+ {
+ "id":110,
+ "probability":2
+ },
+ {
+ "id":111,
+ "probability":0.100000001490116
+ },
+ {
+ "id":112,
+ "probability":0.100000001490116
+ }],
+ "tilewidth":16,
+ "type":"tileset",
+ "version":"1.10",
+ "wangsets":[
+ {
+ "colors":[
+ {
+ "color":"#ff0000",
+ "name":"Sand",
+ "probability":1,
+ "tile":23
+ },
+ {
+ "color":"#00ff00",
+ "name":"SandStone",
+ "probability":0.3,
+ "tile":110
+ }],
+ "name":"\u041f\u0435\u0441\u0447\u0430\u043d\u044b\u0439",
+ "tile":-1,
+ "type":"corner",
+ "wangtiles":[
+ {
+ "tileid":0,
+ "wangid":[0, 2, 0, 1, 0, 2, 0, 2]
+ },
+ {
+ "tileid":1,
+ "wangid":[0, 2, 0, 1, 0, 1, 0, 2]
+ },
+ {
+ "tileid":2,
+ "wangid":[0, 2, 0, 2, 0, 1, 0, 2]
+ },
+ {
+ "tileid":9,
+ "wangid":[0, 2, 0, 1, 0, 2, 0, 1]
+ },
+ {
+ "tileid":22,
+ "wangid":[0, 1, 0, 1, 0, 2, 0, 2]
+ },
+ {
+ "tileid":23,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":24,
+ "wangid":[0, 2, 0, 2, 0, 1, 0, 1]
+ },
+ {
+ "tileid":27,
+ "wangid":[0, 1, 0, 2, 0, 1, 0, 1]
+ },
+ {
+ "tileid":28,
+ "wangid":[0, 1, 0, 1, 0, 2, 0, 1]
+ },
+ {
+ "tileid":31,
+ "wangid":[0, 1, 0, 2, 0, 1, 0, 2]
+ },
+ {
+ "tileid":44,
+ "wangid":[0, 1, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":45,
+ "wangid":[0, 1, 0, 2, 0, 2, 0, 1]
+ },
+ {
+ "tileid":46,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 1]
+ },
+ {
+ "tileid":49,
+ "wangid":[0, 2, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":50,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 2]
+ },
+ {
+ "tileid":88,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":89,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":110,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":111,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":112,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":113,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":114,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ }]
+ }]
+}
\ No newline at end of file
diff --git a/ZoFo/Content/Textures/Background/TilesetFloor.png b/ZoFo/Content/Textures/Background/TilesetFloor.png
new file mode 100644
index 0000000..abba7bf
Binary files /dev/null and b/ZoFo/Content/Textures/Background/TilesetFloor.png differ
diff --git a/ZoFo/Content/Textures/TileSets/TilesetFloor.png b/ZoFo/Content/Textures/TileSets/TilesetFloor.png
new file mode 100644
index 0000000..abba7bf
Binary files /dev/null and b/ZoFo/Content/Textures/TileSets/TilesetFloor.png differ
diff --git a/ZoFo/Content/sounds/Loot.wav b/ZoFo/Content/sounds/Loot.wav
new file mode 100644
index 0000000..a382185
Binary files /dev/null and b/ZoFo/Content/sounds/Loot.wav differ
diff --git a/ZoFo/Content/sounds/Odevanie odezdi.wav b/ZoFo/Content/sounds/Odevanie odezdi.wav
new file mode 100644
index 0000000..348d8e0
Binary files /dev/null and b/ZoFo/Content/sounds/Odevanie odezdi.wav differ
diff --git a/ZoFo/Content/sounds/Pieot wodichky.wav b/ZoFo/Content/sounds/Pieot wodichky.wav
new file mode 100644
index 0000000..3105cdb
Binary files /dev/null and b/ZoFo/Content/sounds/Pieot wodichky.wav differ
diff --git a/ZoFo/Content/sounds/Sshetchik geigera.wav b/ZoFo/Content/sounds/Sshetchik geigera.wav
new file mode 100644
index 0000000..c57f374
Binary files /dev/null and b/ZoFo/Content/sounds/Sshetchik geigera.wav differ
diff --git a/ZoFo/Content/sounds/Tabletki 2.wav b/ZoFo/Content/sounds/Tabletki 2.wav
new file mode 100644
index 0000000..166f3ca
Binary files /dev/null and b/ZoFo/Content/sounds/Tabletki 2.wav differ
diff --git a/ZoFo/Content/sounds/Tabletki.mp3 b/ZoFo/Content/sounds/Tabletki.mp3
new file mode 100644
index 0000000..1a44967
Binary files /dev/null and b/ZoFo/Content/sounds/Tabletki.mp3 differ
diff --git a/ZoFo/Content/sounds/Zombi napal.wav b/ZoFo/Content/sounds/Zombi napal.wav
new file mode 100644
index 0000000..df0b208
Binary files /dev/null and b/ZoFo/Content/sounds/Zombi napal.wav differ
diff --git a/ZoFo/Content/sounds/Zombi stoit.wav b/ZoFo/Content/sounds/Zombi stoit.wav
new file mode 100644
index 0000000..7b64f89
Binary files /dev/null and b/ZoFo/Content/sounds/Zombi stoit.wav differ
diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs
index 5ee0546..ad153d7 100644
--- a/ZoFo/GameCore/Client.cs
+++ b/ZoFo/GameCore/Client.cs
@@ -7,12 +7,19 @@ using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;
+using ZoFo.GameCore.GameObjects;
+using ZoFo.GameCore.GameObjects.MapObjects;
+using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
+using ZoFo.GameCore.GameObjects.MapObjects.Tiles;
+using System.Drawing;
namespace ZoFo.GameCore
{
public class Client
{
ClientNetworkManager networkManager;
+
+ public bool IsConnected { get { return networkManager.IsConnected; } }
public Client()
{
networkManager = new ClientNetworkManager();
@@ -20,23 +27,57 @@ namespace ZoFo.GameCore
}
public void OnDataSend(string data)
- {
- List updateDatas = JsonSerializer.Deserialize>(data);
+ {
+ List updateDatas = JsonSerializer.Deserialize>(data);
// тут будет switch
+ foreach (var item in updateDatas)
+ {
+ /* switch (item.UpdateType) Здесь нужно отлавливать и регистрировать
+ {
+ case "Tile":
+ MapObject map = new MapObject();
+
+ break;
+ }*/
+ }
+
}
+ public void GameEndedUnexpectedly() { }
+ public void JoinRoom(string ip)
+ {
+ networkManager.JoinRoom(ip);
+ }
+ public void JoinYourself() { networkManager.JoinYourself(); }
- public void GameEndedUnexpectedly(){ }
-
- public void JoinRoom(){ }
-
- public void JoinYourself(){ }
+ List mapObjects = new List();
+ ///
+ /// Клиент должен обнговлять игру анимаций
+ ///
+ ///
internal void Update(GameTime gameTime)
- {
+ {
+ }
+ internal void Draw(SpriteBatch spriteBatch)
+ {
+ for (int i = 0; i < mapObjects.Count; i++)
+ {
+ mapObjects[i].Draw(spriteBatch);
+ }
}
- internal void Draw(SpriteBatch spriteBatch)
- {
+ internal void GotData(UpdateData update)
+ {
+ if (update is UpdateTileCreated)
+ {
+ mapObjects.Add(
+ new MapObject(
+ (update as UpdateTileCreated).Position,
+ (update as UpdateTileCreated).Size.ToVector2(),
+ (update as UpdateTileCreated).sourceRectangle,
+ (update as UpdateTileCreated).tileSetName
+ ));
+ }
}
}
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GUI/HUD.cs b/ZoFo/GameCore/GUI/HUD.cs
index c20ead1..2a65222 100644
--- a/ZoFo/GameCore/GUI/HUD.cs
+++ b/ZoFo/GameCore/GUI/HUD.cs
@@ -12,7 +12,7 @@ using MonogameLibrary.UI.Elements;
namespace ZoFo.GameCore.GUI;
-public class HUD
+public class HUD : AbstractGUI
{
protected UIManager Manager = new();
protected List Elements = new();
@@ -39,6 +39,10 @@ public class HUD
public virtual void Draw(SpriteBatch spriteBatch)
{
- Manager.Draw(spriteBatch);
+ //Manager.Draw(spriteBatch);
+ }
+
+ protected override void CreateUI()
+ {
}
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GUI/MainMenuGUI.cs b/ZoFo/GameCore/GUI/MainMenuGUI.cs
index 01602c0..8ebfd74 100644
--- a/ZoFo/GameCore/GUI/MainMenuGUI.cs
+++ b/ZoFo/GameCore/GUI/MainMenuGUI.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using System.Threading;
using System.Xml;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
@@ -37,12 +38,12 @@ public class MainMenuGUI : AbstractGUI
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
- playButton.LeftButtonPressed += () =>
+ playButton.LeftButtonPressed += () =>
{
AppManager.Instance.SetGUI(new SelectModeMenu());
};
Elements.Add(playButton);
- Button optionButton = new Button(Manager)
+ Button optionButton = new Button(Manager)
{
rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + (height / 20 + height / 40) * 2, (int)(width / 5), (int)(height / 20)),
text = "Options",
@@ -51,12 +52,12 @@ public class MainMenuGUI : AbstractGUI
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
- optionButton.LeftButtonPressed += () =>
+ optionButton.LeftButtonPressed += () =>
{
AppManager.Instance.SetGUI(new OptionsGUI());
};
Elements.Add(optionButton);
- Button exitButton = new Button(Manager)
+ Button exitButton = new Button(Manager)
{
rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + (height / 20 + height / 40) * 3, (int)(width / 5), (int)(height / 20)),
text = "Exit",
@@ -65,15 +66,14 @@ public class MainMenuGUI : AbstractGUI
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
- exitButton.LeftButtonPressed += () =>
+ exitButton.LeftButtonPressed += () =>
{
AppManager.Instance.Exit();
};
Elements.Add(exitButton);
-
-
- }
+
+ }
public override void Update(GameTime gameTime)
{
base.Update(gameTime);
diff --git a/ZoFo/GameCore/GUI/OptionsGUI.cs b/ZoFo/GameCore/GUI/OptionsGUI.cs
index 5bcf0a3..d2fbf92 100644
--- a/ZoFo/GameCore/GUI/OptionsGUI.cs
+++ b/ZoFo/GameCore/GUI/OptionsGUI.cs
@@ -43,6 +43,7 @@ public class OptionsGUI : AbstractGUI
slider_OverallVolume.SliderChanged += (newVal) =>
{
label_OverallVolume_Percent.text = Math.Round(slider_OverallVolume.GetSliderValue * 100) + "%";
+ AppManager.Instance.SettingsManager.SetMainVolume(newVal);
};
Elements.Add(slider_OverallVolume);
@@ -62,6 +63,7 @@ public class OptionsGUI : AbstractGUI
slider_MusicVolume.SliderChanged += (newVal) =>
{
label_MusicVolume_Percent.text = Math.Round(slider_MusicVolume.GetSliderValue * 100) + "%";
+ AppManager.Instance.SettingsManager.SetMusicVolume(newVal);
};
Elements.Add(slider_MusicVolume);
@@ -81,6 +83,7 @@ public class OptionsGUI : AbstractGUI
slider_EffectsVolume.SliderChanged += (newVal) =>
{
label_EffectsVolume_Percent.text = Math.Round(slider_EffectsVolume.GetSliderValue * 100) + "%";
+ AppManager.Instance.SettingsManager.SetSoundEffectsVolume(newVal);
};
Elements.Add(slider_EffectsVolume);
@@ -100,9 +103,10 @@ public class OptionsGUI : AbstractGUI
Elements.Add(label_IsFullScreen);
var button_FullScreen = new CheckBox(Manager) { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 4, width / 40, width / 40) };
+ button_FullScreen.SetIsChecked(AppManager.Instance.SettingsManager.IsFullScreen);
button_FullScreen.Checked += (newCheckState) =>
{
-
+ AppManager.Instance.SettingsManager.SetIsFullScreen(newCheckState);
};
Elements.Add(button_FullScreen);
diff --git a/ZoFo/GameCore/GUI/SelectModeMenu.cs b/ZoFo/GameCore/GUI/SelectModeMenu.cs
index b5b5b29..af3dad0 100644
--- a/ZoFo/GameCore/GUI/SelectModeMenu.cs
+++ b/ZoFo/GameCore/GUI/SelectModeMenu.cs
@@ -39,7 +39,22 @@ public class SelectModeMenu : AbstractGUI
singleButton.LeftButtonPressed += () =>
{
// single
+ Server server = new Server();
+ Client client = new Client();
+ server.CreateRoom(1);
+ client.JoinYourself();
+ AppManager.Instance.SetServer(server);
+ AppManager.Instance.SetClient(client);
+ AppManager.Instance.ChangeState(GameState.HostPlaying);
+ AppManager.Instance.SetGUI(new HUD());
+
+ //server.CreateRoom(1);
+ //client.JoinYourself();
+ server.StartGame();
+
+ string key = client.IsConnected.ToString();
+ AppManager.Instance.debugHud.Set(key,"SinglePlayer");
// ваш код здесь
};
Elements.Add(singleButton);
@@ -56,7 +71,14 @@ public class SelectModeMenu : AbstractGUI
{
AppManager.Instance.SetGUI(new SelectingServerGUI());
// multi
-
+ Server server = new Server(); //Server Logic MultiPlayer
+ Client client = new Client();
+ server.CreateRoom(5);
+ client.JoinRoom("127.0.0.1"); //указать айпишник
+ AppManager.Instance.SetServer(server);
+ AppManager.Instance.SetClient(client);
+ string key = client.IsConnected.ToString();
+ AppManager.Instance.debugHud.Set(key, "MultiPlayer");
// ваш код здесь
};
Elements.Add(optionButton);
diff --git a/ZoFo/GameCore/GameManagers/AppManager.cs b/ZoFo/GameCore/GameManagers/AppManager.cs
index fbb7726..83f0382 100644
--- a/ZoFo/GameCore/GameManagers/AppManager.cs
+++ b/ZoFo/GameCore/GameManagers/AppManager.cs
@@ -20,9 +20,9 @@ namespace ZoFo.GameCore.GameManagers
{
private GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch;
-
-
-
+
+
+
public static AppManager Instance { get; private set; }
public GameState gamestate;
public AbstractGUI currentGUI;
@@ -31,13 +31,15 @@ namespace ZoFo.GameCore.GameManagers
public Client client;
public Server server;
-
+
#region Managers
-
+
public InputManager InputManager;
public ItemManager.ItemManager ItemManager;
+ public SettingsManager SettingsManager;
+ public SoundManager SoundManager;
- public AnimationBuilder animationBuilder{get;set; }
+ public AnimationBuilder animationBuilder { get; set; }
#endregion
@@ -45,15 +47,18 @@ namespace ZoFo.GameCore.GameManagers
{
_graphics = new GraphicsDeviceManager(this);
SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y);
- FulscrreenSwitch();
-
-
+ // FulscrreenSwitch();
+
+
Content.RootDirectory = "Content";
IsMouseVisible = true;
Instance = this;
InputManager = new InputManager();
-
+ SettingsManager = new SettingsManager();
+ SettingsManager.LoadSettings();
+ SoundManager = new SoundManager();
+ SoundManager.LoadSounds();
currentGUI = new MainMenuGUI();
@@ -65,9 +70,7 @@ namespace ZoFo.GameCore.GameManagers
protected override void Initialize()
{
currentGUI.Initialize();
- debugHud.Initialize();
-
-
+ debugHud.Initialize();
base.Initialize();
@@ -88,9 +91,9 @@ namespace ZoFo.GameCore.GameManagers
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
-
+
debugHud.Set("key", "value");
-
+
InputManager.Update();
currentGUI.Update(gameTime);
switch (gamestate)
@@ -115,20 +118,20 @@ namespace ZoFo.GameCore.GameManagers
{
GraphicsDevice.Clear(Color.CornflowerBlue);
-
-
currentGUI.Draw(_spriteBatch);
debugHud.Draw(_spriteBatch);
+ _spriteBatch.Begin();
switch (gamestate)
{
case GameState.ClientPlaying:
case GameState.HostPlaying:
- client.Draw(_spriteBatch);
+ client.Draw(_spriteBatch);
break;
case GameState.NotPlaying:
default:
break;
}
+ _spriteBatch.End();
base.Draw(gameTime);
}
@@ -138,7 +141,7 @@ namespace ZoFo.GameCore.GameManagers
}
public void SetGUI(AbstractGUI gui)
{
- currentGUI = gui;
+ currentGUI = gui;
currentGUI.Initialize();
currentGUI.LoadContent();
@@ -160,5 +163,8 @@ namespace ZoFo.GameCore.GameManagers
{
_graphics.IsFullScreen = !_graphics.IsFullScreen;
}
+
+ public void SetServer(Server server) { this.server = server; }
+ public void SetClient(Client client) { this.client = client; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs
index 642aefc..4ee0980 100644
--- a/ZoFo/GameCore/GameManagers/InputManager.cs
+++ b/ZoFo/GameCore/GameManagers/InputManager.cs
@@ -3,63 +3,60 @@ using Microsoft.Xna.Framework.Input;
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Formats.Tar;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers
{
- public enum ScopeState { Up, Middle, Down }
- public enum ControlsState { Gamepad, Keyboard }
+ public enum ScopeState { Left, Right, Straight, Back, StraightLeft, StraightRight, BackLeft, BackRight }
+
public class InputManager
{
public delegate void Delegat();
- public event Delegat MovEventJump;
- public event Delegat MovEventDown;
- public event Delegat ShootEvent;
+ public event Delegat ShootEvent; // событие удара(когда нажат X, событие срабатывает)
+
+ public event Delegat OnInteract; // событие взаимодействия с collectable(например, лутом)
+ //с помощью кнопки E.
+
+ public event Delegat TalkEvent;
Vector2 vectorMovementDirection;
- ScopeState scopeState; // Положение оружия. Up, Middle, Down.
- ControlsState controlsState;
- private bool _overrideControls = false;
+ ScopeState currentScopeState; // Положение оружия. Left, Right, Straight, Back, StraightLeft, StraightRight, BackLeft, BackRight.
private bool _cheatsEnabled = false;
public bool InvincibilityCheat { get; private set; } = false;
public bool CollisionsCheat { get; private set; } = false;
public bool InfiniteAmmoCheat { get; private set; } = false;
- private bool isJumpDown; // Блокирует физическое нажатие прыжка и спуска
private bool isShoot;
+ private bool isInteract;
private KeyboardState lastKeyboardState;
private GamePadState lastGamePadState;
public Vector2 VectorMovementDirection { get => vectorMovementDirection; }
- public ScopeState ScopeState { get => scopeState; }
+ public ScopeState ScopeState { get => currentScopeState; }
public string currentControlsState;
+ public ScopeState CurrentScopeState { get => currentScopeState; } // получить текущее состояние
public InputManager()
{
- this.isJumpDown = false;
this.isShoot = false;
- scopeState = ScopeState.Middle;
- controlsState = ControlsState.Keyboard;
+ currentScopeState = ScopeState.Straight;
vectorMovementDirection = new Vector2(0, 0);
}
public void Update()
{
if (_cheatsEnabled)
{
- //AppManager.Instance.DebugHUD.Set("cheats", _cheatsEnabled.ToString());
- //AppManager.Instance.DebugHUD.Set("invincible", InvincibilityCheat.ToString());
- //AppManager.Instance.DebugHUD.Set("infinite ammo", InfiniteAmmoCheat.ToString()); //TODO
+ AppManager.Instance.debugHud.Set("cheats", _cheatsEnabled.ToString());
+ AppManager.Instance.debugHud.Set("invincible", InvincibilityCheat.ToString());
+ AppManager.Instance.debugHud.Set("infinite ammo", InfiniteAmmoCheat.ToString()); //TODO
}
#region Работа с GamePad
- if (_overrideControls ? controlsState == ControlsState.Gamepad : GamePad.GetState(0).IsConnected)
- {
- controlsState = ControlsState.Gamepad;
-
#region Обработка гейм-пада. Задает Vector2 vectorMovementDirection являющийся вектором отклонения левого стика.
GamePadState gamePadState = GamePad.GetState(0);
vectorMovementDirection = gamePadState.ThumbSticks.Left;
@@ -78,56 +75,57 @@ namespace ZoFo.GameCore.GameManagers
}
#endregion // Cheats
- #region Обработка нажатия прыжка и спуска. Вызывает события MovEvent.
- if (vectorMovementDirection.Y < -0.2 && gamePadState.Buttons.A == ButtonState.Pressed && !isJumpDown)
- {
- isJumpDown = true;
- MovEventDown?.Invoke();
- Debug.WriteLine("Спуск");
- }
- else if (gamePadState.Buttons.A == ButtonState.Pressed && lastGamePadState.Buttons.A == ButtonState.Released)
- {
- MovEventJump?.Invoke();
- Debug.WriteLine("Прыжок");
- }
- #endregion
-
#region Обработка положения оружия. Задает значение полю scopeState.
- if (vectorMovementDirection.Y >= 0.7)
+ if (vectorMovementDirection.Y >= 0.6)
{
- scopeState = ScopeState.Up;
+ currentScopeState = ScopeState.Straight;
}
- else if (vectorMovementDirection.Y <= -0.7 && !isJumpDown)
+ else if(vectorMovementDirection.Y <= 0.6)
{
- scopeState = ScopeState.Down;
+ currentScopeState = ScopeState.Back;
}
- else
+ else if(vectorMovementDirection.X >= 0.6)
{
- scopeState = ScopeState.Middle;
+ currentScopeState = ScopeState.Right;
+ }
+ else if(vectorMovementDirection.X <= 0.6)
+ {
+ currentScopeState = ScopeState.Left;
+ }
+ else if(vectorMovementDirection.Y >= 0.6 && vectorMovementDirection.X >= 0.6)
+ {
+ currentScopeState = ScopeState.StraightRight;
+ }
+ else if(vectorMovementDirection.Y >= 0.6 && vectorMovementDirection.X <= 0.6)
+ {
+ currentScopeState = ScopeState.StraightLeft;
+ }
+ else if(vectorMovementDirection.Y <= 0.6 && vectorMovementDirection.X >= 0.6)
+ {
+ currentScopeState = ScopeState.BackRight;
+ }
+ else if(vectorMovementDirection.Y <= 0.6 && vectorMovementDirection.X <= 0.6)
+ {
+ currentScopeState = ScopeState.BackLeft;
}
#endregion
#region Обработка нажатия выстрела. Вызывает событие ShootEvent
- if (gamePadState.Buttons.X == ButtonState.Pressed && !isJumpDown && !isShoot)
+ if (gamePadState.Buttons.X == ButtonState.Pressed && !isShoot)
{
isShoot = true;
ShootEvent?.Invoke();
Debug.WriteLine("Выстрел");
}
- else if (gamePadState.Buttons.X == ButtonState.Released && !isJumpDown)
+ else if (gamePadState.Buttons.X == ButtonState.Released)
{
isShoot = false;
}
#endregion
lastGamePadState = gamePadState;
- }
#endregion
#region Работа с KeyBoard
- else
- {
- controlsState = ControlsState.Keyboard;
-
#region Состояние клавиатуры
KeyboardState keyBoardState = Keyboard.GetState(); // Состояние клавиатуры
#endregion
@@ -154,76 +152,73 @@ namespace ZoFo.GameCore.GameManagers
}
#endregion // Cheats
- #region Обработка движения вправо-влево. Меняет у вектора vectorMovementDirection значение X на -1/0/1.
- if (keyBoardState.IsKeyDown(Keys.Left))
+ #region Обработка состояния объекта. Задает значение полю scopeState.
+ if (keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.W))
{
- vectorMovementDirection.X = -1;
+ currentScopeState = ScopeState.Straight;
}
- else if (keyBoardState.IsKeyDown(Keys.Right))
+ else if (keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.S))
{
- vectorMovementDirection.X = 1;
+ currentScopeState = ScopeState.Back;
}
- else
+ else if(keyBoardState.IsKeyDown(Keys.Left) || keyBoardState.IsKeyDown(Keys.A))
{
- vectorMovementDirection.X = 0;
+ currentScopeState = ScopeState.Left;
}
- #endregion
-
- #region Обработка прыжка и спуска. Вызываются события MovEvent.
- if (keyBoardState.IsKeyDown(Keys.LeftShift) && !isJumpDown && keyBoardState.IsKeyDown(Keys.Down))
+ else if(keyBoardState.IsKeyDown(Keys.Right) || keyBoardState.IsKeyDown(Keys.D))
{
- isJumpDown = true;
- MovEventDown?.Invoke();
- Debug.WriteLine("Спуск");
+ currentScopeState = ScopeState.Right;
}
- else if (keyBoardState.IsKeyDown(Keys.LeftShift) && !isJumpDown)
+ else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Up) ||
+ keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.W))
{
- isJumpDown = true;
- MovEventJump?.Invoke();
- Debug.WriteLine("Прыжок");
+ currentScopeState = ScopeState.StraightRight;
}
- else if (keyBoardState.IsKeyUp(Keys.LeftShift))
+ else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Up) ||
+ keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.W))
{
- isJumpDown = false;
+ currentScopeState = ScopeState.StraightLeft;
}
- #endregion
-
- #region Обработка положения оружия. Задает значение полю scopeState.
- if (keyBoardState.IsKeyDown(Keys.Up))
+ else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Down) ||
+ keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.S))
{
- scopeState = ScopeState.Up;
+ currentScopeState = ScopeState.BackRight;
}
- else if (keyBoardState.IsKeyDown(Keys.Down) && !isJumpDown)
+ else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Down) ||
+ keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.S))
{
- scopeState = ScopeState.Down;
- }
- else
- {
- scopeState = ScopeState.Middle;
+ currentScopeState = ScopeState.BackLeft;
}
#endregion
#region Обработка нажатия выстрела. Вызывает событие ShootEvent
- if (keyBoardState.IsKeyDown(Keys.X) && !isJumpDown && !isShoot)
+ if (keyBoardState.IsKeyDown(Keys.P) && !isShoot)
{
isShoot = true;
ShootEvent?.Invoke();
Debug.WriteLine("Выстрел");
}
- else if (keyBoardState.IsKeyUp(Keys.X) && !isJumpDown)
+ else if (keyBoardState.IsKeyUp(Keys.P))
{
isShoot = false;
}
#endregion
- SetState(ControlsState.Keyboard);
+ #region Обработка взаимодействия с collectable(например лутом). Вызывает событие OnInteract
+ if (keyBoardState.IsKeyDown(Keys.E) && !isInteract)
+ {
+
+ OnInteract?.Invoke();
+ Debug.WriteLine("взаимодействие с Collectable");
+ }
+ else if (keyBoardState.IsKeyUp(Keys.E))
+ {
+ isInteract = false;
+ }
+ #endregion
lastKeyboardState = keyBoardState;
- }
+
#endregion
}
- public void SetState(ControlsState controlsState)
- {
- currentControlsState = controlsState.ToString();
- }
}
}
diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs
index f598efe..09f9894 100644
--- a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs
+++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.MapManager.MapElements
@@ -13,5 +14,6 @@ namespace ZoFo.GameCore.GameManagers.MapManager.MapElements
public int Width { get; set; }
public int Id { get; set; }
public bool Visibility { get; set; }
+ public string Class { get; set; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs
index 6c7e958..dda6f25 100644
--- a/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs
+++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.MapManager.MapElements
diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs
index 74f559e..fd67cd1 100644
--- a/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs
+++ b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs
@@ -8,65 +8,96 @@ using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using ZoFo.GameCore.GameManagers.MapManager.MapElements;
+using ZoFo.GameCore.GameObjects.MapObjects;
+using ZoFo.GameCore.GameObjects.MapObjects.StopObjects;
+using ZoFo.GameCore.GameObjects.MapObjects.Tiles;
namespace ZoFo.GameCore.GameManagers.MapManager
{
public class MapManager
{
- private static readonly string _path = "/{0}.tmj";
+
+ private static readonly string _templatePath = "Content/MapData/TileMaps/{0}.tmj";
+ private static readonly float _scale = 1.0f;
private List _tileSets = new List();
+ ///
+ /// Загрузка карты. Передаётся название файла карты. По умолчанию main.
+ ///
+ ///
public void LoadMap(string mapName = "main")
{
- TileMap tileMap;
- using (StreamReader reader = new StreamReader(string.Format(_path, mapName)))
+ // Загрузка TileMap
+ var options = new JsonSerializerOptions
{
- string data = reader.ReadToEnd();
- tileMap = JsonSerializer.Deserialize(data);
- }
+ PropertyNameCaseInsensitive = true
+ };
+ TileMap tileMap = JsonSerializer.Deserialize(File.ReadAllText(string.Format(_templatePath, mapName)), options);
+ // Загрузка TileSet-ов по TileSetInfo
List tileSets = new List();
foreach (TileSetInfo tileSetInfo in tileMap.TileSets)
{
- TileSet tileSet = LoadTileSet(tileSetInfo.Source);
+ TileSet tileSet = LoadTileSet("Content/MapData/"+tileSetInfo.Source);
tileSet.FirstGid = tileSetInfo.FirstGid;
tileSets.Add(tileSet);
}
- foreach (var chunk in tileMap.Layers[0].Chunks)
+ foreach (var layer in tileMap.Layers)
{
- int i = 0;
- foreach (var id in chunk.Data)
+ foreach (var chunk in layer.Chunks)
{
- foreach (var tileSet in tileSets)
+ for (int i = 0; i < chunk.Data.Length; i++)
{
- if (tileSet.FirstGid - id < 0)
+ foreach (var tileSet in tileSets)
{
- int number = id - tileSet.FirstGid;
+ if (tileSet.FirstGid - chunk.Data[i] < 0)
+ {
+ int number = chunk.Data[i] - tileSet.FirstGid;
- int relativeColumn = number % tileSet.Columns * tileSet.TileWidth;
- int relativeRow = number / tileSet.Columns * tileSet.TileHeight;
+ int relativeColumn = (number % tileSet.Columns) * tileSet.TileWidth;
+ int relativeRow = (number / tileSet.Columns) * tileSet.TileHeight;
- Rectangle sourceRectangle = new Rectangle(relativeColumn * tileSet.TileWidth, relativeRow * tileSet.TileHeight,
- relativeColumn * tileSet.TileWidth + tileSet.TileWidth, relativeRow * tileSet.TileHeight + tileSet.TileHeight);
+ Rectangle sourceRectangle = new Rectangle(relativeColumn * tileSet.TileWidth, relativeRow * tileSet.TileHeight,
+ /* relativeColumn * tileSet.TileWidth +*/ tileSet.TileWidth, /*relativeRow * tileSet.TileHeight +*/ tileSet.TileHeight);
- Vector2 position = new Vector2(i % chunk.Width, i / chunk.Height);
+ Vector2 position = new Vector2((i % chunk.Width) * tileSet.TileWidth + chunk.X * chunk.Width, (i / chunk.Height)*tileSet.TileHeight + chunk.Y * chunk.Height) ;
+
+ switch (layer.Class)
+ {
+ case "Tile":
+ AppManager.Instance.server.RegisterGameObject(new MapObject(position, new Vector2(tileSet.TileWidth * _scale, tileSet.TileHeight * _scale), sourceRectangle, "Textures\\TileSets\\"+tileSet.Name)); //fix naming
+ break;
+ case "StopObject":
+ // new StopObject(position, new Vector2(tileSet.TileWidth * _scale, tileSet.TileHeight * _scale), sourceRectangle, tileSet.Name);
+ break;
+ default:
+ break;
+ }
+
+ }
}
}
- i++;
}
}
-
}
+ ///
+ /// Загружает и парсит TileSet по его пути.
+ ///
+ ///
+ ///
private TileSet LoadTileSet(string path)
{
using (StreamReader reader = new StreamReader(path))
{
+ var options = new JsonSerializerOptions //TODO Remove
+ {
+ PropertyNameCaseInsensitive = true
+ };
string data = reader.ReadToEnd();
- return JsonSerializer.Deserialize(data);
+ return JsonSerializer.Deserialize(data, options);
}
}
-
}
}
diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapProject.tiled-session b/ZoFo/GameCore/GameManagers/MapManager/MapProject.tiled-session
new file mode 100644
index 0000000..daf2ffb
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/MapManager/MapProject.tiled-session
@@ -0,0 +1,17 @@
+{
+ "activeFile": "",
+ "expandedProjectPaths": [
+ ],
+ "fileStates": {
+ "TileSets/TileSet 1.tsj": {
+ "scaleInDock": 1,
+ "scaleInEditor": 1
+ }
+ },
+ "openFiles": [
+ ],
+ "project": "",
+ "recentFiles": [
+ "TileSets/TileSet 1.tsj"
+ ]
+}
diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapSession.tiled-project b/ZoFo/GameCore/GameManagers/MapManager/MapSession.tiled-project
new file mode 100644
index 0000000..d0eb592
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/MapManager/MapSession.tiled-project
@@ -0,0 +1,14 @@
+{
+ "automappingRulesFile": "",
+ "commands": [
+ ],
+ "compatibilityVersion": 1100,
+ "extensionsPath": "extensions",
+ "folders": [
+ "."
+ ],
+ "properties": [
+ ],
+ "propertyTypes": [
+ ]
+}
diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapSession.tiled-session b/ZoFo/GameCore/GameManagers/MapManager/MapSession.tiled-session
new file mode 100644
index 0000000..cec4797
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/MapManager/MapSession.tiled-session
@@ -0,0 +1,21 @@
+{
+ "Map/SizeTest": {
+ "height": 4300,
+ "width": 2
+ },
+ "activeFile": "",
+ "expandedProjectPaths": [
+ ],
+ "fileStates": {
+ },
+ "last.imagePath": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/Textures/Background",
+ "map.fixedSize": false,
+ "map.lastUsedFormat": "json",
+ "map.tileHeight": 16,
+ "map.tileWidth": 16,
+ "openFiles": [
+ ],
+ "project": "MapSession.tiled-project",
+ "recentFiles": [
+ ]
+}
diff --git a/ZoFo/GameCore/GameManagers/MapManager/TileMaps/main.tmj b/ZoFo/GameCore/GameManagers/MapManager/TileMaps/main.tmj
new file mode 100644
index 0000000..a5d33d8
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/MapManager/TileMaps/main.tmj
@@ -0,0 +1,167 @@
+{ "compressionlevel":-1,
+ "height":20,
+ "infinite":true,
+ "layers":[
+ {
+ "chunks":[
+ {
+ "data":[24, 24, 24, 28, 29, 24, 24, 24, 28, 46, 29, 24, 25, 115, 45, 46,
+ 24, 24, 24, 25, 23, 24, 24, 24, 50, 2, 51, 24, 50, 2, 2, 2,
+ 24, 24, 24, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28,
+ 28, 29, 24, 28, 10, 32, 29, 24, 24, 28, 46, 29, 24, 24, 24, 50,
+ 47, 23, 24, 50, 32, 10, 32, 46, 29, 50, 2, 51, 24, 24, 24, 24,
+ 1, 32, 29, 90, 25, 23, 50, 2, 32, 29, 24, 90, 28, 29, 24, 24,
+ 51, 50, 32, 29, 50, 51, 90, 24, 25, 45, 46, 29, 25, 23, 24, 90,
+ 24, 24, 50, 32, 46, 29, 24, 28, 10, 2, 2, 51, 50, 51, 24, 90,
+ 24, 24, 24, 50, 2, 32, 46, 10, 32, 29, 24, 90, 24, 24, 24, 90,
+ 29, 24, 89, 24, 24, 50, 3, 23, 50, 32, 46, 46, 46, 46, 29, 24,
+ 51, 24, 24, 28, 29, 24, 25, 23, 24, 25, 1, 2, 3, 111, 45, 29,
+ 24, 90, 24, 50, 51, 24, 25, 23, 28, 47, 23, 89, 50, 3, 115, 23,
+ 24, 24, 24, 24, 24, 89, 50, 32, 47, 1, 51, 24, 24, 50, 2, 51,
+ 28, 29, 24, 24, 24, 24, 28, 10, 2, 51, 24, 24, 24, 24, 24, 28,
+ 10, 32, 29, 24, 24, 24, 25, 23, 28, 29, 90, 24, 24, 90, 24, 50,
+ 32, 10, 51, 24, 24, 24, 50, 32, 10, 32, 29, 24, 90, 28, 29, 24],
+ "height":16,
+ "width":16,
+ "x":-16,
+ "y":-16
+ },
+ {
+ "data":[10, 51, 24, 90, 24, 25, 23, 28, 29, 24, 24, 24, 24, 24, 24, 24,
+ 51, 24, 28, 29, 24, 50, 32, 10, 51, 24, 24, 24, 24, 24, 24, 24,
+ 29, 28, 10, 32, 46, 29, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24,
+ 51, 25, 23, 50, 2, 32, 29, 25, 23, 24, 24, 28, 29, 24, 90, 24,
+ 24, 25, 23, 24, 24, 25, 23, 50, 51, 24, 24, 50, 32, 29, 24, 90,
+ 24, 50, 32, 29, 90, 25, 45, 29, 24, 24, 24, 24, 50, 51, 24, 89,
+ 24, 89, 50, 51, 24, 25, 114, 23, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 28, 29, 24, 50, 2, 51, 24, 24, 90, 28, 29, 24, 24, 28,
+ 24, 24, 25, 23, 89, 24, 24, 24, 28, 46, 29, 25, 23, 24, 24, 50,
+ 28, 46, 10, 51, 24, 28, 46, 29, 25, 111, 45, 10, 51, 28, 29, 24,
+ 50, 2, 51, 24, 24, 25, 115, 45, 10, 3, 1, 51, 24, 25, 23, 24,
+ 24, 24, 24, 24, 24, 50, 2, 2, 32, 10, 51, 24, 90, 25, 23, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 25, 23, 24,
+ 46, 29, 24, 24, 24, 24, 24, 89, 24, 24, 24, 28, 46, 47, 23, 90,
+ 2, 32, 29, 24, 24, 28, 46, 46, 29, 24, 24, 25, 1, 3, 23, 89,
+ 24, 50, 32, 29, 24, 25, 1, 3, 23, 24, 89, 50, 32, 10, 51, 24],
+ "height":16,
+ "width":16,
+ "x":0,
+ "y":-16
+ },
+ {
+ "data":[24, 24, 24, 24, 90, 24, 89, 24, 89, 24, 50, 51, 89, 24, 24, 24,
+ 24, 28, 29, 28, 29, 24, 24, 24, 24, 28, 29, 24, 24, 24, 28, 29,
+ 24, 25, 23, 50, 51, 24, 24, 28, 29, 50, 51, 24, 24, 24, 25, 45,
+ 90, 50, 51, 28, 29, 24, 24, 25, 23, 24, 24, 28, 29, 24, 50, 3,
+ 24, 24, 28, 10, 51, 90, 90, 50, 51, 24, 24, 50, 51, 24, 24, 50,
+ 24, 24, 25, 45, 29, 24, 28, 29, 24, 24, 24, 24, 24, 28, 29, 24,
+ 90, 24, 50, 2, 51, 28, 10, 51, 90, 24, 28, 29, 24, 25, 45, 46,
+ 29, 90, 24, 24, 24, 50, 51, 24, 24, 28, 10, 32, 46, 10, 3, 1,
+ 32, 29, 24, 90, 24, 24, 24, 24, 28, 47, 23, 50, 2, 51, 50, 51,
+ 25, 23, 24, 24, 28, 46, 46, 46, 47, 114, 45, 29, 24, 24, 24, 24,
+ 50, 32, 29, 24, 50, 3, 111, 111, 115, 111, 1, 32, 29, 24, 24, 24,
+ 24, 50, 51, 24, 28, 10, 2, 2, 2, 2, 32, 10, 51, 24, 24, 89,
+ 24, 24, 89, 90, 25, 23, 24, 24, 24, 24, 50, 32, 46, 46, 29, 89,
+ 24, 24, 24, 90, 25, 23, 89, 24, 28, 29, 90, 50, 2, 2, 51, 24,
+ 24, 24, 24, 28, 10, 51, 24, 28, 47, 45, 29, 24, 24, 24, 24, 24,
+ 24, 24, 24, 25, 23, 24, 90, 50, 2, 2, 32, 46, 46, 46, 46, 46],
+ "height":16,
+ "width":16,
+ "x":16,
+ "y":-16
+ },
+ {
+ "data":[10, 32, 46, 29, 24, 24, 24, 25, 23, 50, 32, 29, 24, 50, 32, 46,
+ 51, 50, 2, 32, 29, 24, 24, 25, 45, 29, 25, 23, 24, 24, 25, 1,
+ 24, 24, 24, 25, 23, 28, 46, 10, 2, 51, 50, 51, 24, 24, 50, 51,
+ 90, 89, 90, 50, 51, 50, 2, 51, 24, 24, 28, 29, 90, 24, 24, 24,
+ 90, 28, 46, 29, 90, 24, 24, 24, 90, 24, 50, 51, 90, 24, 90, 28,
+ 29, 50, 2, 51, 24, 24, 24, 89, 24, 24, 24, 24, 24, 89, 24, 50,
+ 23, 24, 24, 28, 46, 29, 90, 90, 24, 89, 24, 28, 29, 24, 24, 24,
+ 32, 46, 29, 25, 115, 45, 29, 24, 90, 24, 24, 25, 23, 24, 24, 28,
+ 10, 2, 32, 47, 115, 1, 51, 24, 24, 24, 24, 25, 23, 24, 28, 10,
+ 32, 29, 50, 2, 2, 51, 24, 24, 24, 24, 24, 25, 23, 28, 10, 51,
+ 50, 51, 89, 24, 24, 89, 24, 28, 29, 24, 24, 50, 32, 10, 32, 46,
+ 24, 24, 90, 90, 28, 46, 29, 50, 51, 24, 24, 24, 25, 23, 25, 115,
+ 24, 90, 24, 24, 50, 2, 32, 29, 24, 24, 90, 24, 25, 45, 10, 2,
+ 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 24, 28, 10, 3, 23, 24,
+ 90, 24, 24, 24, 24, 89, 90, 50, 32, 29, 90, 50, 51, 50, 32, 46,
+ 46, 29, 24, 90, 24, 24, 24, 24, 50, 51, 28, 29, 24, 24, 50, 2],
+ "height":16,
+ "width":16,
+ "x":-16,
+ "y":0
+ },
+ {
+ "data":[46, 46, 10, 32, 46, 47, 23, 25, 23, 89, 24, 24, 25, 23, 90, 24,
+ 2, 2, 32, 47, 1, 2, 51, 25, 23, 24, 28, 29, 50, 32, 29, 24,
+ 24, 90, 50, 3, 23, 24, 28, 10, 51, 28, 47, 45, 29, 25, 23, 28,
+ 24, 24, 24, 50, 51, 28, 47, 23, 24, 50, 3, 114, 45, 10, 51, 50,
+ 29, 24, 24, 89, 24, 25, 114, 45, 46, 46, 10, 2, 2, 32, 29, 89,
+ 51, 24, 24, 24, 24, 50, 3, 111, 115, 115, 23, 24, 24, 50, 32, 29,
+ 24, 28, 29, 24, 24, 24, 25, 1, 2, 2, 51, 90, 24, 90, 50, 51,
+ 29, 50, 32, 29, 28, 29, 25, 23, 24, 24, 89, 28, 29, 24, 24, 24,
+ 51, 24, 50, 51, 50, 32, 10, 32, 46, 29, 24, 50, 51, 24, 90, 24,
+ 24, 24, 24, 24, 89, 50, 32, 10, 2, 32, 46, 29, 89, 28, 29, 24,
+ 29, 90, 24, 24, 24, 24, 50, 51, 28, 10, 3, 23, 28, 10, 51, 24,
+ 23, 89, 24, 24, 90, 24, 24, 24, 50, 32, 10, 51, 50, 51, 24, 24,
+ 51, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, 46, 46, 29, 28, 46,
+ 24, 24, 24, 90, 24, 24, 24, 24, 24, 24, 50, 3, 1, 32, 47, 115,
+ 46, 29, 24, 89, 24, 24, 24, 89, 24, 24, 24, 25, 45, 10, 3, 111,
+ 2, 51, 28, 29, 28, 29, 24, 28, 46, 46, 46, 10, 2, 51, 50, 2],
+ "height":16,
+ "width":16,
+ "x":0,
+ "y":0
+ },
+ {
+ "data":[28, 29, 28, 10, 32, 46, 29, 24, 24, 28, 10, 2, 2, 2, 2, 2,
+ 50, 51, 50, 51, 25, 115, 45, 46, 29, 50, 51, 24, 24, 24, 24, 24,
+ 29, 24, 89, 24, 50, 3, 115, 114, 23, 24, 24, 24, 24, 24, 24, 24,
+ 51, 90, 24, 89, 24, 50, 2, 2, 51, 24, 89, 24, 24, 28, 46, 29,
+ 24, 90, 24, 24, 89, 24, 90, 28, 29, 24, 24, 24, 28, 10, 2, 51,
+ 24, 24, 24, 24, 28, 29, 90, 50, 51, 28, 29, 24, 25, 23, 24, 24,
+ 28, 29, 24, 24, 50, 32, 29, 28, 29, 50, 51, 89, 50, 32, 29, 24,
+ 50, 51, 24, 24, 24, 50, 32, 10, 51, 24, 89, 24, 24, 25, 23, 24,
+ 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 24, 24, 24, 50, 51, 24,
+ 90, 24, 24, 24, 24, 24, 24, 25, 45, 29, 24, 24, 24, 89, 28, 29,
+ 24, 24, 24, 24, 28, 29, 24, 25, 1, 51, 24, 24, 24, 24, 50, 32,
+ 28, 29, 28, 29, 50, 32, 46, 10, 51, 28, 29, 24, 24, 24, 24, 50,
+ 47, 45, 10, 51, 24, 50, 2, 32, 46, 47, 23, 24, 89, 90, 24, 24,
+ 111, 115, 23, 24, 24, 90, 24, 50, 2, 2, 32, 29, 24, 89, 28, 46,
+ 1, 2, 51, 28, 46, 46, 29, 24, 28, 29, 50, 32, 29, 28, 47, 111,
+ 51, 24, 24, 50, 3, 114, 23, 24, 50, 32, 46, 47, 23, 25, 111, 111],
+ "height":16,
+ "width":16,
+ "x":16,
+ "y":0
+ }],
+ "class":"Tile",
+ "height":48,
+ "id":1,
+ "name":"\u0421\u043b\u043e\u0439 \u0442\u0430\u0439\u043b\u043e\u0432 1",
+ "opacity":1,
+ "startx":-16,
+ "starty":-32,
+ "type":"tilelayer",
+ "visible":true,
+ "width":48,
+ "x":0,
+ "y":0
+ }],
+ "nextlayerid":2,
+ "nextobjectid":1,
+ "orientation":"orthogonal",
+ "renderorder":"right-down",
+ "tiledversion":"1.10.2",
+ "tileheight":16,
+ "tilesets":[
+ {
+ "firstgid":1,
+ "source":"..\/TileSets\/TileSet 1.tsj"
+ }],
+ "tilewidth":16,
+ "type":"map",
+ "version":"1.10",
+ "width":30
+}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameManagers/MapManager/TileMaps/main.tmx b/ZoFo/GameCore/GameManagers/MapManager/TileMaps/main.tmx
new file mode 100644
index 0000000..4cafd72
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/MapManager/TileMaps/main.tmx
@@ -0,0 +1,116 @@
+
+
diff --git a/ZoFo/GameCore/GameManagers/MapManager/TileSets/TileSet 1.tsj b/ZoFo/GameCore/GameManagers/MapManager/TileSets/TileSet 1.tsj
new file mode 100644
index 0000000..3388a9e
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/MapManager/TileSets/TileSet 1.tsj
@@ -0,0 +1,166 @@
+{ "class":"Tile",
+ "columns":22,
+ "grid":
+ {
+ "height":24,
+ "orientation":"orthogonal",
+ "width":24
+ },
+ "image":"..\/..\/..\/..\/Content\/Textures\/Background\/TilesetFloor.png",
+ "imageheight":417,
+ "imagewidth":352,
+ "margin":0,
+ "name":"TileSet 1",
+ "spacing":0,
+ "tilecount":572,
+ "tiledversion":"1.10.2",
+ "tileheight":16,
+ "tiles":[
+ {
+ "id":27,
+ "probability":0.5
+ },
+ {
+ "id":28,
+ "probability":0.5
+ },
+ {
+ "id":49,
+ "probability":0.5
+ },
+ {
+ "id":50,
+ "probability":0.5
+ },
+ {
+ "id":88,
+ "probability":0.100000001490116
+ },
+ {
+ "id":89,
+ "probability":0.100000001490116
+ },
+ {
+ "id":110,
+ "probability":2
+ },
+ {
+ "id":111,
+ "probability":0.100000001490116
+ },
+ {
+ "id":112,
+ "probability":0.100000001490116
+ }],
+ "tilewidth":16,
+ "type":"tileset",
+ "version":"1.10",
+ "wangsets":[
+ {
+ "colors":[
+ {
+ "color":"#ff0000",
+ "name":"Sand",
+ "probability":1,
+ "tile":23
+ },
+ {
+ "color":"#00ff00",
+ "name":"SandStone",
+ "probability":0.3,
+ "tile":110
+ }],
+ "name":"\u041f\u0435\u0441\u0447\u0430\u043d\u044b\u0439",
+ "tile":-1,
+ "type":"corner",
+ "wangtiles":[
+ {
+ "tileid":0,
+ "wangid":[0, 2, 0, 1, 0, 2, 0, 2]
+ },
+ {
+ "tileid":1,
+ "wangid":[0, 2, 0, 1, 0, 1, 0, 2]
+ },
+ {
+ "tileid":2,
+ "wangid":[0, 2, 0, 2, 0, 1, 0, 2]
+ },
+ {
+ "tileid":9,
+ "wangid":[0, 2, 0, 1, 0, 2, 0, 1]
+ },
+ {
+ "tileid":22,
+ "wangid":[0, 1, 0, 1, 0, 2, 0, 2]
+ },
+ {
+ "tileid":23,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":24,
+ "wangid":[0, 2, 0, 2, 0, 1, 0, 1]
+ },
+ {
+ "tileid":27,
+ "wangid":[0, 1, 0, 2, 0, 1, 0, 1]
+ },
+ {
+ "tileid":28,
+ "wangid":[0, 1, 0, 1, 0, 2, 0, 1]
+ },
+ {
+ "tileid":31,
+ "wangid":[0, 1, 0, 2, 0, 1, 0, 2]
+ },
+ {
+ "tileid":44,
+ "wangid":[0, 1, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":45,
+ "wangid":[0, 1, 0, 2, 0, 2, 0, 1]
+ },
+ {
+ "tileid":46,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 1]
+ },
+ {
+ "tileid":49,
+ "wangid":[0, 2, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":50,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 2]
+ },
+ {
+ "tileid":88,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":89,
+ "wangid":[0, 1, 0, 1, 0, 1, 0, 1]
+ },
+ {
+ "tileid":110,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":111,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":112,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":113,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ },
+ {
+ "tileid":114,
+ "wangid":[0, 2, 0, 2, 0, 2, 0, 2]
+ }]
+ }]
+}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs
index ea57f60..c178154 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs
@@ -5,6 +5,7 @@ using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
using System.Text;
+using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
@@ -17,9 +18,21 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
private int port = 7632;
private EndPoint endPoint;
private Socket socket;
- List updates = new List();
+ List updates = new List();
public delegate void OnDataSent(string Data);
public event OnDataSent GetDataSent; // event
+ public bool IsConnected { get { return socket.Connected; } }
+
+ public ClientNetworkManager()
+ {
+ Init();
+ }
+
+ public bool SocketConnected()
+ {
+ return socket.Connected;
+ }
+
public void Init() //create endPoint, socket
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@@ -27,11 +40,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void SendData()
{
- while(socket.Connected)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(updates.ToString());
+ byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(updates)); //нужно сериализовать
socket.Send(bytes);
- }
+ }
+
+ public void AddData(UpdateData UpdateData)
+ {
+ updates.Add(UpdateData);
}
public void StopConnection()
@@ -47,24 +62,21 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
///
public void JoinRoom(string ip) // multyplayer
{
+
endPoint = new IPEndPoint(IPAddress.Parse(ip), port);
-
socket.Connect(endPoint);
-
SendData();
Thread listen = new Thread(StartListening);
listen.Start();
}
- ///
- /// создается
+ ///
+ /// создается одиночная комната к которой ты подключаешься
///
public void JoinYourself() // single player
{
endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
-
socket.Connect(endPoint);
-
SendData();
Thread listen = new Thread(StartListening);
listen.Start();
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs
index 2a22c8c..46d8281 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs
@@ -4,6 +4,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
+using System.Net.Http;
using System.Net.Sockets;
using System.Text;
using System.Text.Json;
@@ -16,24 +17,46 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{
public class ServerNetworkManager
{
- private IPAddress ip = IPAddress.Any;
+ private IPAddress ip =IPAddress.Parse("127.0.0.1"); //IPAddress.Any
private int port = 7632;
private IPEndPoint endPoint;
private Socket socket;
private List clients;
- private List updates;
+ public List updates;
public delegate void OnDataSend(string data);
public event OnDataSend GetDataSend; // event
Dictionary managerThread;
+ Thread serverTheread;
- public void Init() //create Socket
+ public ServerNetworkManager() { Init(); }
+
+ ///
+ /// Initialize varibles and Sockets
+ ///
+ private void Init()
{
endPoint = new IPEndPoint(ip, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
managerThread = new Dictionary();
+ clients = new List();
+ updates = new List();
+ managerThread = new Dictionary();
+ socket.Bind(endPoint);
}
- public void SendData() //отправляет клиенту Data
+
+ ///
+ /// отправляет клиенту Data
+ ///
+ public void SendData()
{
+ for (int i = 0; i < updates.Count; i++)
+ {
+
+ AppManager.Instance.client.GotData(updates[i]);
+ }
+ updates.Clear();
+ return; //TODO TODO REMOVE TO ADD NETWORK TODO REMOVE TO ADD NETWORK TODO REMOVE TO ADD NETWORK TODO REMOVE TO ADD NETWORK
+
string data = JsonSerializer.Serialize(updates);
var databytes = Encoding.UTF8.GetBytes(data);
foreach (var item in clients)
@@ -41,11 +64,20 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
item.SendAsync(databytes);
}
}
- public void AddData(IUpdateData data)//добавляет в лист updates новую data
+
+ ///
+ /// добавляет в лист updates новую data
+ ///
+ ///
+ public void AddData(UpdateData data)
{
updates.Add(data);
}
- public void CloseConnection() //По сути коне игры и отключение игроков
+
+ ///
+ /// По сути конец игры и отключение игроков
+ ///
+ public void CloseConnection()
{
foreach (var item in clients)
{
@@ -66,11 +98,26 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients.Clear();
}
+ ///
+ /// Начинает работу сервера (Ожидает подключений)
+ ///
+ ///
+ public void Start(object players)
+ {
+ serverTheread = new Thread(StartWaitingForPlayers);
+ serverTheread.Start(players);
+ }
+
//Потоки Клиентов
- public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться
+
+ ///
+ /// Слушает игроков, которые хотят подключиться
+ ///
+ ///
+ public void StartWaitingForPlayers(object players)
{
int playNumber = (int)players;
- socket.Bind(endPoint);
+
socket.Listen(playNumber);
for (int i = 0; i < playNumber; i++)
{
@@ -82,7 +129,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
}
}
- private void StartListening(object socket)//начать слушать клиентов в самой игре активируют Ивент
+
+ ///
+ /// начать слушать клиентов в самой игре активируют Ивент
+ ///
+ ///
+ private void StartListening(object socket)
{
// obj to Socket
Socket client = (Socket)socket;
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs
index 81af1d9..bb2ea93 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs
@@ -6,9 +6,12 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer
{
- public class UpdateInput :IUpdateData
+ public class UpdateInput :UpdateData
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ // public int IdEntity { get; set; }
+ public UpdateInput()
+ {
+ UpdateType = "UpdateInput";
+ }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdatePlayerExit.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdatePlayerExit.cs
index ba6c6ca..7cb0b44 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdatePlayerExit.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdatePlayerExit.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer
{
- public class UpdatePlayerExit : IUpdateData
+ public class UpdatePlayerExit : UpdateData
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdatePlayerExit() { UpdateType = "UpdatePlayerExit"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs
index 6f07770..92fdc73 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdateAnimation : IUpdateData //хранит новую анимации
+ public class UpdateAnimation : UpdateData //хранит новую анимации
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdateAnimation() { UpdateType = "UpdateAnimation"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateEntityHealth.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateEntityHealth.cs
index 618770e..7e1efd3 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateEntityHealth.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateEntityHealth.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdateEntityHealth : IUpdateData//хранит новое хп entity
+ public class UpdateEntityHealth : UpdateData//хранит новое хп entity
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdateEntityHealth() { UpdateType = "UpdateEntityHealth"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameEnded.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameEnded.cs
index 10173b7..193f6c1 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameEnded.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameEnded.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdateGameEnded : IUpdateData //хранит полученый лут и уведомляет о конце игры
+ public class UpdateGameEnded : UpdateData //хранит полученый лут и уведомляет о конце игры
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdateGameEnded() { UpdateType = "UpdateGameEnded"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs
index 4cf8a42..d3a154f 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdateGameObjectCreated : IUpdateData //Хранит объект, который только отправили
+ public class UpdateGameObjectCreated : UpdateData //Хранит объект, который только отправили
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdateGameObjectCreated() { UpdateType = "UpdateGameObjectCreated"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs
index e7f8a51..19d390c 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdateLoot : IUpdateData //Хранит лут
+ public class UpdateLoot : UpdateData //Хранит лут
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdateLoot() { UpdateType = "UpdateLoot"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs
index 36a2544..818dcce 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdatePlayerParametrs : IUpdateData //Хранит хп, радиацию
+ public class UpdatePlayerParametrs : UpdateData //Хранит хп, радиацию
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdatePlayerParametrs() { UpdateType = "UpdatePlayerParametrs"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs
index fda8a39..ae58334 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs
@@ -6,9 +6,8 @@ using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{
- public class UpdatePosition : IUpdateData //Хранит новую позицию
+ public class UpdatePosition : UpdateData //Хранит новую позицию
{
- public int IdEntity { get; set; }
- public string UpdateType { get; set; }
+ public UpdatePosition() { UpdateType = "UpdatePosition"; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateTileCreated.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateTileCreated.cs
new file mode 100644
index 0000000..2002a34
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateTileCreated.cs
@@ -0,0 +1,23 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.Json.Serialization;
+using System.Threading.Tasks;
+using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer;
+
+namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
+{
+
+ public class UpdateTileCreated : UpdateData
+ {
+ public UpdateTileCreated() { UpdateType = "UpdateTileCreated"; }
+ public Texture2D TextureTile { get; set; }
+ public Vector2 Position { get; set; }
+ public Point Size { get; set; }
+ public Rectangle sourceRectangle { get; set; }
+ public string tileSetName { get; set; }
+ }
+}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/IUpdateData.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/UpdateData.cs
similarity index 83%
rename from ZoFo/GameCore/GameManagers/NetworkManager/Updates/IUpdateData.cs
rename to ZoFo/GameCore/GameManagers/NetworkManager/Updates/UpdateData.cs
index a90aaf4..bb462ad 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/IUpdateData.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/UpdateData.cs
@@ -17,11 +17,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates
[JsonDerivedType(typeof(UpdateLoot))]
[JsonDerivedType(typeof(UpdatePlayerParametrs))]
[JsonDerivedType(typeof(UpdatePosition))]
+ [JsonDerivedType(typeof(UpdateTileCreated))]
[JsonDerivedType(typeof(UpdateInput))]
[JsonDerivedType(typeof(UpdatePlayerExit))]
- public interface IUpdateData
+
+ public class UpdateData
{
public int IdEntity { get; set; } //Id объекта
- public string UpdateType { get; set; } //тип обновления
+ public string UpdateType { get; protected set; } //тип обновления
}
}
diff --git a/ZoFo/GameCore/GameManagers/SettingsManager.cs b/ZoFo/GameCore/GameManagers/SettingsManager.cs
new file mode 100644
index 0000000..25dd40d
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/SettingsManager.cs
@@ -0,0 +1,93 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using Microsoft.Xna;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Xna.Framework;
+using Newtonsoft.Json.Serialization;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace ZoFo.GameCore.GameManagers
+{
+ public class SettingsManager //нужно что-то менять с разрешением
+ {
+ private SettingsContainer settingsContainer = new SettingsContainer();
+ public bool IsFullScreen { get => settingsContainer.IsFullScreen; }
+ public float MainVolume { get => settingsContainer.MainVolume; }
+ public float MusicVolume { get => settingsContainer.MusicVolume; }
+ public float SoundEffectsVolume { get => settingsContainer.SoundEffectsVolume; }
+ public Point Resolution { get => settingsContainer.Resolution; }
+ public void SetResolution(Point resolution)
+ {
+ settingsContainer.Resolution = resolution;
+ //AppManager.Instance.resolution = resolution;
+ }
+ public void SetMainVolume(float volume)
+ {
+ settingsContainer.MainVolume = volume;
+ //AppManager.Instance.SoundManager.Update();
+ SaveSettings();
+ }
+ public void SetMusicVolume(float volume)
+ {
+ settingsContainer.MusicVolume = volume;
+ SaveSettings();
+
+ }
+ public void SetSoundEffectsVolume(float volume)
+ {
+ settingsContainer.SoundEffectsVolume = volume;
+ SaveSettings();
+
+ }
+ public void SetIsFullScreen(bool isFullScreen)
+ {
+ settingsContainer.IsFullScreen = isFullScreen;
+ //AppManager.Instance.SetIsFullScreen(isFullScreen);
+ SaveSettings();
+ }
+ public void LoadSettings()
+ {
+ if (!File.Exists("GameSettings.txt"))
+ {
+ SaveSettings();
+ return;
+ }
+
+ settingsContainer = JsonConvert.DeserializeObject(File.ReadAllText("GameSettings.txt"));
+ SetIsFullScreen(settingsContainer.IsFullScreen);
+ SetMainVolume(settingsContainer.MainVolume);
+ SetMusicVolume(settingsContainer.MusicVolume);
+ SetResolution(settingsContainer.Resolution);
+ SetSoundEffectsVolume(settingsContainer.SoundEffectsVolume);
+
+
+ }
+ public void SaveSettings()
+ {
+ using (StreamWriter streamWriter = new StreamWriter("GameSettings.txt"))
+ {
+ string _str = JsonConvert.SerializeObject(settingsContainer);
+ streamWriter.Write(_str);
+ }
+ }
+
+ }
+ [Serializable]
+ public class SettingsContainer
+ {
+ [JsonProperty("IsFullScreen")]
+ public bool IsFullScreen { get; set; } = false;
+ [JsonProperty("MainVolume")]
+ public float MainVolume { get; set; } = 1;
+ [JsonProperty("MusicVolume")]
+ public float MusicVolume { get; set; } = 1;
+ [JsonProperty("SoundEffectsVolume")]
+ public float SoundEffectsVolume { get; set; } = 1;
+ [JsonProperty("Resolution")]
+ public Point Resolution { get; set; } = new Point(GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width, GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height);
+ }
+}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameManagers/SoundManager.cs b/ZoFo/GameCore/GameManagers/SoundManager.cs
index a43fc7c..0494dae 100644
--- a/ZoFo/GameCore/GameManagers/SoundManager.cs
+++ b/ZoFo/GameCore/GameManagers/SoundManager.cs
@@ -20,12 +20,12 @@ namespace ZoFo.GameCore.GameManagers
public void LoadSounds() // метод для загрузки звуков из папки
{
- var k = Directory.GetFiles("../../..//Content//sounds").Where(x => x.EndsWith("mp3"));
+ var k = Directory.GetFiles("../../..//Content//sounds").Where(x => x.EndsWith("wav"));
if (k.Count() > 0)
{
- string[] soundFiles = k.Select(x => x.Split("\\").Last().Split("/").Last().Replace(".mp3", "")).ToArray();// папка со звуками там где exe
+ string[] soundFiles = k.Select(x => x.Split("\\").Last().Split("/").Last().Replace(".wav", "")).ToArray();// папка со звуками там где exe
foreach (var soundFile in soundFiles)
{
Sounds.Add(soundFile, AppManager.Instance.Content.Load("sounds//" + soundFile));
@@ -42,7 +42,7 @@ namespace ZoFo.GameCore.GameManagers
public void StartAmbientSound(string soundName) // запустить звук у которого нет позиции
{
var sound = new Sound(Sounds[soundName].CreateInstance(), Vector2.One, true);
- // ждать пока настройки появятся sound.SoundEffect.Volume = sound.baseVolume * AppManager.Instance.SettingsManager.MusicVolume * AppManager.Instance.SettingsManager.MainVolume;
+ sound.SoundEffect.Volume = sound.baseVolume * AppManager.Instance.SettingsManager.MusicVolume * AppManager.Instance.SettingsManager.MainVolume;
sound.SoundEffect.IsLooped = false;
sound.SoundEffect.Play();
@@ -57,7 +57,7 @@ namespace ZoFo.GameCore.GameManagers
{
var sound = new Sound(Sounds[soundName].CreateInstance(), soundPos, false) { baseVolume = baseVolume, basePich = pitch };
sound.SoundEffect.IsLooped = false;
- //ждать пока настройки появятся sound.SoundEffect.Volume = sound.baseVolume * AppManager.Instance.SettingsManager.SoundEffectsVolume * AppManager.Instance.SettingsManager.MainVolume;
+ sound.SoundEffect.Volume = sound.baseVolume * AppManager.Instance.SettingsManager.SoundEffectsVolume * AppManager.Instance.SettingsManager.MainVolume;
sound.SoundEffect.Pitch = pitch;
sound.SoundEffect.Play();
PlayingSounds.Add(sound);
@@ -78,7 +78,7 @@ namespace ZoFo.GameCore.GameManagers
{
for (int i = 0; i < PlayingSounds.Count; i++)
{
- //PlayingSounds[i].UpdateVolume(Vector2.Zero);
+ PlayingSounds[i].UpdateVolume(Vector2.Zero);
if (PlayingSounds[i].SoundEffect.State == SoundState.Stopped)
{
PlayingSounds.Remove(PlayingSounds[i]);
@@ -114,14 +114,14 @@ namespace ZoFo.GameCore.GameManagers
SoundEffect = soundEffect;
Position = position;
}
- /*/ public void UpdateVolume(Vector2 playerPos)
+ public void UpdateVolume(Vector2 playerPos)
{
if (isAmbient)
SoundEffect.Volume = baseVolume * AppManager.Instance.SettingsManager.MusicVolume * AppManager.Instance.SettingsManager.MainVolume;
else
SoundEffect.Volume = baseVolume * AppManager.Instance.SettingsManager.SoundEffectsVolume * AppManager.Instance.SettingsManager.MainVolume;// * (float)Math.Clamp(1 - GetDistanceVol(playerPos),0,1);
- }/*/
+ }
public double GetDistanceVol(Vector2 playerPos) // получение дистанции до объедка от игрока
{
diff --git a/ZoFo/GameCore/GameObjects/Entities/Entity.cs b/ZoFo/GameCore/GameObjects/Entities/Entity.cs
index 10283c5..a9e8670 100644
--- a/ZoFo/GameCore/GameObjects/Entities/Entity.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/Entity.cs
@@ -10,28 +10,16 @@ namespace ZoFo.GameCore.GameObjects.Entities
{
public abstract class Entity : GameObject
{
- protected override GraphicsComponent graphicsComponent => null;
+ public override GraphicsComponent graphicsComponent => null;
public CollisionComponent collisionComponent { get; protected set; }
public int Id { get; set; }
- public void CollisionComponent()
+ protected Entity(Vector2 position) : base(position)
+ {
+ }
+ public virtual void Update()
{
}
-
- public void AnimationComponent()
- {
-
- }
-
- public void UpdateLogic()
- {
-
- }
-
}
}
-//вектор
-//вилосити
-//поситион
-//текстура
diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs
index 843258f..b900e4a 100644
--- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs
@@ -1,7 +1,10 @@
-using System;
+using Microsoft.Xna.Framework;
+using System;
namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables;
public class Collectable : Entity
{
-
+ public Collectable(Vector2 position) : base(position)
+ {
+ }
}
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs
index 9a3b320..f948689 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs
@@ -2,10 +2,13 @@
using System.Collections.Generic;
using System.Net.Mime;
using System.Reflection;
+using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies;
public class Enemy : LivingEntity
{
-
+ public Enemy(Vector2 position) : base(position)
+ {
+ }
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs
index d09be3a..1d73ead 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs
@@ -3,18 +3,27 @@ using Microsoft.Xna.Framework.Graphics;
using System;
using ZoFo.GameCore.GameObjects.Entities;
using ZoFo.GameCore.ZoFo_graphics;
+using ZoFo.GameCore.GameManagers;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities;
public class LivingEntity : Entity
{
public Vector2 velocity;
+ private InputManager inputManager;
- public void TextureLoad(SpriteBatch spriteBatch)
+ public LivingEntity(Vector2 position) : base(position)
{
-
+ inputManager = new InputManager();
}
+ #region Server side
+ /*public override void Update()
+ {
+
+ }*/
+ #endregion
+
}
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs
index a1333ea..20bbe18 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs
@@ -1,7 +1,27 @@
-using System;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using ZoFo.GameCore.GameManagers;
+using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player;
+
public class Player : LivingEntity
{
+ public Vector2 InputWeaponRotation{ get; set; }
+ public Vector2 InputPlayerRotation{ get; set;}
+ public bool IsTryingToShoot{get;set;}
+ Texture2D texture;
+ private float speed;
+ private int health;
+ public Player(Vector2 position) : base(position)
+ {
+ //InputWeaponRotation = new Vector2(0, 0);
+ //InputPlayerRotation = new Vector2(0, 0);
+ }
+ public void Update(GameTime gameTime)
+ {
+
+ }
}
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs
index 83643f0..b72f394 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs
@@ -1,7 +1,10 @@
-using System;
+using Microsoft.Xna.Framework;
+using System;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Projectiles;
public class Bullet : Projectile
{
-
+ public Bullet(Vector2 position) : base(position)
+ {
+ }
}
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Projectile.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Projectile.cs
index dba7dae..3ae0f0b 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Projectile.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Projectile.cs
@@ -1,7 +1,10 @@
-using System;
+using Microsoft.Xna.Framework;
+using System;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Projectiles;
public class Projectile : LivingEntity
{
-
+ public Projectile(Vector2 position) : base(position)
+ {
+ }
}
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Rock.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Rock.cs
index caf91a4..fa20896 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Rock.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Rock.cs
@@ -1,7 +1,10 @@
-using System;
+using Microsoft.Xna.Framework;
+using System;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Projectiles;
public class Rock : Projectile
{
-
+ public Rock(Vector2 position) : base(position)
+ {
+ }
}
diff --git a/ZoFo/GameCore/GameObjects/GameObject.cs b/ZoFo/GameCore/GameObjects/GameObject.cs
index 813c583..23b5372 100644
--- a/ZoFo/GameCore/GameObjects/GameObject.cs
+++ b/ZoFo/GameCore/GameObjects/GameObject.cs
@@ -1,15 +1,96 @@
using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using ZoFo.GameCore.GameManagers;
using ZoFo.GameCore.ZoFo_graphics;
+using ZoFo.GameCore;
namespace ZoFo.GameCore.GameObjects;
public abstract class GameObject
{
public Vector2 position;
- public Vector2 rotation;
- protected abstract GraphicsComponent graphicsComponent { get; }
- public void Draw() { }
+ private Server server;
+ public Vector2 rotation; //вектор направления объекта
+ public abstract GraphicsComponent graphicsComponent { get; }
+ #region ServerSide
+ public GameObject(Vector2 position)
+ {
+ this.position = position;
+
+ graphicsComponent.LoadContent();
+ }
+ public virtual void UpdateLogic(GameTime gameTime)
+ {
+ PlayAnimation_OnServer();
+ }
+
+
+ ///
+ /// Это вызывается в логике игры, которая на сервере, здесь будет вызываться уведомление об анимации
+ ///
+ public void PlayAnimation_OnServer()
+ {
+ graphicsComponent.Update();
+ }
+
+ #endregion
+
+
+ #region Client Side
+
+ ///
+ /// Для клиента
+ /// Это вызывается в клиентской части игры
+ ///
+ public void PlayAnimation_OnClient()
+ {
+ graphicsComponent.Update();
+ }
+
+ ///
+ /// Для клиента
+ /// Загрузка графического компонента
+ ///
+ public void LoadContent()
+ {
+ graphicsComponent.LoadContent();
+ }
+
+ ///
+ /// Для клиента
+ /// Обновление, которое вызывается у клиента, для просмотра анимаций
+ ///
+ public virtual void UpdateAnimations(GameTime gameTime)
+ {
+ PlayAnimation_OnClient();
+ }
+
+ ///
+ /// Для клиента
+ ///
+ public virtual void Draw(SpriteBatch spriteBatch)
+ {
+ graphicsComponent.DrawAnimation(graphicsComponent.ObjectDrawRectangle, spriteBatch);
+ //debug
+ if (AppManager.Instance.InputManager.CollisionsCheat)
+ DrawDebugRectangle(spriteBatch, graphicsComponent.ObjectDrawRectangle);
+
+ }
+ public void DrawDebugRectangle(SpriteBatch spriteBatch, Rectangle _rectangle, Nullable color = null)
+ {
+ if (color is null) color = new Color(1, 0, 0, 0.25f);
+ if (color.Value.A == 255) color = new Color(color.Value, 0.25f);
+ //spriteBatch.Draw(debugTexture,
+ // new Rectangle((_rectangle.X - GraphicsComponent.CameraPosition.X) * GraphicsComponent.scaling,
+ // (_rectangle.Y - GraphicsComponent.CameraPosition.Y) * GraphicsComponent.scaling,
+ // _rectangle.Width * GraphicsComponent.scaling,
+ // _rectangle.Height * GraphicsComponent.scaling), color.Value);
+
+ //TODO: debugTexture
+ }
+ #endregion
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs
new file mode 100644
index 0000000..ae7b8b1
--- /dev/null
+++ b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs
@@ -0,0 +1,35 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZoFo.GameCore.GameManagers;
+using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
+using ZoFo.GameCore.ZoFo_graphics;
+
+namespace ZoFo.GameCore.GameObjects.MapObjects
+{
+ public class MapObject : GameObject
+ {
+ public virtual bool IsColliderOn { get; protected set; } = true;//Who added that?
+ public Rectangle _sourceRectangle;
+ public override GraphicsComponent graphicsComponent { get; } = new();
+
+ public MapObject(Vector2 position, Vector2 size, Rectangle sourceRectangle, string textureName) : base(position)
+ {
+ _sourceRectangle = sourceRectangle;
+ graphicsComponent.ObjectDrawRectangle = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y);
+ graphicsComponent.BuildComponent(textureName);
+
+ graphicsComponent.LoadContent();
+
+ }
+ public override void Draw(SpriteBatch spriteBatch)
+ {
+ graphicsComponent.DrawAnimation(graphicsComponent.ObjectDrawRectangle, spriteBatch, _sourceRectangle);
+ }
+
+ }
+}
diff --git a/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs b/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs
new file mode 100644
index 0000000..02f828e
--- /dev/null
+++ b/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs
@@ -0,0 +1,17 @@
+using Microsoft.Xna.Framework;
+using System;
+using ZoFo.GameCore.GameManagers.CollisionManager;
+using ZoFo.GameCore.ZoFo_graphics;
+
+namespace ZoFo.GameCore.GameObjects.MapObjects.StopObjects;
+
+public class StopObject : MapObject
+{
+ CollisionComponent collisionComponent;
+
+ protected StopObject(Vector2 position, Vector2 size, Rectangle sourceRectangle, string textureName) : base(position, size, sourceRectangle, textureName)
+ {
+ // TODO: Написать коллизию, пусть тразмер будет чисто таким же как и текстурка.
+ // Поменяйте уровень защиты конструктора, после снимите в MapManager комментарий в методе LoadMap с создания StopObject-а
+ }
+}
diff --git a/ZoFo/GameCore/GameObjects/MapObjects/Tiles/Tile.cs b/ZoFo/GameCore/GameObjects/MapObjects/Tiles/Tile.cs
new file mode 100644
index 0000000..eb166b8
--- /dev/null
+++ b/ZoFo/GameCore/GameObjects/MapObjects/Tiles/Tile.cs
@@ -0,0 +1,8 @@
+using System;
+
+namespace ZoFo.GameCore.GameObjects.MapObjects.Tiles;
+
+public class Tile
+{
+
+}
diff --git a/ZoFo/GameCore/GameObjects/StopObjects/StopObject.cs b/ZoFo/GameCore/GameObjects/StopObjects/StopObject.cs
deleted file mode 100644
index 85f95b4..0000000
--- a/ZoFo/GameCore/GameObjects/StopObjects/StopObject.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace ZoFo.GameCore.GameObjects.StopObjects;
-
-public class StopObject
-{
-
-}
diff --git a/ZoFo/GameCore/GameObjects/Tiles/Tile.cs b/ZoFo/GameCore/GameObjects/Tiles/Tile.cs
deleted file mode 100644
index 16cc1c9..0000000
--- a/ZoFo/GameCore/GameObjects/Tiles/Tile.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System;
-
-namespace ZoFo.GameCore.GameObjects;
-
-public class Tile
-{
-
-}
diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs
index b62dbba..0834835 100644
--- a/ZoFo/GameCore/Server.cs
+++ b/ZoFo/GameCore/Server.cs
@@ -5,57 +5,124 @@ using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
+using ZoFo.GameCore.GameManagers.MapManager;
using ZoFo.GameCore.GameManagers.NetworkManager;
using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
using ZoFo.GameCore.GameObjects;
using ZoFo.GameCore.GameObjects.Entities;
+using ZoFo.GameCore.GameObjects.MapObjects;
namespace ZoFo.GameCore
{
public class Server
{
- private List gameObjects;
private ServerNetworkManager networkManager;
- private List entity; //entity
+ private int ticks = 0;
public Server()
{
networkManager = new ServerNetworkManager();
networkManager.GetDataSend += OnDataSend;
+
}
+ #region server logic as App
+ //TODO Comment pls
public void OnDataSend(string data)
{
- List updateDatas = JsonSerializer.Deserialize>(data);
+ List updateDatas = JsonSerializer.Deserialize>(data);
+ for (int i = 0; i < updateDatas.Count; i++)
+ {
+ ProcessIUpdateData(updateDatas[i]);
+ }
+ }
+ ///
+ /// Обработка апдейтсов, которые нам прислал клиент
+ ///
+ ///
+ public void ProcessIUpdateData(UpdateData updateData)
+ {
//ТУТ Switch case будет честное слово
}
+
///
- /// Для красоты) Отдел Серверов
+ /// Для красоты) Отдел Серверов
+ /// добавляет в лист updates новую data
///
///
- public void AddData(IUpdateData data)//добавляет в лист updates новую data
+ public void AddData(UpdateData data)//добавляет в лист updates новую data
{
networkManager.AddData(data);
}
- public void CreateRoom(int players) //Создает комнату и запускает ожидание подключений
+
+ ///
+ /// Создает комнату и запускает ожидание подключений
+ ///
+ ///
+ public void CreateRoom(int players)
{
- networkManager.StartWaitingForPlayers(players);
+ networkManager.Start(players);
}
- // public void StartGame() { } принудительный запуск
- public void EndGame() //Добавляет UpdateGameEnded и отключает игроков
+ ///
+ /// Запуск игры в комнате
+ ///
+ public void StartGame()
+ {
+
+ //TODO начинает рассылку и обмен пакетами игры
+ //Грузит карту
+
+ gameObjects = new List();
+ entities = new List();
+ new MapManager().LoadMap();
+ }
+
+ ///
+ /// Добавляет UpdateGameEnded и отключает игроков
+ ///
+ public void EndGame()
{
UpdateGameEnded gameEnded = new UpdateGameEnded();
networkManager.AddData(gameEnded);
networkManager.CloseConnection();
- }
- internal void Update(GameTime gameTime)
- {
+ }
+ private List gameObjects = new List();
+ private List entities; //entity
+ public void Update(GameTime gameTime)
+ {
+ if (ticks == 3) //ОБРАБАТЫВАЕТСЯ 20 РАЗ В СЕКУНДУ
+ {
+ foreach (var go in gameObjects)
+ {
+ go.UpdateLogic(gameTime);
+ }
+ ticks = 0;
+ networkManager.SendData();
+ }
+ ticks++;
}
- public void RegisterEntity(GameObject gameObject)
+
+
+ ///
+ /// Регистрирует игровой объект
+ ///
+ ///
+ public void RegisterGameObject(GameObject gameObject)
{
- gameObjects.Add(gameObject);
- }
+ gameObjects.Add(gameObject);
+ if (gameObject is MapObject)
+ {
+ AddData(new UpdateTileCreated()
+ {
+ Position = (gameObject as MapObject).position,
+ sourceRectangle = (gameObject as MapObject)._sourceRectangle,
+ Size = (gameObject as MapObject).graphicsComponent.ObjectDrawRectangle.Size,
+ tileSetName = (gameObject as MapObject).graphicsComponent.mainTextureName
+ });//TODO
+ }
+ }
}
+ #endregion
}
diff --git a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs
index a60cee1..f10b40a 100644
--- a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs
+++ b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs
@@ -15,12 +15,16 @@ namespace ZoFo.GameCore.ZoFo_graphics
public class GraphicsComponent
{
+ public Rectangle ObjectDrawRectangle { get; set; }
+
+
+
public event Action actionOfAnimationEnd;
private List animations;
private List textures;
- private List texturesNames;
+ public List texturesNames; //rethink public and following that errors
private AnimationContainer currentAnimation;
- static public int scaling = 4;
+ static public int scaling = 5;
public int parentId;
public AnimationContainer CurrentAnimation
{
@@ -60,8 +64,18 @@ namespace ZoFo.GameCore.ZoFo_graphics
buildSourceRectangle();
}
+ public string mainTextureName;//TODO костыль - пофиксить
public GraphicsComponent(string textureName)
{
+ BuildComponent(textureName);
+ }
+ public GraphicsComponent()
+ {
+ }
+ public void BuildComponent(string textureName)
+ {
+ mainTextureName = textureName;
+ //texturesNames.Add(textureName);//Added by SD
animations = new List();
textures = new List();
var texture = AppManager.Instance.Content.Load(textureName);
@@ -97,6 +111,11 @@ namespace ZoFo.GameCore.ZoFo_graphics
textures = new List();
texturesNames = new List();
+ if (animations is null)
+ {
+ return;
+ }
+
foreach (var animation in animations)
{
if (!texturesNames.Contains(animation.TextureName))
@@ -137,6 +156,10 @@ namespace ZoFo.GameCore.ZoFo_graphics
public void Update()
{
+ if (currentAnimation is null)
+ {
+ return;
+ }
if (interval == 0)
{
currentFrame++;
@@ -277,6 +300,6 @@ namespace ZoFo.GameCore.ZoFo_graphics
AppManager.Instance.DebugHUD.Set("CameraPosition", $"{CameraPosition.X}, {CameraPosition.Y}");
*/
}
- public static Point CameraPosition = new Point(-700, 300);
+ public static Point CameraPosition = new Point(0, 0);
}
}
diff --git a/ZoFo/ZoFo.csproj b/ZoFo/ZoFo.csproj
index 4c3c3f7..c3a2b36 100644
--- a/ZoFo/ZoFo.csproj
+++ b/ZoFo/ZoFo.csproj
@@ -32,6 +32,7 @@
+