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..45c6a06 --- /dev/null +++ b/AnimationsFileCreator/Program.cs @@ -0,0 +1,73 @@ +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(); + var temp = result.Path.Split('\\'); + textureName = temp[temp.Length-2] + "/"+temp[temp.Length - 1]; + 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 = "Textures/AnimationTextures/"+textureName; + container.TextureFrameInterval = 0; + container.Id = id; + string json = JsonConvert.SerializeObject(container); + StreamWriter writer = new StreamWriter("../../../../ZoFo/Content/Textures/Animations/"+id+ ".animation"); + writer.WriteLine(json); + writer.Close(); + } + } +} diff --git a/MonogameLibrary/UI/Base/UIManager.cs b/MonogameLibrary/UI/Base/UIManager.cs index 826a0a1..125df25 100644 --- a/MonogameLibrary/UI/Base/UIManager.cs +++ b/MonogameLibrary/UI/Base/UIManager.cs @@ -59,8 +59,8 @@ namespace MonogameLibrary.UI.Base { keyboardState = Keyboard.GetState(); mouseState = Mouse.GetState(); - mouseState = new MouseState((int)(mouseState.X*(float)resolutionInGame.X/resolution.X), - (int)(mouseState.Y * (float)resolutionInGame.Y / resolution.Y), mouseState.ScrollWheelValue, mouseState.LeftButton, mouseState.MiddleButton, mouseState.RightButton, mouseState.XButton1, mouseState.XButton2); + //mouseState = new MouseState((int)(mouseState.X*(float)resolutionInGame.X/resolution.X), + // (int)(mouseState.Y * (float)resolutionInGame.Y / resolution.Y), mouseState.ScrollWheelValue, mouseState.LeftButton, mouseState.MiddleButton, mouseState.RightButton, mouseState.XButton1, mouseState.XButton2); } catch { diff --git a/MonogameLibrary/UI/Elements/CheckBox.cs b/MonogameLibrary/UI/Elements/CheckBox.cs index 5dc400f..47ac44e 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))) @@ -49,9 +53,9 @@ namespace MonogameLibrary.UI.Elements public override void LoadTexture(ContentManager content) { - texture1 = content.Load("textures\\ui\\checkboxs_off"); - texture2 = content.Load("textures\\ui\\checkboxs_off-on"); - texture3 = content.Load("textures\\ui\\checkboxs_on"); + texture1 = content.Load("Textures/GUI/checkboxs_off"); + texture2 = content.Load("Textures/GUI/checkboxs_off-on"); + texture3 = content.Load("Textures/GUI/checkboxs_on"); base.LoadTexture(content); } public override void Draw(SpriteBatch _spriteBatch) diff --git a/MonogameLibrary/UI/Elements/Slider.cs b/MonogameLibrary/UI/Elements/Slider.cs index b496cdf..0525666 100644 --- a/MonogameLibrary/UI/Elements/Slider.cs +++ b/MonogameLibrary/UI/Elements/Slider.cs @@ -21,7 +21,10 @@ namespace MonogameLibrary.UI.Elements public int indentation = 5; Texture2D texture2; - public Rectangle sliderRect = new Rectangle(0, 0, 30, 30); + /// + /// ректенгл ползунка + /// + public Rectangle sliderRect = new Rectangle(0, 0, 40, 40); private float sliderValue = 0; private float minValue = 0, maxValue = 1; SliderState sliderState = SliderState.None; @@ -56,7 +59,7 @@ namespace MonogameLibrary.UI.Elements public override void LoadTexture(ContentManager content) { - texture2 = content.Load("textures\\ui\\slider"); + texture2 = content.Load("Textures/GUI/switch"); base.LoadTexture(content); } @@ -73,11 +76,11 @@ namespace MonogameLibrary.UI.Elements sliderRect.X += (int)(sliderValue * (rectangle.Width - sliderRect.Width - indentation * 2) + indentation); sliderRect.Y -= sliderRect.Height / 2 - rectangle.Height / 2; if (sliderState == SliderState.Moving) - _spriteBatch.Draw(texture2, sliderRect, Color.DarkRed); + _spriteBatch.Draw(texture2, sliderRect, Color.Gray); else if(sliderState == SliderState.HoveringOverSliderButton) - _spriteBatch.Draw(texture2, sliderRect, new Color(200,0 ,0)); + _spriteBatch.Draw(texture2, sliderRect, Color.DarkGray); else - _spriteBatch.Draw(texture2, sliderRect, Color.Red); + _spriteBatch.Draw(texture2, sliderRect, Color.White); DrawText(_spriteBatch); } } diff --git a/MonogameLibrary/UI/Elements/TextBox.cs b/MonogameLibrary/UI/Elements/TextBox.cs index 87534eb..529a8be 100644 --- a/MonogameLibrary/UI/Elements/TextBox.cs +++ b/MonogameLibrary/UI/Elements/TextBox.cs @@ -89,9 +89,9 @@ namespace MonogameLibrary.UI.Elements if (hoverState == HoverState.None) { if (isSelected == IsSelected.Selected) - _spriteBatch.Draw(texture, rectangle, new Color(220, 220, 220)); + _spriteBatch.Draw(texture, rectangle, new Color(211, 211, 211)); else - _spriteBatch.Draw(texture, rectangle, new Color(245, 245, 245)); + _spriteBatch.Draw(texture, rectangle, Color.White); } else if (hoverState == HoverState.Hovering) _spriteBatch.Draw(texture, rectangle, new Color(211, 211, 211)); 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 ddc4c36..ea0d2f4 100644 --- a/ZoFo/Content/Content.mgcb +++ b/ZoFo/Content/Content.mgcb @@ -13,3 +13,345 @@ #---------------------------------- Content ---------------------------------# +#begin Fonts/Font.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/Font.spritefont + +#begin Fonts/Font2.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/processorParam:TextureFormat=Compressed +/build:Fonts/Font2.spritefont + +#begin Fonts/Font3.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/processorParam:PremultiplyAlpha=True +/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/AnimationTextures/Character/hr-level1_idle_gun.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/AnimationTextures/Character/hr-level1_idle_gun.png + +#begin Textures/AnimationTextures/Character/hr-level1_idle.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/AnimationTextures/Character/hr-level1_idle.png + +#begin Textures/AnimationTextures/Character/hr-level1_mining_tool-1.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/AnimationTextures/Character/hr-level1_mining_tool-1.png + +#begin Textures/AnimationTextures/Character/hr-level1_mining_tool-2.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/AnimationTextures/Character/hr-level1_mining_tool-2.png + +#begin Textures/AnimationTextures/Character/hr-level1_running_gun.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/AnimationTextures/Character/hr-level1_running_gun.png + +#begin Textures/AnimationTextures/Character/hr-level1_running.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/AnimationTextures/Character/hr-level1_running.png + +#begin Textures/AnimationTextures/unicorn.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/AnimationTextures/unicorn.png + +#begin Textures/GUI/background/base.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/base.png + +#begin Textures/GUI/background/endGame.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/endGame.png + +#begin Textures/GUI/background/join.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/join.png + +#begin Textures/GUI/background/mainMenu.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/mainMenu.png + +#begin Textures/GUI/background/options.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/options.png + +#begin Textures/GUI/background/selectMode.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/selectMode.png + +#begin Textures/GUI/background/waiting.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/background/waiting.png + +#begin Textures/GUI/checkboxs_off.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/checkboxs_off.png + +#begin Textures/GUI/checkboxs_off-on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/checkboxs_off-on.png + +#begin Textures/GUI/checkboxs_on.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/checkboxs_on.png + +#begin Textures/GUI/MenuBackground.jpg +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/MenuBackground.jpg + +#begin Textures/GUI/mouse.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/mouse.png + +#begin Textures/GUI/switch.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/switch.png + +#begin Textures/GUI/Switch_backgrownd.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/GUI/Switch_backgrownd.png + +#begin Textures/TileSetImages/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/TileSetImages/TilesetFloor.png + diff --git a/ZoFo/Content/Fonts/CarltineRegular-K7z5l.ttf b/ZoFo/Content/Fonts/CarltineRegular-K7z5l.ttf new file mode 100644 index 0000000..1496983 Binary files /dev/null and b/ZoFo/Content/Fonts/CarltineRegular-K7z5l.ttf differ diff --git a/ZoFo/Content/Fonts/Debrosee-ALPnL.ttf b/ZoFo/Content/Fonts/Debrosee-ALPnL.ttf new file mode 100644 index 0000000..311dd61 Binary files /dev/null and b/ZoFo/Content/Fonts/Debrosee-ALPnL.ttf differ diff --git a/ZoFo/Content/Fonts/Font.spritefont b/ZoFo/Content/Fonts/Font.spritefont new file mode 100644 index 0000000..754d1ee --- /dev/null +++ b/ZoFo/Content/Fonts/Font.spritefont @@ -0,0 +1,60 @@ + + + + + + + Debrosee-ALPnL.ttf + + + 100 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/ZoFo/Content/Fonts/Font2.spritefont b/ZoFo/Content/Fonts/Font2.spritefont new file mode 100644 index 0000000..3aaf8e7 --- /dev/null +++ b/ZoFo/Content/Fonts/Font2.spritefont @@ -0,0 +1,60 @@ + + + + + + + CarltineRegular-K7z5l.ttf + + + 15 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/ZoFo/Content/Fonts/Font3.spritefont b/ZoFo/Content/Fonts/Font3.spritefont new file mode 100644 index 0000000..b82ba24 --- /dev/null +++ b/ZoFo/Content/Fonts/Font3.spritefont @@ -0,0 +1,60 @@ + + + + + + + MouldyCheeseRegular-WyMWG.ttf + + + 50 + + + 0 + + + true + + + + + + + + + + + + ~ + + + + diff --git a/ZoFo/Content/Fonts/MouldyCheeseRegular-WyMWG.ttf b/ZoFo/Content/Fonts/MouldyCheeseRegular-WyMWG.ttf new file mode 100644 index 0000000..9c36cd0 Binary files /dev/null and b/ZoFo/Content/Fonts/MouldyCheeseRegular-WyMWG.ttf differ diff --git a/ZoFo/Content/MapData/MapSession.tiled-project b/ZoFo/Content/MapData/MapSession.tiled-project new file mode 100644 index 0000000..d0eb592 --- /dev/null +++ b/ZoFo/Content/MapData/MapSession.tiled-project @@ -0,0 +1,14 @@ +{ + "automappingRulesFile": "", + "commands": [ + ], + "compatibilityVersion": 1100, + "extensionsPath": "extensions", + "folders": [ + "." + ], + "properties": [ + ], + "propertyTypes": [ + ] +} diff --git a/ZoFo/Content/MapData/MapSession.tiled-session b/ZoFo/Content/MapData/MapSession.tiled-session new file mode 100644 index 0000000..b075b59 --- /dev/null +++ b/ZoFo/Content/MapData/MapSession.tiled-session @@ -0,0 +1,43 @@ +{ + "Map/SizeTest": { + "height": 4300, + "width": 2 + }, + "activeFile": "TileSets/TileSet 1.tsj", + "expandedProjectPaths": [ + "TileMaps", + ".", + "TileSets" + ], + "fileStates": { + "TileMaps/TileSets/TileSet 1.tsj": { + "scaleInDock": 1 + }, + "TileMaps/main.tmj": { + "scale": 0.25, + "selectedLayer": 0, + "viewCenter": { + "x": 1734, + "y": 1652 + } + }, + "TileSets/TileSet 1.tsj": { + "scaleInDock": 1, + "scaleInEditor": 1.5 + }, + "TileSets/WallSet.tsj": { + "scaleInDock": 1, + "scaleInEditor": 1 + } + }, + "openFiles": [ + "TileSets/TileSet 1.tsj", + "TileSets/WallSet.tsj", + "TileMaps/main.tmj" + ], + "recentFiles": [ + "TileMaps/main.tmj", + "TileSets/WallSet.tsj", + "TileSets/TileSet 1.tsj" + ] +} diff --git a/ZoFo/Content/MapData/TileMaps/main.tmj b/ZoFo/Content/MapData/TileMaps/main.tmj new file mode 100644 index 0000000..fa928f7 --- /dev/null +++ b/ZoFo/Content/MapData/TileMaps/main.tmj @@ -0,0 +1,1093 @@ +{ "compressionlevel":-1, + "height":20, + "infinite":true, + "layers":[ + { + "chunks":[ + { + "data":[24, 50, 51, 24, 24, 24, 28, 29, 24, 24, 28, 46, 29, 24, 24, 50, + 24, 28, 46, 46, 29, 24, 50, 51, 24, 90, 25, 111, 23, 28, 29, 89, + 29, 50, 2, 2, 51, 24, 24, 28, 29, 28, 10, 3, 23, 25, 23, 89, + 23, 90, 24, 24, 24, 24, 24, 25, 23, 50, 32, 10, 32, 47, 23, 89, + 51, 24, 24, 24, 28, 29, 24, 50, 51, 24, 50, 51, 50, 2, 51, 24, + 28, 46, 29, 24, 50, 51, 24, 24, 24, 24, 28, 46, 46, 46, 29, 89, + 50, 2, 51, 24, 24, 24, 24, 28, 29, 24, 50, 2, 2, 2, 51, 89, + 24, 24, 28, 29, 24, 89, 24, 50, 32, 29, 24, 90, 24, 24, 24, 24, + 24, 89, 25, 23, 24, 90, 24, 24, 50, 51, 24, 24, 24, 24, 24, 24, + 89, 24, 25, 23, 24, 24, 24, 24, 24, 24, 24, 24, 28, 46, 29, 24, + 24, 24, 25, 23, 24, 28, 46, 29, 24, 89, 28, 29, 25, 111, 45, 29, + 24, 24, 50, 51, 89, 50, 3, 45, 29, 24, 50, 51, 50, 2, 3, 45, + 24, 90, 24, 24, 24, 24, 50, 2, 32, 29, 24, 24, 24, 24, 25, 1, + 24, 89, 24, 24, 24, 24, 89, 24, 50, 51, 24, 24, 24, 24, 50, 32, + 29, 90, 90, 24, 24, 89, 24, 24, 24, 24, 24, 24, 28, 29, 24, 50, + 32, 29, 24, 24, 90, 24, 24, 24, 24, 24, 24, 24, 25, 45, 29, 24], + "height":16, + "width":16, + "x":0, + "y":0 + }, + { + "data":[51, 28, 46, 29, 24, 24, 24, 24, 24, 50, 2, 51, 24, 24, 24, 24, + 24, 50, 2, 51, 28, 29, 24, 24, 24, 28, 29, 89, 24, 28, 46, 29, + 89, 24, 90, 24, 50, 32, 29, 24, 28, 10, 51, 24, 24, 25, 1, 51, + 90, 24, 24, 24, 28, 10, 51, 90, 25, 45, 46, 29, 24, 25, 23, 89, + 24, 28, 29, 28, 10, 32, 29, 28, 10, 2, 2, 51, 24, 50, 51, 24, + 24, 50, 32, 10, 51, 50, 51, 25, 45, 46, 29, 24, 24, 90, 24, 24, + 24, 24, 50, 32, 46, 29, 24, 50, 2, 2, 32, 29, 24, 24, 24, 24, + 24, 24, 24, 50, 2, 32, 29, 24, 24, 24, 50, 51, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 25, 23, 90, 24, 89, 24, 28, 29, 24, 24, 28, + 28, 46, 29, 24, 24, 50, 51, 24, 24, 24, 24, 50, 32, 29, 24, 25, + 50, 2, 51, 28, 29, 28, 46, 29, 24, 24, 89, 24, 25, 45, 46, 10, + 29, 24, 24, 50, 32, 10, 2, 51, 24, 24, 24, 24, 50, 2, 2, 51, + 51, 24, 28, 29, 50, 51, 28, 46, 29, 24, 24, 24, 24, 24, 90, 28, + 29, 24, 25, 23, 24, 24, 50, 2, 32, 29, 24, 24, 89, 24, 89, 50, + 51, 24, 50, 51, 24, 24, 24, 24, 50, 32, 29, 89, 90, 24, 24, 24, + 24, 24, 24, 24, 24, 28, 29, 24, 24, 25, 23, 24, 24, 28, 46, 29], + "height":16, + "width":16, + "x":16, + "y":0 + }, + { + "data":[24, 24, 50, 51, 24, 50, 2, 51, 24, 28, 47, 1, 51, 25, 111, 45, + 24, 24, 28, 29, 24, 24, 24, 28, 29, 25, 111, 23, 24, 50, 2, 2, + 28, 46, 10, 51, 28, 29, 24, 25, 23, 50, 2, 51, 24, 24, 28, 29, + 50, 2, 51, 90, 50, 32, 29, 50, 32, 46, 29, 24, 24, 24, 25, 23, + 89, 24, 24, 24, 90, 50, 51, 24, 25, 114, 23, 24, 90, 24, 25, 23, + 24, 28, 29, 24, 24, 28, 29, 89, 50, 2, 51, 24, 24, 24, 25, 23, + 24, 50, 51, 28, 46, 10, 51, 24, 24, 24, 90, 24, 24, 24, 50, 32, + 24, 24, 90, 50, 2, 32, 29, 28, 46, 29, 28, 46, 29, 24, 90, 50, + 46, 29, 24, 90, 24, 25, 45, 47, 1, 51, 50, 2, 32, 46, 29, 89, + 115, 45, 29, 24, 24, 50, 2, 2, 32, 29, 24, 24, 50, 3, 23, 24, + 2, 2, 51, 24, 24, 24, 24, 24, 50, 32, 46, 29, 24, 50, 51, 24, + 89, 24, 28, 29, 89, 24, 24, 24, 24, 25, 111, 23, 24, 28, 29, 24, + 46, 29, 25, 23, 89, 28, 46, 29, 24, 25, 115, 23, 24, 25, 23, 24, + 2, 32, 47, 45, 46, 10, 2, 32, 46, 10, 2, 51, 24, 25, 23, 89, + 24, 50, 2, 3, 1, 32, 46, 10, 2, 51, 89, 24, 89, 50, 51, 24, + 90, 28, 46, 47, 23, 50, 3, 23, 24, 24, 90, 24, 28, 46, 46, 29], + "height":16, + "width":16, + "x":32, + "y":0 + }, + { + "data":[47, 23, 24, 28, 29, 24, 24, 28, 29, 50, 51, 24, 50, 32, 46, 46, + 3, 23, 28, 47, 23, 24, 89, 50, 32, 29, 24, 24, 24, 25, 115, 1, + 50, 32, 10, 2, 51, 24, 89, 24, 25, 23, 24, 90, 24, 25, 1, 32, + 24, 25, 45, 46, 46, 29, 28, 29, 25, 23, 24, 90, 24, 50, 51, 50, + 24, 25, 115, 111, 1, 32, 10, 51, 25, 23, 28, 46, 46, 46, 29, 24, + 28, 10, 2, 2, 51, 50, 51, 24, 25, 23, 25, 1, 2, 2, 32, 46, + 47, 45, 46, 29, 24, 24, 24, 28, 10, 51, 50, 32, 46, 46, 10, 3, + 2, 3, 111, 23, 24, 24, 24, 25, 23, 24, 89, 50, 2, 2, 51, 50, + 90, 25, 1, 32, 29, 90, 24, 25, 45, 29, 24, 89, 90, 28, 29, 24, + 24, 25, 23, 50, 51, 24, 24, 50, 3, 23, 24, 24, 24, 25, 23, 24, + 24, 25, 45, 29, 24, 24, 24, 24, 25, 23, 28, 46, 29, 50, 51, 24, + 28, 10, 3, 23, 24, 24, 89, 24, 25, 23, 25, 111, 45, 29, 24, 24, + 25, 23, 50, 51, 24, 24, 24, 24, 50, 32, 10, 2, 2, 32, 29, 28, + 50, 51, 28, 46, 46, 29, 24, 24, 24, 25, 23, 24, 24, 50, 51, 25, + 24, 24, 50, 3, 113, 23, 24, 24, 24, 50, 51, 24, 24, 24, 24, 50, + 24, 24, 90, 50, 2, 51, 24, 24, 24, 24, 90, 24, 90, 24, 24, 24], + "height":16, + "width":16, + "x":48, + "y":0 + }, + { + "data":[10, 51, 24, 50, 2, 51, 24, 50, 51, 24, 24, 24, 89, 24, 90, 24, + 51, 90, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 46, 46, + 29, 24, 89, 24, 24, 28, 29, 24, 24, 28, 29, 24, 28, 10, 3, 1, + 51, 24, 24, 89, 24, 50, 51, 28, 46, 10, 51, 24, 25, 45, 10, 32, + 24, 24, 24, 24, 24, 24, 24, 25, 1, 51, 24, 24, 50, 2, 32, 10, + 46, 29, 90, 24, 24, 24, 90, 50, 51, 24, 24, 24, 24, 24, 50, 51, + 114, 23, 24, 24, 24, 24, 90, 24, 28, 29, 28, 29, 24, 24, 28, 29, + 2, 51, 24, 24, 24, 24, 24, 24, 25, 23, 25, 23, 24, 24, 25, 23, + 90, 24, 24, 28, 29, 24, 24, 24, 50, 51, 25, 23, 24, 24, 50, 32, + 24, 24, 89, 25, 23, 24, 24, 24, 24, 24, 50, 32, 46, 46, 29, 25, + 24, 28, 46, 10, 32, 29, 24, 24, 24, 28, 29, 50, 2, 3, 23, 25, + 24, 50, 2, 51, 25, 45, 29, 89, 24, 50, 51, 24, 24, 50, 51, 50, + 46, 29, 24, 24, 50, 3, 23, 24, 24, 24, 24, 24, 90, 90, 89, 24, + 1, 32, 29, 89, 28, 10, 51, 24, 24, 28, 46, 29, 90, 24, 24, 90, + 32, 10, 51, 90, 50, 32, 46, 46, 29, 50, 2, 32, 46, 46, 46, 29, + 50, 51, 28, 46, 29, 25, 1, 3, 23, 24, 24, 25, 1, 2, 2, 32], + "height":16, + "width":16, + "x":64, + "y":0 + }, + { + "data":[50, 51, 24, 25, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 46, + 46, 29, 24, 50, 51, 89, 24, 28, 29, 24, 90, 24, 24, 24, 50, 2, + 2, 51, 89, 28, 46, 29, 24, 50, 51, 24, 24, 24, 90, 24, 24, 28, + 29, 24, 24, 50, 3, 23, 24, 24, 24, 24, 24, 90, 24, 24, 24, 50, + 51, 28, 46, 46, 10, 32, 46, 29, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 50, 2, 3, 23, 50, 2, 51, 24, 24, 24, 24, 24, 90, 28, 29, + 24, 24, 24, 25, 23, 24, 24, 24, 24, 24, 24, 89, 90, 24, 25, 23, + 24, 24, 24, 50, 51, 24, 28, 46, 29, 24, 24, 28, 29, 28, 10, 51, + 29, 24, 24, 24, 28, 29, 25, 111, 23, 90, 24, 50, 51, 25, 23, 24, + 23, 90, 89, 24, 50, 32, 10, 2, 32, 29, 24, 90, 89, 25, 45, 46, + 23, 24, 24, 24, 24, 25, 23, 24, 25, 23, 24, 24, 24, 25, 111, 1, + 51, 24, 24, 24, 24, 50, 51, 89, 50, 32, 29, 28, 46, 10, 2, 51, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, 10, 2, 32, 29, 90, + 24, 24, 24, 24, 24, 28, 29, 89, 28, 29, 50, 32, 29, 25, 23, 24, + 24, 28, 29, 24, 24, 50, 51, 24, 25, 45, 29, 50, 32, 47, 23, 24, + 29, 25, 45, 29, 24, 90, 24, 90, 50, 3, 23, 24, 50, 2, 32, 46], + "height":16, + "width":16, + "x":80, + "y":0 + }, + { + "data":[29, 24, 28, 29, 28, 10, 32, 47, 23, 24, 90, 24, 24, 24, 24, 28, + 51, 24, 50, 51, 25, 23, 25, 115, 23, 24, 28, 29, 24, 24, 24, 50, + 29, 24, 24, 24, 50, 51, 50, 2, 51, 24, 25, 23, 90, 24, 28, 29, + 51, 24, 28, 29, 28, 29, 24, 24, 24, 24, 50, 32, 29, 28, 10, 32, + 24, 24, 50, 32, 10, 51, 90, 24, 24, 24, 24, 25, 45, 10, 51, 25, + 24, 28, 29, 25, 23, 24, 24, 28, 29, 24, 24, 50, 3, 23, 24, 50, + 24, 50, 32, 10, 32, 29, 24, 50, 51, 24, 24, 90, 50, 51, 90, 24, + 24, 90, 25, 23, 25, 23, 28, 29, 24, 24, 89, 24, 24, 90, 24, 24, + 24, 24, 50, 32, 10, 51, 50, 51, 24, 24, 24, 90, 24, 24, 24, 24, + 46, 46, 46, 47, 23, 24, 24, 24, 24, 90, 90, 24, 28, 29, 24, 24, + 2, 2, 3, 1, 51, 24, 89, 24, 28, 46, 29, 24, 50, 32, 29, 24, + 24, 89, 25, 23, 24, 24, 24, 89, 50, 2, 51, 24, 90, 50, 32, 46, + 24, 90, 50, 51, 28, 46, 29, 24, 24, 24, 89, 89, 24, 28, 10, 2, + 24, 24, 89, 28, 47, 1, 51, 24, 24, 24, 28, 29, 24, 25, 23, 90, + 24, 89, 24, 50, 2, 32, 46, 29, 24, 24, 25, 23, 24, 25, 45, 46, + 29, 28, 46, 29, 90, 25, 111, 23, 24, 24, 25, 23, 24, 50, 3, 1], + "height":16, + "width":16, + "x":96, + "y":0 + }, + { + "data":[46, 46, 46, 29, 24, 28, 47, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 51, 24, 25, 111, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 89, 24, 25, 111, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 24, 24, 24, 28, 10, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 24, 28, 46, 10, 51, 24, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 24, 50, 2, 32, 29, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 28, 46, 46, 47, 45, 46, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 50, 3, 1, 2, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 89, 25, 23, 24, 24, 90, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 90, 24, 28, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 24, 24, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 24, 25, 45, 46, 46, 47, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 29, 50, 2, 3, 115, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 45, 29, 28, 10, 2, 32, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 2, 32, 10, 51, 24, 25, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 24, 25, 23, 24, 24, 25, 23, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":0 + }, + { + "data":[50, 51, 24, 24, 24, 24, 28, 46, 29, 24, 89, 28, 10, 2, 51, 28, + 24, 24, 28, 29, 28, 29, 25, 111, 23, 90, 24, 25, 23, 24, 24, 25, + 46, 46, 10, 51, 25, 23, 25, 115, 23, 90, 89, 50, 51, 24, 28, 47, + 2, 2, 51, 24, 25, 23, 25, 111, 23, 24, 24, 24, 24, 24, 50, 2, + 24, 24, 24, 24, 25, 23, 25, 111, 23, 89, 24, 28, 46, 29, 24, 90, + 24, 24, 24, 24, 50, 51, 25, 114, 23, 24, 89, 50, 2, 51, 28, 29, + 24, 24, 24, 28, 46, 46, 10, 3, 23, 24, 24, 24, 24, 24, 50, 32, + 29, 28, 29, 25, 1, 2, 51, 50, 51, 24, 90, 89, 28, 29, 24, 25, + 51, 50, 51, 25, 23, 90, 24, 24, 89, 24, 24, 24, 25, 23, 24, 50, + 29, 24, 24, 50, 32, 29, 24, 24, 24, 89, 24, 24, 25, 23, 24, 24, + 51, 24, 24, 24, 25, 23, 28, 29, 24, 90, 24, 24, 25, 23, 24, 24, + 28, 29, 24, 90, 50, 51, 50, 51, 28, 46, 46, 46, 10, 32, 46, 46, + 10, 51, 24, 24, 24, 24, 24, 24, 25, 114, 111, 115, 23, 50, 2, 2, + 23, 24, 24, 24, 24, 24, 24, 24, 50, 2, 2, 2, 51, 24, 24, 89, + 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 46, 46, 29, 24, 24, + 32, 29, 24, 90, 24, 28, 29, 24, 24, 90, 25, 111, 113, 23, 90, 28], + "height":16, + "width":16, + "x":0, + "y":16 + }, + { + "data":[29, 24, 24, 24, 24, 50, 51, 24, 24, 25, 45, 29, 24, 50, 2, 32, + 23, 24, 28, 46, 46, 46, 46, 29, 28, 47, 1, 51, 90, 24, 24, 50, + 23, 89, 50, 2, 3, 115, 1, 51, 50, 2, 51, 89, 24, 24, 24, 28, + 51, 28, 29, 24, 50, 2, 51, 24, 28, 29, 90, 24, 28, 29, 28, 47, + 24, 50, 51, 24, 24, 24, 24, 24, 25, 45, 46, 46, 10, 32, 10, 3, + 24, 24, 24, 24, 24, 24, 24, 24, 50, 3, 111, 1, 32, 10, 51, 25, + 29, 24, 24, 28, 29, 24, 24, 28, 29, 50, 2, 51, 25, 45, 29, 25, + 45, 46, 29, 50, 32, 29, 24, 25, 23, 24, 24, 28, 10, 2, 32, 10, + 2, 2, 51, 89, 25, 23, 24, 50, 32, 46, 46, 10, 32, 29, 50, 51, + 89, 24, 24, 90, 50, 32, 46, 29, 50, 2, 3, 23, 50, 32, 29, 24, + 24, 24, 28, 46, 46, 10, 2, 51, 90, 90, 50, 51, 24, 50, 51, 89, + 29, 24, 50, 3, 1, 51, 24, 24, 24, 24, 28, 29, 89, 90, 89, 24, + 51, 24, 24, 25, 45, 29, 24, 24, 89, 24, 50, 51, 24, 90, 89, 28, + 89, 24, 24, 50, 2, 32, 29, 24, 90, 89, 24, 24, 24, 24, 24, 50, + 24, 24, 24, 24, 24, 25, 45, 46, 46, 46, 29, 24, 24, 24, 24, 24, + 29, 24, 89, 24, 24, 25, 1, 2, 3, 1, 51, 24, 24, 24, 24, 24], + "height":16, + "width":16, + "x":16, + "y":16 + }, + { + "data":[46, 47, 115, 115, 23, 24, 25, 23, 24, 24, 24, 24, 50, 2, 3, 23, + 2, 2, 3, 114, 23, 24, 25, 23, 24, 24, 24, 28, 29, 24, 50, 51, + 29, 24, 50, 3, 23, 24, 50, 51, 89, 89, 24, 50, 51, 89, 24, 24, + 23, 24, 24, 50, 32, 46, 29, 24, 24, 24, 90, 24, 24, 24, 24, 24, + 23, 24, 24, 24, 50, 2, 32, 46, 29, 28, 46, 46, 29, 24, 24, 24, + 23, 24, 28, 46, 46, 29, 25, 1, 32, 10, 2, 2, 32, 46, 29, 24, + 45, 46, 10, 2, 2, 51, 25, 23, 25, 23, 24, 24, 50, 2, 32, 29, + 2, 2, 32, 46, 29, 89, 50, 32, 47, 23, 24, 28, 46, 29, 50, 51, + 24, 24, 25, 1, 51, 24, 89, 50, 3, 23, 28, 10, 3, 23, 24, 89, + 24, 24, 50, 51, 24, 24, 24, 24, 50, 51, 50, 51, 50, 32, 46, 46, + 24, 24, 24, 24, 90, 89, 24, 28, 29, 24, 24, 24, 28, 10, 3, 115, + 24, 89, 28, 29, 24, 24, 24, 50, 51, 89, 24, 24, 50, 51, 25, 1, + 46, 46, 10, 51, 90, 89, 89, 24, 24, 90, 24, 24, 24, 24, 25, 23, + 2, 2, 51, 24, 24, 90, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, + 89, 24, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 50, + 24, 89, 24, 24, 50, 51, 89, 24, 24, 24, 24, 90, 24, 24, 24, 28], + "height":16, + "width":16, + "x":32, + "y":16 + }, + { + "data":[24, 24, 90, 89, 24, 24, 28, 29, 24, 90, 24, 24, 24, 89, 24, 24, + 24, 24, 28, 29, 24, 24, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24, + 24, 89, 50, 51, 28, 29, 24, 25, 23, 89, 24, 24, 24, 24, 89, 24, + 90, 24, 24, 24, 25, 23, 24, 50, 51, 24, 24, 28, 46, 29, 89, 24, + 24, 24, 24, 24, 50, 51, 89, 24, 90, 24, 24, 25, 1, 32, 29, 89, + 28, 46, 46, 46, 46, 29, 89, 24, 24, 24, 24, 25, 45, 47, 23, 24, + 50, 2, 2, 2, 2, 32, 29, 24, 24, 24, 90, 50, 2, 2, 51, 24, + 24, 24, 24, 24, 24, 50, 32, 46, 29, 24, 24, 24, 90, 90, 24, 24, + 24, 28, 29, 24, 24, 24, 50, 2, 51, 24, 24, 28, 46, 46, 29, 24, + 29, 50, 51, 90, 24, 24, 24, 24, 24, 28, 29, 50, 3, 114, 23, 24, + 23, 24, 24, 90, 24, 90, 28, 29, 24, 25, 23, 24, 25, 115, 45, 46, + 51, 24, 28, 29, 24, 24, 50, 51, 89, 25, 23, 24, 25, 111, 115, 114, + 24, 24, 50, 32, 46, 29, 90, 24, 24, 50, 51, 24, 25, 111, 1, 2, + 29, 24, 24, 50, 2, 32, 29, 24, 24, 90, 24, 24, 25, 1, 51, 90, + 51, 24, 24, 24, 24, 25, 23, 24, 24, 24, 24, 24, 50, 51, 24, 89, + 29, 90, 24, 24, 28, 10, 32, 29, 90, 90, 90, 24, 24, 24, 89, 24], + "height":16, + "width":16, + "x":48, + "y":16 + }, + { + "data":[90, 24, 50, 3, 23, 50, 32, 10, 51, 24, 24, 25, 45, 29, 24, 50, + 28, 29, 24, 50, 51, 28, 10, 51, 90, 24, 24, 50, 2, 32, 29, 24, + 50, 51, 24, 90, 28, 47, 45, 46, 29, 24, 24, 28, 29, 50, 32, 29, + 28, 29, 89, 24, 50, 2, 2, 3, 23, 24, 24, 25, 23, 24, 50, 51, + 25, 23, 24, 28, 29, 24, 89, 50, 51, 24, 24, 50, 51, 89, 24, 24, + 25, 23, 24, 50, 51, 28, 29, 90, 24, 24, 90, 24, 24, 24, 24, 24, + 25, 45, 29, 24, 24, 50, 51, 24, 90, 24, 24, 24, 89, 24, 24, 24, + 50, 2, 32, 29, 24, 24, 24, 89, 90, 89, 24, 24, 28, 29, 24, 28, + 24, 89, 25, 45, 46, 46, 29, 24, 24, 24, 24, 24, 25, 23, 24, 25, + 24, 24, 50, 2, 2, 2, 51, 24, 24, 24, 24, 89, 25, 23, 24, 50, + 29, 24, 24, 24, 24, 89, 24, 90, 24, 28, 29, 24, 25, 23, 24, 24, + 45, 29, 28, 46, 46, 46, 29, 24, 89, 25, 45, 46, 10, 32, 29, 24, + 2, 32, 10, 3, 114, 115, 45, 29, 24, 50, 2, 2, 51, 50, 51, 24, + 24, 50, 32, 10, 3, 114, 1, 32, 29, 24, 24, 89, 24, 90, 24, 24, + 24, 24, 50, 32, 10, 2, 51, 50, 32, 29, 24, 24, 24, 24, 28, 29, + 24, 89, 24, 50, 32, 29, 24, 28, 47, 23, 24, 28, 29, 24, 50, 51], + "height":16, + "width":16, + "x":64, + "y":16 + }, + { + "data":[51, 50, 2, 51, 24, 24, 24, 24, 24, 25, 23, 24, 24, 24, 50, 2, + 24, 24, 28, 29, 24, 24, 24, 90, 28, 47, 23, 89, 24, 24, 90, 28, + 24, 28, 10, 51, 24, 24, 24, 24, 25, 114, 23, 24, 24, 24, 24, 25, + 24, 50, 51, 24, 24, 24, 89, 24, 25, 114, 45, 29, 24, 89, 24, 50, + 24, 24, 24, 24, 89, 24, 24, 24, 25, 114, 115, 23, 24, 24, 24, 24, + 28, 29, 90, 24, 89, 24, 24, 28, 47, 114, 111, 23, 24, 24, 24, 24, + 50, 51, 24, 24, 24, 24, 24, 50, 2, 2, 2, 51, 28, 29, 90, 28, + 29, 24, 89, 90, 28, 46, 29, 28, 29, 24, 24, 24, 50, 51, 24, 50, + 45, 46, 29, 24, 50, 2, 51, 50, 32, 29, 24, 24, 90, 24, 24, 24, + 2, 2, 32, 29, 24, 24, 24, 24, 25, 23, 24, 90, 24, 24, 24, 90, + 90, 24, 25, 23, 89, 24, 89, 24, 50, 51, 90, 24, 24, 24, 24, 24, + 24, 24, 50, 51, 24, 24, 90, 24, 28, 29, 24, 24, 24, 24, 24, 24, + 24, 90, 89, 90, 24, 24, 90, 24, 50, 51, 90, 90, 24, 24, 24, 24, + 24, 24, 24, 89, 90, 90, 24, 24, 24, 28, 46, 46, 46, 46, 46, 29, + 24, 24, 24, 24, 24, 28, 46, 29, 24, 50, 2, 2, 2, 2, 2, 51, + 24, 90, 24, 28, 29, 50, 3, 23, 24, 89, 90, 28, 29, 24, 24, 24], + "height":16, + "width":16, + "x":80, + "y":16 + }, + { + "data":[51, 50, 3, 23, 24, 50, 2, 51, 24, 28, 47, 23, 24, 24, 25, 23, + 29, 24, 25, 23, 24, 89, 90, 90, 89, 25, 115, 23, 24, 24, 50, 51, + 23, 24, 25, 23, 90, 24, 24, 28, 29, 50, 2, 32, 29, 89, 24, 24, + 51, 24, 50, 51, 24, 24, 24, 25, 45, 29, 90, 50, 51, 24, 24, 24, + 24, 24, 89, 24, 24, 28, 46, 10, 2, 32, 29, 24, 24, 89, 28, 46, + 24, 24, 24, 28, 29, 25, 115, 45, 46, 10, 51, 24, 24, 24, 50, 2, + 29, 24, 24, 25, 23, 50, 2, 2, 2, 32, 46, 29, 28, 29, 24, 24, + 32, 29, 24, 50, 51, 90, 90, 24, 24, 25, 1, 32, 47, 23, 24, 24, + 50, 51, 24, 24, 24, 24, 89, 24, 24, 50, 32, 10, 3, 23, 89, 24, + 24, 24, 24, 90, 24, 24, 24, 28, 46, 46, 10, 51, 25, 45, 29, 90, + 28, 29, 28, 29, 24, 24, 24, 50, 3, 114, 45, 46, 10, 2, 32, 46, + 50, 51, 50, 51, 24, 90, 24, 24, 25, 111, 111, 112, 45, 46, 10, 2, + 24, 24, 90, 24, 28, 46, 46, 29, 50, 2, 2, 2, 3, 1, 51, 24, + 24, 24, 24, 28, 10, 2, 2, 32, 29, 90, 24, 24, 25, 23, 24, 24, + 24, 28, 29, 50, 32, 46, 29, 50, 51, 24, 90, 24, 50, 51, 28, 29, + 28, 10, 51, 24, 25, 1, 32, 29, 24, 24, 90, 24, 24, 24, 50, 51], + "height":16, + "width":16, + "x":96, + "y":16 + }, + { + "data":[24, 89, 25, 23, 24, 28, 47, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 50, 32, 29, 50, 2, 32, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 28, 29, 50, 51, 24, 24, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 10, 51, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 51, 24, 90, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 24, 24, 24, 28, 46, 46, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 28, 47, 1, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 50, 2, 51, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 24, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 29, 28, 29, 28, 29, 24, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 32, 10, 51, 25, 23, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 10, 51, 24, 25, 23, 25, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 45, 29, 24, 25, 23, 25, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 2, 51, 24, 25, 23, 25, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 89, 24, 24, 50, 51, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 89, 24, 89, 24, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":16 + }, + + { + "data":[10, 32, 29, 28, 46, 10, 32, 29, 24, 24, 25, 111, 1, 51, 24, 25, + 23, 25, 23, 50, 2, 51, 50, 32, 46, 29, 50, 3, 23, 24, 24, 25, + 32, 10, 32, 29, 24, 24, 24, 50, 3, 23, 28, 10, 32, 29, 24, 50, + 10, 51, 50, 51, 24, 28, 46, 29, 25, 23, 25, 23, 50, 51, 24, 24, + 51, 24, 24, 24, 89, 25, 111, 23, 25, 23, 50, 32, 29, 24, 24, 24, + 24, 90, 24, 24, 24, 25, 111, 23, 50, 32, 46, 10, 51, 90, 89, 24, + 24, 24, 28, 29, 24, 50, 2, 51, 24, 50, 2, 32, 29, 24, 24, 28, + 24, 24, 50, 51, 24, 89, 89, 24, 24, 24, 24, 25, 23, 89, 28, 10, + 24, 28, 29, 24, 24, 90, 24, 24, 90, 28, 29, 50, 32, 29, 25, 23, + 24, 25, 23, 24, 89, 90, 24, 24, 24, 50, 51, 28, 10, 51, 50, 51, + 24, 50, 32, 46, 29, 90, 28, 29, 24, 24, 24, 25, 23, 24, 24, 90, + 24, 90, 50, 2, 32, 29, 50, 32, 29, 24, 24, 50, 51, 28, 46, 29, + 24, 24, 28, 46, 10, 51, 24, 25, 23, 24, 24, 24, 24, 50, 2, 51, + 24, 24, 25, 1, 51, 24, 89, 50, 32, 29, 24, 24, 24, 24, 24, 90, + 46, 46, 47, 23, 89, 24, 24, 90, 50, 51, 24, 24, 24, 89, 24, 24, + 115, 111, 1, 51, 24, 24, 24, 90, 24, 28, 29, 24, 90, 24, 24, 24], + "height":16, + "width":16, + "x":0, + "y":32 + }, + { + "data":[23, 24, 90, 28, 46, 10, 51, 24, 25, 23, 24, 24, 24, 28, 46, 46, + 23, 24, 24, 25, 115, 23, 24, 90, 25, 23, 28, 46, 46, 10, 2, 2, + 51, 24, 89, 50, 2, 51, 24, 89, 50, 32, 10, 2, 2, 32, 29, 24, + 28, 46, 29, 24, 24, 24, 24, 24, 24, 50, 51, 24, 28, 10, 32, 46, + 25, 1, 51, 24, 24, 24, 89, 24, 24, 24, 24, 24, 25, 23, 25, 114, + 50, 32, 29, 28, 46, 46, 29, 24, 24, 24, 24, 24, 50, 32, 10, 2, + 46, 47, 23, 25, 1, 2, 51, 24, 24, 24, 28, 29, 24, 25, 45, 46, + 2, 2, 51, 50, 51, 24, 24, 24, 24, 24, 50, 51, 28, 10, 2, 2, + 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 28, 46, 10, 51, 24, 24, + 89, 24, 24, 24, 28, 46, 29, 24, 24, 24, 50, 2, 51, 24, 28, 29, + 90, 24, 24, 90, 25, 1, 51, 24, 24, 89, 28, 29, 90, 24, 25, 23, + 89, 28, 29, 24, 25, 23, 24, 24, 24, 28, 10, 32, 29, 24, 25, 23, + 24, 25, 23, 24, 25, 23, 24, 90, 24, 50, 32, 47, 23, 24, 50, 32, + 24, 50, 32, 46, 47, 23, 24, 24, 90, 24, 25, 1, 51, 24, 28, 10, + 24, 28, 10, 2, 3, 23, 90, 28, 29, 24, 50, 51, 28, 46, 10, 51, + 24, 50, 51, 24, 50, 32, 29, 50, 51, 28, 29, 24, 25, 114, 23, 89], + "height":16, + "width":16, + "x":16, + "y":32 + }, + { + "data":[46, 29, 24, 24, 89, 90, 24, 24, 24, 28, 29, 89, 24, 24, 24, 50, + 2, 32, 46, 29, 24, 24, 24, 24, 24, 50, 32, 29, 24, 89, 24, 24, + 24, 50, 2, 51, 24, 24, 24, 89, 24, 90, 25, 23, 24, 90, 24, 24, + 29, 24, 24, 24, 24, 24, 24, 90, 24, 24, 25, 23, 90, 24, 89, 24, + 23, 24, 24, 24, 24, 89, 89, 24, 24, 24, 50, 32, 29, 24, 24, 24, + 32, 29, 24, 90, 24, 24, 89, 24, 28, 29, 89, 50, 32, 29, 24, 24, + 47, 23, 89, 24, 24, 24, 24, 24, 50, 32, 46, 29, 50, 32, 29, 24, + 2, 51, 24, 89, 24, 24, 24, 24, 24, 25, 1, 51, 24, 25, 23, 24, + 89, 24, 24, 24, 24, 90, 24, 28, 46, 10, 51, 24, 24, 25, 23, 24, + 24, 24, 28, 29, 24, 24, 24, 50, 2, 51, 24, 24, 24, 50, 51, 89, + 24, 24, 25, 23, 24, 89, 24, 24, 24, 89, 89, 24, 24, 24, 24, 24, + 90, 28, 47, 23, 89, 24, 24, 24, 28, 46, 29, 89, 24, 24, 24, 89, + 29, 50, 2, 51, 24, 24, 24, 24, 50, 2, 51, 24, 24, 24, 24, 24, + 32, 46, 29, 24, 28, 29, 24, 24, 28, 29, 24, 24, 24, 24, 89, 24, + 50, 2, 51, 89, 25, 45, 46, 46, 10, 51, 24, 24, 24, 24, 24, 28, + 24, 24, 24, 24, 50, 2, 3, 1, 51, 90, 24, 90, 24, 89, 28, 10], + "height":16, + "width":16, + "x":32, + "y":32 + }, + { + "data":[32, 29, 24, 24, 25, 23, 50, 51, 24, 89, 24, 24, 28, 46, 29, 24, + 50, 51, 24, 24, 50, 51, 90, 24, 24, 24, 24, 24, 50, 2, 32, 29, + 24, 24, 24, 24, 24, 89, 24, 24, 89, 24, 24, 24, 24, 24, 50, 51, + 24, 24, 24, 28, 29, 28, 29, 90, 24, 24, 24, 24, 90, 24, 89, 24, + 24, 28, 29, 50, 32, 10, 32, 46, 29, 24, 24, 89, 24, 24, 24, 24, + 24, 50, 51, 24, 50, 51, 50, 2, 51, 89, 24, 24, 24, 24, 24, 24, + 28, 29, 24, 89, 24, 24, 24, 24, 24, 24, 24, 24, 24, 89, 24, 24, + 50, 32, 46, 46, 46, 29, 28, 29, 24, 24, 24, 24, 28, 29, 24, 28, + 24, 50, 2, 2, 2, 51, 50, 51, 24, 24, 28, 46, 10, 51, 24, 50, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 114, 23, 89, 90, 89, + 24, 24, 24, 24, 28, 46, 29, 24, 24, 24, 25, 1, 51, 28, 29, 24, + 24, 24, 28, 29, 25, 111, 23, 24, 24, 90, 50, 51, 24, 25, 23, 24, + 24, 89, 25, 23, 25, 111, 23, 24, 24, 24, 28, 29, 89, 25, 23, 24, + 24, 90, 50, 51, 50, 3, 45, 29, 24, 89, 50, 32, 29, 25, 23, 28, + 29, 24, 90, 24, 24, 50, 3, 45, 29, 24, 90, 50, 51, 50, 51, 50, + 32, 29, 24, 24, 28, 46, 10, 3, 23, 24, 24, 24, 24, 24, 24, 24], + "height":16, + "width":16, + "x":48, + "y":32 + }, + { + "data":[24, 24, 90, 24, 50, 51, 24, 50, 2, 32, 29, 50, 51, 24, 28, 46, + 24, 24, 24, 28, 46, 29, 90, 89, 24, 50, 32, 29, 24, 24, 25, 1, + 24, 24, 89, 50, 3, 23, 24, 24, 24, 24, 25, 23, 28, 29, 50, 51, + 24, 28, 46, 29, 50, 51, 24, 24, 24, 24, 50, 51, 25, 23, 24, 24, + 28, 10, 2, 32, 29, 24, 24, 90, 24, 24, 24, 24, 25, 23, 28, 29, + 25, 23, 90, 50, 51, 90, 24, 24, 24, 89, 28, 46, 47, 23, 50, 32, + 25, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 111, 114, 45, 29, 25, + 10, 51, 24, 90, 24, 24, 24, 28, 46, 29, 50, 3, 1, 2, 51, 50, + 51, 24, 24, 24, 90, 24, 24, 50, 3, 23, 24, 50, 51, 24, 24, 24, + 89, 24, 24, 24, 24, 28, 29, 24, 50, 51, 28, 29, 24, 24, 24, 24, + 24, 24, 24, 28, 29, 50, 51, 24, 24, 24, 50, 32, 29, 24, 24, 24, + 90, 24, 24, 50, 51, 24, 24, 24, 24, 90, 24, 25, 23, 24, 24, 24, + 24, 24, 89, 24, 89, 24, 24, 24, 24, 24, 28, 10, 51, 24, 28, 29, + 29, 24, 24, 24, 24, 24, 28, 29, 24, 24, 25, 45, 46, 29, 50, 32, + 32, 29, 24, 28, 46, 29, 50, 51, 28, 29, 50, 2, 2, 51, 24, 25, + 50, 32, 29, 25, 1, 32, 29, 24, 25, 23, 28, 29, 28, 29, 24, 50], + "height":16, + "width":16, + "x":64, + "y":32 + }, + { + "data":[29, 24, 89, 25, 45, 29, 25, 23, 24, 24, 24, 25, 23, 24, 24, 24, + 32, 29, 24, 25, 111, 23, 50, 51, 89, 24, 89, 50, 51, 24, 28, 29, + 50, 32, 46, 10, 2, 51, 89, 90, 24, 24, 24, 24, 24, 24, 50, 51, + 90, 50, 2, 51, 24, 24, 24, 24, 24, 24, 24, 89, 24, 28, 46, 46, + 24, 24, 24, 24, 89, 24, 24, 90, 24, 28, 29, 28, 29, 25, 111, 115, + 29, 24, 90, 24, 24, 24, 90, 89, 24, 50, 32, 10, 51, 25, 1, 2, + 23, 24, 24, 24, 24, 24, 24, 24, 24, 28, 10, 32, 46, 10, 51, 24, + 51, 24, 28, 29, 89, 24, 24, 24, 90, 25, 23, 50, 2, 51, 24, 24, + 24, 24, 50, 32, 29, 24, 24, 24, 24, 25, 45, 29, 28, 29, 90, 24, + 24, 24, 24, 25, 23, 24, 28, 46, 46, 47, 1, 51, 50, 51, 24, 89, + 24, 24, 89, 25, 45, 29, 25, 115, 115, 115, 23, 28, 46, 29, 24, 24, + 24, 24, 24, 25, 1, 51, 50, 2, 2, 2, 32, 10, 2, 32, 46, 46, + 28, 46, 29, 25, 23, 24, 28, 46, 29, 24, 25, 45, 29, 50, 2, 3, + 10, 2, 51, 50, 51, 24, 50, 2, 32, 46, 47, 111, 23, 24, 89, 25, + 23, 24, 89, 24, 24, 24, 24, 24, 50, 2, 3, 114, 23, 24, 89, 25, + 51, 24, 24, 24, 28, 29, 24, 28, 29, 24, 50, 2, 51, 24, 90, 50], + "height":16, + "width":16, + "x":80, + "y":32 + }, + { + "data":[25, 23, 24, 24, 50, 51, 50, 51, 24, 24, 24, 89, 24, 24, 24, 24, + 25, 45, 29, 24, 24, 24, 24, 24, 89, 24, 24, 24, 24, 24, 24, 24, + 50, 3, 23, 24, 24, 24, 28, 29, 28, 46, 29, 90, 24, 24, 24, 24, + 29, 25, 23, 24, 24, 24, 50, 51, 50, 2, 51, 24, 24, 24, 24, 90, + 23, 50, 32, 46, 29, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, + 51, 24, 50, 3, 23, 24, 24, 25, 23, 28, 29, 24, 24, 24, 24, 89, + 28, 29, 28, 10, 51, 24, 24, 50, 51, 50, 51, 24, 24, 24, 24, 24, + 50, 32, 47, 45, 29, 24, 24, 24, 24, 28, 29, 24, 28, 29, 89, 24, + 24, 50, 2, 3, 23, 24, 90, 90, 24, 25, 23, 24, 50, 51, 24, 24, + 24, 24, 24, 50, 51, 24, 24, 24, 24, 50, 51, 24, 28, 29, 24, 24, + 24, 24, 24, 24, 89, 24, 24, 24, 28, 46, 29, 89, 50, 51, 24, 24, + 46, 46, 46, 29, 28, 29, 24, 24, 50, 2, 32, 29, 90, 28, 46, 29, + 1, 2, 2, 32, 10, 32, 29, 89, 89, 24, 50, 51, 24, 25, 115, 23, + 23, 24, 24, 50, 51, 25, 23, 28, 46, 29, 24, 24, 24, 50, 2, 32, + 45, 29, 24, 24, 24, 50, 32, 10, 2, 51, 24, 24, 24, 24, 28, 47, + 2, 51, 24, 28, 46, 46, 47, 45, 46, 29, 24, 24, 28, 46, 10, 2], + "height":16, + "width":16, + "x":96, + "y":32 + }, + { + "data":[24, 90, 24, 89, 24, 28, 29, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 25, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 89, 25, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 25, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 89, 24, 24, 25, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 28, 46, 29, 50, 51, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 50, 2, 51, 90, 89, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 28, 29, 28, 29, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 50, 32, 47, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 24, 50, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 28, 29, 90, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 50, 32, 47, 23, 90, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 28, 10, 2, 51, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 24, 50, 32, 29, 24, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 28, 29, 50, 51, 24, 28, 10, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 50, 51, 24, 24, 24, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":32 + }, + { + "data":[3, 114, 23, 24, 28, 29, 24, 90, 24, 50, 51, 24, 24, 24, 24, 24, + 50, 2, 32, 29, 25, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 50, 32, 10, 32, 29, 24, 89, 90, 24, 89, 28, 46, 29, 24, + 46, 29, 89, 50, 51, 50, 51, 24, 24, 28, 46, 46, 10, 2, 32, 29, + 2, 32, 29, 24, 24, 24, 90, 28, 46, 47, 1, 3, 23, 24, 50, 32, + 24, 50, 51, 24, 24, 24, 24, 25, 111, 111, 23, 25, 23, 24, 28, 10, + 24, 24, 28, 29, 89, 24, 24, 25, 1, 3, 23, 25, 45, 29, 50, 51, + 24, 28, 10, 51, 24, 24, 24, 50, 32, 10, 51, 25, 111, 23, 24, 24, + 24, 25, 23, 24, 24, 24, 24, 24, 50, 51, 24, 50, 2, 32, 46, 29, + 29, 25, 23, 24, 24, 24, 28, 29, 28, 29, 24, 24, 24, 50, 2, 32, + 23, 50, 32, 29, 24, 24, 50, 51, 25, 23, 24, 24, 24, 24, 28, 10, + 23, 24, 50, 32, 46, 29, 24, 24, 50, 51, 24, 28, 46, 29, 25, 23, + 32, 46, 46, 10, 2, 51, 24, 24, 28, 46, 29, 50, 3, 45, 47, 45, + 50, 2, 2, 32, 46, 29, 24, 89, 25, 111, 23, 24, 50, 2, 2, 2, + 24, 24, 24, 50, 2, 51, 90, 28, 47, 114, 23, 24, 24, 24, 24, 24, + 24, 89, 24, 24, 89, 28, 29, 50, 2, 2, 32, 29, 24, 24, 24, 24], + "height":16, + "width":16, + "x":0, + "y":48 + }, + { + "data":[24, 28, 46, 29, 24, 25, 23, 24, 90, 25, 23, 24, 50, 2, 51, 24, + 24, 25, 111, 23, 28, 47, 23, 24, 24, 25, 45, 29, 24, 24, 28, 46, + 90, 25, 111, 23, 25, 1, 51, 24, 90, 50, 2, 51, 90, 24, 50, 2, + 90, 25, 114, 23, 25, 23, 24, 28, 46, 29, 24, 89, 24, 24, 28, 46, + 46, 10, 2, 51, 25, 23, 28, 10, 2, 51, 89, 24, 24, 24, 25, 111, + 2, 32, 29, 24, 25, 23, 25, 23, 28, 29, 24, 24, 24, 24, 25, 115, + 24, 50, 51, 24, 50, 51, 25, 23, 25, 23, 24, 24, 24, 89, 25, 1, + 24, 28, 46, 29, 24, 24, 50, 51, 25, 23, 89, 28, 46, 46, 47, 23, + 24, 50, 2, 51, 24, 24, 24, 24, 50, 51, 89, 50, 3, 115, 111, 23, + 29, 24, 24, 24, 24, 90, 24, 24, 24, 89, 24, 24, 25, 1, 2, 51, + 32, 46, 46, 46, 46, 29, 24, 24, 24, 24, 24, 24, 50, 51, 89, 89, + 50, 2, 2, 2, 2, 51, 24, 90, 24, 24, 24, 24, 24, 28, 46, 46, + 46, 46, 29, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 50, 2, 2, + 2, 2, 51, 24, 24, 25, 23, 89, 24, 24, 24, 24, 28, 29, 24, 28, + 24, 24, 24, 28, 46, 10, 51, 24, 24, 89, 90, 24, 50, 32, 46, 10, + 24, 24, 24, 50, 2, 51, 24, 24, 24, 24, 24, 90, 24, 25, 1, 51], + "height":16, + "width":16, + "x":16, + "y":48 + }, + { + "data":[90, 24, 24, 24, 90, 24, 50, 51, 24, 24, 24, 24, 24, 90, 50, 51, + 46, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 90, 24, + 2, 51, 24, 24, 24, 24, 90, 24, 28, 29, 24, 24, 24, 24, 24, 24, + 29, 24, 28, 29, 90, 24, 24, 24, 25, 23, 24, 24, 24, 90, 24, 90, + 23, 24, 50, 32, 46, 29, 24, 28, 10, 51, 24, 24, 24, 89, 24, 24, + 23, 28, 29, 50, 3, 23, 24, 50, 32, 29, 90, 89, 24, 90, 24, 24, + 32, 10, 51, 90, 50, 32, 46, 46, 10, 51, 24, 24, 24, 90, 24, 24, + 25, 23, 24, 24, 24, 50, 2, 3, 23, 89, 24, 24, 24, 24, 24, 24, + 50, 32, 29, 24, 24, 24, 24, 50, 51, 90, 24, 24, 24, 24, 24, 24, + 24, 50, 32, 46, 29, 24, 89, 24, 24, 24, 24, 24, 24, 89, 24, 28, + 28, 29, 25, 1, 32, 29, 24, 28, 29, 24, 24, 28, 29, 24, 24, 50, + 10, 51, 50, 32, 47, 45, 29, 25, 45, 29, 24, 25, 23, 24, 24, 24, + 51, 24, 24, 50, 2, 2, 51, 50, 2, 32, 46, 10, 51, 24, 24, 24, + 46, 46, 46, 46, 46, 29, 90, 24, 28, 10, 3, 45, 29, 24, 89, 24, + 3, 115, 114, 111, 1, 51, 24, 24, 25, 23, 25, 1, 32, 29, 90, 24, + 25, 1, 2, 2, 32, 29, 24, 24, 50, 51, 50, 32, 10, 51, 24, 90], + "height":16, + "width":16, + "x":32, + "y":48 + }, + { + "data":[25, 23, 89, 24, 50, 2, 51, 50, 32, 29, 24, 89, 24, 90, 24, 90, + 50, 32, 29, 24, 24, 24, 24, 24, 50, 51, 24, 90, 89, 24, 24, 28, + 24, 25, 23, 24, 90, 28, 46, 46, 46, 46, 29, 24, 24, 24, 24, 50, + 28, 10, 51, 24, 24, 25, 1, 3, 1, 2, 51, 24, 24, 24, 24, 28, + 50, 51, 90, 90, 90, 50, 51, 25, 45, 29, 24, 24, 24, 24, 28, 10, + 24, 28, 29, 24, 24, 24, 24, 25, 1, 51, 24, 24, 24, 24, 50, 51, + 24, 50, 51, 24, 24, 24, 24, 50, 32, 29, 24, 24, 28, 29, 24, 24, + 24, 24, 24, 24, 24, 90, 24, 24, 25, 23, 24, 89, 50, 51, 24, 90, + 90, 24, 28, 46, 46, 29, 24, 24, 50, 51, 28, 29, 24, 24, 24, 24, + 29, 90, 50, 3, 114, 45, 29, 24, 24, 24, 50, 32, 29, 24, 24, 24, + 51, 24, 24, 50, 3, 114, 23, 24, 24, 24, 24, 25, 23, 24, 28, 46, + 24, 24, 24, 24, 50, 2, 32, 29, 24, 24, 24, 50, 32, 46, 10, 2, + 24, 24, 24, 24, 24, 24, 25, 23, 24, 24, 24, 90, 50, 2, 51, 24, + 24, 24, 24, 24, 24, 24, 50, 51, 89, 24, 24, 24, 89, 24, 24, 24, + 24, 24, 24, 24, 28, 46, 29, 24, 24, 28, 29, 24, 24, 24, 24, 24, + 24, 89, 24, 24, 50, 2, 51, 24, 89, 25, 23, 24, 24, 24, 24, 89], + "height":16, + "width":16, + "x":48, + "y":48 + }, + { + "data":[28, 47, 23, 25, 23, 50, 32, 29, 50, 32, 10, 51, 50, 51, 24, 24, + 47, 111, 23, 50, 51, 24, 25, 45, 46, 10, 32, 29, 24, 24, 24, 24, + 2, 2, 51, 24, 24, 24, 50, 2, 2, 32, 10, 51, 24, 90, 24, 24, + 29, 89, 24, 24, 24, 24, 24, 24, 89, 50, 51, 24, 24, 24, 24, 24, + 32, 46, 29, 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 28, 29, 24, + 50, 3, 45, 29, 24, 24, 24, 90, 89, 24, 28, 46, 46, 10, 32, 29, + 24, 25, 114, 23, 24, 24, 89, 24, 24, 24, 50, 2, 2, 51, 50, 51, + 24, 50, 2, 51, 24, 24, 28, 29, 24, 24, 28, 46, 29, 90, 24, 24, + 28, 29, 24, 24, 24, 90, 50, 51, 24, 24, 25, 1, 32, 29, 90, 24, + 50, 32, 46, 46, 29, 24, 24, 28, 29, 24, 50, 51, 25, 23, 24, 28, + 46, 47, 1, 2, 51, 24, 24, 50, 51, 28, 46, 29, 25, 45, 29, 50, + 3, 1, 51, 28, 29, 24, 24, 24, 24, 25, 114, 23, 50, 3, 45, 29, + 50, 51, 89, 25, 45, 29, 28, 29, 28, 10, 2, 32, 46, 10, 2, 51, + 24, 24, 24, 50, 2, 51, 50, 51, 25, 45, 29, 50, 2, 32, 29, 89, + 24, 24, 28, 29, 24, 24, 24, 24, 25, 111, 23, 24, 24, 50, 51, 24, + 24, 24, 50, 51, 24, 24, 24, 24, 50, 2, 51, 90, 24, 24, 24, 89], + "height":16, + "width":16, + "x":64, + "y":48 + }, + { + "data":[24, 24, 24, 24, 50, 32, 29, 50, 32, 29, 24, 90, 24, 24, 24, 24, + 24, 24, 24, 24, 28, 10, 32, 46, 47, 23, 89, 24, 24, 24, 24, 24, + 24, 24, 28, 46, 10, 51, 50, 2, 2, 51, 24, 89, 90, 24, 24, 24, + 24, 89, 50, 3, 45, 29, 24, 28, 46, 29, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 50, 2, 51, 24, 50, 2, 51, 24, 24, 24, 24, 24, 24, + 28, 46, 46, 29, 24, 24, 28, 29, 24, 24, 24, 24, 28, 29, 24, 24, + 25, 115, 1, 51, 24, 24, 50, 32, 29, 24, 24, 24, 50, 51, 90, 90, + 25, 114, 23, 90, 24, 24, 24, 50, 51, 28, 46, 46, 46, 29, 24, 24, + 50, 2, 51, 24, 24, 28, 29, 24, 24, 50, 3, 114, 111, 45, 29, 24, + 29, 24, 24, 24, 24, 50, 32, 46, 29, 24, 50, 2, 2, 2, 51, 24, + 51, 24, 28, 29, 24, 24, 50, 2, 51, 89, 24, 24, 89, 28, 46, 29, + 24, 89, 50, 32, 29, 89, 28, 29, 24, 28, 29, 90, 24, 25, 111, 23, + 24, 24, 24, 50, 51, 24, 50, 51, 28, 10, 32, 29, 24, 50, 2, 32, + 24, 28, 29, 24, 24, 28, 29, 24, 25, 23, 50, 51, 24, 90, 24, 50, + 89, 50, 51, 24, 24, 25, 23, 24, 25, 45, 29, 24, 28, 46, 29, 89, + 24, 24, 24, 24, 28, 47, 23, 89, 25, 1, 51, 90, 25, 1, 32, 29], + "height":16, + "width":16, + "x":80, + "y":48 + }, + { + "data":[90, 24, 28, 10, 2, 2, 2, 3, 114, 23, 28, 29, 50, 2, 51, 24, + 89, 24, 50, 32, 29, 24, 24, 50, 2, 51, 50, 51, 24, 24, 24, 24, + 24, 24, 24, 50, 51, 24, 24, 28, 29, 24, 24, 24, 28, 29, 24, 24, + 24, 24, 24, 24, 90, 24, 24, 50, 51, 24, 90, 24, 50, 51, 28, 46, + 89, 89, 24, 24, 24, 24, 24, 89, 24, 24, 24, 24, 24, 24, 50, 3, + 90, 24, 24, 24, 89, 24, 89, 28, 46, 46, 46, 29, 24, 24, 90, 50, + 24, 24, 90, 24, 24, 24, 24, 50, 2, 2, 3, 45, 29, 24, 24, 24, + 24, 89, 24, 24, 90, 90, 24, 24, 24, 24, 50, 2, 51, 24, 24, 24, + 24, 28, 46, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 50, 2, 32, 29, 24, 24, 90, 24, 90, 24, 28, 46, 29, 24, 24, + 24, 24, 24, 50, 51, 24, 24, 24, 24, 24, 24, 50, 2, 51, 24, 28, + 24, 24, 24, 24, 24, 24, 24, 89, 90, 24, 28, 46, 46, 29, 90, 50, + 29, 90, 24, 24, 24, 28, 29, 24, 24, 24, 25, 1, 2, 32, 46, 46, + 51, 24, 24, 89, 24, 50, 32, 29, 24, 24, 50, 32, 46, 10, 2, 2, + 28, 46, 46, 29, 24, 24, 50, 32, 46, 46, 29, 25, 114, 23, 28, 29, + 50, 2, 2, 51, 28, 46, 46, 47, 111, 1, 32, 10, 3, 23, 50, 32], + "height":16, + "width":16, + "x":96, + "y":48 + }, + { + "data":[24, 24, 28, 29, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 24, 24, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 25, 23, 28, 46, 10, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 28, 10, 51, 50, 2, 51, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 50, 51, 24, 90, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 24, 24, 24, 24, 90, 89, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 28, 29, 24, 24, 24, 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 10, 32, 46, 29, 24, 24, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 23, 50, 3, 45, 46, 29, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 45, 46, 10, 3, 114, 23, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 2, 2, 51, 50, 2, 51, 89, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 29, 89, 24, 28, 46, 46, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 32, 46, 29, 50, 2, 2, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 50, 2, 32, 29, 24, 90, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 28, 29, 24, 50, 32, 46, 29, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 32, 46, 46, 10, 2, 32, 10, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":48 + }, + + { + "data":[24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 50, 32, 46, 29, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 24, 25, 111, 23, 90, 24, + 24, 89, 24, 89, 28, 46, 46, 46, 29, 28, 46, 10, 3, 45, 29, 90, + 24, 24, 24, 90, 50, 2, 2, 3, 45, 47, 1, 51, 50, 2, 51, 24, + 24, 89, 28, 29, 24, 24, 90, 50, 2, 2, 51, 28, 46, 29, 24, 90, + 24, 24, 25, 23, 24, 90, 24, 24, 28, 29, 24, 25, 111, 23, 24, 24, + 24, 90, 25, 23, 89, 24, 24, 24, 50, 51, 24, 25, 111, 45, 29, 24, + 28, 29, 25, 23, 89, 28, 46, 46, 46, 46, 29, 50, 2, 2, 32, 29, + 10, 51, 50, 51, 24, 50, 2, 2, 2, 3, 23, 24, 28, 29, 50, 51, + 23, 24, 24, 24, 24, 28, 29, 24, 24, 50, 32, 46, 47, 23, 24, 90, + 51, 28, 29, 24, 24, 50, 32, 46, 46, 46, 10, 3, 114, 23, 90, 89, + 24, 25, 23, 24, 24, 24, 25, 1, 2, 3, 23, 25, 1, 32, 46, 46, + 24, 25, 45, 29, 24, 24, 25, 45, 29, 50, 51, 25, 23, 50, 3, 1, + 24, 50, 2, 51, 24, 24, 25, 1, 51, 28, 29, 50, 51, 28, 47, 23, + 24, 24, 24, 24, 89, 89, 25, 23, 28, 10, 51, 28, 29, 50, 3, 45, + 29, 24, 89, 24, 24, 28, 47, 23, 25, 23, 24, 50, 32, 29, 50, 3], + "height":16, + "width":16, + "x":0, + "y":64 + }, + { + "data":[24, 28, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 89, 50, 51, 89, + 24, 50, 32, 46, 46, 29, 28, 29, 24, 24, 24, 89, 24, 24, 24, 24, + 24, 24, 25, 111, 111, 45, 10, 32, 29, 28, 29, 24, 24, 24, 24, 24, + 24, 24, 50, 2, 2, 2, 32, 10, 32, 10, 32, 46, 29, 89, 90, 24, + 24, 24, 24, 24, 24, 24, 25, 23, 50, 32, 10, 2, 51, 24, 24, 24, + 24, 24, 24, 90, 24, 24, 25, 23, 24, 25, 45, 46, 46, 46, 46, 29, + 24, 24, 24, 24, 24, 24, 50, 51, 28, 10, 2, 2, 3, 111, 1, 32, + 90, 24, 24, 89, 24, 24, 90, 24, 50, 51, 24, 24, 50, 3, 23, 25, + 28, 29, 24, 24, 24, 24, 24, 24, 24, 24, 28, 46, 29, 50, 32, 47, + 50, 51, 24, 24, 28, 29, 24, 24, 24, 24, 25, 1, 32, 29, 25, 115, + 24, 24, 24, 24, 50, 51, 24, 24, 24, 24, 25, 45, 10, 32, 10, 2, + 29, 24, 24, 24, 89, 28, 29, 24, 24, 24, 50, 3, 23, 25, 23, 24, + 51, 24, 24, 24, 28, 47, 23, 24, 24, 24, 24, 50, 51, 25, 23, 24, + 28, 29, 89, 24, 50, 2, 51, 24, 24, 24, 28, 46, 29, 50, 32, 29, + 47, 23, 89, 28, 29, 90, 89, 24, 89, 24, 50, 3, 23, 24, 25, 23, + 114, 23, 24, 50, 32, 29, 90, 24, 24, 24, 24, 50, 51, 28, 10, 51], + "height":16, + "width":16, + "x":16, + "y":64 + }, + { + "data":[25, 45, 29, 24, 50, 51, 24, 24, 24, 24, 24, 50, 51, 24, 24, 28, + 50, 2, 51, 24, 28, 46, 46, 29, 28, 46, 46, 29, 24, 89, 24, 50, + 89, 24, 24, 24, 25, 111, 112, 23, 25, 1, 2, 51, 24, 24, 24, 24, + 24, 24, 89, 28, 10, 2, 2, 32, 10, 32, 46, 29, 24, 89, 24, 24, + 24, 89, 24, 25, 23, 90, 89, 50, 32, 47, 114, 23, 89, 89, 24, 89, + 24, 90, 24, 50, 51, 24, 24, 24, 50, 2, 2, 32, 29, 89, 90, 28, + 29, 28, 46, 46, 29, 24, 24, 24, 28, 29, 90, 50, 32, 46, 46, 47, + 45, 10, 3, 114, 23, 89, 24, 24, 25, 23, 24, 24, 25, 115, 1, 2, + 114, 23, 50, 2, 32, 29, 24, 24, 50, 32, 29, 28, 47, 1, 51, 24, + 1, 51, 24, 24, 25, 23, 24, 24, 24, 25, 23, 50, 2, 51, 28, 29, + 32, 46, 29, 24, 25, 23, 24, 24, 28, 47, 45, 29, 24, 28, 47, 23, + 50, 2, 51, 24, 25, 23, 28, 29, 50, 2, 2, 32, 29, 50, 3, 23, + 24, 24, 24, 28, 10, 51, 25, 23, 24, 24, 90, 50, 51, 24, 50, 51, + 28, 29, 24, 50, 32, 29, 25, 23, 24, 90, 24, 24, 24, 28, 29, 89, + 50, 51, 24, 24, 50, 51, 50, 51, 24, 24, 24, 24, 28, 47, 23, 24, + 24, 24, 24, 89, 24, 24, 89, 90, 24, 28, 29, 24, 50, 3, 23, 24], + "height":16, + "width":16, + "x":32, + "y":64 + }, + { + "data":[29, 24, 90, 24, 89, 90, 24, 24, 90, 50, 51, 24, 24, 24, 90, 24, + 32, 29, 24, 24, 28, 29, 24, 28, 46, 46, 46, 29, 89, 24, 24, 24, + 50, 51, 28, 29, 25, 23, 24, 50, 3, 111, 1, 51, 24, 24, 24, 24, + 90, 24, 50, 51, 50, 51, 24, 24, 50, 2, 51, 24, 24, 90, 24, 24, + 24, 90, 24, 89, 28, 29, 24, 24, 24, 28, 46, 29, 28, 29, 89, 24, + 46, 46, 46, 29, 50, 51, 24, 89, 24, 25, 111, 45, 10, 51, 24, 24, + 111, 1, 2, 32, 46, 46, 29, 24, 24, 50, 2, 2, 32, 29, 24, 24, + 2, 51, 24, 25, 111, 114, 45, 29, 89, 24, 28, 46, 10, 51, 24, 24, + 24, 24, 24, 25, 111, 1, 2, 51, 28, 46, 10, 2, 32, 46, 29, 24, + 24, 24, 24, 50, 2, 51, 24, 24, 50, 2, 32, 29, 50, 3, 23, 24, + 24, 90, 24, 89, 24, 24, 90, 24, 24, 24, 50, 51, 24, 25, 23, 24, + 24, 24, 28, 46, 29, 24, 90, 24, 24, 24, 24, 90, 24, 50, 32, 29, + 24, 28, 10, 3, 45, 29, 24, 24, 89, 24, 24, 24, 24, 28, 10, 32, + 90, 50, 51, 25, 111, 23, 24, 90, 24, 24, 24, 24, 28, 10, 51, 50, + 24, 24, 24, 25, 115, 23, 24, 24, 24, 24, 24, 24, 25, 23, 89, 24, + 24, 89, 28, 10, 2, 51, 24, 24, 24, 89, 24, 24, 25, 23, 24, 24], + "height":16, + "width":16, + "x":48, + "y":64 + }, + { + "data":[24, 24, 24, 24, 24, 24, 28, 46, 29, 24, 28, 46, 46, 46, 29, 24, + 24, 24, 24, 24, 28, 46, 10, 2, 51, 90, 50, 2, 2, 2, 51, 24, + 24, 24, 24, 24, 50, 2, 32, 29, 24, 24, 28, 29, 24, 24, 24, 24, + 90, 24, 24, 24, 90, 90, 50, 32, 29, 28, 10, 51, 24, 24, 24, 90, + 90, 24, 28, 46, 29, 24, 24, 50, 32, 10, 32, 29, 28, 46, 29, 24, + 24, 28, 47, 1, 51, 24, 24, 24, 50, 51, 25, 23, 25, 1, 51, 89, + 24, 50, 2, 51, 28, 29, 90, 24, 28, 29, 50, 32, 47, 23, 89, 28, + 24, 24, 24, 28, 47, 23, 24, 90, 50, 32, 29, 50, 2, 51, 24, 50, + 24, 24, 24, 25, 111, 23, 24, 90, 24, 50, 32, 29, 24, 24, 24, 24, + 28, 46, 29, 25, 1, 51, 24, 24, 28, 29, 50, 32, 46, 46, 29, 24, + 25, 115, 23, 50, 32, 46, 46, 46, 10, 32, 46, 10, 2, 2, 32, 46, + 25, 111, 23, 24, 25, 1, 2, 3, 45, 10, 2, 32, 29, 28, 10, 2, + 10, 2, 51, 90, 25, 23, 28, 10, 2, 32, 29, 25, 23, 50, 32, 46, + 32, 29, 24, 24, 25, 23, 25, 45, 29, 25, 23, 50, 32, 46, 10, 2, + 50, 51, 24, 24, 50, 51, 25, 1, 51, 50, 51, 90, 25, 1, 51, 24, + 24, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 90, 50, 32, 46, 29], + "height":16, + "width":16, + "x":64, + "y":64 + }, + { + "data":[24, 89, 24, 24, 50, 2, 32, 29, 50, 32, 29, 90, 25, 23, 50, 32, + 24, 24, 24, 89, 24, 28, 47, 23, 24, 25, 23, 24, 50, 51, 24, 25, + 28, 46, 29, 24, 24, 50, 3, 23, 24, 50, 32, 29, 24, 24, 90, 50, + 25, 1, 51, 24, 24, 24, 50, 32, 29, 24, 25, 23, 24, 24, 24, 24, + 50, 51, 24, 90, 89, 24, 24, 25, 23, 24, 50, 51, 24, 24, 24, 24, + 24, 28, 29, 24, 89, 24, 24, 25, 45, 46, 29, 24, 24, 89, 24, 24, + 46, 10, 51, 24, 90, 24, 24, 50, 2, 2, 32, 46, 29, 24, 24, 89, + 3, 23, 24, 90, 24, 24, 24, 24, 90, 24, 50, 2, 32, 46, 29, 90, + 25, 45, 29, 28, 29, 28, 46, 29, 24, 89, 24, 90, 50, 2, 51, 24, + 50, 2, 32, 47, 45, 47, 1, 51, 24, 24, 89, 24, 89, 24, 24, 24, + 46, 29, 25, 1, 2, 2, 51, 28, 29, 24, 24, 24, 28, 29, 24, 24, + 2, 51, 50, 51, 24, 28, 29, 50, 51, 90, 24, 24, 50, 51, 24, 24, + 46, 29, 24, 24, 24, 50, 32, 29, 24, 24, 24, 28, 29, 24, 24, 90, + 2, 32, 46, 46, 46, 46, 10, 51, 24, 24, 24, 25, 45, 29, 24, 89, + 24, 25, 1, 2, 2, 2, 51, 24, 24, 24, 24, 25, 111, 23, 28, 29, + 28, 47, 23, 24, 28, 29, 24, 28, 46, 46, 46, 10, 2, 51, 25, 45], + "height":16, + "width":16, + "x":80, + "y":64 + }, + { + "data":[29, 24, 24, 24, 50, 2, 2, 2, 2, 51, 25, 23, 50, 51, 24, 50, + 23, 24, 24, 89, 24, 24, 24, 24, 28, 29, 50, 32, 46, 46, 46, 29, + 32, 29, 24, 24, 24, 24, 28, 29, 25, 23, 24, 25, 112, 1, 2, 51, + 50, 51, 24, 24, 24, 24, 50, 51, 50, 51, 24, 50, 3, 23, 28, 29, + 24, 24, 24, 24, 28, 29, 90, 24, 24, 24, 24, 24, 25, 45, 10, 51, + 90, 24, 24, 24, 50, 51, 24, 24, 24, 24, 24, 90, 25, 115, 23, 28, + 89, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, 50, 2, 51, 25, + 24, 24, 24, 50, 32, 46, 29, 24, 24, 24, 24, 24, 24, 90, 90, 50, + 24, 24, 24, 24, 50, 3, 23, 24, 28, 29, 24, 24, 24, 28, 29, 24, + 90, 24, 90, 24, 24, 25, 23, 89, 50, 51, 24, 24, 28, 10, 51, 24, + 24, 24, 28, 29, 90, 50, 51, 24, 24, 24, 24, 24, 50, 32, 29, 28, + 24, 28, 10, 51, 24, 90, 89, 24, 24, 24, 24, 24, 24, 25, 23, 25, + 24, 50, 51, 89, 28, 29, 24, 28, 29, 89, 24, 24, 90, 50, 51, 50, + 24, 24, 89, 24, 50, 32, 46, 10, 32, 46, 46, 29, 24, 24, 90, 24, + 24, 24, 24, 24, 24, 50, 2, 51, 25, 1, 2, 32, 46, 46, 29, 89, + 29, 28, 29, 24, 24, 24, 89, 89, 50, 51, 24, 50, 3, 1, 32, 46], + "height":16, + "width":16, + "x":96, + "y":64 + }, + { + "data":[32, 10, 2, 2, 51, 24, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 45, 46, 29, 90, 90, 90, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 2, 2, 51, 28, 29, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 25, 23, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 28, 47, 23, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 46, 29, 24, 50, 3, 23, 24, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 32, 29, 24, 25, 23, 24, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 51, 50, 51, 24, 50, 32, 29, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 25, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 90, 24, 24, 90, 50, 51, 50, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 90, 24, 24, 24, 24, 28, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 24, 24, 24, 24, 24, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 46, 29, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 2, 51, 24, 24, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 90, 24, 28, 29, 89, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 29, 24, 24, 89, 25, 23, 28, 10, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":64 + }, + { + "data":[51, 24, 24, 24, 24, 50, 2, 32, 10, 32, 29, 24, 50, 32, 29, 25, + 24, 24, 24, 89, 89, 24, 24, 50, 51, 25, 23, 24, 24, 25, 23, 50, + 24, 24, 28, 29, 89, 24, 24, 24, 24, 25, 23, 89, 24, 50, 32, 46, + 29, 24, 50, 32, 46, 46, 29, 89, 90, 50, 32, 29, 90, 24, 25, 1, + 23, 28, 29, 25, 115, 114, 23, 24, 24, 24, 25, 23, 24, 24, 25, 23, + 32, 47, 45, 10, 2, 3, 23, 89, 24, 24, 50, 32, 29, 24, 50, 32, + 25, 115, 1, 51, 24, 25, 23, 24, 24, 24, 24, 50, 32, 46, 46, 10, + 10, 2, 32, 29, 24, 50, 51, 24, 24, 28, 29, 24, 50, 2, 2, 51, + 32, 46, 10, 51, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 24, 24, + 50, 3, 23, 89, 89, 89, 24, 24, 90, 24, 24, 28, 46, 29, 28, 46, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":0, + "y":80 + }, + { + "data":[111, 23, 28, 29, 25, 23, 24, 28, 46, 46, 46, 29, 24, 50, 32, 29, + 2, 51, 50, 51, 50, 51, 24, 25, 111, 1, 3, 23, 28, 46, 10, 51, + 29, 28, 29, 24, 24, 24, 24, 25, 1, 51, 25, 23, 50, 3, 23, 90, + 51, 50, 51, 24, 28, 46, 29, 50, 51, 89, 50, 32, 46, 47, 23, 28, + 24, 24, 24, 89, 50, 2, 32, 46, 29, 24, 28, 10, 2, 2, 32, 10, + 29, 24, 24, 24, 24, 24, 50, 2, 51, 28, 10, 51, 24, 24, 50, 51, + 51, 24, 24, 24, 89, 24, 24, 89, 24, 50, 51, 24, 24, 24, 28, 46, + 28, 29, 89, 24, 24, 24, 24, 24, 28, 46, 29, 24, 24, 28, 10, 2, + 25, 23, 90, 24, 28, 29, 24, 24, 50, 2, 32, 29, 24, 50, 51, 24, + 47, 23, 24, 24, 50, 51, 24, 24, 24, 24, 25, 23, 90, 24, 89, 24, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":16, + "y":80 + }, + { + "data":[28, 46, 29, 24, 28, 29, 24, 24, 24, 25, 23, 24, 24, 25, 23, 89, + 50, 3, 23, 24, 50, 32, 29, 90, 24, 50, 51, 24, 24, 25, 23, 28, + 24, 50, 32, 46, 29, 50, 51, 24, 24, 89, 24, 24, 28, 10, 51, 25, + 29, 89, 25, 111, 23, 24, 28, 29, 28, 46, 29, 24, 25, 23, 24, 50, + 32, 29, 25, 111, 45, 46, 47, 23, 50, 2, 51, 24, 25, 23, 89, 24, + 50, 51, 25, 111, 111, 1, 2, 51, 24, 90, 24, 24, 50, 51, 24, 28, + 29, 24, 50, 2, 2, 32, 29, 24, 24, 24, 24, 24, 90, 28, 46, 10, + 51, 24, 24, 28, 29, 50, 51, 89, 28, 46, 29, 24, 24, 25, 1, 51, + 24, 24, 24, 50, 51, 24, 24, 24, 25, 114, 23, 89, 90, 50, 32, 29, + 24, 24, 24, 24, 24, 28, 46, 29, 50, 3, 23, 24, 24, 28, 10, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":32, + "y":80 + }, + { + "data":[24, 24, 50, 51, 90, 28, 29, 24, 24, 24, 24, 28, 10, 51, 24, 89, + 29, 24, 90, 90, 28, 10, 32, 29, 24, 24, 24, 25, 23, 24, 24, 24, + 23, 24, 90, 24, 25, 23, 25, 23, 24, 24, 24, 50, 51, 24, 89, 24, + 32, 29, 24, 24, 50, 51, 50, 32, 46, 46, 29, 24, 24, 24, 24, 24, + 25, 23, 24, 28, 29, 24, 24, 50, 2, 2, 51, 24, 24, 24, 28, 29, + 47, 23, 24, 50, 32, 29, 24, 24, 24, 24, 90, 24, 90, 24, 50, 32, + 3, 45, 29, 28, 10, 32, 29, 24, 90, 24, 24, 24, 28, 29, 90, 25, + 25, 114, 23, 50, 51, 50, 51, 89, 28, 29, 24, 24, 50, 51, 24, 25, + 50, 2, 32, 29, 24, 24, 24, 28, 47, 45, 29, 24, 24, 24, 28, 10, + 29, 89, 50, 51, 24, 24, 24, 50, 3, 115, 45, 29, 28, 29, 25, 45, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":48, + "y":80 + }, + { + "data":[24, 24, 24, 24, 24, 24, 24, 24, 89, 24, 24, 24, 28, 10, 3, 23, + 24, 24, 24, 24, 24, 24, 24, 24, 89, 24, 24, 89, 50, 32, 10, 51, + 24, 24, 24, 24, 24, 28, 29, 24, 24, 28, 46, 29, 24, 25, 23, 24, + 28, 29, 24, 24, 24, 50, 51, 24, 24, 50, 3, 23, 24, 25, 23, 24, + 50, 51, 90, 24, 24, 90, 24, 24, 90, 24, 50, 32, 29, 50, 51, 24, + 29, 24, 28, 46, 29, 24, 24, 89, 24, 28, 29, 25, 23, 24, 28, 29, + 23, 24, 25, 1, 51, 24, 24, 24, 24, 50, 51, 50, 32, 46, 10, 51, + 23, 24, 25, 23, 24, 24, 24, 24, 24, 24, 90, 28, 10, 2, 51, 24, + 51, 28, 10, 51, 24, 28, 29, 24, 24, 28, 46, 10, 51, 24, 24, 24, + 46, 10, 51, 90, 24, 50, 32, 46, 29, 50, 2, 51, 24, 24, 24, 90, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":64, + "y":80 + }, + { + "data":[25, 1, 51, 24, 50, 32, 29, 50, 2, 3, 114, 45, 29, 24, 25, 114, + 25, 23, 28, 46, 29, 25, 23, 24, 24, 25, 1, 2, 32, 29, 25, 111, + 50, 32, 47, 111, 23, 50, 32, 29, 24, 50, 51, 89, 50, 32, 10, 3, + 24, 50, 2, 2, 32, 29, 50, 32, 46, 29, 24, 24, 24, 50, 51, 50, + 28, 29, 89, 28, 10, 51, 24, 25, 111, 23, 89, 28, 46, 29, 24, 24, + 50, 32, 46, 10, 32, 46, 29, 50, 3, 23, 89, 50, 3, 23, 24, 24, + 24, 50, 2, 51, 50, 3, 45, 46, 10, 51, 28, 29, 50, 32, 46, 29, + 24, 28, 46, 46, 29, 50, 2, 2, 32, 29, 25, 23, 28, 47, 1, 32, + 24, 25, 114, 115, 23, 24, 24, 24, 25, 23, 50, 51, 50, 2, 32, 10, + 24, 50, 2, 2, 51, 24, 28, 29, 50, 32, 29, 24, 24, 24, 50, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":80, + "y":80 + }, + { + "data":[23, 50, 32, 46, 29, 24, 24, 24, 24, 24, 24, 24, 50, 51, 25, 1, + 23, 24, 25, 111, 23, 28, 29, 24, 90, 24, 24, 89, 24, 90, 50, 32, + 45, 29, 50, 2, 32, 10, 51, 24, 24, 90, 89, 24, 24, 24, 24, 50, + 2, 32, 29, 90, 25, 45, 46, 46, 29, 24, 28, 29, 28, 29, 90, 24, + 24, 25, 23, 24, 50, 2, 2, 2, 51, 24, 25, 45, 10, 32, 29, 24, + 28, 10, 51, 24, 24, 89, 24, 89, 89, 24, 25, 111, 23, 50, 51, 24, + 25, 23, 24, 24, 24, 24, 24, 24, 90, 24, 25, 111, 23, 28, 29, 90, + 10, 32, 29, 24, 89, 24, 24, 24, 24, 24, 50, 2, 51, 50, 32, 29, + 51, 50, 51, 24, 28, 46, 46, 46, 29, 24, 24, 24, 24, 28, 10, 51, + 29, 24, 24, 24, 50, 2, 2, 2, 51, 24, 89, 24, 24, 50, 32, 29, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":96, + "y":80 + }, + { + "data":[32, 29, 24, 90, 50, 51, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 32, 29, 24, 24, 28, 46, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 10, 51, 28, 29, 25, 115, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 25, 23, 24, 50, 32, 10, 3, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 32, 46, 29, 50, 51, 25, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 25, 114, 45, 29, 24, 50, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 50, 2, 2, 51, 90, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 89, 24, 28, 46, 29, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 50, 2, 51, 28, 29, 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 89, 89, 24, 28, 10, 51, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "width":16, + "x":112, + "y":80 + }], + "class":"Tile", + "height":96, + "id":1, + "name":"\u0421\u043b\u043e\u0439 \u0442\u0430\u0439\u043b\u043e\u0432 1", + "opacity":1, + "startx":0, + "starty":0, + "type":"tilelayer", + "visible":true, + "width":128, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.10.2", + "tileheight":32, + "tilesets":[ + { + "firstgid":1, + "source":"..\/TileSets\/TileSet 1.tsj" + }], + "tilewidth":32, + "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 @@ + + + + + + +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 + + +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 + + +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 + + +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 + + +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 + + +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 + + + + diff --git a/ZoFo/Content/MapData/TileSets/TileSet 1.tsj b/ZoFo/Content/MapData/TileSets/TileSet 1.tsj new file mode 100644 index 0000000..d681881 --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/TileSet 1.tsj @@ -0,0 +1,168 @@ +{ "class":"Tile", + "columns":22, + "fillmode":"preserve-aspect-fit", + "grid": + { + "height":24, + "orientation":"orthogonal", + "width":24 + }, + "image":"..\/..\/Textures\/TileSet\/TilesetFloor.png", + "imageheight":832, + "imagewidth":704, + "margin":0, + "name":"TileSet 1", + "objectalignment":"topleft", + "spacing":0, + "tilecount":572, + "tiledversion":"1.10.2", + "tileheight":32, + "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":32, + "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/MapData/TileSets/WallSet.tsj b/ZoFo/Content/MapData/TileSets/WallSet.tsj new file mode 100644 index 0000000..4cf3f82 --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/WallSet.tsj @@ -0,0 +1,21 @@ +{ "class":"StopObject", + "columns":5, + "grid": + { + "height":16, + "orientation":"orthogonal", + "width":16 + }, + "image":"..\/..\/Textures\/StopObjects\/Tilelist2.png", + "imageheight":1302, + "imagewidth":652, + "margin":2, + "name":"WallSet", + "spacing":2, + "tilecount":3240, + "tiledversion":"1.10.2", + "tileheight":128, + "tilewidth":128, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/TileSets/WallSet.tsx b/ZoFo/Content/MapData/TileSets/WallSet.tsx new file mode 100644 index 0000000..35564d4 --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/WallSet.tsx @@ -0,0 +1,5 @@ + + + + + diff --git a/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_idle.png b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_idle.png new file mode 100644 index 0000000..85413ee Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_idle.png differ diff --git a/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_idle_gun.png b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_idle_gun.png new file mode 100644 index 0000000..4cb9b20 Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_idle_gun.png differ diff --git a/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_mining_tool-1.png b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_mining_tool-1.png new file mode 100644 index 0000000..8d194a4 Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_mining_tool-1.png differ diff --git a/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_mining_tool-2.png b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_mining_tool-2.png new file mode 100644 index 0000000..c3e4071 Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_mining_tool-2.png differ diff --git a/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_running.png b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_running.png new file mode 100644 index 0000000..5ceabee Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_running.png differ diff --git a/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_running_gun.png b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_running_gun.png new file mode 100644 index 0000000..488b866 Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/Character/hr-level1_running_gun.png differ diff --git a/ZoFo/Content/Textures/AnimationTextures/unicorn.png b/ZoFo/Content/Textures/AnimationTextures/unicorn.png new file mode 100644 index 0000000..3306190 Binary files /dev/null and b/ZoFo/Content/Textures/AnimationTextures/unicorn.png differ diff --git a/ZoFo/Content/Textures/Animations/player_idle_top-right_noweapon.animation b/ZoFo/Content/Textures/Animations/player_idle_top-right_noweapon.animation new file mode 100644 index 0000000..e97cfa8 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_top-right_noweapon.animation @@ -0,0 +1,20 @@ +{ + "id": "player_idle_top-right_noweapon", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 116, + "Width": 92, + "Height": 116 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 22, + "isCycle": true, + "offset": "0, 0" +} diff --git a/ZoFo/Content/Textures/Animations/player_idle_top_noweapon.animation b/ZoFo/Content/Textures/Animations/player_idle_top_noweapon.animation new file mode 100644 index 0000000..4e72f22 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_top_noweapon.animation @@ -0,0 +1,20 @@ +{ + "id": "player_idle_top_noweapon", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 0, + "Width": 92, + "Height": 116 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 22, + "isCycle": true, + "offset": "0, 0" +} diff --git a/ZoFo/Content/Textures/Animations/running_top.animation b/ZoFo/Content/Textures/Animations/running_top.animation new file mode 100644 index 0000000..5f2991c --- /dev/null +++ b/ZoFo/Content/Textures/Animations/running_top.animation @@ -0,0 +1,20 @@ +{ + "id": "running_top", + "textureName": "unicorn", + "startSpriteRectangle": { + "X": 0, + "Y": 30, + "Width": 30, + "Height": 60 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 2 + } + ], + "textureFrameInterval": 1, + "framesCount": 22, + "isCycle": true, + "offset": "0, 0" +} diff --git a/ZoFo/Content/Textures/Animations/testAnimationExample.animation b/ZoFo/Content/Textures/Animations/testAnimationExample.animation new file mode 100644 index 0000000..de970c1 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/testAnimationExample.animation @@ -0,0 +1 @@ +{"id":"testAnimationExample","textureName":"Textures/AnimationTextures/unicorn","startSpriteRectangle":{"X":0,"Y":0,"Width":400,"Height":400},"frameSecond":[{"Item1":0,"Item2":1}],"textureFrameInterval":1,"framesCount":1,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/GUI/MenuBackground.jpg b/ZoFo/Content/Textures/GUI/MenuBackground.jpg new file mode 100644 index 0000000..79b0abe Binary files /dev/null and b/ZoFo/Content/Textures/GUI/MenuBackground.jpg differ diff --git a/ZoFo/Content/Textures/GUI/Switch_backgrownd.png b/ZoFo/Content/Textures/GUI/Switch_backgrownd.png new file mode 100644 index 0000000..bd9e1d8 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/Switch_backgrownd.png differ diff --git a/ZoFo/Content/Textures/GUI/background/base.png b/ZoFo/Content/Textures/GUI/background/base.png new file mode 100644 index 0000000..11cbac6 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/base.png differ diff --git a/ZoFo/Content/Textures/GUI/background/endGame.png b/ZoFo/Content/Textures/GUI/background/endGame.png new file mode 100644 index 0000000..2d9926c Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/endGame.png differ diff --git a/ZoFo/Content/Textures/GUI/background/join.png b/ZoFo/Content/Textures/GUI/background/join.png new file mode 100644 index 0000000..6d45273 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/join.png differ diff --git a/ZoFo/Content/Textures/GUI/background/mainMenu.png b/ZoFo/Content/Textures/GUI/background/mainMenu.png new file mode 100644 index 0000000..a0778fb Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/mainMenu.png differ diff --git a/ZoFo/Content/Textures/GUI/background/options.png b/ZoFo/Content/Textures/GUI/background/options.png new file mode 100644 index 0000000..ef917ce Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/options.png differ diff --git a/ZoFo/Content/Textures/GUI/background/selectMode.png b/ZoFo/Content/Textures/GUI/background/selectMode.png new file mode 100644 index 0000000..25bc33b Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/selectMode.png differ diff --git a/ZoFo/Content/Textures/GUI/background/waiting.png b/ZoFo/Content/Textures/GUI/background/waiting.png new file mode 100644 index 0000000..709fb0b Binary files /dev/null and b/ZoFo/Content/Textures/GUI/background/waiting.png differ diff --git a/ZoFo/Content/Textures/GUI/checkboxs_off-on.png b/ZoFo/Content/Textures/GUI/checkboxs_off-on.png new file mode 100644 index 0000000..682b82a Binary files /dev/null and b/ZoFo/Content/Textures/GUI/checkboxs_off-on.png differ diff --git a/ZoFo/Content/Textures/GUI/checkboxs_off.png b/ZoFo/Content/Textures/GUI/checkboxs_off.png new file mode 100644 index 0000000..f6533ba Binary files /dev/null and b/ZoFo/Content/Textures/GUI/checkboxs_off.png differ diff --git a/ZoFo/Content/Textures/GUI/checkboxs_on.png b/ZoFo/Content/Textures/GUI/checkboxs_on.png new file mode 100644 index 0000000..693b0cc Binary files /dev/null and b/ZoFo/Content/Textures/GUI/checkboxs_on.png differ diff --git a/ZoFo/Content/Textures/GUI/feature/i (1).webp b/ZoFo/Content/Textures/GUI/feature/i (1).webp new file mode 100644 index 0000000..751b392 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/feature/i (1).webp differ diff --git a/ZoFo/Content/Textures/GUI/feature/i (2).webp b/ZoFo/Content/Textures/GUI/feature/i (2).webp new file mode 100644 index 0000000..a59827e Binary files /dev/null and b/ZoFo/Content/Textures/GUI/feature/i (2).webp differ diff --git a/ZoFo/Content/Textures/GUI/feature/i.webp b/ZoFo/Content/Textures/GUI/feature/i.webp new file mode 100644 index 0000000..69b1f1f Binary files /dev/null and b/ZoFo/Content/Textures/GUI/feature/i.webp differ diff --git a/ZoFo/Content/Textures/GUI/feature/огонь-искусства-пиксела-вектора-117929424.webp b/ZoFo/Content/Textures/GUI/feature/огонь-искусства-пиксела-вектора-117929424.webp new file mode 100644 index 0000000..a2178c4 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/feature/огонь-искусства-пиксела-вектора-117929424.webp differ diff --git a/ZoFo/Content/Textures/GUI/mouse.png b/ZoFo/Content/Textures/GUI/mouse.png new file mode 100644 index 0000000..23146e6 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/mouse.png differ diff --git a/ZoFo/Content/Textures/GUI/switch.png b/ZoFo/Content/Textures/GUI/switch.png new file mode 100644 index 0000000..a296c61 Binary files /dev/null and b/ZoFo/Content/Textures/GUI/switch.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0000_Layer-1.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0000_Layer-1.png new file mode 100644 index 0000000..880cd49 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0000_Layer-1.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0001_Layer-2.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0001_Layer-2.png new file mode 100644 index 0000000..ad2fc2b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0001_Layer-2.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0002_Layer-3.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0002_Layer-3.png new file mode 100644 index 0000000..3d95308 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0002_Layer-3.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0003_Layer-4.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0003_Layer-4.png new file mode 100644 index 0000000..3c9368c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0003_Layer-4.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0004_Layer-5.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0004_Layer-5.png new file mode 100644 index 0000000..d31fb47 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0004_Layer-5.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0005_Layer-6.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0005_Layer-6.png new file mode 100644 index 0000000..fc721e5 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0005_Layer-6.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0006_Layer-7.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0006_Layer-7.png new file mode 100644 index 0000000..fc1f3d1 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0006_Layer-7.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0007_Layer-8.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0007_Layer-8.png new file mode 100644 index 0000000..af254f2 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0007_Layer-8.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0008_Layer-9.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0008_Layer-9.png new file mode 100644 index 0000000..0879664 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0008_Layer-9.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0009_Layer-10.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0009_Layer-10.png new file mode 100644 index 0000000..8fda383 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0009_Layer-10.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0010_Layer-11.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0010_Layer-11.png new file mode 100644 index 0000000..6f2a493 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0010_Layer-11.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0011_Layer-12.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0011_Layer-12.png new file mode 100644 index 0000000..4e7ab49 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0011_Layer-12.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0012_Layer-13.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0012_Layer-13.png new file mode 100644 index 0000000..d654f41 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0012_Layer-13.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0013_Layer-14.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0013_Layer-14.png new file mode 100644 index 0000000..2eeb752 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0013_Layer-14.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0014_Layer-15.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0014_Layer-15.png new file mode 100644 index 0000000..cf2f09d Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0014_Layer-15.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0015_Layer-16.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0015_Layer-16.png new file mode 100644 index 0000000..c13af22 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0015_Layer-16.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0016_Layer-0.png b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0016_Layer-0.png new file mode 100644 index 0000000..44a6ab4 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/Shadows/shadows_house_0016_Layer-0.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0000_Layer-1.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0000_Layer-1.png new file mode 100644 index 0000000..4655585 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0000_Layer-1.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0001_Layer-2.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0001_Layer-2.png new file mode 100644 index 0000000..3823f71 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0001_Layer-2.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0002_Layer-3.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0002_Layer-3.png new file mode 100644 index 0000000..05ef220 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0002_Layer-3.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0003_Layer-4.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0003_Layer-4.png new file mode 100644 index 0000000..87f4ecf Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0003_Layer-4.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0004_Layer-5.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0004_Layer-5.png new file mode 100644 index 0000000..62b95fc Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0004_Layer-5.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0005_Layer-6.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0005_Layer-6.png new file mode 100644 index 0000000..0bf58ea Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0005_Layer-6.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0006_Layer-7.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0006_Layer-7.png new file mode 100644 index 0000000..a5efeaf Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0006_Layer-7.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0007_Layer-8.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0007_Layer-8.png new file mode 100644 index 0000000..da72a26 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0007_Layer-8.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0008_Layer-9.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0008_Layer-9.png new file mode 100644 index 0000000..19e371c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0008_Layer-9.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0009_Layer-10.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0009_Layer-10.png new file mode 100644 index 0000000..121ebe2 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0009_Layer-10.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0010_Layer-11.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0010_Layer-11.png new file mode 100644 index 0000000..634a7cd Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0010_Layer-11.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0011_Layer-12.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0011_Layer-12.png new file mode 100644 index 0000000..e3715af Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0011_Layer-12.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0012_Layer-13.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0012_Layer-13.png new file mode 100644 index 0000000..d53022c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0012_Layer-13.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0013_Layer-14.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0013_Layer-14.png new file mode 100644 index 0000000..bacb44a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0013_Layer-14.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0014_Layer-15.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0014_Layer-15.png new file mode 100644 index 0000000..8b7d74f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0014_Layer-15.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0015_Layer-16.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0015_Layer-16.png new file mode 100644 index 0000000..baa78b8 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0015_Layer-16.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0016_Layer-17.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0016_Layer-17.png new file mode 100644 index 0000000..ba73b4b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0016_Layer-17.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0017_Layer-18.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0017_Layer-18.png new file mode 100644 index 0000000..705506a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0017_Layer-18.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0018_Layer-19.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0018_Layer-19.png new file mode 100644 index 0000000..f9acadc Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0018_Layer-19.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0019_Layer-20.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0019_Layer-20.png new file mode 100644 index 0000000..5630bf3 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0019_Layer-20.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0020_Layer-21.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0020_Layer-21.png new file mode 100644 index 0000000..c56674c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0020_Layer-21.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0021_Layer-22.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0021_Layer-22.png new file mode 100644 index 0000000..394c48b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0021_Layer-22.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0022_Layer-23.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0022_Layer-23.png new file mode 100644 index 0000000..8edeed6 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0022_Layer-23.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0023_Layer-24.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0023_Layer-24.png new file mode 100644 index 0000000..043499e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0023_Layer-24.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0024_Layer-25.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0024_Layer-25.png new file mode 100644 index 0000000..0cf74a0 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0024_Layer-25.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0025_Layer-26.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0025_Layer-26.png new file mode 100644 index 0000000..ed9dc8d Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0025_Layer-26.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0026_Layer-27.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0026_Layer-27.png new file mode 100644 index 0000000..f531421 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0026_Layer-27.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0027_Layer-28.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0027_Layer-28.png new file mode 100644 index 0000000..6f4ecca Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0027_Layer-28.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0028_Layer-29.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0028_Layer-29.png new file mode 100644 index 0000000..f3a2131 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0028_Layer-29.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0029_Layer-30.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0029_Layer-30.png new file mode 100644 index 0000000..75eea87 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0029_Layer-30.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0030_Layer-31.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0030_Layer-31.png new file mode 100644 index 0000000..8c4eaa1 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0030_Layer-31.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0031_Layer-32.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0031_Layer-32.png new file mode 100644 index 0000000..dc64505 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0031_Layer-32.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0032_Layer-33.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0032_Layer-33.png new file mode 100644 index 0000000..f5a7b8f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0032_Layer-33.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0033_Layer-34.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0033_Layer-34.png new file mode 100644 index 0000000..50b8e5b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0033_Layer-34.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0034_Layer-35.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0034_Layer-35.png new file mode 100644 index 0000000..963376a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0034_Layer-35.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0035_Layer-36.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0035_Layer-36.png new file mode 100644 index 0000000..986dd9a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0035_Layer-36.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0036_Layer-37.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0036_Layer-37.png new file mode 100644 index 0000000..c28721b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0036_Layer-37.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0037_Layer-38.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0037_Layer-38.png new file mode 100644 index 0000000..0a479fd Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0037_Layer-38.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0038_Layer-39.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0038_Layer-39.png new file mode 100644 index 0000000..b2c273a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0038_Layer-39.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0039_Layer-40.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0039_Layer-40.png new file mode 100644 index 0000000..5d3d948 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0039_Layer-40.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0040_Layer-41.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0040_Layer-41.png new file mode 100644 index 0000000..71068e6 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0040_Layer-41.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0041_Layer-42.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0041_Layer-42.png new file mode 100644 index 0000000..85624be Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0041_Layer-42.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0042_Layer-43.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0042_Layer-43.png new file mode 100644 index 0000000..c411dfb Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0042_Layer-43.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0043_Layer-44.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0043_Layer-44.png new file mode 100644 index 0000000..58d2288 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0043_Layer-44.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0044_Layer-45.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0044_Layer-45.png new file mode 100644 index 0000000..079b5cc Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0044_Layer-45.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0045_Layer-46.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0045_Layer-46.png new file mode 100644 index 0000000..65234d0 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0045_Layer-46.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0046_Layer-47.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0046_Layer-47.png new file mode 100644 index 0000000..b5898ca Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0046_Layer-47.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0047_Layer-48.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0047_Layer-48.png new file mode 100644 index 0000000..417ecb3 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0047_Layer-48.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0048_Layer-49.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0048_Layer-49.png new file mode 100644 index 0000000..3e04981 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0048_Layer-49.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0049_Layer-50.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0049_Layer-50.png new file mode 100644 index 0000000..1972504 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0049_Layer-50.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0050_Layer-51.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0050_Layer-51.png new file mode 100644 index 0000000..cd8dc23 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0050_Layer-51.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0051_Layer-52.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0051_Layer-52.png new file mode 100644 index 0000000..a1470c1 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0051_Layer-52.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0052_Layer-53.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0052_Layer-53.png new file mode 100644 index 0000000..7b5711c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0052_Layer-53.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0053_Layer-54.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0053_Layer-54.png new file mode 100644 index 0000000..0047c8c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0053_Layer-54.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0054_Layer-55.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0054_Layer-55.png new file mode 100644 index 0000000..e8930bb Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0054_Layer-55.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0055_Layer-56.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0055_Layer-56.png new file mode 100644 index 0000000..d0e820d Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0055_Layer-56.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0056_Layer-57.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0056_Layer-57.png new file mode 100644 index 0000000..2f09fa8 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0056_Layer-57.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0057_Layer-58.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0057_Layer-58.png new file mode 100644 index 0000000..0facdc6 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0057_Layer-58.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0058_Layer-59.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0058_Layer-59.png new file mode 100644 index 0000000..8bcd07b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0058_Layer-59.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0059_Layer-60.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0059_Layer-60.png new file mode 100644 index 0000000..4ad861b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0059_Layer-60.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0060_Layer-0.png b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0060_Layer-0.png new file mode 100644 index 0000000..d5acd84 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Environment/objects_house_0060_Layer-0.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0000_Layer-1.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0000_Layer-1.png new file mode 100644 index 0000000..fe36619 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0000_Layer-1.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0001_Layer-2.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0001_Layer-2.png new file mode 100644 index 0000000..e5b9f39 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0001_Layer-2.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0002_Layer-3.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0002_Layer-3.png new file mode 100644 index 0000000..e31b605 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0002_Layer-3.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0003_Layer-4.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0003_Layer-4.png new file mode 100644 index 0000000..09ab958 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0003_Layer-4.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0004_Layer-5.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0004_Layer-5.png new file mode 100644 index 0000000..0c520e5 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0004_Layer-5.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0005_Layer-6.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0005_Layer-6.png new file mode 100644 index 0000000..13c0408 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0005_Layer-6.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0006_Layer-7.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0006_Layer-7.png new file mode 100644 index 0000000..36bf1ba Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0006_Layer-7.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0007_Layer-8.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0007_Layer-8.png new file mode 100644 index 0000000..d39616c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0007_Layer-8.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0008_Layer-9.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0008_Layer-9.png new file mode 100644 index 0000000..48ad4d7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0008_Layer-9.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0009_Layer-10.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0009_Layer-10.png new file mode 100644 index 0000000..5d1f2ca Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0009_Layer-10.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0010_Layer-11.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0010_Layer-11.png new file mode 100644 index 0000000..ab4c856 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0010_Layer-11.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0011_Layer-12.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0011_Layer-12.png new file mode 100644 index 0000000..4b8f0d0 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0011_Layer-12.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0012_Layer-13.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0012_Layer-13.png new file mode 100644 index 0000000..9e25f96 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0012_Layer-13.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0013_Layer-14.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0013_Layer-14.png new file mode 100644 index 0000000..3319e48 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0013_Layer-14.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0014_Layer-15.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0014_Layer-15.png new file mode 100644 index 0000000..24f5bba Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0014_Layer-15.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0015_Layer-16.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0015_Layer-16.png new file mode 100644 index 0000000..31f7a36 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0015_Layer-16.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0016_Layer-17.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0016_Layer-17.png new file mode 100644 index 0000000..224400a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0016_Layer-17.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0017_Layer-18.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0017_Layer-18.png new file mode 100644 index 0000000..1facb1f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0017_Layer-18.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0018_Layer-19.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0018_Layer-19.png new file mode 100644 index 0000000..1d20c2f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0018_Layer-19.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0019_Layer-20.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0019_Layer-20.png new file mode 100644 index 0000000..30abbfb Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0019_Layer-20.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0020_Layer-21.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0020_Layer-21.png new file mode 100644 index 0000000..cd32dda Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0020_Layer-21.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0021_Layer-22.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0021_Layer-22.png new file mode 100644 index 0000000..2414a5d Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0021_Layer-22.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0022_Layer-23.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0022_Layer-23.png new file mode 100644 index 0000000..46cebba Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0022_Layer-23.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0023_Layer-24.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0023_Layer-24.png new file mode 100644 index 0000000..95e467f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0023_Layer-24.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0024_Layer-25.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0024_Layer-25.png new file mode 100644 index 0000000..1f81a4c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0024_Layer-25.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0025_Layer-26.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0025_Layer-26.png new file mode 100644 index 0000000..4f13a41 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0025_Layer-26.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0026_Layer-27.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0026_Layer-27.png new file mode 100644 index 0000000..827f729 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0026_Layer-27.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0027_Layer-28.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0027_Layer-28.png new file mode 100644 index 0000000..56ab75e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0027_Layer-28.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0028_Layer-29.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0028_Layer-29.png new file mode 100644 index 0000000..6caeaeb Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0028_Layer-29.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0029_Layer-30.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0029_Layer-30.png new file mode 100644 index 0000000..dc6eab7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0029_Layer-30.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0030_Layer-31.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0030_Layer-31.png new file mode 100644 index 0000000..663615f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0030_Layer-31.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0031_Layer-32.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0031_Layer-32.png new file mode 100644 index 0000000..95cd3ca Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0031_Layer-32.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0032_Layer-33.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0032_Layer-33.png new file mode 100644 index 0000000..1861b3e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0032_Layer-33.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0033_Layer-34.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0033_Layer-34.png new file mode 100644 index 0000000..3ef79e1 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0033_Layer-34.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0034_Layer-35.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0034_Layer-35.png new file mode 100644 index 0000000..8186f19 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0034_Layer-35.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0035_Layer-36.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0035_Layer-36.png new file mode 100644 index 0000000..eb5194d Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0035_Layer-36.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Roof/roof_0036_Layer-0.png b/ZoFo/Content/Textures/StopObjects/Roof/roof_0036_Layer-0.png new file mode 100644 index 0000000..e94a995 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Roof/roof_0036_Layer-0.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Tilelist1.png b/ZoFo/Content/Textures/StopObjects/Tilelist1.png new file mode 100644 index 0000000..5252c86 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Tilelist1.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Tilelist2.png b/ZoFo/Content/Textures/StopObjects/Tilelist2.png new file mode 100644 index 0000000..3ce1921 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Tilelist2.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Tilelist3.png b/ZoFo/Content/Textures/StopObjects/Tilelist3.png new file mode 100644 index 0000000..861af90 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Tilelist3.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Tilelist4.png b/ZoFo/Content/Textures/StopObjects/Tilelist4.png new file mode 100644 index 0000000..14a4566 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Tilelist4.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0000_Layer-1.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0000_Layer-1.png new file mode 100644 index 0000000..c6e23e7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0000_Layer-1.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0001_Layer-2.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0001_Layer-2.png new file mode 100644 index 0000000..1c8205c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0001_Layer-2.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0002_Layer-3.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0002_Layer-3.png new file mode 100644 index 0000000..adeab17 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0002_Layer-3.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0003_Layer-4.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0003_Layer-4.png new file mode 100644 index 0000000..fcd01a8 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0003_Layer-4.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0004_Layer-5.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0004_Layer-5.png new file mode 100644 index 0000000..a715cf5 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0004_Layer-5.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0005_Layer-6.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0005_Layer-6.png new file mode 100644 index 0000000..443b2d7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0005_Layer-6.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0006_Layer-7.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0006_Layer-7.png new file mode 100644 index 0000000..375a15f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0006_Layer-7.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0007_Layer-8.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0007_Layer-8.png new file mode 100644 index 0000000..66d1f0e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0007_Layer-8.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0008_Layer-9.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0008_Layer-9.png new file mode 100644 index 0000000..183c938 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0008_Layer-9.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0009_Layer-10.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0009_Layer-10.png new file mode 100644 index 0000000..0082f7c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0009_Layer-10.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0010_Layer-11.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0010_Layer-11.png new file mode 100644 index 0000000..c02a29b Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0010_Layer-11.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0011_Layer-12.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0011_Layer-12.png new file mode 100644 index 0000000..9ec94d7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0011_Layer-12.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0012_Layer-13.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0012_Layer-13.png new file mode 100644 index 0000000..50c376f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0012_Layer-13.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0013_Layer-14.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0013_Layer-14.png new file mode 100644 index 0000000..099baa7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0013_Layer-14.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0014_Layer-15.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0014_Layer-15.png new file mode 100644 index 0000000..51b7d43 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0014_Layer-15.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0015_Layer-16.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0015_Layer-16.png new file mode 100644 index 0000000..99b0f10 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0015_Layer-16.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0016_Layer-17.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0016_Layer-17.png new file mode 100644 index 0000000..a9f1329 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0016_Layer-17.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0017_Layer-18.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0017_Layer-18.png new file mode 100644 index 0000000..38f9c00 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0017_Layer-18.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0018_Layer-19.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0018_Layer-19.png new file mode 100644 index 0000000..a8367dd Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0018_Layer-19.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0019_Layer-20.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0019_Layer-20.png new file mode 100644 index 0000000..c1b2805 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0019_Layer-20.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0020_Layer-21.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0020_Layer-21.png new file mode 100644 index 0000000..bc18b15 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0020_Layer-21.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0021_Layer-22.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0021_Layer-22.png new file mode 100644 index 0000000..d8599d6 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0021_Layer-22.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0022_Layer-23.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0022_Layer-23.png new file mode 100644 index 0000000..4e3336e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0022_Layer-23.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0023_Layer-24.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0023_Layer-24.png new file mode 100644 index 0000000..95b8964 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0023_Layer-24.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0024_Layer-25.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0024_Layer-25.png new file mode 100644 index 0000000..7b8e21a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0024_Layer-25.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0025_Layer-26.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0025_Layer-26.png new file mode 100644 index 0000000..ad088f8 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0025_Layer-26.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0026_Layer-27.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0026_Layer-27.png new file mode 100644 index 0000000..dbc20bb Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0026_Layer-27.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0027_Layer-28.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0027_Layer-28.png new file mode 100644 index 0000000..220d937 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0027_Layer-28.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0028_Layer-29.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0028_Layer-29.png new file mode 100644 index 0000000..d990509 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0028_Layer-29.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0029_Layer-30.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0029_Layer-30.png new file mode 100644 index 0000000..4bbe70a Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0029_Layer-30.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0030_Layer-31.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0030_Layer-31.png new file mode 100644 index 0000000..3185cce Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0030_Layer-31.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0031_Layer-32.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0031_Layer-32.png new file mode 100644 index 0000000..01cf9d8 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0031_Layer-32.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0032_Layer-33.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0032_Layer-33.png new file mode 100644 index 0000000..80cfa34 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0032_Layer-33.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0033_Layer-34.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0033_Layer-34.png new file mode 100644 index 0000000..8472016 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0033_Layer-34.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0034_Layer-35.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0034_Layer-35.png new file mode 100644 index 0000000..742552f Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0034_Layer-35.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0035_Layer-36.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0035_Layer-36.png new file mode 100644 index 0000000..328595e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0035_Layer-36.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0036_Layer-37.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0036_Layer-37.png new file mode 100644 index 0000000..ec80148 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0036_Layer-37.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0037_Layer-38.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0037_Layer-38.png new file mode 100644 index 0000000..e7e7a39 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0037_Layer-38.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0038_Layer-39.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0038_Layer-39.png new file mode 100644 index 0000000..c03fabe Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0038_Layer-39.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0039_Layer-40.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0039_Layer-40.png new file mode 100644 index 0000000..c281b0d Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0039_Layer-40.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0040_Layer-41.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0040_Layer-41.png new file mode 100644 index 0000000..3325002 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0040_Layer-41.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0041_Layer-42.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0041_Layer-42.png new file mode 100644 index 0000000..1ecbd46 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0041_Layer-42.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0042_Layer-43.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0042_Layer-43.png new file mode 100644 index 0000000..bcdb8d1 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0042_Layer-43.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0043_Layer-44.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0043_Layer-44.png new file mode 100644 index 0000000..d411060 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0043_Layer-44.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0044_Layer-45.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0044_Layer-45.png new file mode 100644 index 0000000..0d9981c Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0044_Layer-45.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0045_Layer-46.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0045_Layer-46.png new file mode 100644 index 0000000..395d4b7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0045_Layer-46.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0046_Layer-47.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0046_Layer-47.png new file mode 100644 index 0000000..9df9a3e Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0046_Layer-47.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0047_Layer-48.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0047_Layer-48.png new file mode 100644 index 0000000..32a5283 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0047_Layer-48.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0048_Layer-49.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0048_Layer-49.png new file mode 100644 index 0000000..ae9b2ef Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0048_Layer-49.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0049_Layer-50.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0049_Layer-50.png new file mode 100644 index 0000000..b28e5b7 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0049_Layer-50.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0050_Layer-51.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0050_Layer-51.png new file mode 100644 index 0000000..702d9d9 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0050_Layer-51.png differ diff --git a/ZoFo/Content/Textures/StopObjects/Walls/walls_0051_Layer-0.png b/ZoFo/Content/Textures/StopObjects/Walls/walls_0051_Layer-0.png new file mode 100644 index 0000000..b984c11 Binary files /dev/null and b/ZoFo/Content/Textures/StopObjects/Walls/walls_0051_Layer-0.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetFloor.png b/ZoFo/Content/Textures/TileSetImages/TilesetFloor.png new file mode 100644 index 0000000..b959118 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetFloor.png differ diff --git a/ZoFo/Content/Textures/icons/12.png b/ZoFo/Content/Textures/icons/12.png new file mode 100644 index 0000000..1cf2c6d Binary files /dev/null and b/ZoFo/Content/Textures/icons/12.png differ diff --git a/ZoFo/Content/Textures/icons/13.png b/ZoFo/Content/Textures/icons/13.png new file mode 100644 index 0000000..272b96b Binary files /dev/null and b/ZoFo/Content/Textures/icons/13.png differ diff --git a/ZoFo/Content/Textures/icons/14.png b/ZoFo/Content/Textures/icons/14.png new file mode 100644 index 0000000..7109297 Binary files /dev/null and b/ZoFo/Content/Textures/icons/14.png differ diff --git a/ZoFo/Content/Textures/icons/21.png b/ZoFo/Content/Textures/icons/21.png new file mode 100644 index 0000000..df49f00 Binary files /dev/null and b/ZoFo/Content/Textures/icons/21.png differ diff --git a/ZoFo/Content/Textures/icons/22.png b/ZoFo/Content/Textures/icons/22.png new file mode 100644 index 0000000..09e506e Binary files /dev/null and b/ZoFo/Content/Textures/icons/22.png differ diff --git a/ZoFo/Content/Textures/icons/5.png b/ZoFo/Content/Textures/icons/5.png new file mode 100644 index 0000000..872f5e1 Binary files /dev/null and b/ZoFo/Content/Textures/icons/5.png differ diff --git a/ZoFo/Content/Textures/icons/6.png b/ZoFo/Content/Textures/icons/6.png new file mode 100644 index 0000000..a4f234a Binary files /dev/null and b/ZoFo/Content/Textures/icons/6.png differ diff --git a/ZoFo/Content/Textures/icons/7.png b/ZoFo/Content/Textures/icons/7.png new file mode 100644 index 0000000..d2b9271 Binary files /dev/null and b/ZoFo/Content/Textures/icons/7.png differ diff --git a/ZoFo/Content/Textures/icons/8.png b/ZoFo/Content/Textures/icons/8.png new file mode 100644 index 0000000..da1855e Binary files /dev/null and b/ZoFo/Content/Textures/icons/8.png differ diff --git a/ZoFo/Content/Textures/icons/9.png b/ZoFo/Content/Textures/icons/9.png new file mode 100644 index 0000000..ef3190d Binary files /dev/null and b/ZoFo/Content/Textures/icons/9.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 f8a9288..91a607c 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -1,14 +1,104 @@ +using System.Collections.Generic; +using System.Text.Json; +using ZoFo.GameCore.GameManagers.NetworkManager; +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; +using System.Reflection; +using ZoFo.GameCore.GameObjects.Entities; + namespace ZoFo.GameCore { public class Client { - public void OnDataSend(string Data){ } + ClientNetworkManager networkManager; - public void GameEndedUnexpectedly(){ } + public bool IsConnected { get { return networkManager.IsConnected; } } + public Client() + { + networkManager = new ClientNetworkManager(); + networkManager.GetDataSent += OnDataSend; + } - public void JoinRoom(){ } + public void OnDataSend(string data) + { + List updateDatas = JsonSerializer.Deserialize>(data); + // тут будет switch + foreach (var item in updateDatas) + { + GotData(item); + } - public void JoinYourself(){ } + } + public void GameEndedUnexpectedly() { } + public void JoinRoom(string ip,int port) + { + networkManager.JoinRoom(ip,port); + } + public void JoinYourself(int port) { networkManager.JoinYourself(port); } + + + List mapObjects = new List(); + List gameObjects = new List(); + /// + /// Клиент должен обнговлять игру анимаций + /// + /// + internal void Update(GameTime gameTime) + { + for (int i = 0; i < gameObjects.Count; i++) + { + gameObjects[i].UpdateAnimations(); + } + } + internal void Draw(SpriteBatch spriteBatch) + { + for (int i = 0; i < mapObjects.Count; i++) + { + mapObjects[i].Draw(spriteBatch); + } + for (int i = 0; i < gameObjects.Count; i++) + { + gameObjects[i].Draw(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 + )); + } + else if (update is UpdateGameObjectCreated) + { + var a = Assembly.GetAssembly(typeof(GameObject)); + if ((update as UpdateGameObjectCreated).GameObjectType == "EntittyForAnimationTests") + { + + gameObjects.Add( + new EntittyForAnimationTests(new Vector2(100,100)) + ); + } + //gameObjects.Add( TODO reflection + //Activator.CreateInstance(Type.GetType("ZoFo.GameCore.GameObjects.Entities.EntittyForAnimationTests") + ///*(update as UpdateGameObjectCreated).GameObjectType*/, new []{ new Vector2(100, 100) }) + //as GameObject + //); + } + } } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/AbstractGUI.cs b/ZoFo/GameCore/GUI/AbstractGUI.cs index d2b69ce..0134477 100644 --- a/ZoFo/GameCore/GUI/AbstractGUI.cs +++ b/ZoFo/GameCore/GUI/AbstractGUI.cs @@ -9,6 +9,7 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; namespace ZoFo.GameCore.GUI; @@ -20,6 +21,8 @@ public abstract class AbstractGUI protected DrawableUIElement SelectedElement; private bool isStartedPrint = false; private bool isPressed = false; + private Texture2D mouse; + private MouseState mouseState; public AbstractGUI() { @@ -29,22 +32,27 @@ public abstract class AbstractGUI private GraphicsDevice graphicsDevice; public virtual void Initialize() { - // Manager.Initialize(AppManager.Instance.GraphicsDevice); + Manager.Initialize(AppManager.Instance.GraphicsDevice); CreateUI(); } public virtual void LoadContent() { - + Manager.LoadContent(AppManager.Instance.Content, "Font"); + mouse = AppManager.Instance.Content.Load("Textures/GUI/mouse"); } public virtual void Update(GameTime gameTime) { - + Manager.Update(gameTime); + mouseState = Mouse.GetState(); } public virtual void Draw(SpriteBatch spriteBatch) { Manager.Draw(spriteBatch); + spriteBatch.Begin(); + spriteBatch.Draw(mouse, new Rectangle(mouseState.Position.X, mouseState.Position.Y, 20, 40), Color.Red); + spriteBatch.End(); } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/DebugHUD.cs b/ZoFo/GameCore/GUI/DebugHUD.cs new file mode 100644 index 0000000..fdc5371 --- /dev/null +++ b/ZoFo/GameCore/GUI/DebugHUD.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MonogameLibrary.UI.Elements; +using static System.String; +using ZoFo.GameCore.GameManagers; + +namespace ZoFo.GameCore.GUI; + +public class DebugHUD +{ + private SpriteFont _spriteFont; + private Dictionary _text = new(); + private List _log = new(); + + public void Initialize() + { + } + + public void LoadContent() + { + _spriteFont = AppManager.Instance.Content.Load("Fonts/Font2"); + } + + public void Update(GameTime gameTime) + { + } + + public void Draw(SpriteBatch spriteBatch) + { + var keysString = Join("\n", _text.Select(el => el.Key + ": " + el.Value).ToList()); + spriteBatch.Begin(); + spriteBatch.DrawString( + _spriteFont, + keysString, + new Vector2(10, 10), + Color.Cyan, + 0, + Vector2.Zero, + 1, + SpriteEffects.None, + 0 + ); + spriteBatch.DrawString( + _spriteFont, + Join("\n", _log), + new Vector2(10, 10 + _spriteFont.MeasureString(keysString).Y), + Color.Green, + 0, + Vector2.Zero, + 1, + SpriteEffects.None, + 0 + ); + spriteBatch.End(); + } + + public void Set(string key, string value) + { + _text[key] = value; + } + + public void Log(string value) + { + _log.Add(value); + if (_log.Count > 30) + { + _log.RemoveAt(0); + } + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/HUD.cs b/ZoFo/GameCore/GUI/HUD.cs index c20ead1..a2b1892 100644 --- a/ZoFo/GameCore/GUI/HUD.cs +++ b/ZoFo/GameCore/GUI/HUD.cs @@ -12,14 +12,8 @@ using MonogameLibrary.UI.Elements; namespace ZoFo.GameCore.GUI; -public class HUD -{ - protected UIManager Manager = new(); - protected List Elements = new(); - private List ActiveElements; - protected DrawableUIElement SelectedElement; - private bool isStartedPrint = false; - private bool isPressed = false; +public class HUD : AbstractGUI +{ private GraphicsDevice graphicsDevice; public virtual void Initialize() @@ -39,6 +33,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 850181d..e0d0c15 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; @@ -9,19 +10,72 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; namespace ZoFo.GameCore.GUI; public class MainMenuGUI : AbstractGUI { + private DrawableUIElement menuBackground; protected override void CreateUI() { - // int width = AppManager.Instance.inGameHUDHelperResolution.X; - // int height = AppManager.Instance.inGameHUDHelperResolution.Y; - } + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures/GUI/background/mainMenu" }; + Elements.Add(menuBackground); + menuBackground.LoadTexture(AppManager.Instance.Content); + + Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 5, (int)(width / 4), (int)(height / 20)), text = "ZoFo", fontColor = Color.Black, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts/Font"}); + + + Button playButton = new Button(Manager) + { + rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + height / 20 + height / 40, (int)(width / 5), (int)(height / 20)), + text = "Play", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + playButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new SelectModeMenu()); + }; + Elements.Add(playButton); + 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", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + optionButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new OptionsGUI()); + }; + Elements.Add(optionButton); + 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", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + exitButton.LeftButtonPressed += () => + { + AppManager.Instance.Exit(); + }; + Elements.Add(exitButton); + + } public override void Update(GameTime gameTime) { - + base.Update(gameTime); } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/OptionsGUI.cs b/ZoFo/GameCore/GUI/OptionsGUI.cs index 7282f70..464da7d 100644 --- a/ZoFo/GameCore/GUI/OptionsGUI.cs +++ b/ZoFo/GameCore/GUI/OptionsGUI.cs @@ -9,19 +9,121 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; namespace ZoFo.GameCore.GUI; public class OptionsGUI : AbstractGUI { + private DrawableUIElement menuBackground; protected override void CreateUI() { - // int width = AppManager.Instance.inGameHUDHelperResolution.X; - // int height = AppManager.Instance.inGameHUDHelperResolution.Y; + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures/GUI/background/options" }; + Elements.Add(menuBackground); + menuBackground.LoadTexture(AppManager.Instance.Content); + + Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 5, (int)(width / 4), (int)(height / 20)), text = "Options", fontColor = Color.Black, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts/Font"}); + + + + Label label_OverallVolume = new Label(Manager) + { fontName = "Fonts/Font", scale = 0.2f, text = "All Volume", fontColor = Color.Black, rectangle = new Rectangle(width / 3, height / 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_OverallVolume); + + Label label_OverallVolume_Percent = new Label(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "", fontColor = Color.Black, rectangle = new Rectangle(width / 2 + width / 10, height / 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_OverallVolume_Percent); + + var slider_OverallVolume = new Slider(Manager) + { rectangle = new Rectangle(width / 2, height / 3, width / 10, height / 20), indentation = 7, textureName = "Textures/GUI/Switch_backgrownd", MinValue = 0, MaxValue = 1 }; + slider_OverallVolume.SetValue(AppManager.Instance.SettingsManager.MainVolume); + slider_OverallVolume.SliderChanged += (newVal) => + { + label_OverallVolume_Percent.text = Math.Round(slider_OverallVolume.GetSliderValue * 100) + "%"; + AppManager.Instance.SettingsManager.SetMainVolume(newVal); + }; + Elements.Add(slider_OverallVolume); + + //-------------------------------------- + + Label label_MusicVolume = new Label(Manager) + { fontName = "Fonts/Font", scale = 0.2f, text = "Music Volume", fontColor = Color.Black, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 1, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_MusicVolume); + + Label label_MusicVolume_Percent = new Label(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "", fontColor = Color.Black, rectangle = new Rectangle(width / 2 + width / 10, height / 3 + (height / 20 + height / 40) * 1, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_MusicVolume_Percent); + + var slider_MusicVolume = new Slider(Manager) + { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 1, width / 10, height / 20), indentation = 7, textureName = "Textures/GUI/Switch_backgrownd", MinValue = 0, MaxValue = 1 }; + slider_MusicVolume.SetValue(AppManager.Instance.SettingsManager.MusicVolume); + slider_MusicVolume.SliderChanged += (newVal) => + { + label_MusicVolume_Percent.text = Math.Round(slider_MusicVolume.GetSliderValue * 100) + "%"; + AppManager.Instance.SettingsManager.SetMusicVolume(newVal); + }; + Elements.Add(slider_MusicVolume); + + //-------------------------------------- + + Label label_EffectsVolume = new Label(Manager) + { fontName = "Fonts/Font", scale = 0.2f, text = "Effects Volume", fontColor = Color.Black, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 2, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_EffectsVolume); + + Label label_EffectsVolume_Percent = new Label(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "", fontColor = Color.Black, rectangle = new Rectangle(width / 2 + width / 10, height / 3 + (height / 20 + height / 40) * 2, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_EffectsVolume_Percent); + + var slider_EffectsVolume = new Slider(Manager) + { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 2, width / 10, height / 20), indentation = 7, textureName = "Textures/GUI/Switch_backgrownd", MinValue = 0, MaxValue = 1 }; + slider_EffectsVolume.SetValue(AppManager.Instance.SettingsManager.SoundEffectsVolume); + slider_EffectsVolume.SliderChanged += (newVal) => + { + label_EffectsVolume_Percent.text = Math.Round(slider_EffectsVolume.GetSliderValue * 100) + "%"; + AppManager.Instance.SettingsManager.SetSoundEffectsVolume(newVal); + }; + Elements.Add(slider_EffectsVolume); + + //-------------------------------------- + + Label lblSwitchMode = new Label(Manager) + { fontName = "Fonts/Font", scale = 0.2f, text = "Resolution set", fontColor = Color.Black, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(lblSwitchMode); + + //var button_left_right_mode = new CheckBox(Manager) { rectangle = new Rectangle(rightBorder - checkboxlength, lblSwitchMode.rectangle.Y - 12, checkboxlength, checkboxlength) }; + //button_left_right_mode.Checked += (newCheckState) => { }; + //Elements.Add(button_left_right_mode); + + + Label label_IsFullScreen = new Label(Manager) + { fontName = "Fonts/Font", scale = 0.2f, text = "Full Screen", fontColor = Color.Black, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 4, width / 40, width / 40), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left }; + Elements.Add(label_IsFullScreen); + + 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); + + //-------------------------------------- + + Button bTExit = new Button(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "<-", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width / 30, height / 30, width / 40, width / 40), textureName = "Textures/GUI/checkboxs_off"}; + Elements.Add(bTExit); + bTExit.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new MainMenuGUI()); + }; + } public override void Update(GameTime gameTime) { - + base.Update(gameTime); } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/SelectModeMenu.cs b/ZoFo/GameCore/GUI/SelectModeMenu.cs index b08e782..5b1320b 100644 --- a/ZoFo/GameCore/GUI/SelectModeMenu.cs +++ b/ZoFo/GameCore/GUI/SelectModeMenu.cs @@ -9,19 +9,83 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; namespace ZoFo.GameCore.GUI; public class SelectModeMenu : AbstractGUI { + private DrawableUIElement menuBackground; protected override void CreateUI() { - // int width = AppManager.Instance.inGameHUDHelperResolution.X; - // int height = AppManager.Instance.inGameHUDHelperResolution.Y; + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures/GUI/background/selectMode" }; + Elements.Add(menuBackground); + menuBackground.LoadTexture(AppManager.Instance.Content); + + Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 6, (int)(width / 4), (int)(height / 20)), text = "Select mode", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts/Font"}); + + Button singleButton = new Button(Manager) + { + rectangle = new Rectangle(width / 4 - (width / 7) / 2, height / 2, (int)(width / 7), (int)(height / 20)), + text = "singleplayer", + scale = 0.3f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + singleButton.LeftButtonPressed += () => + { + // single + Server server = new Server(); + Client client = new Client(); + server.CreateRoom(1); + client.JoinYourself(server.MyIp.Port); + 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); + Button optionButton = new Button(Manager) + { + rectangle = new Rectangle(width / 2 + width / 4 - (width / 7) / 2, height / 2, (int)(width / 7), (int)(height / 20)), + text = "multiplayer", + scale = 0.3f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + optionButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new SelectingServerGUI()); + // multi + + // ваш код здесь + }; + Elements.Add(optionButton); + + Button bTExit = new Button(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "<-", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width / 30, height / 30, width / 40, width / 40), textureName = "Textures/GUI/checkboxs_off"}; + Elements.Add(bTExit); + bTExit.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new MainMenuGUI()); + }; } public override void Update(GameTime gameTime) { - + base.Update(gameTime); } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/SelectingServerGUI.cs b/ZoFo/GameCore/GUI/SelectingServerGUI.cs index 0a7f049..fafc259 100644 --- a/ZoFo/GameCore/GUI/SelectingServerGUI.cs +++ b/ZoFo/GameCore/GUI/SelectingServerGUI.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Net; using System.Xml; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; @@ -9,19 +10,107 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; namespace ZoFo.GameCore.GUI; public class SelectingServerGUI : AbstractGUI { + private DrawableUIElement menuBackground; protected override void CreateUI() { - // int width = AppManager.Instance.inGameHUDHelperResolution.X; - // int height = AppManager.Instance.inGameHUDHelperResolution.Y; + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures/GUI/background/join" }; + Elements.Add(menuBackground); + menuBackground.LoadTexture(AppManager.Instance.Content); + + Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 7, (int)(width / 4), (int)(height / 20)), text = "Select server", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts/Font"}); + + TextBox ipBox = new TextBox(Manager) + { + rectangle = new Rectangle(width / 4 - (width / 4) / 2, height / 4, (int)(width / 4), (int)(height / 20)), + text = "ip", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + textAligment = MonogameLibrary.UI.Enums.TextAligment.Left, + fontName = "Fonts/Font" + }; + ipBox.TextChanged += input => { + if (input == "ip") + { + ipBox.text = ""; ipBox.fontColor = Color.White; + } + }; + ipBox.StopChanging += input => { + if (input.Length == 0) + { + ipBox.fontColor = Color.White; + ipBox.text = "ip"; + } + }; + Elements.Add(ipBox); + Button joinButton = new Button(Manager) + { + rectangle = new Rectangle(width / 4 + (width / 4) / 2, height / 4, (int)(width / 15), (int)(height / 20)), + text = "Join", + scale = 0.3f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + joinButton.LeftButtonPressed += () => + { + + // join + Client client = new Client(); + var endpoint = ipBox.text.Split(':'); + int port; + if (int.TryParse(endpoint[1], out port)) + { + client.JoinRoom(endpoint[0], port); + AppManager.Instance.SetClient(client); + AppManager.Instance.SetGUI(new WaitingForPlayersGUI(false)); + } + // ваш код здесь + }; + Elements.Add(joinButton); + Button hostButton = new Button(Manager) + { + rectangle = new Rectangle(width / 4 + (width / 4) / 2 + (width / 15), height / 4, (int)(width / 15), (int)(height / 20)), + text = "Host", + scale = 0.3f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + hostButton.LeftButtonPressed += () => + { + + // host + Server server = new Server(); //Server Logic MultiPlayer + server.CreateRoom(5); + AppManager.Instance.SetServer(server); + string key = server.MyIp.ToString(); + AppManager.Instance.debugHud.Set(key, "MultiPlayer"); + // ваш код здесь + AppManager.Instance.SetGUI(new WaitingForPlayersGUI(true)); + }; + Elements.Add(hostButton); + + Button bTExit = new Button(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "<-", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width / 30, height / 30, width / 40, width / 40), textureName = "Textures/GUI/checkboxs_off"}; + Elements.Add(bTExit); + bTExit.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new SelectModeMenu()); + }; } public override void Update(GameTime gameTime) { - + base.Update(gameTime); } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs b/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs index 893efc6..12a67b9 100644 --- a/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs +++ b/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs @@ -9,19 +9,62 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using MonogameLibrary.UI.Base; using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; namespace ZoFo.GameCore.GUI; public class WaitingForPlayersGUI : AbstractGUI { + private DrawableUIElement menuBackground; + private bool isHost; + private Label ip; + + public WaitingForPlayersGUI(bool isHost) + { + this.isHost = isHost; + } protected override void CreateUI() { - // int width = AppManager.Instance.inGameHUDHelperResolution.X; - // int height = AppManager.Instance.inGameHUDHelperResolution.Y; + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures\\GUI\\background\\Waiting" }; + Elements.Add(menuBackground); + menuBackground.LoadTexture(AppManager.Instance.Content); + // string pcIp = + ip = new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 7, (int)(width / 4), (int)(height / 20)), text = AppManager.Instance.server.MyIp.ToString(), fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font3" }; + Elements.Add(ip); + if (isHost) + { + Button startButton = new Button(Manager) + { + rectangle = new Rectangle(width / 2 - (width / 15) / 2, height / 2 + height / 4, (int)(width / 15), (int)(height / 20)), + text = "Start", + scale = 0.3f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + startButton.LeftButtonPressed += () => + { + // start + + // ваш код здесь + }; + Elements.Add(startButton); + } + + Button bTExit = new Button(Manager) + { fontName = "Fonts/Font3", scale = 0.4f, text = "<-", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width / 30, height / 30, width / 40, width / 40), textureName = "Textures/GUI/checkboxs_off"}; + Elements.Add(bTExit); + bTExit.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new SelectingServerGUI()); + }; } public override void Update(GameTime gameTime) { - + base.Update(gameTime); } } \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/AppManager.cs b/ZoFo/GameCore/GameManagers/AppManager.cs index 495a618..4381cfd 100644 --- a/ZoFo/GameCore/GameManagers/AppManager.cs +++ b/ZoFo/GameCore/GameManagers/AppManager.cs @@ -8,8 +8,10 @@ using DangerousD.GameCore.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; +using ZoFo.GameCore.GameManagers.ItemManager; using ZoFo.GameCore.GUI; using static System.Collections.Specialized.BitVector32; +using MonogameLibrary.UI.Base; namespace ZoFo.GameCore.GameManagers { @@ -19,39 +21,56 @@ namespace ZoFo.GameCore.GameManagers private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; - + + public static AppManager Instance { get; private set; } public GameState gamestate; public AbstractGUI currentGUI; - //public Client client; - //public Server server; + public DebugHUD debugHud; + public Point CurentScreenResolution = new Point(1920, 1080); + public Client client; + public Server server; + - #region Managers - - public InputManager InputManager; - public AnimationBuilder animationBuilder{get;set; } + public InputManager InputManager; + public ItemManager.ItemManager ItemManager; + public SettingsManager SettingsManager; + public SoundManager SoundManager; + + public AnimationBuilder animationBuilder { get; set; } #endregion public AppManager() { _graphics = new GraphicsDeviceManager(this); + SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y); + // FulscrreenSwitch(); + + Content.RootDirectory = "Content"; IsMouseVisible = true; Instance = this; InputManager = new InputManager(); + SettingsManager = new SettingsManager(); + SettingsManager.LoadSettings(); + SoundManager = new SoundManager(); + SoundManager.LoadSounds(); + - - + currentGUI = new MainMenuGUI(); + debugHud = new DebugHUD(); + IsMouseVisible = false; } protected override void Initialize() { - + currentGUI.Initialize(); + debugHud.Initialize(); base.Initialize(); @@ -60,9 +79,10 @@ namespace ZoFo.GameCore.GameManagers protected override void LoadContent() { _spriteBatch = new SpriteBatch(GraphicsDevice); - - - + debugHud.LoadContent(); + currentGUI.LoadContent(); + animationBuilder = new AnimationBuilder(); + animationBuilder.LoadAnimations(); } @@ -72,18 +92,20 @@ namespace ZoFo.GameCore.GameManagers Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); + debugHud.Set("key", "value"); + InputManager.Update(); - //currentGUI.Update(); + currentGUI.Update(gameTime); switch (gamestate) { case GameState.NotPlaying: break; case GameState.HostPlaying: - //server.Update(GameTime gameTime); - //client.Update(GameTime gameTime); + server.Update(gameTime); + client.Update(gameTime); break; case GameState.ClientPlaying: - //server.Update(GameTime gameTime); + server.Update(gameTime); break; default: break; @@ -96,18 +118,22 @@ namespace ZoFo.GameCore.GameManagers { GraphicsDevice.Clear(Color.CornflowerBlue); - - //currentGUI.Draw(_spriteBatch); + currentGUI.Draw(_spriteBatch); + debugHud.Draw(_spriteBatch); + + // Pointwrap + _spriteBatch.Begin(samplerState: SamplerState.PointWrap); 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); } @@ -118,13 +144,29 @@ namespace ZoFo.GameCore.GameManagers public void SetGUI(AbstractGUI gui) { currentGUI = gui; + currentGUI.Initialize(); + currentGUI.LoadContent(); - //TODO + //TODO } public void GameEnded(Dictionary lootIGot) { //TODO } + + public void SetResolution(int x, int y) + { + _graphics.PreferredBackBufferWidth = x; + _graphics.PreferredBackBufferHeight = y; + } + + public void FulscrreenSwitch() + { + _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/CollisionManager/CollisionComponent.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionComponent.cs index 5f69441..f22b906 100644 --- a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionComponent.cs +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionComponent.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; -using ZoFo.GameCore.GameObjects; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; namespace ZoFo.GameCore.GameManagers.CollisionManager { diff --git a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs index 05808b4..193d540 100644 --- a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs @@ -88,27 +88,15 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager { newRect.Y = tryingRectY.Y;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК } - - - - - //} } //обновление позиции объекта public void UpdateObjectsPositions() { - + } - //получение объекта на поле(карте) - //public void GetObjectInArea(Rectangle area) - //{ - - //} - - //регистрация компонента(его коллизии) public void Register(CollisionComponent component) { 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/ItemManager/EquippableItemInfo.cs b/ZoFo/GameCore/GameManagers/ItemManager/EquippableItemInfo.cs new file mode 100644 index 0000000..5bffce5 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/ItemManager/EquippableItemInfo.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.ItemManager +{ + class EquippableItemInfo : ItemInfo + { + bool IsEquiped; //экипирован ли предмет + public EquippableItemInfo(string tag) : base(tag) + { + + } + } +} diff --git a/ZoFo/GameCore/GameManagers/ItemManager/ItemInfo.cs b/ZoFo/GameCore/GameManagers/ItemManager/ItemInfo.cs index 68873e4..375d745 100644 --- a/ZoFo/GameCore/GameManagers/ItemManager/ItemInfo.cs +++ b/ZoFo/GameCore/GameManagers/ItemManager/ItemInfo.cs @@ -15,10 +15,23 @@ namespace ZoFo.GameCore.GameManagers.ItemManager Texture2D itemTexture; bool isCraftable; Dictionary resourcesNeededToCraft; + public ItemInfo (string tag) + { + this.tag = tag; + } + public ItemInfo(string tag,string textureName,bool isCraftable, Dictionary resourcesNeededToCraft) + { + this.tag = tag; + this.textureName = textureName; + + this.isCraftable = isCraftable; + this.resourcesNeededToCraft = resourcesNeededToCraft; + } //методы - private void LoadTexture() + public void LoadTexture() { //я что-то хз как это + itemTexture=AppManager.Instance.Content.Load(textureName); } } } diff --git a/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs b/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs index 3585ec4..6d00e0c 100644 --- a/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs +++ b/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace ZoFo.GameCore.GameManagers.ItemManager { - class ItemManager + public class ItemManager { //поля Dictionary tagItemPairs; @@ -15,9 +15,18 @@ namespace ZoFo.GameCore.GameManagers.ItemManager { return tagItemPairs.GetValueOrDefault(tag); } - void LoadItemTexture() + void LoadItemTextures() { - + foreach (var item in tagItemPairs) + { + item.Value.LoadTexture(); + } + } + void Initialize() + { + tagItemPairs.Add("wood", new ItemInfo("wood","wood",false,null)); + tagItemPairs.Add("rock", new ItemInfo("rock", "rock", false, null)); + tagItemPairs.Add("steel", new ItemInfo("steel", "steel", false, null)); } } diff --git a/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs b/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs new file mode 100644 index 0000000..1dfc351 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.ItemManager +{ + /// + /// Класс хранит информацю о количестве ресурсов у игрока + /// + internal class PlayerData + { + Dictionary items; + /// + /// Принимает тэг и крафтит этот объект + /// + /// + public void CraftItem(string itemTag) + { + //TODO + } + } +} diff --git a/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs b/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs index dcea75f..3917575 100644 --- a/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs +++ b/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs @@ -6,9 +6,13 @@ using System.Threading.Tasks; namespace ZoFo.GameCore.GameManagers.ItemManager { - class WeaponItemInfo:ItemInfo + class WeaponItemInfo: EquippableItemInfo { //поля float damage; + + public WeaponItemInfo(string tag) : base(tag) + { + } } } 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 4cd2de9..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 @@ -11,6 +12,7 @@ namespace ZoFo.GameCore.GameManagers.MapManager.MapElements public bool Infinite { get; set; } public int TileHeight { get; set; } public int TileWidth { get; set; } - public List TileSets { get; set; } + public List TileSets { get; set; } + public List Layers { get; set; } } } diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSet.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSet.cs index 26b3627..61eddce 100644 --- a/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSet.cs +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSet.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,5 +9,16 @@ namespace ZoFo.GameCore.GameManagers.MapManager.MapElements { public class TileSet { + public string Image { get; set; } + public string Name { get; set; } + public int ImageHeight { get; set; } + public int ImageWidth { get; set; } + public int Margin { get; set; } + public int Spacing { get; set; } + public int TileCount { get; set; } + public int TileHeight { get; set; } + public int TileWidth { get; set; } + public int Columns { get; set; } + public int FirstGid { get; set; } } } diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSetInfo.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSetInfo.cs new file mode 100644 index 0000000..f53d448 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSetInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.MapManager.MapElements +{ + public class TileSetInfo + { + public int FirstGid { get; set; } + public string Source { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs index d9325e0..d65d74c 100644 --- a/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs +++ b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs @@ -1,21 +1,106 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Linq; +using System.Security.Cryptography; 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 { - public void LoadMap() - { - } - private void LoadTileSet() - { + 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 + var options = new JsonSerializerOptions + { + 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(Path.Combine("Content", "MapData", "TileMaps", tileSetInfo.Source)); + tileSet.FirstGid = tileSetInfo.FirstGid; + tileSets.Add(tileSet); + } + + foreach (var layer in tileMap.Layers) + { + foreach (var chunk in layer.Chunks) + { + for (int i = 0; i < chunk.Data.Length; i++) + { + foreach (var tileSet in tileSets) + { + if (tileSet.FirstGid - chunk.Data[i] <= 0) + { + int number = chunk.Data[i] - tileSet.FirstGid; + + int relativeColumn = number % tileSet.Columns; + int relativeRow = number / tileSet.Columns; + + Rectangle sourceRectangle = new Rectangle(relativeColumn * tileSet.TileWidth, relativeRow * tileSet.TileHeight, + tileSet.TileWidth, tileSet.TileHeight); + + Vector2 position = new Vector2((i % chunk.Width) * tileSet.TileWidth + chunk.X * tileSet.TileWidth, + (i / chunk.Height) * tileSet.TileHeight + chunk.Y * tileSet.TileHeight) ; + + switch (layer.Class) + { + case "Tile": + AppManager.Instance.server.RegisterGameObject(new MapObject(position, new Vector2(tileSet.TileWidth, tileSet.TileHeight), + sourceRectangle, "Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""))); + break; + case "StopObject": + // new StopObject(position, new Vector2(tileSet.TileWidth * _scale, tileSet.TileHeight * _scale), sourceRectangle, tileSet.Name); + break; + default: + break; + } + + } + } + } + } + } } + /// + /// Загружает и парсит 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, 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/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index 033cc30..2a93f71 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -1,55 +1,117 @@ using System; +using System.Collections.Generic; using System.Data.SqlTypes; 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; namespace ZoFo.GameCore.GameManagers.NetworkManager { public class ClientNetworkManager { - private IPAddress iPAddress = IPAddress.Any; - private int port = 7632; - private EndPoint endPoint; + private int port = 0; + private IPEndPoint endPoint; private Socket socket; - delegate void OnDataSent(string Data); - event OnDataSent GetDataSent; // event + List updates = new List(); + public delegate void OnDataSent(string Data); + public event OnDataSent GetDataSent; // event + public bool IsConnected { get { return socket.Connected; } } + public IPEndPoint InfoConnect => (IPEndPoint)socket.LocalEndPoint ?? endPoint; + + public ClientNetworkManager() + { + Init(); + } + + public bool SocketConnected() + { + return socket.Connected; + } + public void Init() //create endPoint, socket { - endPoint = new IPEndPoint(iPAddress, port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } public void SendData() { - + byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(updates)); //нужно сериализовать + socket.Send(bytes); } - public void JoinRoom() // multyplayer + public void AddData(UpdateData UpdateData) { - SendData(); - StartListening(); + updates.Add(UpdateData); } - public void JoinYourself() // single player + public void StopConnection() + { + socket.Shutdown(SocketShutdown.Both); + socket.Close(); + } + + /// + /// приложение пытается подключиться к комнате + /// + /// + /// + public void JoinRoom(string ip, int port) // multyplayer { + + endPoint = new IPEndPoint(IPAddress.Parse(ip), port); + socket.Connect(endPoint); SendData(); - StartListening(); + Thread listen = new Thread(StartListening); + listen.IsBackground = true; + listen.Start(); + } + public void JoinRoom(IPEndPoint endPoint) // multyplayer + { + + this.endPoint = endPoint; + socket.Connect(endPoint); + SendData(); + Thread listen = new Thread(StartListening); + listen.IsBackground = true; + listen.Start(); + } + + /// + /// создается одиночная комната к которой ты подключаешься + /// + public void JoinYourself(int port) // single player + { + endPoint = new IPEndPoint(GetIp(), port); + socket.Connect(endPoint); + SendData(); + Thread listen = new Thread(StartListening); + listen.IsBackground = true; + listen.Start(); + } + + public static IPAddress GetIp() + { + string hostName = Dns.GetHostName(); // Retrive the Name of HOST + string myIP = Dns.GetHostByName(hostName).AddressList[1].ToString();// Get the IP + return IPAddress.Parse(myIP); } //поток 2 public void StartListening() { - socket.Connect(endPoint); - - byte[] bytes = new byte[2048]; - - var countAnsw = socket.Receive(bytes); - - string updates = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновления отосланные сервером + while(socket.Connected) + { + byte[] bytes = new byte[2048]; + var countAnsw = socket.Receive(bytes); + string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером + GetDataSent(update); + } } } } \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 899f610..27e2448 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -1,8 +1,11 @@ -using Microsoft.Xna.Framework.Graphics.PackedVector; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Graphics.PackedVector; 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; @@ -15,50 +18,156 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { public class ServerNetworkManager { - private IPAddress ip = IPAddress.Any; - private int port = 7632; + private IPAddress ip = IPAddress.Parse("127.0.0.1"); + private const int port = 0; private IPEndPoint endPoint; private Socket socket; private List clients; - private List updates; - delegate void OnDataSend(string data); // + public List updates; + public delegate void OnDataSend(string data); + public event OnDataSend GetDataSend; // event + Dictionary managerThread; + Thread serverTheread; + public IPEndPoint InfoConnect => (IPEndPoint)socket.LocalEndPoint ?? endPoint; - public void Init() //create Socket + public ServerNetworkManager() { Init(); } + + /// + /// Initialize varibles and Sockets + /// + private void Init() { + ip = GetIp(); 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); } + /// + /// Получает IP устройства + /// + /// + public static IPAddress GetIp() + { + string hostName = Dns.GetHostName(); // Retrive the Name of HOST + string myIP = Dns.GetHostByName(hostName).AddressList[1].ToString();// Get the IP + return IPAddress.Parse(myIP); + } + + /// + /// отправляет клиенту 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 + + //по 10 паков за раз TODO FIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXIT + List datasToSend = new List(); + for (int i = 0; i < 5 && i + /// добавляет в лист updates новую data + /// + /// + public void AddData(UpdateData data) { - socket.Bind(endPoint); - socket.Listen(10); - for (int i = 0; i < 10; i++) + updates.Add(data); + } + + /// + /// По сути конец игры и отключение игроков + /// + public void CloseConnection() + { + foreach (var item in clients) + { + //Закрывает сокеты клиентов + item.Shutdown(SocketShutdown.Both); + item.Close(); + } + foreach (var item in managerThread) + { + foreach (var socket in clients) + { + //Закрывает потоки клиентов + managerThread[socket].Interrupt(); + } + } + //очищает листы + managerThread.Clear(); + clients.Clear(); + } + + /// + /// Начинает работу сервера (Ожидает подключений) + /// + /// + public void Start(object players) + { + serverTheread = new Thread(StartWaitingForPlayers); + serverTheread.IsBackground = true; + serverTheread.Start(players); + } + + //Потоки Клиентов + /// + /// Слушает игроков, которые хотят подключиться + /// + /// + public void StartWaitingForPlayers(object players) + { + int playNumber = (int)players; + + socket.Listen(playNumber); + for (int i = 0; i < playNumber; i++) { Socket client = socket.Accept(); + Thread thread = new Thread(StartListening); + thread.IsBackground = true; + thread.Start(client); + managerThread.Add(client, thread); clients.Add(client); //добавляем клиентов в лист } - StartListening(); } - public void StartListening()//начать слушать клиентов в самой игре активируют Ивент + /// + /// начать слушать клиентов в самой игре активируют Ивент + /// + /// + private void StartListening(object socket) { - var buff = new byte[1024]; - foreach (var client in clients) + // obj to Socket + Socket client = (Socket)socket; + while (client.Connected) { + var buff = new byte[1024]; var answ = client.Receive(buff); string response = Encoding.UTF8.GetString(buff, 0, answ); - // List updateDatas = + GetDataSend(response); } + Thread.Sleep(-1); + } } } 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/IUpdateData.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/IUpdateData.cs deleted file mode 100644 index edf1cd5..0000000 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/IUpdateData.cs +++ /dev/null @@ -1,15 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates -{ - public interface IUpdateData - { - public int IdEntity { get; set; } //Id объекта - public string UpdateType { get; set; } //тип обновления - } -} diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs index 6f07770..4e9b972 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateAnimation.cs @@ -6,9 +6,11 @@ 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..71f95a2 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateEntityHealth.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateEntityHealth.cs @@ -6,9 +6,11 @@ using System.Threading.Tasks; namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient { - public class UpdateEntityHealth : IUpdateData//хранит новое хп entity + /// + /// Обнивляет хп сущности + /// + public class UpdateEntityHealth : UpdateData { - 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..d89c9a7 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameEnded.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameEnded.cs @@ -6,9 +6,11 @@ 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..0ca86a4 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs @@ -6,9 +6,13 @@ 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"; } + public string GameObjectType; + public string GameObjectId; } } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectDeleted.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectDeleted.cs new file mode 100644 index 0000000..88d4e98 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectDeleted.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient +{ + /// + /// Хранит объект, который надо удлить + /// + public class UpdateGameObjectDeleted : UpdateData + { + public UpdateGameObjectDeleted() { UpdateType = "UpdateGameObjectDeleted"; } + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs new file mode 100644 index 0000000..e42f0f4 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs @@ -0,0 +1,10 @@ +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; + +/// +/// При попытке взаимодействия с объектом +/// +public class UpdateInteraction : UpdateData +{ + public int IdEntity { get; set; } + public string UpdateType { get; set; } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteractionReady.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteractionReady.cs new file mode 100644 index 0000000..db4d01d --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteractionReady.cs @@ -0,0 +1,14 @@ +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; + +/// +/// При изменении возможности повзаимодействовать с объектом +/// +/// +/// +public class UpdateInteractionReady(int idEntity, bool isReady) + : UpdateData +{ + public int IdEntity { get; set; } = idEntity; + public string UpdateType { get; set; } + public bool IsReady { get; set; } = isReady; +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs index e7f8a51..2337f74 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs @@ -6,9 +6,11 @@ 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..100c8d0 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs @@ -6,9 +6,11 @@ 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..8d93d7b 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs @@ -6,9 +6,11 @@ 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..0799653 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateTileCreated.cs @@ -0,0 +1,26 @@ +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/UpdateData.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/UpdateData.cs new file mode 100644 index 0000000..a96b270 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/UpdateData.cs @@ -0,0 +1,32 @@ + +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; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates +{ + [JsonDerivedType(typeof(UpdateAnimation))] + [JsonDerivedType(typeof(UpdateEntityHealth))] + [JsonDerivedType(typeof(UpdateGameEnded))] + [JsonDerivedType(typeof(UpdateGameObjectCreated))] + [JsonDerivedType(typeof(UpdateGameObjectDeleted))] + [JsonDerivedType(typeof(UpdateLoot))] + [JsonDerivedType(typeof(UpdatePlayerParametrs))] + [JsonDerivedType(typeof(UpdatePosition))] + [JsonDerivedType(typeof(UpdateTileCreated))] + [JsonDerivedType(typeof(UpdateInput))] + [JsonDerivedType(typeof(UpdatePlayerExit))] + [JsonDerivedType(typeof(UpdateInteractionReady))] + [JsonDerivedType(typeof(UpdateInteraction))] + + public class UpdateData + { + public int IdEntity { get; set; } //Id объекта + 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 new file mode 100644 index 0000000..0494dae --- /dev/null +++ b/ZoFo/GameCore/GameManagers/SoundManager.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Audio; +using Microsoft.Xna.Framework.Content; +using System.Linq; +using DangerousD.GameCore.Graphics; +using Newtonsoft.Json; +using Microsoft.Xna.Framework.Media; + +namespace ZoFo.GameCore.GameManagers +{ + public class SoundManager + { + public Dictionary Sounds = new Dictionary(); // словарь со звуками где строка - название файла + public List PlayingSounds = new List(); // список со всеми звуками, которые проигрываются + public static float MaxSoundDistance = 100; // максимальная дальность звука(возможно не нужна) + + public void LoadSounds() // метод для загрузки звуков из папки + { + 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(".wav", "")).ToArray();// папка со звуками там где exe + foreach (var soundFile in soundFiles) + { + Sounds.Add(soundFile, AppManager.Instance.Content.Load("sounds//" + soundFile)); + } + + } + + if (k.Count() > 0) + { + + } + } + + 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.IsLooped = false; + + sound.SoundEffect.Play(); + PlayingSounds.Add(sound); + + /*/ if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) + { + AppManager.Instance.NetworkTasks.Add(new Network.NetworkTask(Vector2.Zero, soundName)); + }/*/ //Ждать пока закончат работу с сетями + } + public void StartSound(string soundName, Vector2 soundPos, Vector2 playerPos, float baseVolume = 1, float pitch = 0) // запустить звук у которого есть позиция + { + 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.Pitch = pitch; + sound.SoundEffect.Play(); + PlayingSounds.Add(sound); + + /*/ if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) + { + AppManager.Instance.NetworkTasks.Add(new Network.NetworkTask(soundPos, soundName)); + }/*/ //Ждать пока закончат работу с сетями + } + public void StopAllSounds() // остановка всех звуков + { + foreach (var sound in PlayingSounds) + sound.SoundEffect.Stop(); + PlayingSounds.Clear(); + } + + public void Update() // апдейт, тут происходит изменение громкости + { + for (int i = 0; i < PlayingSounds.Count; i++) + { + PlayingSounds[i].UpdateVolume(Vector2.Zero); + if (PlayingSounds[i].SoundEffect.State == SoundState.Stopped) + { + PlayingSounds.Remove(PlayingSounds[i]); + i--; + } + } + return; + + /*/var player = AppManager.Instance.GameManager.GetPlayer1; + if (player != null) + { + for (int i = 0; i < PlayingSounds.Count; i++) + { + if (!PlayingSounds[i].isAmbient) + PlayingSounds[i].SoundEffect.Volume = (float)(MaxSoundDistance - PlayingSounds[i].GetDistanceVol(player.Pos)) / MaxSoundDistance; + if (PlayingSounds[i].SoundEffect.State == SoundState.Stopped) + PlayingSounds.Remove(PlayingSounds[i]); + } + }/*/ + } + } + + public class Sound + { + public SoundEffectInstance SoundEffect { get; set; } + public Vector2 Position { get; set; } // позиция для эффекта + public bool isAmbient { get; } + public float baseVolume { get; set; } = 1; + public float basePich { get; set; } = 0; + public Sound(SoundEffectInstance soundEffect, Vector2 position, bool isAmbient) // конструктор для эффектов по типу криков зомби + { + this.isAmbient = isAmbient; + SoundEffect = soundEffect; + Position = position; + } + 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) // получение дистанции до объедка от игрока + { + return Math.Sqrt(Math.Pow(Position.X - playerPos.X, 2) + Math.Pow(Position.Y - playerPos.Y, 2)) - SoundManager.MaxSoundDistance; + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Bullet.cs b/ZoFo/GameCore/GameObjects/Bullet.cs deleted file mode 100644 index 4e2197d..0000000 --- a/ZoFo/GameCore/GameObjects/Bullet.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; -public class Bullet : Projectile -{ - -} diff --git a/ZoFo/GameCore/GameObjects/Collectable.cs b/ZoFo/GameCore/GameObjects/Collectable.cs deleted file mode 100644 index 7a32b43..0000000 --- a/ZoFo/GameCore/GameObjects/Collectable.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; -public class Collectable : Entity -{ - -} diff --git a/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs b/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs new file mode 100644 index 0000000..fb545a1 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs @@ -0,0 +1,24 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.ZoFo_graphics; + +namespace ZoFo.GameCore.GameObjects.Entities +{ + internal class EntittyForAnimationTests : Entity + { + + //public override GraphicsComponent graphicsComponent { get; } = new GraphicsComponent(new List { "тут пишите название анимации" }, "сдублируйте " + + public override GraphicsComponent graphicsComponent { get; } = new GraphicsComponent(new List { "player_idle_top-right_noweapon" }, "player_idle_top-right_noweapon"); + public EntittyForAnimationTests(Vector2 position) : base(position) + { + graphicsComponent.ObjectDrawRectangle = new Rectangle(0,0,50,50); + position = new Vector2(10, 10); + + } + + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Entity.cs b/ZoFo/GameCore/GameObjects/Entities/Entity.cs new file mode 100644 index 0000000..0c7d453 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Entity.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.ZoFo_graphics; + +namespace ZoFo.GameCore.GameObjects.Entities +{ + public abstract class Entity : GameObject + { + //public override GraphicsComponent graphicsComponent => null; + public CollisionComponent collisionComponent { get; protected set; } + public int Id { get; set; } + protected Entity(Vector2 position) : base(position) + { + } + public virtual void Update() + { + + } + } +} + diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs new file mode 100644 index 0000000..d31d536 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs @@ -0,0 +1,10 @@ +using Microsoft.Xna.Framework; +using System; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables; +public class Collectable : Interactable +{ + public Collectable(Vector2 position) : base(position) + { + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Door.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Door.cs new file mode 100644 index 0000000..f82fe12 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Door.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using ZoFo.GameCore.ZoFo_graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables; + +public class Door : Interactable +{ + public bool isOpened; + + public override GraphicsComponent graphicsComponent { get; } = new(new List { "DoorInteraction" }, "DoorInteraction"); + + public Door(Vector2 position) : base(position) + { + graphicsComponent.actionOfAnimationEnd += _ => { isOpened = !isOpened; }; + } + + public override void OnInteraction() + { + graphicsComponent.StartAnimation("DoorInteraction", isOpened); + } + + +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Interactable.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Interactable.cs new file mode 100644 index 0000000..35a124f --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Interactable.cs @@ -0,0 +1,29 @@ +using Microsoft.Xna.Framework; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; +using ZoFo.GameCore.ZoFo_graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables; + +public class Interactable : Entity +{ + public override GraphicsComponent graphicsComponent => throw new System.NotImplementedException(); + + public Interactable(Vector2 position) : base(position) + { + collisionComponent.OnTriggerEnter += (sender, e) => ChangeInteraction(sender, e, true); + collisionComponent.OnTriggerExit += (sender, e) => ChangeInteraction(sender, e, false); + } + + private void ChangeInteraction(object sender, CollisionComponent e, bool isReady) + { + AppManager.Instance.server.AddData(new UpdateInteractionReady((sender as Player).Id, isReady)); + } + + public virtual void OnInteraction() + { + + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Enemy.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs similarity index 51% rename from ZoFo/GameCore/GameObjects/Enemy.cs rename to ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs index 934da77..f948689 100644 --- a/ZoFo/GameCore/GameObjects/Enemy.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs @@ -1,11 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Net.Mime; -using System.Reflection; -using Microsoft.Xna.Framework.Content; - -namespace ZoFo.GameCore.GameObjects; -public class Enemy : LivingEntity -{ - +using System; +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 new file mode 100644 index 0000000..6842723 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs @@ -0,0 +1,33 @@ +using Microsoft.Xna.Framework; +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 LivingEntity(Vector2 position) : base(position) + { + inputManager = new InputManager(); + } + + public override GraphicsComponent graphicsComponent { get; } = null; + + #region Server side + /*public override void Update() + { + + }*/ + #endregion + +} + + + + diff --git a/ZoFo/GameCore/GameObjects/IPlayerWeaponAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs similarity index 72% rename from ZoFo/GameCore/GameObjects/IPlayerWeaponAttack.cs rename to ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs index f47220e..3fafa2b 100644 --- a/ZoFo/GameCore/GameObjects/IPlayerWeaponAttack.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ZoFo.GameCore.GameObjects +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player { internal interface IPlayerWeaponAttack { diff --git a/ZoFo/GameCore/GameObjects/LootData.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs similarity index 81% rename from ZoFo/GameCore/GameObjects/LootData.cs rename to ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs index 93f67f1..5336e7b 100644 --- a/ZoFo/GameCore/GameObjects/LootData.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ZoFo.GameCore.GameObjects +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player { internal class LootData { diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs new file mode 100644 index 0000000..20bbe18 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -0,0 +1,27 @@ +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/GunAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/GunAttack.cs similarity index 50% rename from ZoFo/GameCore/GameObjects/GunAttack.cs rename to ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/GunAttack.cs index b3a611e..ffa2869 100644 --- a/ZoFo/GameCore/GameObjects/GunAttack.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/GunAttack.cs @@ -4,9 +4,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ZoFo.GameCore.GameObjects +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks { - internal class GunAttack:IPlayerWeaponAttack + internal class GunAttack : IPlayerWeaponAttack { } diff --git a/ZoFo/GameCore/GameObjects/HandAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/HandAttack.cs similarity index 50% rename from ZoFo/GameCore/GameObjects/HandAttack.cs rename to ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/HandAttack.cs index 3d73249..b993cc0 100644 --- a/ZoFo/GameCore/GameObjects/HandAttack.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/HandAttack.cs @@ -4,9 +4,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ZoFo.GameCore.GameObjects +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks { - internal class HandAttack:IPlayerWeaponAttack + internal class HandAttack : IPlayerWeaponAttack { } diff --git a/ZoFo/GameCore/GameObjects/SwordAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs similarity index 50% rename from ZoFo/GameCore/GameObjects/SwordAttack.cs rename to ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs index 507ae6b..508f02f 100644 --- a/ZoFo/GameCore/GameObjects/SwordAttack.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs @@ -4,9 +4,9 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace ZoFo.GameCore.GameObjects +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks { - internal class SwordAttack:IPlayerWeaponAttack + internal class SwordAttack : IPlayerWeaponAttack { } diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs new file mode 100644 index 0000000..b72f394 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Bullet.cs @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000..3ae0f0b --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Projectile.cs @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000..fa20896 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Projectiles/Rock.cs @@ -0,0 +1,10 @@ +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/Entity.cs b/ZoFo/GameCore/GameObjects/Entity.cs deleted file mode 100644 index 0600b1d..0000000 --- a/ZoFo/GameCore/GameObjects/Entity.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using ZoFo.GameCore.GameObjects; -using Microsoft.Xna.Framework.Content; - -namespace ZoFo.GameCore.GameObjects; -public class Entity : GameObject -{ - public int Id{ get; set; } - //public CollisionComponent collisionComponents{ get; set; } - //public AnimationComponent animationComponent{ get; set; } - - // в апдейте может заявляет изменения позиции - public void UpdateLogic() - { - - } - - - - // Методы для клиента - public void UpdateAnimation() - { - - } - public void Draw(ContentManager manager) - { - - } -} diff --git a/ZoFo/GameCore/GameObjects/GameObject.cs b/ZoFo/GameCore/GameObjects/GameObject.cs index 510f160..d3c5d64 100644 --- a/ZoFo/GameCore/GameObjects/GameObject.cs +++ b/ZoFo/GameCore/GameObjects/GameObject.cs @@ -1,6 +1,97 @@ -namespace ZoFo.GameCore.GameObjects; + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.ZoFo_graphics; +using ZoFo.GameCore; -public class GameObject +namespace ZoFo.GameCore.GameObjects; + +public abstract class GameObject { - + public Vector2 position; + + 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() + { + graphicsComponent.ObjectDrawRectangle.X = (int)position.X; //Move To place where Updates Sets your position + graphicsComponent.ObjectDrawRectangle.Y = (int)position.Y; + 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/LivingEntity.cs b/ZoFo/GameCore/GameObjects/LivingEntity.cs deleted file mode 100644 index 44270fa..0000000 --- a/ZoFo/GameCore/GameObjects/LivingEntity.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; -public class LivingEntity : Entity -{ - -} diff --git a/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs new file mode 100644 index 0000000..51a3a4e --- /dev/null +++ b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs @@ -0,0 +1,42 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Diagnostics; +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(); + + /// + /// Создается простой объект на карте - no animations, только где, насколько крупно рисовать, по какой сорс ректанглу рисовать и из какой текстуры + /// + /// + /// + /// + /// + public MapObject(Vector2 position, Vector2 size, Rectangle sourceRectangle, string textureName) : base(position) + { + this.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/Player.cs b/ZoFo/GameCore/GameObjects/Player.cs deleted file mode 100644 index 5a033e3..0000000 --- a/ZoFo/GameCore/GameObjects/Player.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; -public class Player : LivingEntity -{ - -} diff --git a/ZoFo/GameCore/GameObjects/Projectile.cs b/ZoFo/GameCore/GameObjects/Projectile.cs deleted file mode 100644 index 80cbf5a..0000000 --- a/ZoFo/GameCore/GameObjects/Projectile.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; -public class Projectile : LivingEntity -{ - -} diff --git a/ZoFo/GameCore/GameObjects/Rock.cs b/ZoFo/GameCore/GameObjects/Rock.cs deleted file mode 100644 index 1ff7a29..0000000 --- a/ZoFo/GameCore/GameObjects/Rock.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; -public class Rock : Projectile -{ - -} diff --git a/ZoFo/GameCore/GameObjects/StopObject.cs b/ZoFo/GameCore/GameObjects/StopObject.cs deleted file mode 100644 index cddb0d5..0000000 --- a/ZoFo/GameCore/GameObjects/StopObject.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace ZoFo.GameCore.GameObjects; - -public class StopObject -{ - -} diff --git a/ZoFo/GameCore/GameObjects/Tile.cs b/ZoFo/GameCore/GameObjects/Tile.cs deleted file mode 100644 index 16cc1c9..0000000 --- a/ZoFo/GameCore/GameObjects/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 948ee0e..d11eee1 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -1,22 +1,139 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Text; +using System.Text.Json; using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers; +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 List<> entity; //entity + private ServerNetworkManager networkManager; + private int ticks = 0; + public IPEndPoint MyIp { get { return networkManager.InfoConnect; } } + public Server() + { + networkManager = new ServerNetworkManager(); + networkManager.GetDataSend += OnDataSend; - public void OnDataSend(string data) { } - public void CreateRoom() { } - public void StartGame() { } - public void EndGame() { } + } + #region server logic as App + //TODO Comment pls + public void OnDataSend(string 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(UpdateData data)//добавляет в лист updates новую data + { + networkManager.AddData(data); + } + + /// + /// Создает комнату и запускает ожидание подключений + /// + /// + public void CreateRoom(int players) + { + networkManager.Start(players); + } + + /// + /// Запуск игры в комнате + /// + public void StartGame() + { + + //TODO начинает рассылку и обмен пакетами игры + //Грузит карту + + gameObjects = new List(); + entities = new List(); + new MapManager().LoadMap(); + + AppManager.Instance.server.RegisterGameObject(new EntittyForAnimationTests(new Vector2(40, 40))); + } + + /// + /// Добавляет UpdateGameEnded и отключает игроков + /// + public void EndGame() + { + UpdateGameEnded gameEnded = new UpdateGameEnded(); + networkManager.AddData(gameEnded); + networkManager.CloseConnection(); + } + 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 RegisterGameObject(GameObject 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 + return; + } + + AddData(new UpdateGameObjectCreated() + { GameObjectType = gameObject.GetType().Name } + ); + + } } + #endregion } diff --git a/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs b/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs index d18303c..04b2cbf 100644 --- a/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs +++ b/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs @@ -13,11 +13,12 @@ namespace DangerousD.GameCore.Graphics public void LoadAnimations() { Animations = new List(); - string[] animationFilesNames = Directory.GetFiles("../../../Content/animations"); + string[] animationFilesNames = Directory.GetFiles("../../../Content/Textures/Animations"); StreamReader reader; foreach (var fileName in animationFilesNames) { + if (!fileName.EndsWith(".animation")) continue; reader = new StreamReader(fileName); string json = reader.ReadToEnd(); AnimationContainer animation = JsonConvert.DeserializeObject(json); diff --git a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs index a60cee1..c0c0631 100644 --- a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs +++ b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs @@ -15,13 +15,18 @@ namespace ZoFo.GameCore.ZoFo_graphics public class GraphicsComponent { + public Rectangle ObjectDrawRectangle; + + + 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 = 1; public int parentId; + public bool reverse; public AnimationContainer CurrentAnimation { get @@ -60,8 +65,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 +112,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)) @@ -107,7 +127,7 @@ namespace ZoFo.GameCore.ZoFo_graphics } } - public void StartAnimation(string startedanimationId) + public void StartAnimation(string startedanimationId, bool reverse = false) { /* if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer) @@ -119,8 +139,13 @@ namespace ZoFo.GameCore.ZoFo_graphics } } */ - currentFrame = 0; + this.reverse = reverse; + currentAnimation = animations.Find(x => x.Id == startedanimationId); + if (reverse) + currentFrame = currentAnimation.FramesCount; + else + currentFrame = 0; buildSourceRectangle(); SetInterval(); @@ -135,25 +160,45 @@ namespace ZoFo.GameCore.ZoFo_graphics SetInterval(); } + private void AnimationEnd() + { + if (!currentAnimation.IsCycle) + { + if (actionOfAnimationEnd != null) + { + actionOfAnimationEnd(currentAnimation.Id); + } + currentAnimation = neitralAnimation; + + } + + currentFrame = 0; + } + public void Update() { + if (currentAnimation is null) + { + return; + } if (interval == 0) { - currentFrame++; - if (currentAnimation.FramesCount <= currentFrame) + if (reverse) { - if (!currentAnimation.IsCycle) + currentFrame--; + if (currentFrame <= 0) { - if (actionOfAnimationEnd != null) - { - actionOfAnimationEnd(currentAnimation.Id); - } - currentAnimation = neitralAnimation; - + AnimationEnd(); + reverse = false; + } + } + else + { + currentFrame++; + if (currentAnimation.FramesCount <= currentFrame) + { + AnimationEnd(); } - - currentFrame = 0; - } buildSourceRectangle(); @@ -277,6 +322,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 afb5dfe..c3a2b36 100644 --- a/ZoFo/ZoFo.csproj +++ b/ZoFo/ZoFo.csproj @@ -10,6 +10,11 @@ app.manifest Icon.ico + + + + + @@ -26,6 +31,10 @@ + + + +