diff --git a/.$architecture.drawio.png.bkp b/.$architecture.drawio.png.bkp new file mode 100644 index 0000000..c83ffee Binary files /dev/null and b/.$architecture.drawio.png.bkp differ diff --git a/.$architecture.drawio.png.dtmp b/.$architecture.drawio.png.dtmp new file mode 100644 index 0000000..d9ee756 --- /dev/null +++ b/.$architecture.drawio.png.dtmp @@ -0,0 +1,635 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.run/ZoFo.run.xml b/.run/ZoFo.run.xml new file mode 100644 index 0000000..315a66b --- /dev/null +++ b/.run/ZoFo.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file 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..4203494 --- /dev/null +++ b/AnimationsFileCreator/Program.cs @@ -0,0 +1,71 @@ +using Microsoft.Xna.Framework; +using Newtonsoft.Json; +using System; +using NativeFileDialogSharp; +using System.IO; +using System.Linq; +using System.Reflection.Metadata; +using ZoFo.GameCore.Graphics; +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/GameSettings.txt b/GameSettings.txt new file mode 100644 index 0000000..f5dcd93 --- /dev/null +++ b/GameSettings.txt @@ -0,0 +1 @@ +{"IsFullScreen":false,"MainVolume":1.0,"MusicVolume":1.0,"SoundEffectsVolume":1.0,"Resolution":{"X":1440,"Y":900}} \ No newline at end of file diff --git a/Install-Package b/Install-Package new file mode 100644 index 0000000..e69de29 diff --git a/MonogameLibrary/MonogameLibrary.csproj b/MonogameLibrary/MonogameLibrary.csproj index 16a23b2..12f2ed5 100644 --- a/MonogameLibrary/MonogameLibrary.csproj +++ b/MonogameLibrary/MonogameLibrary.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 enable enable 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/ItemDisplayLabel.cs b/MonogameLibrary/UI/Elements/ItemDisplayLabel.cs new file mode 100644 index 0000000..1e637fb --- /dev/null +++ b/MonogameLibrary/UI/Elements/ItemDisplayLabel.cs @@ -0,0 +1,79 @@ +using Microsoft.Xna.Framework.Graphics; +using MonogameLibrary.UI.Base; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MonogameLibrary.UI.Enums; +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using Microsoft.Xna.Framework.Content; + +namespace MonogameLibrary.UI.Elements; + +public class ItemDisplayLabel : DrawableUIElement +{ + public int count; + public string itemTextureName; + private Texture2D itemTexture; + public Color fontColor1; + protected UIManager Manager; + public string fontName1; + public string text1; + public float scale1; + private DrawableUIElement icon; + + + public ItemDisplayLabel(UIManager manager) : base(manager) + { + Manager = manager; + } + + public void Initialize() + { + icon = new DrawableUIElement(Manager) + { + rectangle = new Rectangle(rectangle.X + rectangle.Height / 3 / 2, rectangle.Y + rectangle.Height / 3 / 2, rectangle.Height / 3 * 2, rectangle.Height / 3 * 2), + mainColor = Color.White, textureName = itemTextureName + }; + Label itemName = new Label(Manager) + { + rectangle = new Rectangle(rectangle.X + rectangle.Height / 3 / 2 + rectangle.Height / 3 * 2, rectangle.Y + rectangle.Height / 3 / 2, rectangle.Width / 3, rectangle.Height / 3 * 2), + fontColor = fontColor1, text = text1, scale = scale1, fontName = fontName1, mainColor = Color.Transparent + }; + Label itemCount = new Label(Manager) + { + rectangle = new Rectangle(rectangle.X + rectangle.Width - (int)(rectangle.Height / 3 * 2.5), rectangle.Y + rectangle.Height / 3 / 2, rectangle.Height / 3 * 2, rectangle.Height / 3 * 2), + fontColor = fontColor1, text = count.ToString(), scale = scale1, fontName = fontName1, mainColor = Color.Transparent + }; + } + + public override void LoadTexture(ContentManager content) + { + icon.LoadTexture(content); + base.LoadTexture(content); + if (itemTextureName == "") + { + itemTexture = new Texture2D(Manager.GraphicsDevice, 1, 1); + itemTexture.SetData(new Color[] { mainColor }); + } + else + { + try + { + itemTexture = content.Load(itemTextureName); + } + catch + { + itemTexture = new Texture2D(Manager.GraphicsDevice, 1, 1); + itemTexture.SetData(new Color[] { mainColor }); + } + } + } + + public override void Draw(SpriteBatch _spriteBatch) + { + base.Draw(_spriteBatch); + } +} \ No newline at end of file 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/MonogameLibrary/UI/Elements/itemDisplayButton.cs b/MonogameLibrary/UI/Elements/itemDisplayButton.cs new file mode 100644 index 0000000..0a29c4f --- /dev/null +++ b/MonogameLibrary/UI/Elements/itemDisplayButton.cs @@ -0,0 +1,79 @@ +using Microsoft.Xna.Framework.Graphics; +using MonogameLibrary.UI.Base; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MonogameLibrary.UI.Enums; +using System; +using System.Collections.Generic; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Threading; +using Microsoft.Xna.Framework.Content; + +namespace MonogameLibrary.UI.Elements; + +public class ItemDisplayButton : DrawableUIElement +{ + public int count; + public string itemTextureName; + private Texture2D itemTexture; + public Color fontColor1; + protected UIManager Manager; + public string fontName1; + public string text1; + public float scale1; + private DrawableUIElement icon; + + + public ItemDisplayButton(UIManager manager) : base(manager) + { + Manager = manager; + } + + public void Initialize() + { + icon = new DrawableUIElement(Manager) + { + rectangle = new Rectangle(rectangle.X + rectangle.Height / 3 / 2, rectangle.Y + rectangle.Height / 3 / 2, rectangle.Height / 3 * 2, rectangle.Height / 3 * 2), + mainColor = Color.White, textureName = itemTextureName + }; + Label itemName = new Label(Manager) + { + rectangle = new Rectangle(rectangle.X + rectangle.Height / 3 / 2 + rectangle.Height / 3 * 2, rectangle.Y + rectangle.Height / 3 / 2, rectangle.Width / 3, rectangle.Height / 3 * 2), + fontColor = fontColor1, text = text1, scale = scale1, fontName = fontName1, mainColor = Color.Transparent + }; + Label itemCount = new Label(Manager) + { + rectangle = new Rectangle(rectangle.X + rectangle.Width - (int)(rectangle.Height / 3 * 2.5), rectangle.Y + rectangle.Height / 3 / 2, rectangle.Height / 3 * 2, rectangle.Height / 3 * 2), + fontColor = fontColor1, text = count.ToString(), scale = scale1, fontName = fontName1, mainColor = Color.Transparent + }; + } + + public override void LoadTexture(ContentManager content) + { + icon.LoadTexture(content); + base.LoadTexture(content); + if (itemTextureName == "") + { + itemTexture = new Texture2D(Manager.GraphicsDevice, 1, 1); + itemTexture.SetData(new Color[] { mainColor }); + } + else + { + try + { + itemTexture = content.Load(itemTextureName); + } + catch + { + itemTexture = new Texture2D(Manager.GraphicsDevice, 1, 1); + itemTexture.SetData(new Color[] { mainColor }); + } + } + } + + public override void Draw(SpriteBatch _spriteBatch) + { + base.Draw(_spriteBatch); + } +} \ No newline at end of file diff --git a/ZoFo.sln b/ZoFo.sln index d0636e2..3ea9985 100644 --- a/ZoFo.sln +++ b/ZoFo.sln @@ -1,8 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZoFo", "ZoFo\ZoFo.csproj", "{D63272E5-A54D-4C24-AA48-2945CB1D0BBB}" +# Visual Studio Version 17 +VisualStudioVersion = 17.10.35122.118 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZoFo", "ZoFo\ZoFo.csproj", "{D63272E5-A54D-4C24-AA48-2945CB1D0BBB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonogameLibrary", "MonogameLibrary\MonogameLibrary.csproj", "{D6272E15-AD49-468A-BE0F-D812E8697FAC}" +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 @@ -14,9 +19,16 @@ Global {D63272E5-A54D-4C24-AA48-2945CB1D0BBB}.Debug|Any CPU.Build.0 = Debug|Any CPU {D63272E5-A54D-4C24-AA48-2945CB1D0BBB}.Release|Any CPU.ActiveCfg = Release|Any CPU {D63272E5-A54D-4C24-AA48-2945CB1D0BBB}.Release|Any CPU.Build.0 = Release|Any CPU - {D6272E15-AD49-468A-BE0F-D812E8697FAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D6272E15-AD49-468A-BE0F-D812E8697FAC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D6272E15-AD49-468A-BE0F-D812E8697FAC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D6272E15-AD49-468A-BE0F-D812E8697FAC}.Release|Any CPU.Build.0 = Release|Any CPU + {40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {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 EndGlobalSection EndGlobal diff --git a/ZoFo/Content/Content.mgcb b/ZoFo/Content/Content.mgcb index ddc4c36..14c8973 100644 --- a/ZoFo/Content/Content.mgcb +++ b/ZoFo/Content/Content.mgcb @@ -13,3 +13,858 @@ #---------------------------------- 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/TileSets/tileset 1 collision.tsj +/copy:MapData/TileSets/tileset 1 collision.tsj + +#begin MapData/TileSets/TileSet 1.tsj +/copy:MapData/TileSets/TileSet 1.tsj + +#begin MapData/TileSets/TilesetNature.tsj +/copy:MapData/TileSets/TilesetNature.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/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/Animations/player_down_idle.animation +/copy:Textures/Animations/player_down_idle.animation + +#begin Textures/Animations/player_down-left_idle.animation +/copy:Textures/Animations/player_down-left_idle.animation + +#begin Textures/Animations/player_down-right_idle.animation +/copy:Textures/Animations/player_down-right_idle.animation + +#begin Textures/Animations/player_idle_down_mining.animation +/copy:Textures/Animations/player_idle_down_mining.animation + +#begin Textures/Animations/player_idle_down-left_mining.animation +/copy:Textures/Animations/player_idle_down-left_mining.animation + +#begin Textures/Animations/player_idle_left_mining.animation +/copy:Textures/Animations/player_idle_left_mining.animation + +#begin Textures/Animations/player_idle_rights_mining.animation +/copy:Textures/Animations/player_idle_rights_mining.animation + +#begin Textures/Animations/player_idle_top_noweapon.animation +/copy:Textures/Animations/player_idle_top_noweapon.animation + +#begin Textures/Animations/player_idle_top-left_mining.animation +/copy:Textures/Animations/player_idle_top-left_mining.animation + +#begin Textures/Animations/player_idle_top-right_noweapon.animation +/copy:Textures/Animations/player_idle_top-right_noweapon.animation + +#begin Textures/Animations/player_idle_top-rights_mining.animation +/copy:Textures/Animations/player_idle_top-rights_mining.animation + +#begin Textures/Animations/player_left_idle.animation +/copy:Textures/Animations/player_left_idle.animation + +#begin Textures/Animations/player_look_down_weapon.animation +/copy:Textures/Animations/player_look_down_weapon.animation + +#begin Textures/Animations/player_look_down.animation +/copy:Textures/Animations/player_look_down.animation + +#begin Textures/Animations/player_look_left_down_weapon.animation +/copy:Textures/Animations/player_look_left_down_weapon.animation + +#begin Textures/Animations/player_look_left_down.animation +/copy:Textures/Animations/player_look_left_down.animation + +#begin Textures/Animations/player_look_left_up_weapon.animation +/copy:Textures/Animations/player_look_left_up_weapon.animation + +#begin Textures/Animations/player_look_left_up.animation +/copy:Textures/Animations/player_look_left_up.animation + +#begin Textures/Animations/player_look_left_weapon.animation +/copy:Textures/Animations/player_look_left_weapon.animation + +#begin Textures/Animations/player_look_left.animation +/copy:Textures/Animations/player_look_left.animation + +#begin Textures/Animations/player_look_right_down_weapon.animation +/copy:Textures/Animations/player_look_right_down_weapon.animation + +#begin Textures/Animations/player_look_right_down.animation +/copy:Textures/Animations/player_look_right_down.animation + +#begin Textures/Animations/player_look_right_up_weapon.animation +/copy:Textures/Animations/player_look_right_up_weapon.animation + +#begin Textures/Animations/player_look_right_up.animation +/copy:Textures/Animations/player_look_right_up.animation + +#begin Textures/Animations/player_look_right_weapon.animation +/copy:Textures/Animations/player_look_right_weapon.animation + +#begin Textures/Animations/player_look_right.animation +/copy:Textures/Animations/player_look_right.animation + +#begin Textures/Animations/player_look_up_weapon.animation +/copy:Textures/Animations/player_look_up_weapon.animation + +#begin Textures/Animations/player_look_up.animation +/copy:Textures/Animations/player_look_up.animation + +#begin Textures/Animations/player_right_idle.animation +/copy:Textures/Animations/player_right_idle.animation + +#begin Textures/Animations/player_running_top_rotate.animation +/copy:Textures/Animations/player_running_top_rotate.animation + +#begin Textures/Animations/player_top_mining.animation +/copy:Textures/Animations/player_top_mining.animation + +#begin Textures/Animations/player_top-left_idle.animation +/copy:Textures/Animations/player_top-left_idle.animation + +#begin Textures/Animations/player_top-right_idle.animation +/copy:Textures/Animations/player_top-right_idle.animation + +#begin Textures/Animations/running_top.animation +/copy:Textures/Animations/running_top.animation + +#begin Textures/Animations/testAnimation.animation +/copy:Textures/Animations/testAnimation.animation + +#begin Textures/Animations/testAnimationExample.animation +/copy:Textures/Animations/testAnimationExample.animation + +#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_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_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.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/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/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/icons/12.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/icons/12.png + +#begin Textures/icons/13.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/icons/13.png + +#begin Textures/icons/14.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/icons/14.png + +#begin Textures/icons/21.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/icons/21.png + +#begin Textures/icons/22.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/icons/22.png + +#begin Textures/icons/5.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/icons/5.png + +#begin Textures/icons/6.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/icons/6.png + +#begin Textures/icons/7.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/icons/7.png + +#begin Textures/icons/8.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/icons/8.png + +#begin Textures/icons/9.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/icons/9.png + +#begin Textures/Test/pickaxe.webp +/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/Test/pickaxe.webp + +#begin Textures/Test/rock.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/Test/rock.jpg + +#begin Textures/Test/steel.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/Test/steel.png + +#begin Textures/Test/wood.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/Test/wood.jpg + +#begin Textures/TileSetImages/Pipes.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/Pipes.png + +#begin Textures/TileSetImages/Tilelist1.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/Tilelist1.png + +#begin Textures/TileSetImages/Tilelist2.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/Tilelist2.png + +#begin Textures/TileSetImages/Tilelist3.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/Tilelist3.png + +#begin Textures/TileSetImages/Tilelist4.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/Tilelist4.png + +#begin Textures/TileSetImages/TilesetDesert.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/TilesetDesert.png + +#begin Textures/TileSetImages/TilesetDungeon.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/TilesetDungeon.png + +#begin Textures/TileSetImages/TilesetElement.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/TilesetElement.png + +#begin Textures/TileSetImages/TilesetField.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/TilesetField.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 + +#begin Textures/TileSetImages/TilesetFloorB.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/TilesetFloorB.png + +#begin Textures/TileSetImages/TilesetFloorDetail.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/TilesetFloorDetail.png + +#begin Textures/TileSetImages/TilesetHole.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/TilesetHole.png + +#begin Textures/TileSetImages/TilesetHouse.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/TilesetHouse.png + +#begin Textures/TileSetImages/TilesetLogic.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/TilesetLogic.png + +#begin Textures/TileSetImages/TilesetNature.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/TilesetNature.png + +#begin Textures/TileSetImages/TilesetRelief.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/TilesetRelief.png + +#begin Textures/TileSetImages/TilesetReliefDetail.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/TilesetReliefDetail.png + +#begin Textures/TileSetImages/TilesetTowers.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/TilesetTowers.png + +#begin Textures/TileSetImages/TilesetVillageAbandoned.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/TilesetVillageAbandoned.png + +#begin Textures/TileSetImages/TilesetWater.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/TilesetWater.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..c7b859f --- /dev/null +++ b/ZoFo/Content/MapData/MapSession.tiled-session @@ -0,0 +1,57 @@ +{ + "Map/SizeTest": { + "height": 4300, + "width": 2 + }, + "activeFile": "TileMaps/main.tmj", + "expandedProjectPaths": [ + "TileSets", + "TileMaps", + "." + ], + "fileStates": { + "TileMaps/TileSets/TileSet 1.tsj": { + "scaleInDock": 1 + }, + "TileMaps/main.tmj": { + "scale": 0.5, + "selectedLayer": 1, + "viewCenter": { + "x": 895, + "y": 270 + } + }, + "TileSets/CollisionTileSet.tsj": { + "scaleInDock": 0.75, + "scaleInEditor": 1 + }, + "TileSets/TileSet 1.tsj": { + "scaleInDock": 1, + "scaleInEditor": 1.5 + }, + "TileSets/WallSet.tsj": { + "scaleInDock": 1, + "scaleInEditor": 1 + } + }, + "last.imagePath": "D:/C#/Я смотрел ваши ХАКАТОНЫ/ZoFo/ZoFo/Content/Textures/TileSetImages", + "openFiles": [ + "TileSets/TileSet 1.tsj", + "TileMaps/main.tmj", + "TileSets/CollisionTileSet.tsj" + ], + "project": "MapSession.tiled-project", + "recentFiles": [ + "TileMaps/main.tmj", + "TileSets/CollisionTileSet.tsj", + "TileSets/TileSet 1.tsj", + "TileSets/WallSet.tsj" + ], + "tileset.lastUsedFormat": "json", + "tileset.margin": 0, + "tileset.spacing": 0, + "tileset.tileSize": { + "height": 16, + "width": 16 + } +} diff --git a/ZoFo/Content/MapData/TileMaps/main.tmj b/ZoFo/Content/MapData/TileMaps/main.tmj new file mode 100644 index 0000000..1f5921c --- /dev/null +++ b/ZoFo/Content/MapData/TileMaps/main.tmj @@ -0,0 +1,1133 @@ +{ "compressionlevel":-1, + "height":20, + "infinite":true, + "layers":[ + { + "chunks":[ + { + "data":[46, 10, 2, 51, 24, 90, 24, 24, 24, 24, 24, 90, 24, 24, 50, 51, + 3, 23, 24, 24, 24, 90, 24, 24, 89, 24, 90, 89, 28, 29, 24, 24, + 50, 51, 24, 90, 24, 89, 24, 28, 29, 90, 24, 24, 25, 23, 24, 24, + 24, 28, 46, 29, 24, 24, 24, 50, 51, 90, 24, 24, 25, 23, 24, 24, + 24, 50, 3, 23, 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, 28, 29, + 24, 89, 50, 51, 28, 29, 24, 24, 24, 24, 24, 28, 46, 46, 10, 32, + 28, 46, 46, 29, 50, 51, 24, 89, 89, 28, 29, 50, 2, 3, 23, 25, + 25, 1, 3, 45, 46, 29, 24, 24, 28, 10, 51, 89, 89, 50, 51, 50, + 25, 45, 10, 2, 2, 51, 90, 24, 50, 51, 24, 24, 24, 24, 24, 24, + 50, 2, 51, 28, 46, 29, 24, 24, 28, 46, 29, 24, 90, 24, 24, 24, + 90, 24, 24, 50, 2, 32, 29, 24, 25, 1, 32, 29, 24, 89, 24, 90, + 24, 90, 24, 24, 24, 25, 23, 28, 10, 32, 10, 32, 29, 24, 24, 24, + 29, 24, 24, 24, 24, 25, 23, 25, 23, 50, 32, 47, 23, 24, 24, 24, + 51, 28, 29, 89, 24, 50, 32, 10, 51, 24, 50, 2, 51, 24, 24, 24, + 24, 50, 32, 46, 29, 28, 47, 23, 24, 28, 46, 29, 28, 29, 24, 89, + 24, 28, 10, 2, 51, 25, 1, 51, 28, 10, 2, 51, 50, 51, 24, 89], + "height":16, + "width":16, + "x":0, + "y":0 + }, + { + "data":[24, 24, 90, 90, 24, 24, 24, 24, 24, 24, 89, 90, 24, 28, 46, 46, + 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 89, 24, 24, 25, 1, 2, + 89, 24, 89, 24, 24, 89, 24, 28, 29, 24, 28, 29, 24, 50, 32, 29, + 24, 24, 24, 24, 24, 24, 24, 50, 51, 28, 10, 32, 46, 29, 25, 23, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 23, 50, 3, 45, 10, 32, + 29, 24, 24, 24, 24, 28, 29, 90, 24, 25, 23, 24, 50, 2, 51, 25, + 23, 28, 46, 46, 46, 47, 23, 24, 24, 50, 51, 24, 24, 28, 29, 50, + 51, 50, 2, 2, 3, 115, 23, 24, 24, 24, 89, 24, 24, 50, 32, 29, + 24, 24, 24, 24, 50, 3, 23, 28, 46, 46, 29, 24, 24, 89, 25, 23, + 24, 24, 24, 24, 24, 50, 32, 10, 2, 2, 32, 46, 29, 24, 50, 51, + 24, 24, 24, 28, 29, 89, 25, 23, 90, 28, 47, 1, 51, 89, 24, 24, + 24, 90, 24, 25, 23, 24, 50, 32, 29, 50, 2, 32, 29, 28, 29, 24, + 24, 24, 24, 25, 45, 46, 46, 10, 32, 29, 24, 50, 32, 10, 51, 24, + 24, 28, 46, 10, 2, 2, 2, 32, 10, 32, 46, 46, 10, 51, 24, 90, + 24, 50, 3, 23, 90, 24, 24, 50, 51, 50, 2, 3, 23, 24, 24, 89, + 28, 29, 50, 32, 29, 89, 24, 24, 24, 90, 24, 50, 32, 46, 46, 46], + "height":16, + "width":16, + "x":16, + "y":0 + }, + { + "data":[46, 29, 89, 24, 24, 28, 47, 23, 24, 24, 28, 10, 51, 24, 24, 24, + 2, 51, 24, 24, 24, 50, 2, 51, 28, 29, 50, 51, 24, 24, 24, 90, + 24, 24, 90, 24, 24, 24, 24, 24, 25, 23, 28, 29, 24, 24, 89, 24, + 24, 90, 24, 24, 24, 24, 24, 24, 50, 32, 47, 23, 24, 89, 24, 24, + 29, 24, 24, 28, 46, 46, 29, 24, 24, 50, 2, 51, 24, 24, 28, 46, + 23, 24, 24, 25, 1, 2, 32, 29, 24, 24, 24, 24, 24, 24, 50, 2, + 32, 46, 46, 47, 23, 24, 50, 51, 24, 24, 90, 24, 89, 24, 24, 24, + 50, 3, 111, 1, 51, 24, 24, 24, 24, 28, 29, 24, 24, 24, 28, 46, + 24, 50, 2, 32, 29, 24, 24, 28, 29, 25, 23, 24, 24, 24, 50, 2, + 89, 24, 90, 50, 51, 28, 29, 50, 51, 50, 32, 29, 24, 24, 24, 24, + 24, 28, 29, 24, 24, 25, 23, 24, 89, 24, 50, 32, 29, 90, 24, 24, + 24, 25, 23, 24, 24, 25, 23, 24, 90, 24, 24, 25, 45, 46, 29, 24, + 28, 47, 45, 29, 24, 50, 32, 29, 24, 89, 24, 25, 114, 1, 32, 29, + 25, 114, 1, 51, 24, 90, 50, 51, 24, 24, 24, 25, 1, 51, 50, 51, + 50, 2, 51, 24, 28, 29, 28, 29, 24, 24, 24, 25, 45, 46, 29, 24, + 46, 29, 24, 24, 50, 51, 25, 23, 24, 24, 28, 10, 2, 2, 32, 29], + "height":16, + "width":16, + "x":32, + "y":0 + }, + { + "data":[28, 29, 28, 46, 10, 51, 89, 24, 28, 29, 25, 111, 45, 29, 24, 25, + 50, 51, 50, 2, 51, 24, 24, 24, 25, 23, 25, 1, 2, 51, 89, 50, + 89, 24, 24, 24, 24, 24, 24, 24, 50, 51, 50, 51, 90, 24, 24, 24, + 24, 89, 28, 46, 29, 24, 24, 24, 24, 24, 24, 28, 29, 24, 24, 24, + 29, 24, 25, 1, 51, 24, 28, 29, 24, 28, 29, 50, 51, 89, 24, 90, + 51, 24, 50, 32, 46, 29, 50, 51, 24, 25, 23, 89, 24, 24, 24, 24, + 24, 28, 29, 25, 115, 45, 29, 24, 24, 25, 23, 24, 24, 24, 24, 24, + 29, 25, 23, 50, 2, 2, 51, 90, 89, 25, 23, 24, 24, 24, 24, 24, + 51, 25, 23, 89, 28, 29, 24, 24, 24, 25, 45, 29, 24, 28, 29, 28, + 24, 50, 32, 29, 25, 23, 24, 24, 24, 50, 2, 51, 24, 50, 32, 10, + 28, 29, 25, 45, 10, 51, 28, 46, 46, 46, 29, 89, 89, 24, 25, 23, + 25, 45, 10, 2, 32, 29, 50, 3, 1, 3, 23, 24, 24, 90, 50, 51, + 50, 2, 32, 29, 25, 23, 24, 50, 32, 10, 32, 46, 29, 24, 24, 90, + 89, 24, 25, 45, 47, 23, 24, 24, 50, 51, 25, 1, 51, 90, 90, 24, + 24, 24, 50, 2, 2, 51, 24, 89, 24, 24, 25, 23, 24, 24, 24, 24, + 24, 28, 29, 24, 28, 46, 29, 24, 24, 24, 50, 51, 24, 89, 28, 46], + "height":16, + "width":16, + "x":48, + "y":0 + }, + { + "data":[23, 28, 47, 23, 24, 25, 114, 23, 28, 46, 46, 46, 46, 46, 46, 47, + 51, 50, 2, 32, 29, 25, 115, 23, 50, 2, 3, 115, 111, 115, 115, 1, + 28, 46, 46, 10, 51, 25, 111, 23, 24, 24, 25, 114, 1, 3, 1, 32, + 50, 2, 2, 51, 24, 50, 2, 51, 28, 29, 50, 2, 32, 10, 51, 25, + 28, 29, 24, 24, 24, 24, 24, 24, 50, 51, 24, 24, 50, 51, 24, 50, + 50, 51, 24, 24, 24, 89, 24, 24, 24, 24, 24, 24, 24, 90, 28, 29, + 90, 24, 24, 90, 28, 46, 29, 24, 90, 24, 24, 24, 24, 24, 50, 51, + 89, 89, 24, 24, 25, 115, 23, 24, 28, 29, 24, 24, 24, 24, 24, 28, + 46, 29, 24, 24, 25, 111, 23, 24, 50, 51, 24, 24, 24, 24, 24, 25, + 2, 51, 89, 90, 50, 2, 32, 29, 24, 24, 28, 29, 24, 24, 90, 25, + 24, 24, 24, 24, 24, 28, 10, 51, 24, 90, 50, 51, 24, 24, 28, 10, + 24, 24, 24, 24, 24, 50, 51, 28, 46, 46, 29, 24, 24, 24, 50, 51, + 24, 24, 28, 46, 29, 24, 89, 25, 1, 2, 32, 29, 24, 24, 28, 46, + 24, 24, 50, 2, 51, 24, 24, 25, 23, 28, 47, 23, 24, 28, 10, 3, + 24, 90, 89, 24, 89, 24, 24, 50, 32, 10, 2, 51, 24, 25, 23, 25, + 29, 24, 89, 24, 24, 24, 24, 89, 25, 23, 24, 24, 24, 25, 23, 50], + "height":16, + "width":16, + "x":64, + "y":0 + }, + { + "data":[23, 25, 114, 45, 46, 46, 46, 46, 46, 46, 47, 45, 47, 23, 24, 50, + 51, 50, 2, 2, 2, 2, 2, 3, 113, 1, 2, 2, 2, 51, 89, 24, + 29, 24, 89, 90, 24, 28, 29, 50, 3, 23, 24, 24, 90, 89, 90, 24, + 23, 90, 28, 46, 46, 10, 51, 90, 50, 32, 46, 46, 29, 24, 24, 24, + 51, 90, 25, 115, 115, 23, 24, 24, 24, 50, 2, 3, 23, 24, 28, 29, + 24, 24, 50, 2, 2, 51, 24, 24, 24, 24, 90, 25, 23, 24, 25, 45, + 28, 29, 24, 24, 28, 29, 24, 24, 24, 24, 24, 25, 23, 28, 47, 111, + 10, 51, 89, 89, 50, 32, 29, 28, 46, 29, 24, 50, 51, 25, 1, 2, + 23, 24, 28, 29, 24, 50, 51, 50, 3, 23, 24, 28, 29, 25, 23, 24, + 23, 89, 50, 32, 29, 89, 24, 24, 25, 45, 46, 10, 51, 25, 23, 89, + 51, 24, 90, 50, 51, 24, 24, 24, 50, 3, 115, 45, 46, 47, 45, 29, + 28, 29, 24, 28, 29, 24, 24, 24, 24, 50, 2, 2, 2, 3, 111, 45, + 10, 32, 29, 50, 51, 28, 46, 29, 89, 24, 24, 24, 24, 25, 115, 1, + 23, 50, 32, 29, 24, 25, 111, 23, 24, 24, 28, 29, 90, 50, 3, 23, + 23, 24, 25, 23, 24, 50, 3, 23, 24, 24, 50, 51, 24, 24, 50, 32, + 51, 90, 50, 51, 24, 24, 25, 23, 24, 24, 24, 24, 24, 24, 24, 50], + "height":16, + "width":16, + "x":80, + "y":0 + }, + { + "data":[3, 23, 90, 50, 32, 10, 3, 115, 111, 45, 47, 111, 45, 46, 10, 2, + 25, 45, 29, 24, 50, 32, 10, 2, 2, 2, 2, 2, 2, 2, 51, 24, + 25, 111, 45, 46, 46, 10, 51, 24, 24, 89, 24, 89, 24, 90, 24, 24, + 25, 114, 111, 111, 1, 51, 28, 29, 28, 46, 46, 29, 24, 24, 90, 89, + 25, 115, 1, 2, 51, 24, 25, 23, 50, 2, 3, 45, 29, 24, 89, 24, + 10, 2, 32, 29, 89, 28, 10, 51, 24, 24, 50, 2, 51, 24, 24, 24, + 23, 90, 50, 32, 29, 25, 45, 29, 89, 24, 24, 24, 24, 24, 24, 24, + 51, 28, 46, 10, 51, 50, 2, 51, 24, 24, 24, 24, 24, 90, 24, 24, + 24, 50, 2, 51, 24, 90, 24, 24, 28, 29, 24, 24, 24, 24, 24, 28, + 89, 24, 28, 46, 29, 24, 24, 24, 25, 45, 29, 24, 24, 24, 28, 10, + 24, 24, 50, 3, 23, 24, 24, 24, 50, 2, 51, 24, 24, 24, 25, 23, + 29, 24, 24, 50, 51, 24, 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, + 32, 46, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 1, 32, 46, 46, 29, 24, 24, 28, 46, 29, 24, 24, 24, 24, 28, + 10, 32, 10, 3, 1, 32, 29, 24, 50, 2, 51, 24, 89, 24, 24, 25, + 51, 25, 23, 25, 45, 10, 32, 46, 29, 24, 24, 24, 24, 89, 90, 50], + "height":16, + "width":16, + "x":96, + "y":0 + }, + { + "data":[51, 24, 24, 25, 23, 24, 25, 114, 1, 51, 24, 90, 24, 25, 23, 50, + 24, 24, 28, 10, 32, 46, 10, 2, 51, 24, 28, 46, 29, 50, 51, 24, + 24, 24, 50, 51, 50, 3, 45, 29, 24, 24, 50, 2, 32, 29, 28, 29, + 90, 24, 24, 24, 24, 50, 2, 51, 24, 24, 90, 28, 47, 45, 10, 51, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 29, 50, 2, 2, 51, 24, + 24, 24, 24, 24, 24, 24, 24, 28, 29, 50, 51, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 28, 29, 50, 51, 24, 24, 24, 89, 90, 28, 29, + 24, 24, 28, 46, 29, 25, 23, 28, 29, 28, 46, 29, 24, 24, 50, 32, + 29, 24, 50, 2, 32, 10, 51, 25, 23, 25, 111, 45, 29, 24, 24, 25, + 51, 24, 24, 24, 50, 51, 24, 50, 32, 10, 3, 1, 32, 29, 24, 50, + 24, 24, 24, 90, 24, 24, 24, 24, 25, 23, 25, 23, 50, 51, 24, 24, + 24, 28, 46, 29, 24, 24, 90, 24, 25, 23, 50, 51, 24, 24, 24, 24, + 24, 25, 112, 23, 28, 46, 46, 29, 50, 51, 24, 24, 89, 28, 29, 24, + 29, 25, 1, 32, 10, 3, 111, 45, 29, 24, 24, 89, 24, 50, 51, 28, + 45, 47, 45, 10, 51, 25, 1, 2, 32, 29, 24, 24, 24, 24, 24, 50, + 2, 2, 3, 23, 24, 50, 51, 24, 50, 51, 24, 24, 24, 24, 24, 24], + "height":16, + "width":16, + "x":112, + "y":0 + }, + { + "data":[24, 50, 32, 29, 24, 25, 23, 90, 50, 32, 46, 46, 46, 29, 24, 24, + 24, 90, 50, 32, 46, 10, 51, 24, 24, 25, 111, 1, 2, 32, 46, 46, + 29, 24, 89, 25, 1, 51, 28, 29, 28, 47, 111, 23, 28, 10, 2, 2, + 32, 29, 90, 50, 51, 24, 50, 51, 50, 2, 3, 23, 50, 32, 29, 28, + 25, 45, 29, 24, 24, 90, 24, 90, 28, 46, 10, 51, 24, 50, 51, 25, + 25, 114, 45, 29, 24, 28, 29, 24, 50, 2, 51, 28, 46, 29, 24, 25, + 50, 2, 2, 51, 24, 25, 23, 24, 28, 46, 46, 10, 2, 51, 24, 25, + 24, 28, 29, 24, 90, 50, 32, 46, 10, 3, 114, 23, 24, 24, 24, 25, + 24, 50, 51, 89, 89, 24, 25, 115, 45, 10, 2, 32, 29, 24, 24, 25, + 29, 89, 24, 24, 24, 90, 25, 1, 2, 32, 29, 25, 23, 24, 89, 25, + 23, 24, 28, 46, 29, 28, 10, 51, 24, 50, 32, 47, 23, 24, 89, 25, + 51, 24, 25, 1, 32, 10, 32, 29, 24, 24, 50, 2, 51, 24, 24, 50, + 24, 28, 47, 23, 50, 51, 50, 51, 89, 24, 28, 46, 29, 24, 24, 24, + 28, 10, 3, 23, 24, 24, 24, 24, 28, 46, 10, 3, 45, 46, 29, 24, + 50, 32, 47, 23, 89, 24, 24, 24, 50, 2, 51, 50, 2, 2, 51, 24, + 24, 50, 3, 23, 24, 24, 24, 24, 90, 24, 89, 24, 24, 24, 24, 24], + "height":16, + "width":16, + "x":0, + "y":16 + }, + { + "data":[25, 23, 28, 47, 23, 24, 24, 24, 24, 24, 89, 89, 50, 2, 3, 1, + 47, 23, 50, 2, 51, 24, 24, 90, 24, 28, 29, 28, 29, 24, 25, 23, + 2, 51, 24, 24, 24, 24, 24, 28, 29, 50, 51, 25, 23, 24, 25, 45, + 29, 24, 24, 24, 89, 24, 24, 50, 32, 29, 24, 50, 51, 28, 10, 2, + 45, 46, 46, 29, 89, 24, 24, 24, 50, 51, 24, 24, 24, 50, 51, 24, + 111, 115, 1, 32, 29, 24, 24, 28, 29, 89, 24, 24, 89, 24, 24, 24, + 111, 1, 32, 10, 51, 24, 24, 50, 51, 24, 24, 24, 24, 24, 24, 24, + 115, 23, 50, 51, 90, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, 24, + 1, 51, 24, 24, 24, 24, 50, 51, 24, 89, 90, 24, 24, 24, 24, 24, + 23, 24, 89, 28, 29, 24, 89, 24, 24, 89, 90, 28, 29, 24, 24, 24, + 23, 24, 28, 47, 45, 46, 29, 24, 28, 46, 29, 50, 51, 24, 24, 24, + 51, 24, 50, 2, 2, 2, 51, 89, 50, 2, 51, 24, 24, 28, 46, 29, + 24, 89, 24, 24, 24, 28, 29, 24, 24, 90, 24, 90, 24, 50, 2, 32, + 24, 90, 24, 24, 90, 50, 51, 24, 24, 89, 24, 24, 24, 28, 29, 50, + 24, 28, 29, 24, 24, 24, 24, 28, 46, 29, 24, 24, 24, 50, 32, 29, + 90, 50, 51, 24, 24, 28, 46, 10, 2, 32, 46, 29, 24, 24, 50, 32], + "height":16, + "width":16, + "x":16, + "y":16 + }, + { + "data":[3, 23, 24, 24, 24, 24, 50, 51, 24, 24, 50, 51, 24, 28, 10, 51, + 50, 32, 29, 24, 24, 24, 24, 24, 89, 90, 24, 24, 24, 50, 51, 24, + 46, 10, 51, 28, 46, 29, 28, 46, 29, 24, 28, 46, 46, 29, 24, 28, + 2, 32, 29, 25, 114, 23, 25, 111, 23, 90, 25, 1, 2, 32, 46, 10, + 24, 50, 51, 50, 2, 51, 25, 1, 32, 46, 47, 23, 24, 25, 1, 32, + 24, 90, 24, 24, 24, 24, 50, 32, 10, 2, 2, 51, 24, 50, 51, 50, + 90, 90, 24, 24, 24, 24, 28, 10, 32, 29, 24, 24, 24, 24, 24, 24, + 24, 90, 24, 24, 24, 24, 25, 45, 47, 23, 24, 24, 24, 24, 24, 24, + 28, 29, 89, 24, 24, 24, 50, 3, 1, 32, 46, 46, 29, 90, 24, 24, + 25, 23, 24, 24, 24, 89, 24, 50, 32, 47, 1, 2, 32, 46, 29, 24, + 50, 32, 29, 24, 24, 24, 28, 46, 10, 3, 45, 46, 10, 2, 32, 46, + 24, 50, 51, 90, 24, 24, 25, 114, 23, 50, 2, 2, 51, 24, 25, 111, + 46, 29, 24, 89, 24, 24, 50, 2, 32, 46, 46, 29, 24, 24, 25, 111, + 2, 51, 24, 24, 24, 90, 90, 90, 25, 112, 1, 51, 24, 24, 50, 2, + 24, 24, 24, 24, 24, 24, 89, 24, 50, 2, 32, 46, 46, 29, 24, 24, + 46, 46, 29, 24, 24, 89, 24, 90, 24, 24, 50, 2, 3, 23, 24, 24], + "height":16, + "width":16, + "x":32, + "y":16 + }, + { + "data":[24, 50, 32, 46, 10, 2, 32, 29, 24, 24, 89, 89, 24, 24, 50, 2, + 24, 24, 50, 3, 23, 24, 25, 23, 24, 24, 24, 24, 24, 24, 89, 24, + 29, 24, 24, 25, 23, 24, 25, 23, 24, 24, 89, 24, 24, 24, 28, 46, + 51, 24, 24, 50, 51, 28, 10, 51, 24, 89, 24, 24, 24, 90, 50, 2, + 29, 24, 90, 24, 89, 25, 23, 24, 28, 29, 24, 24, 24, 90, 24, 24, + 51, 28, 29, 24, 90, 25, 23, 24, 50, 32, 29, 90, 28, 29, 89, 24, + 90, 25, 45, 46, 46, 10, 32, 46, 29, 50, 51, 90, 50, 51, 24, 24, + 89, 25, 114, 115, 111, 23, 25, 1, 51, 24, 28, 46, 29, 28, 29, 24, + 24, 25, 1, 2, 2, 51, 25, 23, 24, 24, 25, 111, 45, 10, 51, 24, + 24, 25, 23, 24, 28, 46, 10, 32, 29, 24, 25, 114, 115, 23, 24, 28, + 29, 50, 51, 24, 50, 2, 32, 10, 32, 46, 10, 2, 2, 32, 29, 50, + 45, 46, 29, 24, 89, 90, 50, 32, 10, 2, 51, 24, 89, 25, 23, 24, + 114, 1, 32, 46, 29, 28, 46, 10, 51, 24, 89, 24, 24, 25, 23, 24, + 2, 32, 10, 2, 51, 50, 2, 51, 90, 24, 24, 24, 24, 50, 51, 24, + 24, 50, 32, 46, 29, 24, 90, 28, 29, 24, 90, 24, 24, 24, 24, 24, + 90, 24, 50, 2, 51, 24, 24, 50, 32, 29, 24, 24, 89, 90, 24, 24], + "height":16, + "width":16, + "x":48, + "y":16 + }, + { + "data":[51, 24, 24, 89, 89, 24, 24, 90, 25, 23, 24, 24, 24, 50, 51, 24, + 89, 28, 29, 24, 24, 89, 24, 24, 50, 51, 24, 90, 24, 28, 29, 28, + 46, 10, 32, 29, 24, 24, 24, 24, 24, 24, 28, 29, 28, 47, 23, 25, + 2, 51, 50, 32, 46, 29, 24, 24, 24, 28, 10, 32, 10, 2, 51, 50, + 24, 24, 24, 50, 2, 51, 24, 24, 24, 25, 45, 10, 51, 24, 24, 28, + 90, 90, 24, 24, 24, 24, 24, 24, 89, 50, 2, 32, 29, 24, 24, 50, + 89, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, 89, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 89, 24, 24, 24, 24, 24, 90, 24, 24, + 28, 46, 46, 29, 24, 24, 24, 90, 24, 24, 89, 24, 24, 24, 28, 29, + 10, 2, 2, 51, 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 25, 23, + 51, 28, 29, 28, 29, 90, 89, 24, 24, 24, 24, 28, 29, 28, 47, 23, + 90, 25, 23, 25, 45, 29, 24, 28, 29, 90, 24, 50, 32, 47, 1, 51, + 24, 25, 23, 25, 1, 51, 24, 50, 32, 46, 29, 24, 50, 2, 51, 24, + 24, 25, 45, 47, 45, 29, 90, 24, 50, 2, 51, 24, 90, 24, 28, 46, + 24, 25, 111, 1, 3, 23, 28, 46, 29, 24, 90, 24, 28, 46, 47, 1, + 24, 50, 2, 51, 25, 23, 50, 2, 51, 28, 29, 24, 25, 115, 114, 23], + "height":16, + "width":16, + "x":64, + "y":16 + }, + { + "data":[24, 28, 29, 24, 24, 24, 25, 23, 90, 90, 28, 46, 29, 24, 24, 24, + 29, 25, 45, 29, 24, 24, 50, 32, 46, 29, 50, 2, 32, 29, 24, 24, + 23, 50, 2, 51, 89, 90, 89, 50, 2, 32, 46, 46, 10, 32, 46, 29, + 32, 29, 89, 28, 29, 24, 24, 24, 24, 25, 111, 111, 23, 50, 3, 23, + 10, 32, 29, 50, 51, 24, 28, 29, 24, 50, 2, 2, 32, 29, 25, 45, + 51, 25, 23, 24, 24, 90, 50, 51, 28, 46, 46, 29, 50, 51, 50, 2, + 24, 25, 23, 24, 24, 24, 28, 46, 10, 2, 2, 51, 24, 24, 24, 24, + 24, 50, 51, 24, 24, 24, 50, 2, 51, 24, 24, 28, 29, 24, 24, 24, + 24, 24, 24, 24, 24, 90, 24, 89, 90, 24, 24, 50, 32, 46, 29, 89, + 89, 28, 29, 24, 24, 24, 24, 28, 29, 24, 24, 24, 50, 2, 32, 29, + 28, 10, 32, 29, 24, 28, 29, 50, 51, 89, 24, 24, 24, 24, 25, 23, + 25, 23, 25, 23, 24, 50, 32, 29, 24, 90, 24, 24, 24, 24, 50, 51, + 50, 51, 50, 51, 90, 24, 25, 23, 24, 24, 24, 24, 90, 24, 90, 24, + 29, 24, 24, 24, 24, 28, 10, 32, 46, 46, 29, 24, 24, 24, 24, 24, + 32, 29, 24, 28, 29, 25, 23, 50, 2, 2, 32, 29, 24, 89, 24, 24, + 25, 23, 24, 50, 51, 50, 51, 24, 24, 24, 50, 32, 29, 28, 29, 24], + "height":16, + "width":16, + "x":80, + "y":16 + }, + { + "data":[24, 25, 23, 25, 111, 23, 50, 2, 51, 28, 29, 24, 24, 24, 24, 24, + 24, 25, 23, 25, 1, 51, 28, 29, 24, 25, 23, 24, 89, 24, 89, 24, + 24, 50, 51, 25, 23, 24, 50, 51, 24, 50, 32, 46, 46, 29, 24, 24, + 24, 24, 24, 50, 51, 24, 24, 28, 29, 89, 25, 111, 111, 23, 24, 24, + 29, 24, 89, 90, 24, 24, 28, 10, 51, 28, 10, 2, 2, 32, 29, 24, + 32, 29, 28, 46, 29, 24, 50, 51, 24, 50, 32, 46, 29, 50, 32, 29, + 50, 51, 50, 3, 23, 90, 90, 24, 28, 29, 50, 2, 51, 24, 50, 51, + 89, 24, 24, 50, 32, 46, 29, 24, 50, 51, 24, 24, 24, 24, 24, 24, + 90, 28, 46, 29, 50, 3, 23, 24, 28, 29, 24, 24, 24, 24, 28, 46, + 24, 25, 1, 51, 89, 50, 51, 24, 50, 51, 24, 24, 24, 24, 25, 115, + 24, 25, 23, 24, 89, 90, 24, 24, 24, 24, 24, 24, 24, 24, 25, 111, + 24, 25, 23, 24, 24, 24, 24, 24, 24, 90, 24, 24, 24, 28, 10, 2, + 24, 50, 32, 46, 46, 46, 29, 24, 24, 24, 28, 29, 28, 10, 51, 24, + 24, 24, 25, 111, 111, 1, 51, 24, 24, 24, 50, 32, 10, 51, 24, 24, + 24, 24, 50, 2, 2, 51, 28, 29, 89, 89, 24, 25, 23, 24, 24, 28, + 24, 24, 24, 90, 24, 24, 50, 32, 29, 24, 24, 25, 23, 24, 28, 10], + "height":16, + "width":16, + "x":96, + "y":16 + }, + { + "data":[24, 28, 47, 23, 24, 24, 28, 29, 24, 24, 24, 24, 24, 28, 29, 24, + 24, 25, 114, 23, 24, 90, 50, 32, 46, 29, 24, 28, 29, 50, 51, 24, + 24, 25, 1, 51, 28, 29, 24, 25, 1, 51, 24, 25, 23, 28, 29, 24, + 24, 25, 23, 28, 10, 51, 24, 50, 51, 24, 24, 50, 51, 50, 32, 46, + 24, 50, 32, 10, 32, 46, 29, 24, 24, 28, 46, 46, 46, 29, 50, 2, + 28, 29, 25, 23, 50, 2, 51, 24, 24, 25, 114, 111, 1, 32, 29, 24, + 50, 51, 25, 45, 46, 29, 28, 29, 90, 25, 1, 2, 51, 50, 51, 28, + 28, 29, 50, 3, 1, 32, 10, 32, 46, 10, 32, 29, 89, 24, 89, 25, + 10, 32, 46, 47, 23, 50, 32, 10, 2, 51, 50, 51, 24, 24, 89, 25, + 23, 25, 111, 111, 23, 28, 10, 32, 46, 29, 24, 24, 24, 90, 24, 25, + 23, 25, 111, 1, 32, 10, 51, 50, 2, 51, 24, 24, 24, 24, 24, 50, + 32, 10, 3, 45, 10, 51, 24, 24, 24, 90, 24, 24, 24, 24, 24, 28, + 50, 51, 25, 114, 23, 89, 24, 24, 24, 24, 89, 24, 24, 90, 24, 50, + 90, 24, 25, 115, 23, 90, 24, 28, 29, 24, 24, 90, 24, 24, 24, 90, + 46, 29, 50, 2, 51, 24, 28, 10, 51, 24, 28, 46, 29, 28, 46, 29, + 2, 32, 46, 29, 24, 28, 10, 51, 24, 24, 50, 2, 51, 50, 3, 23], + "height":16, + "width":16, + "x":112, + "y":16 + }, + + { + "data":[89, 24, 50, 32, 29, 28, 29, 24, 89, 24, 24, 28, 29, 28, 46, 29, + 24, 24, 89, 25, 45, 47, 23, 24, 24, 24, 24, 25, 23, 25, 1, 51, + 46, 29, 90, 50, 2, 2, 51, 28, 29, 24, 90, 50, 51, 50, 32, 46, + 2, 51, 28, 29, 24, 24, 24, 25, 23, 24, 24, 24, 24, 24, 50, 3, + 29, 24, 50, 51, 24, 24, 28, 10, 32, 29, 24, 24, 24, 24, 24, 50, + 51, 24, 24, 24, 24, 24, 50, 32, 47, 23, 24, 24, 90, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 50, 3, 45, 29, 89, 24, 28, 29, 28, + 24, 24, 24, 24, 24, 90, 24, 24, 50, 2, 51, 28, 29, 25, 45, 10, + 24, 24, 24, 24, 24, 24, 28, 29, 24, 24, 28, 10, 32, 10, 2, 51, + 90, 89, 24, 24, 89, 24, 25, 23, 24, 24, 50, 51, 25, 23, 24, 24, + 24, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 28, 10, 51, 24, 24, + 24, 24, 24, 24, 28, 29, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, + 24, 90, 89, 89, 25, 45, 29, 24, 24, 24, 89, 24, 24, 24, 24, 24, + 90, 89, 24, 24, 50, 2, 32, 46, 46, 29, 89, 24, 28, 46, 29, 89, + 24, 24, 90, 89, 24, 24, 50, 2, 2, 51, 28, 29, 50, 2, 51, 90, + 29, 24, 24, 24, 24, 24, 90, 24, 24, 28, 10, 51, 24, 24, 24, 24], + "height":16, + "width":16, + "x":0, + "y":32 + }, + { + "data":[24, 89, 24, 24, 24, 50, 2, 51, 24, 25, 111, 23, 24, 24, 28, 47, + 24, 24, 28, 29, 24, 24, 24, 24, 24, 25, 1, 51, 24, 24, 50, 3, + 29, 24, 50, 32, 29, 24, 90, 24, 24, 25, 23, 24, 24, 24, 90, 25, + 23, 24, 89, 50, 51, 24, 24, 90, 24, 50, 51, 24, 24, 24, 24, 50, + 51, 24, 28, 29, 24, 24, 24, 24, 24, 24, 28, 29, 24, 89, 89, 24, + 24, 28, 10, 32, 46, 29, 90, 24, 24, 24, 50, 51, 24, 24, 28, 29, + 29, 25, 23, 50, 2, 51, 24, 24, 24, 24, 24, 24, 90, 24, 50, 32, + 32, 47, 23, 24, 24, 28, 46, 29, 24, 28, 29, 24, 24, 24, 28, 10, + 50, 2, 51, 28, 29, 25, 115, 45, 29, 50, 51, 89, 28, 29, 50, 32, + 24, 24, 24, 25, 23, 50, 3, 115, 23, 24, 24, 24, 50, 32, 29, 25, + 24, 89, 24, 50, 32, 29, 25, 111, 23, 90, 24, 24, 90, 25, 45, 10, + 24, 24, 24, 24, 50, 51, 25, 112, 45, 29, 24, 24, 28, 47, 1, 51, + 24, 28, 29, 24, 24, 24, 25, 115, 1, 32, 46, 29, 50, 2, 51, 28, + 24, 25, 45, 46, 29, 24, 25, 111, 23, 25, 111, 23, 89, 24, 24, 50, + 24, 50, 2, 2, 51, 24, 50, 2, 51, 50, 3, 23, 24, 24, 89, 24, + 24, 24, 90, 24, 24, 24, 24, 24, 24, 24, 25, 23, 90, 24, 24, 89], + "height":16, + "width":16, + "x":16, + "y":32 + }, + { + "data":[111, 111, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, 24, 28, + 1, 2, 51, 24, 24, 24, 24, 24, 24, 90, 89, 28, 46, 29, 24, 50, + 23, 24, 24, 24, 24, 24, 24, 24, 24, 28, 29, 50, 2, 51, 24, 24, + 51, 28, 29, 89, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 89, 24, + 24, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24, 24, 28, 29, 24, 90, + 24, 24, 25, 45, 29, 90, 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, + 46, 46, 10, 2, 51, 90, 24, 24, 24, 24, 24, 24, 24, 25, 23, 24, + 2, 2, 51, 24, 24, 24, 24, 24, 24, 24, 28, 46, 29, 50, 51, 24, + 29, 90, 24, 90, 24, 24, 24, 28, 29, 24, 50, 2, 32, 46, 29, 24, + 45, 29, 24, 24, 24, 24, 24, 50, 51, 24, 24, 24, 25, 114, 45, 46, + 2, 51, 28, 46, 29, 24, 24, 24, 24, 24, 28, 46, 10, 3, 1, 2, + 24, 28, 47, 1, 51, 24, 24, 24, 24, 24, 50, 3, 23, 25, 23, 90, + 46, 10, 2, 32, 46, 46, 46, 46, 46, 46, 29, 25, 23, 50, 32, 46, + 2, 51, 24, 25, 114, 111, 115, 111, 114, 1, 51, 50, 32, 29, 50, 2, + 24, 24, 24, 50, 3, 111, 1, 2, 2, 32, 46, 46, 10, 32, 29, 24, + 24, 90, 24, 24, 50, 2, 51, 24, 24, 25, 111, 111, 23, 25, 23, 28], + "height":16, + "width":16, + "x":32, + "y":32 + }, + { + "data":[29, 24, 24, 24, 90, 24, 24, 24, 50, 32, 46, 29, 90, 24, 24, 24, + 32, 46, 29, 24, 89, 24, 24, 24, 24, 25, 1, 32, 29, 24, 28, 29, + 50, 2, 51, 24, 24, 89, 24, 24, 24, 25, 23, 50, 32, 29, 50, 51, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 23, 24, 50, 32, 29, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 50, 51, 24, 24, 25, 23, 24, + 28, 29, 24, 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 50, 51, 24, + 25, 23, 24, 24, 28, 46, 29, 28, 29, 24, 24, 89, 24, 24, 24, 24, + 50, 51, 24, 28, 10, 2, 32, 10, 32, 29, 89, 24, 24, 24, 24, 24, + 28, 29, 24, 50, 51, 24, 50, 32, 10, 51, 24, 24, 24, 24, 89, 24, + 10, 32, 46, 46, 46, 29, 24, 50, 51, 24, 24, 24, 24, 24, 28, 29, + 51, 50, 2, 2, 2, 32, 46, 46, 29, 24, 24, 24, 24, 24, 25, 23, + 24, 24, 24, 24, 24, 50, 2, 2, 32, 29, 24, 24, 24, 24, 50, 51, + 46, 29, 90, 24, 90, 90, 24, 24, 50, 32, 29, 89, 24, 24, 24, 24, + 2, 51, 24, 24, 28, 46, 29, 28, 29, 50, 51, 24, 28, 29, 90, 24, + 24, 24, 24, 24, 25, 1, 32, 47, 45, 29, 24, 24, 50, 32, 46, 46, + 29, 24, 24, 24, 50, 51, 25, 114, 114, 23, 24, 24, 24, 25, 1, 3], + "height":16, + "width":16, + "x":48, + "y":32 + }, + { + "data":[24, 24, 24, 24, 50, 32, 29, 90, 24, 25, 45, 46, 10, 2, 2, 51, + 24, 24, 89, 24, 24, 50, 51, 24, 24, 25, 111, 112, 23, 90, 24, 24, + 24, 24, 89, 24, 89, 24, 24, 24, 24, 25, 1, 2, 51, 24, 24, 24, + 24, 24, 24, 28, 46, 46, 46, 46, 29, 50, 51, 89, 90, 24, 24, 24, + 24, 90, 24, 25, 1, 2, 2, 2, 32, 29, 28, 29, 89, 24, 24, 24, + 24, 28, 46, 10, 32, 29, 89, 90, 50, 32, 10, 51, 28, 46, 46, 46, + 24, 50, 2, 51, 25, 23, 24, 24, 28, 10, 51, 24, 50, 3, 111, 1, + 24, 24, 24, 28, 10, 51, 24, 24, 25, 23, 24, 24, 24, 50, 2, 32, + 24, 24, 24, 25, 23, 24, 24, 89, 50, 32, 29, 24, 24, 28, 29, 50, + 24, 24, 24, 50, 32, 29, 28, 46, 29, 50, 51, 24, 28, 10, 32, 29, + 24, 89, 24, 28, 10, 51, 25, 1, 51, 24, 89, 28, 10, 51, 50, 51, + 24, 24, 90, 50, 32, 46, 47, 23, 24, 24, 24, 50, 51, 89, 24, 24, + 24, 24, 24, 24, 50, 2, 3, 23, 28, 29, 24, 24, 90, 24, 24, 24, + 28, 29, 24, 89, 89, 24, 50, 51, 50, 51, 24, 24, 24, 24, 24, 24, + 10, 32, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 46, + 23, 50, 51, 24, 24, 24, 24, 24, 90, 28, 46, 29, 24, 24, 50, 3], + "height":16, + "width":16, + "x":64, + "y":32 + }, + { + "data":[50, 51, 24, 24, 24, 24, 90, 24, 24, 24, 24, 50, 32, 10, 32, 29, + 28, 46, 29, 24, 24, 24, 24, 24, 24, 28, 29, 24, 50, 51, 50, 51, + 50, 2, 51, 90, 89, 24, 28, 29, 90, 50, 51, 24, 90, 24, 24, 24, + 24, 24, 24, 24, 90, 24, 25, 23, 24, 89, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 28, 10, 32, 46, 46, 46, 29, 28, 46, 29, 24, + 46, 29, 24, 24, 28, 47, 45, 10, 3, 115, 1, 51, 25, 1, 51, 90, + 2, 51, 24, 24, 50, 3, 1, 51, 50, 2, 32, 29, 50, 51, 24, 24, + 29, 28, 29, 24, 24, 25, 45, 29, 24, 24, 50, 32, 29, 24, 24, 24, + 51, 50, 32, 29, 24, 25, 114, 23, 90, 24, 24, 50, 32, 46, 46, 29, + 24, 89, 50, 51, 90, 50, 3, 23, 24, 24, 28, 29, 50, 2, 2, 51, + 24, 24, 24, 24, 24, 24, 25, 45, 46, 29, 25, 45, 46, 29, 24, 24, + 24, 24, 24, 90, 24, 24, 50, 2, 3, 23, 50, 3, 114, 23, 24, 28, + 24, 90, 24, 24, 24, 89, 24, 90, 25, 23, 89, 50, 2, 51, 24, 25, + 89, 28, 46, 29, 24, 90, 24, 24, 25, 23, 24, 24, 24, 24, 90, 25, + 46, 47, 115, 23, 24, 24, 24, 24, 50, 32, 46, 29, 89, 28, 29, 25, + 111, 1, 3, 23, 28, 29, 24, 24, 24, 50, 3, 23, 24, 50, 51, 50], + "height":16, + "width":16, + "x":80, + "y":32 + }, + { + "data":[24, 90, 24, 24, 89, 24, 24, 50, 51, 28, 29, 25, 23, 24, 50, 51, + 89, 24, 24, 89, 89, 89, 24, 24, 90, 25, 23, 50, 51, 28, 29, 28, + 24, 24, 24, 24, 90, 28, 29, 28, 29, 50, 51, 89, 24, 50, 51, 50, + 24, 24, 24, 28, 46, 10, 51, 25, 23, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 50, 2, 51, 24, 50, 51, 24, 28, 29, 90, 24, 24, 24, + 90, 89, 90, 24, 28, 46, 46, 29, 90, 24, 50, 32, 46, 46, 46, 29, + 28, 46, 29, 24, 50, 2, 2, 32, 46, 29, 28, 10, 2, 3, 115, 23, + 50, 2, 32, 46, 46, 46, 46, 10, 2, 51, 25, 23, 24, 50, 2, 51, + 90, 24, 50, 2, 3, 114, 1, 51, 24, 24, 25, 23, 24, 24, 24, 24, + 24, 24, 24, 28, 47, 1, 51, 24, 24, 24, 25, 23, 90, 24, 28, 29, + 28, 46, 29, 50, 2, 51, 24, 24, 24, 24, 50, 32, 46, 46, 47, 45, + 10, 2, 32, 46, 29, 24, 90, 24, 24, 24, 24, 50, 3, 1, 2, 2, + 23, 24, 50, 3, 45, 46, 46, 46, 29, 24, 24, 24, 50, 51, 24, 24, + 23, 28, 29, 25, 114, 115, 111, 111, 23, 90, 24, 24, 24, 28, 29, 24, + 23, 50, 32, 47, 111, 1, 2, 2, 32, 29, 24, 24, 90, 25, 23, 24, + 32, 29, 50, 3, 115, 23, 28, 29, 50, 51, 24, 24, 24, 50, 51, 24], + "height":16, + "width":16, + "x":96, + "y":32 + }, + { + "data":[24, 25, 1, 51, 90, 50, 51, 24, 24, 24, 24, 24, 24, 24, 50, 51, + 46, 10, 32, 29, 24, 28, 29, 24, 24, 24, 24, 24, 24, 28, 29, 24, + 2, 51, 50, 32, 29, 50, 32, 29, 89, 24, 24, 28, 46, 10, 32, 29, + 28, 46, 46, 47, 23, 24, 50, 51, 89, 24, 24, 50, 2, 32, 10, 32, + 50, 2, 2, 2, 32, 29, 24, 24, 24, 89, 90, 24, 24, 25, 23, 25, + 90, 24, 24, 24, 25, 45, 46, 46, 29, 24, 28, 29, 24, 50, 51, 50, + 24, 24, 24, 24, 50, 2, 3, 114, 45, 46, 10, 51, 24, 24, 24, 24, + 24, 24, 24, 24, 89, 24, 50, 2, 2, 2, 51, 24, 24, 24, 28, 46, + 28, 29, 24, 24, 89, 28, 46, 46, 29, 24, 89, 24, 24, 24, 50, 2, + 25, 45, 29, 24, 24, 50, 2, 2, 51, 24, 24, 90, 24, 24, 24, 24, + 10, 2, 51, 24, 24, 28, 46, 29, 90, 24, 24, 24, 24, 24, 24, 24, + 51, 24, 89, 90, 24, 50, 2, 51, 24, 24, 28, 46, 29, 24, 28, 29, + 24, 24, 89, 24, 89, 24, 90, 24, 24, 24, 50, 2, 51, 24, 50, 51, + 90, 89, 24, 24, 28, 46, 29, 89, 24, 24, 24, 24, 24, 24, 28, 46, + 24, 89, 24, 24, 25, 111, 23, 24, 24, 24, 24, 24, 90, 24, 25, 1, + 24, 24, 89, 24, 25, 1, 32, 29, 24, 24, 24, 90, 24, 24, 50, 51], + "height":16, + "width":16, + "x":112, + "y":32 + }, + { + "data":[51, 24, 89, 24, 24, 24, 24, 28, 29, 50, 51, 28, 46, 29, 24, 24, + 89, 90, 28, 29, 24, 24, 28, 10, 51, 90, 90, 25, 111, 23, 24, 89, + 90, 90, 25, 23, 90, 24, 50, 32, 29, 24, 24, 25, 111, 23, 28, 46, + 28, 29, 50, 51, 24, 24, 24, 25, 23, 24, 24, 50, 2, 51, 50, 2, + 50, 51, 28, 29, 24, 24, 24, 50, 32, 29, 24, 24, 24, 24, 28, 29, + 89, 24, 25, 23, 90, 24, 24, 24, 25, 23, 24, 24, 24, 24, 50, 51, + 24, 89, 50, 51, 24, 28, 29, 24, 25, 23, 24, 24, 24, 24, 90, 24, + 24, 89, 24, 24, 24, 50, 51, 24, 50, 51, 24, 24, 24, 24, 28, 46, + 24, 24, 24, 28, 29, 24, 24, 24, 24, 24, 28, 46, 46, 29, 50, 2, + 29, 28, 29, 50, 32, 29, 89, 24, 24, 28, 47, 1, 2, 51, 24, 24, + 51, 50, 32, 29, 50, 51, 24, 24, 90, 25, 114, 23, 24, 24, 24, 24, + 24, 90, 25, 45, 29, 24, 24, 24, 24, 50, 3, 45, 46, 46, 29, 28, + 24, 24, 25, 111, 23, 24, 24, 28, 46, 29, 50, 3, 1, 3, 23, 25, + 24, 24, 50, 2, 51, 28, 46, 10, 2, 32, 29, 25, 23, 50, 51, 25, + 24, 24, 24, 24, 24, 25, 1, 51, 24, 25, 23, 25, 23, 24, 24, 25, + 24, 24, 28, 29, 24, 50, 32, 46, 29, 50, 51, 50, 51, 24, 24, 25], + "height":16, + "width":16, + "x":0, + "y":48 + }, + { + "data":[28, 29, 24, 89, 24, 24, 24, 90, 28, 46, 10, 51, 89, 90, 28, 29, + 50, 51, 89, 24, 28, 29, 24, 24, 25, 115, 23, 24, 24, 24, 50, 32, + 29, 28, 46, 46, 10, 51, 89, 24, 25, 1, 32, 29, 28, 29, 24, 50, + 32, 10, 3, 111, 23, 24, 24, 90, 25, 23, 50, 32, 10, 51, 28, 29, + 25, 23, 50, 2, 51, 24, 24, 90, 25, 23, 24, 50, 32, 29, 25, 23, + 50, 32, 46, 46, 46, 46, 29, 24, 25, 45, 29, 24, 25, 23, 50, 51, + 24, 25, 111, 114, 111, 1, 51, 24, 25, 111, 23, 89, 50, 51, 24, 24, + 46, 47, 111, 114, 1, 32, 46, 29, 25, 111, 23, 24, 24, 24, 24, 24, + 2, 3, 115, 111, 45, 47, 114, 23, 25, 114, 45, 29, 90, 24, 24, 89, + 24, 50, 2, 2, 3, 114, 111, 23, 25, 112, 1, 51, 24, 24, 24, 24, + 24, 24, 24, 24, 25, 1, 2, 32, 10, 3, 23, 24, 24, 24, 24, 28, + 29, 24, 24, 24, 50, 51, 89, 50, 51, 25, 23, 24, 24, 24, 89, 50, + 23, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 89, 24, 89, + 23, 24, 28, 29, 24, 24, 24, 24, 89, 24, 50, 51, 89, 24, 24, 24, + 23, 24, 25, 23, 28, 29, 24, 89, 28, 29, 24, 90, 24, 89, 24, 24, + 45, 46, 10, 51, 50, 32, 46, 46, 10, 51, 90, 24, 28, 46, 29, 24], + "height":16, + "width":16, + "x":16, + "y":48 + }, + { + "data":[24, 24, 24, 24, 24, 24, 24, 89, 24, 25, 114, 115, 45, 10, 51, 50, + 46, 46, 46, 46, 29, 24, 24, 24, 24, 50, 2, 2, 2, 51, 28, 46, + 2, 2, 2, 2, 32, 29, 24, 24, 24, 24, 24, 28, 46, 29, 50, 2, + 24, 24, 90, 24, 50, 32, 29, 24, 24, 24, 24, 25, 1, 51, 24, 24, + 24, 90, 24, 24, 89, 50, 51, 89, 24, 24, 89, 50, 51, 24, 24, 24, + 24, 28, 29, 24, 24, 24, 24, 28, 46, 29, 24, 24, 24, 28, 46, 29, + 24, 25, 23, 28, 29, 90, 28, 10, 3, 23, 90, 24, 24, 50, 2, 32, + 89, 50, 32, 10, 51, 24, 50, 51, 50, 51, 90, 24, 24, 28, 29, 25, + 24, 89, 50, 51, 24, 24, 89, 89, 24, 28, 29, 24, 28, 47, 45, 10, + 24, 24, 28, 29, 28, 46, 29, 28, 46, 10, 32, 29, 50, 2, 2, 51, + 29, 24, 50, 32, 10, 2, 51, 50, 2, 51, 50, 32, 29, 24, 24, 24, + 51, 24, 28, 10, 51, 24, 24, 24, 24, 90, 24, 50, 51, 24, 24, 24, + 24, 24, 25, 23, 24, 24, 24, 24, 24, 89, 24, 90, 24, 24, 24, 90, + 24, 24, 50, 32, 46, 46, 29, 24, 24, 89, 28, 46, 29, 89, 24, 24, + 24, 89, 28, 10, 2, 2, 51, 89, 24, 90, 50, 3, 23, 24, 28, 29, + 28, 46, 10, 51, 28, 29, 24, 24, 24, 24, 24, 50, 51, 28, 10, 51], + "height":16, + "width":16, + "x":32, + "y":48 + }, + { + "data":[51, 24, 24, 24, 24, 24, 50, 2, 2, 32, 29, 24, 24, 50, 32, 10, + 29, 89, 24, 24, 28, 46, 29, 89, 24, 25, 45, 29, 24, 24, 25, 45, + 51, 24, 24, 90, 25, 1, 51, 24, 24, 25, 1, 32, 46, 29, 25, 115, + 90, 24, 28, 29, 50, 51, 24, 89, 89, 25, 23, 50, 2, 32, 47, 111, + 89, 24, 50, 32, 29, 24, 24, 24, 24, 50, 51, 24, 24, 25, 111, 111, + 28, 29, 24, 25, 23, 89, 89, 24, 28, 29, 24, 28, 29, 25, 111, 1, + 10, 51, 24, 25, 45, 29, 24, 24, 50, 32, 29, 25, 45, 10, 2, 51, + 23, 24, 24, 25, 114, 23, 24, 24, 24, 50, 51, 50, 2, 32, 29, 24, + 51, 24, 24, 50, 2, 51, 24, 24, 24, 24, 24, 90, 24, 50, 32, 29, + 24, 28, 29, 24, 24, 90, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, + 90, 50, 32, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28, 29, 50, + 24, 28, 10, 32, 46, 46, 46, 29, 24, 24, 24, 28, 46, 10, 32, 29, + 24, 50, 51, 50, 2, 2, 2, 32, 46, 46, 29, 25, 113, 23, 50, 51, + 24, 24, 24, 24, 24, 24, 90, 50, 2, 2, 51, 25, 1, 32, 29, 24, + 24, 24, 24, 89, 24, 24, 24, 90, 24, 24, 24, 50, 32, 10, 51, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 24, 25, 23, 24, 24], + "height":16, + "width":16, + "x":48, + "y":48 + }, + { + "data":[51, 24, 90, 24, 28, 29, 24, 24, 28, 10, 3, 45, 29, 24, 24, 50, + 29, 24, 24, 24, 25, 23, 24, 90, 50, 51, 50, 2, 51, 24, 24, 24, + 23, 89, 24, 24, 50, 51, 28, 46, 29, 24, 24, 24, 28, 29, 24, 24, + 23, 89, 24, 28, 29, 24, 50, 2, 51, 90, 24, 24, 25, 45, 29, 24, + 23, 24, 24, 25, 45, 29, 24, 24, 24, 24, 24, 24, 50, 2, 32, 29, + 51, 24, 24, 50, 3, 23, 90, 24, 90, 24, 28, 29, 24, 24, 50, 51, + 24, 24, 24, 24, 50, 32, 46, 29, 24, 24, 25, 45, 29, 24, 89, 24, + 24, 28, 29, 28, 46, 10, 3, 45, 29, 24, 25, 111, 23, 24, 24, 24, + 24, 50, 32, 10, 2, 32, 10, 2, 51, 24, 50, 2, 51, 24, 24, 24, + 46, 29, 50, 32, 29, 50, 32, 46, 46, 46, 29, 28, 29, 89, 28, 46, + 3, 45, 29, 50, 51, 24, 50, 2, 2, 2, 32, 10, 32, 29, 50, 2, + 50, 2, 51, 24, 24, 24, 90, 24, 24, 24, 25, 23, 25, 23, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 28, 46, 46, 10, 51, 25, 23, 24, 89, + 24, 28, 46, 46, 29, 24, 24, 50, 2, 2, 32, 46, 10, 32, 46, 29, + 24, 25, 115, 115, 23, 24, 24, 24, 24, 24, 50, 3, 23, 25, 114, 23, + 24, 50, 3, 1, 32, 29, 89, 24, 90, 90, 24, 50, 51, 25, 114, 45], + "height":16, + "width":16, + "x":64, + "y":48 + }, + { + "data":[2, 51, 50, 32, 10, 32, 46, 29, 24, 24, 50, 51, 28, 46, 29, 28, + 90, 24, 24, 50, 51, 25, 1, 51, 24, 28, 29, 24, 50, 2, 51, 50, + 28, 46, 46, 29, 24, 25, 23, 24, 24, 50, 51, 24, 24, 24, 89, 24, + 25, 1, 2, 51, 24, 25, 23, 24, 24, 28, 46, 29, 24, 90, 89, 24, + 25, 23, 90, 24, 28, 10, 51, 24, 24, 50, 3, 23, 28, 29, 24, 24, + 25, 23, 24, 28, 10, 51, 24, 90, 24, 24, 25, 23, 50, 51, 89, 24, + 50, 51, 24, 50, 32, 29, 28, 29, 89, 28, 10, 51, 24, 24, 24, 89, + 24, 24, 28, 46, 10, 51, 50, 32, 29, 50, 51, 24, 24, 90, 24, 28, + 24, 90, 50, 2, 51, 24, 24, 25, 23, 24, 24, 28, 29, 24, 24, 25, + 46, 29, 24, 89, 24, 24, 24, 50, 51, 24, 89, 50, 51, 24, 24, 25, + 2, 32, 46, 29, 89, 24, 28, 46, 29, 24, 24, 24, 28, 46, 29, 25, + 28, 10, 2, 32, 29, 24, 50, 3, 23, 24, 28, 29, 50, 2, 32, 47, + 50, 51, 24, 25, 23, 24, 28, 10, 51, 24, 25, 45, 29, 24, 25, 111, + 24, 24, 24, 25, 23, 90, 25, 23, 24, 24, 50, 2, 51, 24, 25, 1, + 24, 24, 24, 50, 32, 29, 25, 23, 28, 46, 29, 24, 24, 24, 50, 51, + 46, 46, 29, 24, 50, 32, 10, 51, 50, 2, 32, 29, 89, 24, 24, 24], + "height":16, + "width":16, + "x":80, + "y":48 + }, + { + "data":[10, 32, 29, 50, 2, 51, 50, 32, 29, 24, 90, 90, 24, 90, 24, 24, + 32, 10, 32, 29, 24, 24, 24, 50, 51, 28, 29, 89, 24, 24, 24, 24, + 25, 23, 25, 45, 46, 29, 89, 24, 89, 50, 51, 24, 24, 89, 89, 24, + 50, 32, 10, 2, 2, 32, 29, 24, 90, 24, 24, 24, 24, 28, 46, 46, + 24, 50, 32, 46, 29, 50, 32, 29, 24, 24, 24, 24, 24, 50, 2, 2, + 28, 29, 25, 112, 23, 24, 50, 51, 24, 24, 24, 24, 24, 24, 24, 90, + 25, 23, 25, 111, 23, 24, 24, 24, 90, 24, 24, 24, 24, 24, 24, 24, + 10, 51, 25, 111, 23, 24, 24, 24, 90, 89, 24, 28, 46, 46, 29, 24, + 45, 29, 25, 1, 51, 24, 24, 89, 28, 29, 28, 10, 2, 2, 32, 46, + 111, 23, 25, 23, 24, 24, 24, 24, 25, 45, 10, 51, 28, 29, 50, 2, + 1, 51, 50, 51, 24, 24, 24, 24, 50, 3, 45, 29, 50, 32, 29, 24, + 45, 29, 24, 24, 24, 24, 28, 46, 29, 50, 2, 51, 24, 50, 32, 29, + 1, 32, 29, 24, 24, 24, 50, 3, 23, 24, 24, 24, 28, 29, 50, 51, + 51, 50, 51, 90, 24, 90, 24, 50, 32, 29, 24, 24, 50, 32, 29, 24, + 28, 46, 29, 89, 24, 89, 24, 24, 50, 51, 24, 24, 24, 50, 51, 24, + 50, 2, 51, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 28], + "height":16, + "width":16, + "x":96, + "y":48 + }, + { + "data":[24, 24, 24, 24, 25, 23, 50, 51, 24, 28, 29, 89, 24, 28, 29, 24, + 89, 24, 24, 24, 50, 32, 46, 29, 24, 25, 23, 24, 90, 50, 51, 90, + 24, 24, 24, 24, 24, 50, 3, 23, 24, 50, 51, 89, 28, 46, 46, 46, + 46, 46, 46, 29, 24, 24, 25, 23, 89, 89, 24, 24, 25, 114, 115, 1, + 3, 115, 1, 51, 24, 24, 25, 23, 89, 24, 24, 24, 50, 2, 2, 32, + 50, 2, 51, 24, 24, 24, 25, 23, 28, 29, 24, 90, 24, 24, 24, 50, + 24, 24, 89, 24, 24, 24, 50, 51, 50, 32, 46, 29, 90, 24, 89, 24, + 24, 24, 28, 46, 29, 24, 24, 28, 46, 10, 2, 51, 24, 24, 24, 24, + 46, 29, 50, 3, 23, 90, 24, 50, 2, 51, 90, 24, 24, 24, 28, 46, + 2, 51, 24, 25, 45, 46, 29, 24, 24, 24, 28, 29, 24, 24, 25, 114, + 24, 24, 24, 50, 2, 2, 51, 24, 24, 24, 25, 23, 24, 24, 50, 2, + 24, 24, 28, 29, 28, 29, 24, 89, 24, 24, 25, 23, 90, 24, 24, 89, + 24, 24, 50, 32, 10, 32, 46, 29, 24, 24, 50, 51, 89, 24, 24, 24, + 28, 29, 24, 25, 23, 50, 3, 45, 29, 90, 89, 24, 90, 24, 24, 24, + 50, 51, 24, 25, 23, 90, 50, 2, 51, 24, 24, 24, 24, 90, 24, 24, + 29, 24, 24, 50, 51, 24, 24, 24, 28, 46, 46, 29, 24, 28, 46, 29], + "height":16, + "width":16, + "x":112, + "y":48 + }, + + { + "data":[89, 24, 25, 23, 24, 24, 50, 2, 32, 29, 24, 24, 24, 24, 24, 50, + 24, 90, 25, 23, 24, 24, 24, 89, 50, 51, 24, 24, 24, 90, 24, 24, + 24, 89, 50, 51, 24, 24, 24, 24, 24, 89, 28, 29, 24, 24, 24, 24, + 89, 24, 90, 24, 24, 24, 24, 24, 24, 24, 25, 23, 24, 24, 24, 24, + 89, 24, 24, 24, 24, 28, 46, 29, 24, 24, 50, 32, 29, 28, 46, 29, + 24, 90, 90, 28, 46, 10, 2, 51, 24, 24, 90, 50, 51, 25, 1, 51, + 24, 24, 89, 50, 3, 23, 24, 24, 24, 24, 24, 28, 46, 10, 51, 28, + 28, 46, 29, 24, 50, 51, 24, 24, 24, 24, 24, 50, 2, 51, 89, 50, + 50, 2, 51, 89, 24, 24, 24, 89, 24, 28, 29, 24, 24, 24, 24, 24, + 28, 29, 24, 24, 89, 89, 24, 24, 90, 50, 32, 29, 24, 24, 24, 24, + 50, 51, 24, 24, 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 28, 29, + 89, 90, 24, 90, 89, 89, 24, 24, 24, 24, 24, 25, 23, 24, 50, 51, + 28, 46, 46, 46, 29, 24, 24, 28, 46, 46, 46, 10, 51, 28, 29, 24, + 50, 2, 2, 3, 23, 24, 24, 50, 2, 2, 3, 23, 24, 50, 32, 29, + 28, 29, 28, 10, 51, 24, 24, 24, 24, 28, 10, 32, 29, 24, 50, 32, + 25, 23, 50, 51, 24, 24, 90, 28, 46, 47, 23, 25, 23, 24, 24, 50], + "height":16, + "width":16, + "x":0, + "y":64 + }, + { + "data":[2, 2, 51, 24, 24, 50, 2, 2, 51, 24, 24, 24, 25, 1, 32, 46, + 24, 90, 28, 46, 46, 46, 46, 29, 24, 24, 24, 24, 25, 23, 25, 111, + 24, 24, 50, 3, 1, 2, 2, 51, 24, 24, 24, 24, 25, 45, 10, 2, + 24, 24, 24, 50, 51, 89, 24, 89, 28, 29, 24, 24, 50, 2, 51, 89, + 28, 29, 24, 28, 29, 24, 90, 28, 10, 32, 46, 29, 24, 90, 24, 24, + 25, 23, 24, 50, 32, 29, 24, 50, 51, 50, 2, 51, 24, 89, 24, 24, + 47, 23, 24, 24, 50, 51, 24, 24, 24, 24, 24, 24, 24, 89, 24, 28, + 3, 23, 28, 29, 90, 24, 90, 24, 24, 90, 24, 24, 24, 24, 89, 25, + 25, 23, 25, 23, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, 50, + 50, 51, 25, 23, 24, 24, 50, 51, 24, 24, 24, 90, 89, 24, 24, 28, + 90, 24, 25, 23, 24, 24, 89, 24, 90, 24, 24, 24, 24, 89, 28, 10, + 90, 24, 50, 32, 29, 24, 90, 28, 46, 29, 24, 24, 89, 24, 25, 45, + 24, 24, 24, 50, 32, 29, 24, 50, 2, 51, 90, 24, 24, 24, 50, 2, + 89, 24, 24, 24, 25, 23, 90, 89, 90, 24, 89, 24, 24, 24, 24, 24, + 29, 28, 29, 28, 10, 32, 46, 46, 29, 24, 24, 89, 24, 24, 89, 24, + 32, 10, 32, 10, 32, 10, 2, 2, 32, 46, 29, 24, 24, 24, 24, 24], + "height":16, + "width":16, + "x":16, + "y":64 + }, + { + "data":[10, 2, 51, 24, 50, 32, 29, 28, 46, 46, 29, 24, 24, 50, 32, 46, + 23, 24, 89, 24, 24, 50, 32, 10, 2, 2, 51, 24, 24, 24, 50, 2, + 32, 29, 24, 24, 24, 24, 50, 32, 29, 24, 24, 24, 90, 28, 46, 29, + 50, 51, 28, 29, 28, 29, 24, 25, 23, 24, 24, 24, 24, 50, 2, 51, + 24, 24, 50, 32, 10, 51, 28, 10, 51, 24, 24, 24, 24, 24, 89, 24, + 28, 29, 24, 25, 45, 29, 50, 51, 24, 24, 89, 24, 24, 28, 29, 28, + 47, 45, 29, 50, 3, 45, 29, 24, 28, 46, 46, 46, 29, 50, 51, 25, + 111, 1, 51, 24, 25, 1, 51, 24, 50, 2, 2, 2, 51, 24, 89, 50, + 2, 32, 46, 46, 47, 23, 24, 24, 24, 24, 28, 29, 24, 89, 24, 24, + 29, 50, 2, 2, 2, 51, 24, 24, 89, 24, 50, 51, 24, 24, 24, 90, + 51, 24, 89, 24, 28, 29, 24, 24, 90, 24, 24, 90, 24, 89, 28, 29, + 29, 24, 24, 90, 50, 32, 29, 28, 29, 24, 89, 24, 24, 24, 50, 51, + 51, 90, 24, 24, 24, 50, 51, 25, 23, 24, 24, 24, 24, 90, 24, 24, + 90, 24, 24, 89, 24, 24, 89, 25, 45, 46, 46, 46, 46, 46, 29, 24, + 24, 24, 24, 90, 24, 90, 24, 25, 1, 2, 3, 115, 111, 111, 45, 29, + 24, 90, 24, 24, 28, 29, 24, 50, 32, 29, 50, 2, 2, 3, 111, 23], + "height":16, + "width":16, + "x":32, + "y":64 + }, + { + "data":[46, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 23, 90, 24, + 2, 32, 29, 24, 90, 28, 46, 46, 29, 24, 24, 24, 25, 45, 46, 29, + 24, 25, 23, 24, 24, 50, 2, 2, 32, 46, 29, 24, 25, 1, 3, 23, + 24, 25, 45, 46, 29, 24, 24, 89, 50, 2, 32, 46, 10, 51, 25, 23, + 24, 50, 2, 3, 45, 46, 46, 29, 24, 24, 50, 2, 51, 24, 50, 51, + 29, 24, 24, 50, 2, 2, 2, 51, 24, 28, 46, 46, 29, 24, 89, 24, + 23, 24, 89, 28, 29, 90, 24, 24, 89, 50, 2, 2, 51, 24, 24, 24, + 32, 29, 24, 25, 23, 24, 24, 24, 90, 89, 24, 24, 24, 89, 24, 28, + 50, 51, 24, 25, 23, 24, 24, 24, 24, 90, 89, 24, 24, 89, 24, 50, + 24, 24, 28, 47, 45, 29, 28, 29, 24, 24, 24, 28, 29, 24, 24, 24, + 24, 24, 50, 2, 2, 32, 47, 45, 29, 24, 24, 50, 51, 24, 24, 24, + 24, 28, 46, 46, 29, 50, 3, 1, 32, 46, 29, 24, 24, 24, 89, 28, + 24, 50, 2, 2, 51, 24, 25, 23, 25, 111, 23, 24, 24, 28, 29, 50, + 28, 46, 29, 24, 90, 24, 50, 51, 50, 2, 32, 29, 24, 50, 51, 24, + 50, 2, 51, 24, 24, 24, 28, 46, 29, 24, 50, 51, 24, 24, 28, 29, + 89, 24, 24, 24, 24, 28, 10, 3, 23, 28, 29, 24, 24, 24, 50, 51], + "height":16, + "width":16, + "x":48, + "y":64 + }, + { + "data":[90, 24, 25, 23, 25, 23, 24, 24, 24, 24, 89, 24, 24, 50, 2, 2, + 24, 24, 50, 51, 25, 23, 24, 24, 24, 28, 46, 46, 29, 24, 24, 24, + 24, 24, 24, 24, 50, 32, 29, 89, 24, 50, 2, 2, 51, 24, 24, 24, + 24, 89, 24, 28, 29, 50, 32, 29, 90, 28, 46, 29, 89, 24, 24, 24, + 24, 24, 90, 25, 23, 24, 50, 51, 24, 50, 2, 32, 29, 24, 24, 24, + 24, 24, 24, 50, 32, 46, 46, 29, 24, 90, 24, 50, 32, 29, 90, 28, + 24, 24, 24, 24, 50, 2, 2, 32, 29, 28, 29, 28, 10, 32, 29, 25, + 29, 28, 46, 29, 24, 28, 46, 10, 32, 10, 51, 50, 51, 50, 32, 10, + 51, 50, 2, 32, 46, 10, 2, 32, 10, 32, 29, 24, 90, 24, 25, 23, + 24, 24, 24, 25, 1, 51, 24, 25, 23, 50, 51, 24, 24, 90, 50, 51, + 24, 24, 24, 25, 23, 24, 24, 25, 23, 24, 28, 29, 24, 24, 24, 24, + 46, 46, 29, 50, 51, 24, 28, 10, 51, 24, 25, 45, 29, 24, 90, 90, + 2, 2, 32, 46, 29, 90, 50, 51, 24, 24, 50, 3, 23, 24, 24, 24, + 24, 24, 25, 1, 51, 24, 24, 89, 24, 24, 24, 25, 45, 29, 89, 90, + 24, 24, 25, 23, 24, 28, 29, 24, 24, 24, 24, 50, 2, 51, 28, 29, + 24, 24, 50, 51, 24, 50, 51, 24, 24, 24, 90, 24, 24, 24, 50, 51], + "height":16, + "width":16, + "x":64, + "y":64 + }, + { + "data":[2, 2, 32, 46, 46, 10, 32, 46, 46, 29, 50, 51, 28, 29, 24, 24, + 24, 24, 50, 2, 3, 23, 50, 2, 2, 32, 29, 24, 25, 45, 46, 29, + 24, 24, 28, 29, 25, 45, 46, 29, 24, 25, 45, 29, 50, 2, 3, 23, + 24, 89, 50, 32, 47, 1, 2, 51, 28, 10, 2, 51, 24, 89, 50, 51, + 28, 29, 24, 50, 3, 23, 28, 29, 25, 23, 24, 24, 28, 29, 24, 28, + 10, 51, 24, 90, 50, 51, 50, 51, 25, 23, 89, 89, 50, 51, 28, 10, + 23, 28, 46, 29, 89, 28, 29, 24, 50, 51, 24, 28, 29, 24, 25, 23, + 51, 25, 1, 32, 29, 50, 51, 28, 46, 29, 24, 50, 51, 90, 50, 51, + 24, 50, 32, 47, 23, 28, 29, 50, 3, 45, 46, 29, 24, 24, 24, 24, + 24, 24, 50, 2, 51, 50, 51, 24, 50, 3, 113, 23, 24, 28, 29, 24, + 28, 46, 29, 24, 89, 24, 24, 24, 24, 25, 111, 23, 24, 50, 32, 29, + 50, 2, 32, 29, 28, 46, 29, 24, 24, 50, 2, 51, 24, 24, 50, 51, + 89, 24, 25, 23, 50, 2, 51, 24, 24, 24, 24, 24, 24, 24, 24, 28, + 28, 29, 25, 23, 24, 90, 24, 24, 28, 46, 46, 29, 24, 24, 24, 25, + 25, 45, 47, 23, 24, 28, 46, 29, 50, 2, 2, 51, 24, 24, 24, 25, + 50, 3, 1, 32, 29, 50, 2, 51, 24, 24, 90, 24, 24, 24, 24, 50], + "height":16, + "width":16, + "x":80, + "y":64 + }, + { + "data":[24, 24, 28, 29, 24, 24, 28, 29, 24, 24, 24, 24, 24, 89, 24, 50, + 89, 24, 25, 23, 24, 24, 50, 51, 24, 24, 24, 24, 24, 89, 28, 29, + 24, 24, 50, 51, 90, 24, 24, 24, 24, 28, 46, 29, 24, 89, 50, 51, + 24, 90, 24, 24, 24, 24, 89, 24, 24, 50, 3, 45, 29, 24, 24, 28, + 46, 29, 24, 28, 46, 29, 90, 89, 89, 24, 50, 2, 51, 24, 28, 10, + 2, 51, 24, 50, 2, 32, 46, 29, 90, 28, 29, 24, 24, 24, 50, 51, + 24, 28, 29, 24, 24, 50, 3, 23, 24, 25, 23, 24, 89, 24, 89, 24, + 24, 25, 23, 24, 24, 24, 25, 23, 90, 50, 51, 24, 90, 90, 24, 24, + 24, 25, 23, 24, 24, 24, 25, 23, 28, 46, 29, 24, 24, 28, 29, 28, + 24, 25, 23, 24, 24, 90, 25, 23, 25, 1, 51, 24, 24, 50, 32, 47, + 24, 50, 51, 24, 24, 24, 50, 51, 50, 51, 24, 24, 24, 24, 50, 2, + 28, 46, 29, 24, 24, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, + 10, 3, 23, 24, 24, 24, 24, 25, 23, 24, 24, 24, 24, 24, 89, 24, + 23, 50, 32, 46, 46, 46, 46, 10, 32, 29, 24, 28, 46, 29, 24, 24, + 23, 28, 10, 3, 115, 114, 1, 51, 25, 23, 89, 50, 2, 32, 29, 24, + 51, 25, 23, 25, 1, 2, 32, 46, 47, 23, 90, 24, 24, 50, 32, 29], + "height":16, + "width":16, + "x":96, + "y":64 + }, + { + "data":[51, 24, 24, 89, 24, 28, 46, 29, 25, 111, 1, 32, 29, 25, 111, 45, + 28, 46, 29, 90, 28, 10, 2, 32, 10, 2, 51, 50, 32, 10, 2, 3, + 50, 2, 32, 46, 47, 23, 28, 10, 51, 24, 24, 89, 25, 23, 24, 50, + 46, 29, 50, 2, 2, 32, 10, 51, 89, 24, 24, 89, 25, 23, 24, 24, + 2, 51, 24, 24, 24, 50, 32, 46, 29, 28, 29, 90, 25, 23, 24, 24, + 24, 24, 90, 24, 24, 24, 50, 2, 32, 10, 51, 24, 50, 32, 29, 90, + 24, 89, 24, 24, 24, 24, 24, 24, 25, 23, 24, 24, 24, 50, 51, 24, + 24, 24, 24, 24, 89, 89, 24, 89, 25, 23, 89, 28, 29, 24, 24, 90, + 29, 89, 24, 24, 90, 28, 29, 24, 25, 45, 29, 25, 23, 24, 24, 24, + 23, 90, 28, 29, 24, 50, 51, 89, 50, 3, 23, 25, 23, 24, 90, 24, + 51, 24, 25, 23, 24, 28, 46, 29, 24, 25, 23, 25, 45, 29, 24, 24, + 24, 24, 50, 51, 24, 25, 1, 51, 90, 50, 51, 25, 113, 23, 24, 28, + 24, 24, 89, 24, 24, 50, 51, 24, 90, 24, 24, 25, 111, 45, 29, 50, + 24, 24, 28, 29, 90, 24, 90, 24, 24, 24, 24, 25, 111, 111, 23, 28, + 24, 89, 25, 23, 24, 24, 24, 24, 24, 24, 24, 50, 2, 2, 32, 10, + 24, 24, 25, 23, 24, 24, 24, 24, 24, 24, 24, 90, 24, 24, 50, 51], + "height":16, + "width":16, + "x":112, + "y":64 + }, + { + "data":[10, 51, 24, 24, 28, 29, 90, 50, 2, 2, 32, 10, 32, 46, 46, 46, + 23, 24, 28, 46, 10, 51, 24, 24, 24, 24, 50, 32, 47, 1, 2, 3, + 32, 29, 50, 2, 32, 46, 29, 24, 24, 24, 24, 50, 3, 23, 24, 50, + 25, 23, 24, 24, 25, 1, 51, 90, 24, 24, 28, 46, 10, 32, 29, 89, + 10, 51, 24, 89, 50, 32, 46, 29, 24, 24, 50, 2, 51, 25, 45, 29, + 32, 46, 46, 46, 29, 50, 2, 32, 46, 46, 46, 29, 24, 25, 1, 32, + 25, 111, 1, 3, 23, 24, 24, 25, 1, 2, 2, 51, 24, 50, 51, 25, + 25, 1, 51, 50, 51, 24, 28, 10, 51, 24, 24, 24, 90, 28, 29, 50, + 50, 51, 24, 28, 29, 24, 50, 32, 29, 24, 90, 24, 24, 25, 23, 24, + 24, 24, 24, 50, 32, 29, 24, 50, 51, 89, 24, 24, 24, 50, 51, 24, + 24, 24, 24, 24, 50, 51, 24, 24, 89, 89, 24, 28, 46, 46, 46, 46, + 24, 24, 24, 24, 24, 89, 24, 24, 24, 24, 24, 50, 2, 3, 111, 111, + 28, 46, 46, 46, 29, 24, 24, 24, 24, 24, 24, 24, 24, 25, 111, 1, + 10, 2, 2, 2, 51, 24, 24, 28, 29, 89, 28, 46, 29, 50, 3, 23, + 51, 24, 24, 90, 24, 89, 24, 25, 45, 46, 47, 111, 23, 24, 25, 23, + 24, 28, 29, 24, 24, 28, 46, 10, 2, 2, 2, 2, 51, 24, 50, 51], + "height":16, + "width":16, + "x":0, + "y":80 + }, + { + "data":[10, 51, 50, 51, 50, 32, 29, 24, 50, 2, 51, 24, 24, 24, 24, 24, + 23, 90, 24, 24, 24, 25, 45, 46, 29, 24, 24, 24, 24, 24, 28, 29, + 32, 29, 24, 24, 24, 25, 115, 1, 51, 24, 24, 89, 24, 24, 25, 23, + 50, 51, 90, 24, 24, 25, 111, 23, 24, 24, 24, 89, 24, 28, 47, 23, + 24, 24, 24, 24, 28, 10, 2, 51, 28, 46, 29, 24, 24, 50, 2, 32, + 29, 24, 24, 24, 50, 32, 29, 24, 50, 2, 32, 46, 29, 24, 24, 50, + 45, 46, 29, 24, 24, 50, 32, 29, 89, 24, 50, 3, 45, 29, 24, 24, + 2, 2, 32, 29, 24, 24, 25, 23, 24, 24, 24, 50, 3, 23, 90, 28, + 89, 24, 50, 32, 29, 24, 50, 51, 24, 24, 28, 46, 10, 32, 29, 25, + 24, 24, 89, 25, 45, 46, 29, 28, 46, 29, 50, 2, 51, 50, 51, 50, + 46, 46, 46, 10, 3, 1, 32, 10, 2, 32, 29, 28, 29, 28, 29, 90, + 1, 3, 1, 51, 50, 51, 50, 51, 24, 50, 32, 10, 51, 50, 51, 90, + 51, 25, 23, 24, 24, 24, 24, 24, 28, 46, 47, 23, 24, 24, 24, 24, + 24, 25, 23, 24, 24, 24, 24, 24, 50, 2, 3, 45, 29, 24, 24, 24, + 24, 50, 32, 46, 46, 29, 24, 28, 46, 46, 10, 2, 32, 29, 24, 24, + 24, 28, 10, 2, 2, 32, 29, 50, 3, 114, 45, 29, 25, 45, 29, 24], + "height":16, + "width":16, + "x":16, + "y":80 + }, + { + "data":[24, 24, 90, 24, 50, 51, 28, 29, 50, 51, 24, 24, 24, 25, 1, 51, + 24, 24, 24, 24, 90, 24, 25, 45, 29, 24, 24, 89, 24, 25, 23, 24, + 24, 28, 29, 24, 90, 24, 50, 2, 32, 46, 46, 29, 24, 50, 51, 24, + 90, 50, 51, 24, 24, 28, 29, 24, 50, 2, 2, 51, 28, 29, 24, 24, + 46, 29, 24, 24, 24, 25, 23, 28, 29, 89, 24, 24, 25, 23, 24, 28, + 2, 51, 24, 28, 46, 10, 51, 25, 23, 24, 28, 46, 10, 51, 24, 25, + 24, 24, 24, 25, 114, 23, 24, 50, 32, 46, 10, 2, 51, 24, 24, 50, + 46, 46, 29, 25, 111, 23, 24, 28, 10, 2, 51, 24, 28, 29, 24, 24, + 1, 2, 51, 50, 3, 23, 28, 10, 51, 90, 24, 90, 50, 32, 29, 90, + 32, 29, 24, 24, 50, 32, 10, 32, 46, 29, 90, 24, 28, 47, 23, 24, + 50, 51, 89, 24, 24, 50, 32, 10, 2, 51, 24, 28, 47, 1, 51, 24, + 28, 29, 24, 89, 89, 90, 25, 23, 24, 28, 29, 25, 1, 51, 24, 28, + 25, 23, 24, 24, 90, 24, 25, 23, 24, 50, 32, 10, 51, 24, 24, 50, + 25, 45, 29, 89, 24, 89, 25, 23, 24, 28, 47, 23, 24, 24, 24, 24, + 25, 114, 23, 89, 24, 24, 50, 51, 24, 50, 2, 51, 24, 24, 28, 29, + 50, 2, 32, 29, 24, 24, 28, 29, 28, 46, 29, 24, 24, 24, 25, 23], + "height":16, + "width":16, + "x":32, + "y":80 + }, + { + "data":[24, 24, 24, 28, 29, 25, 45, 10, 32, 10, 32, 29, 24, 24, 90, 24, + 28, 29, 28, 10, 51, 50, 2, 51, 25, 23, 50, 51, 24, 24, 24, 24, + 25, 23, 50, 32, 29, 24, 24, 24, 25, 23, 24, 24, 24, 24, 90, 24, + 25, 23, 24, 50, 32, 29, 24, 24, 50, 51, 28, 46, 29, 28, 29, 24, + 47, 23, 24, 24, 50, 32, 46, 29, 24, 24, 25, 1, 32, 47, 23, 28, + 115, 45, 29, 90, 28, 47, 111, 23, 89, 89, 50, 32, 10, 2, 51, 50, + 2, 2, 51, 24, 50, 2, 3, 23, 24, 24, 24, 50, 51, 28, 46, 29, + 24, 24, 24, 28, 46, 29, 25, 23, 24, 24, 24, 24, 90, 50, 2, 32, + 24, 24, 24, 50, 3, 45, 10, 51, 28, 29, 24, 90, 28, 29, 24, 50, + 24, 24, 24, 24, 25, 115, 23, 28, 10, 32, 46, 29, 25, 23, 24, 24, + 24, 24, 24, 24, 50, 2, 51, 25, 23, 50, 3, 23, 50, 32, 46, 29, + 46, 46, 46, 46, 46, 29, 24, 25, 23, 24, 25, 23, 24, 50, 2, 51, + 2, 2, 2, 2, 2, 32, 46, 10, 51, 28, 10, 32, 29, 24, 24, 89, + 24, 24, 89, 24, 24, 50, 3, 23, 90, 25, 23, 25, 23, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 50, 51, 89, 50, 51, 25, 23, 24, 24, 24, + 24, 24, 89, 24, 24, 90, 24, 24, 24, 24, 24, 25, 23, 24, 24, 24], + "height":16, + "width":16, + "x":48, + "y":80 + }, + { + "data":[24, 24, 24, 24, 24, 28, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 50, 51, 24, 24, 28, 46, 46, 29, 24, 24, 24, + 89, 24, 24, 24, 28, 29, 24, 24, 90, 50, 2, 2, 32, 46, 29, 24, + 24, 24, 24, 24, 25, 23, 24, 24, 24, 24, 90, 24, 50, 2, 32, 29, + 29, 28, 29, 90, 25, 23, 24, 24, 24, 24, 24, 28, 29, 24, 25, 23, + 51, 25, 23, 24, 50, 51, 24, 28, 29, 89, 28, 10, 32, 46, 10, 32, + 24, 50, 51, 24, 24, 24, 24, 25, 23, 24, 50, 51, 50, 2, 51, 50, + 29, 24, 28, 29, 90, 24, 24, 50, 32, 29, 24, 24, 24, 24, 24, 24, + 51, 28, 10, 51, 24, 90, 90, 24, 25, 23, 24, 24, 24, 24, 90, 24, + 24, 25, 23, 24, 24, 24, 24, 24, 50, 51, 89, 24, 24, 24, 24, 24, + 24, 50, 32, 29, 28, 46, 29, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 28, 10, 51, 25, 111, 45, 46, 46, 46, 29, 24, 24, 24, 24, 24, + 24, 50, 32, 29, 50, 2, 2, 2, 2, 2, 51, 24, 24, 24, 24, 24, + 24, 90, 50, 51, 90, 24, 89, 90, 24, 24, 24, 24, 24, 28, 29, 24, + 24, 90, 24, 24, 24, 24, 24, 24, 28, 29, 24, 24, 28, 47, 45, 29, + 24, 90, 24, 89, 24, 89, 28, 29, 25, 45, 29, 28, 10, 3, 1, 51], + "height":16, + "width":16, + "x":64, + "y":80 + }, + { + "data":[90, 25, 45, 47, 23, 89, 24, 24, 24, 89, 24, 24, 28, 46, 29, 24, + 24, 50, 2, 2, 51, 24, 28, 29, 24, 24, 24, 24, 50, 3, 23, 24, + 24, 90, 24, 24, 24, 28, 10, 51, 24, 89, 28, 46, 29, 25, 45, 46, + 24, 24, 28, 29, 24, 50, 32, 29, 28, 29, 50, 3, 23, 50, 2, 3, + 24, 24, 25, 23, 24, 28, 47, 23, 25, 23, 24, 50, 51, 24, 24, 50, + 46, 29, 25, 23, 24, 25, 115, 23, 50, 32, 29, 24, 24, 24, 24, 24, + 2, 51, 50, 51, 24, 50, 3, 45, 29, 50, 51, 24, 24, 24, 90, 24, + 24, 24, 24, 90, 90, 24, 50, 2, 32, 46, 46, 29, 28, 29, 90, 24, + 24, 24, 24, 24, 24, 28, 46, 29, 50, 2, 2, 32, 47, 23, 89, 24, + 28, 29, 28, 29, 24, 50, 3, 23, 24, 24, 89, 50, 3, 45, 29, 24, + 25, 23, 50, 32, 29, 90, 50, 51, 24, 24, 89, 24, 50, 3, 23, 24, + 50, 51, 89, 50, 51, 24, 24, 24, 90, 24, 24, 24, 24, 50, 51, 24, + 24, 89, 28, 29, 24, 24, 24, 24, 28, 29, 24, 24, 90, 89, 24, 28, + 28, 29, 50, 51, 89, 24, 28, 46, 10, 32, 46, 29, 90, 24, 24, 25, + 25, 23, 90, 89, 24, 90, 50, 2, 32, 10, 3, 45, 46, 46, 46, 47, + 50, 32, 46, 29, 24, 24, 24, 90, 25, 23, 50, 2, 3, 111, 1, 3], + "height":16, + "width":16, + "x":80, + "y":80 + }, + { + "data":[24, 50, 51, 50, 32, 46, 10, 3, 1, 32, 46, 29, 24, 24, 50, 32, + 24, 24, 24, 24, 25, 1, 51, 50, 51, 25, 1, 51, 28, 29, 24, 50, + 46, 29, 24, 89, 50, 51, 24, 28, 29, 50, 32, 29, 50, 32, 29, 28, + 1, 32, 29, 89, 24, 28, 46, 10, 51, 24, 25, 23, 24, 50, 51, 50, + 51, 50, 32, 29, 24, 50, 2, 51, 90, 24, 50, 51, 89, 90, 24, 24, + 24, 24, 50, 51, 24, 28, 29, 24, 24, 24, 24, 24, 90, 24, 24, 24, + 24, 24, 90, 24, 89, 50, 51, 24, 24, 24, 28, 29, 24, 24, 24, 24, + 24, 28, 46, 29, 24, 24, 89, 24, 24, 24, 50, 51, 24, 24, 24, 90, + 24, 25, 111, 23, 24, 89, 28, 29, 24, 24, 28, 29, 24, 24, 24, 28, + 24, 50, 2, 51, 24, 89, 50, 51, 90, 24, 50, 32, 46, 46, 46, 47, + 24, 89, 24, 24, 24, 24, 24, 24, 24, 90, 24, 25, 115, 114, 114, 111, + 24, 24, 24, 24, 24, 24, 89, 24, 24, 24, 24, 25, 114, 1, 2, 3, + 46, 29, 28, 29, 28, 29, 28, 46, 29, 24, 90, 50, 2, 51, 24, 50, + 1, 51, 25, 23, 50, 51, 50, 2, 32, 29, 90, 89, 90, 89, 24, 24, + 23, 24, 50, 51, 28, 46, 29, 24, 50, 51, 24, 24, 89, 24, 90, 89, + 23, 24, 24, 24, 50, 2, 51, 24, 24, 24, 24, 24, 90, 24, 24, 24], + "height":16, + "width":16, + "x":96, + "y":80 + }, + { + "data":[29, 24, 50, 51, 24, 24, 24, 24, 28, 29, 24, 89, 28, 46, 29, 28, + 51, 24, 24, 24, 24, 90, 24, 28, 10, 51, 24, 24, 50, 3, 45, 10, + 29, 24, 28, 29, 24, 24, 28, 10, 32, 46, 29, 24, 24, 25, 1, 51, + 32, 46, 10, 32, 46, 46, 10, 51, 50, 3, 45, 29, 24, 25, 45, 29, + 50, 2, 51, 25, 1, 2, 32, 46, 46, 47, 1, 32, 46, 47, 115, 23, + 90, 24, 24, 50, 32, 46, 10, 2, 3, 112, 45, 10, 2, 2, 2, 32, + 24, 24, 24, 24, 50, 2, 32, 46, 10, 2, 2, 51, 28, 29, 24, 50, + 24, 24, 89, 24, 24, 24, 25, 111, 23, 24, 24, 24, 25, 23, 28, 29, + 29, 24, 89, 89, 24, 24, 25, 111, 23, 24, 28, 29, 50, 51, 25, 23, + 23, 24, 89, 24, 24, 24, 25, 111, 23, 24, 25, 23, 28, 29, 25, 23, + 23, 24, 24, 24, 24, 24, 25, 111, 45, 46, 10, 51, 50, 51, 50, 51, + 23, 24, 24, 24, 24, 24, 50, 3, 115, 115, 23, 89, 24, 24, 90, 28, + 51, 24, 24, 24, 24, 24, 90, 25, 1, 2, 51, 89, 24, 89, 24, 25, + 24, 24, 24, 24, 24, 24, 24, 50, 32, 29, 24, 24, 24, 24, 24, 50, + 24, 24, 90, 90, 24, 24, 28, 46, 47, 23, 28, 29, 28, 46, 29, 24, + 24, 24, 24, 24, 24, 24, 25, 111, 1, 51, 50, 51, 50, 2, 51, 24], + "height":16, + "width":16, + "x":112, + "y":80 + }], + "class":"Tile", + "height":96, + "id":1, + "name":"Tiles", + "opacity":1, + "startx":0, + "starty":0, + "type":"tilelayer", + "visible":true, + "width":128, + "x":0, + "y":0 + }, + { + "chunks":[], + "height":80, + "id":5, + "name":"Collidable", + "opacity":1, + "startx":0, + "starty":0, + "type":"tilelayer", + "visible":true, + "width":64, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":3, + "name":"Collectables", + "objects":[], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + { + "draworder":"topdown", + "id":4, + "name":"Enemies", + "objects":[], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }], + "nextlayerid":6, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.10.2", + "tileheight":16, + "tilesets":[ + { + "firstgid":1, + "source":"..\/TileSets\/TileSet 1.tsj" + }, + { + "firstgid":573, + "source":"..\/TileSets\/tileset 1 collision.tsj" + }], + "tilewidth":16, + "type":"map", + "version":"1.10", + "width":30 +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/TileSets/TileSet 1.tsj b/ZoFo/Content/MapData/TileSets/TileSet 1.tsj new file mode 100644 index 0000000..9e9f4b1 --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/TileSet 1.tsj @@ -0,0 +1,2429 @@ +{ "class":"Tile", + "columns":22, + "fillmode":"preserve-aspect-fit", + "grid": + { + "height":24, + "orientation":"orthogonal", + "width":24 + }, + "image":"..\/..\/Textures\/TileSetImages\/TilesetFloor.png", + "imageheight":417, + "imagewidth":352, + "margin":0, + "name":"TileSet 1", + "objectalignment":"topleft", + "spacing":0, + "tilecount":572, + "tiledversion":"1.10.2", + "tileheight":16, + "tiles":[ + { + "id":0, + "type":"Tile" + }, + { + "id":1, + "type":"Tile" + }, + { + "id":2, + "type":"Tile" + }, + { + "id":3, + "type":"Tile" + }, + { + "id":4, + "type":"Tile" + }, + { + "id":5, + "type":"Tile" + }, + { + "id":6, + "type":"Tile" + }, + { + "id":7, + "type":"Tile" + }, + { + "id":8, + "type":"Tile" + }, + { + "id":9, + "type":"Tile" + }, + { + "id":10, + "type":"Tile" + }, + { + "id":11, + "type":"Tile" + }, + { + "id":12, + "type":"Tile" + }, + { + "id":13, + "type":"Tile" + }, + { + "id":14, + "type":"Tile" + }, + { + "id":15, + "type":"Tile" + }, + { + "id":16, + "type":"Tile" + }, + { + "id":17, + "type":"Tile" + }, + { + "id":18, + "type":"Tile" + }, + { + "id":19, + "type":"Tile" + }, + { + "id":20, + "type":"Tile" + }, + { + "id":21, + "type":"Tile" + }, + { + "id":22, + "type":"Tile" + }, + { + "id":23, + "type":"Tile" + }, + { + "id":24, + "type":"Tile" + }, + { + "id":25, + "type":"Tile" + }, + { + "id":26, + "type":"Tile" + }, + { + "id":27, + "probability":0.5, + "type":"Tile" + }, + { + "id":28, + "probability":0.5, + "type":"Tile" + }, + { + "id":29, + "type":"Tile" + }, + { + "id":30, + "type":"Tile" + }, + { + "id":31, + "type":"Tile" + }, + { + "id":32, + "type":"Tile" + }, + { + "id":33, + "type":"Tile" + }, + { + "id":34, + "type":"Tile" + }, + { + "id":35, + "type":"Tile" + }, + { + "id":36, + "type":"Tile" + }, + { + "id":37, + "type":"Tile" + }, + { + "id":38, + "type":"Tile" + }, + { + "id":39, + "type":"Tile" + }, + { + "id":40, + "type":"Tile" + }, + { + "id":41, + "type":"Tile" + }, + { + "id":42, + "type":"Tile" + }, + { + "id":43, + "type":"Tile" + }, + { + "id":44, + "type":"Tile" + }, + { + "id":45, + "type":"Tile" + }, + { + "id":46, + "type":"Tile" + }, + { + "id":47, + "type":"Tile" + }, + { + "id":48, + "type":"Tile" + }, + { + "id":49, + "probability":0.5, + "type":"Tile" + }, + { + "id":50, + "probability":0.5, + "type":"Tile" + }, + { + "id":51, + "type":"Tile" + }, + { + "id":52, + "type":"Tile" + }, + { + "id":53, + "type":"Tile" + }, + { + "id":54, + "type":"Tile" + }, + { + "id":55, + "type":"Tile" + }, + { + "id":56, + "type":"Tile" + }, + { + "id":57, + "type":"Tile" + }, + { + "id":58, + "type":"Tile" + }, + { + "id":59, + "type":"Tile" + }, + { + "id":60, + "type":"Tile" + }, + { + "id":61, + "type":"Tile" + }, + { + "id":62, + "type":"Tile" + }, + { + "id":63, + "type":"Tile" + }, + { + "id":64, + "type":"Tile" + }, + { + "id":65, + "type":"Tile" + }, + { + "id":66, + "type":"Tile" + }, + { + "id":67, + "type":"Tile" + }, + { + "id":68, + "type":"Tile" + }, + { + "id":69, + "type":"Tile" + }, + { + "id":70, + "type":"Tile" + }, + { + "id":71, + "type":"Tile" + }, + { + "id":72, + "type":"Tile" + }, + { + "id":73, + "type":"Tile" + }, + { + "id":74, + "type":"Tile" + }, + { + "id":75, + "type":"Tile" + }, + { + "id":76, + "type":"Tile" + }, + { + "id":77, + "type":"Tile" + }, + { + "id":78, + "type":"Tile" + }, + { + "id":79, + "type":"Tile" + }, + { + "id":80, + "type":"Tile" + }, + { + "id":81, + "type":"Tile" + }, + { + "id":82, + "type":"Tile" + }, + { + "id":83, + "type":"Tile" + }, + { + "id":84, + "type":"Tile" + }, + { + "id":85, + "type":"Tile" + }, + { + "id":86, + "type":"Tile" + }, + { + "id":87, + "type":"Tile" + }, + { + "id":88, + "probability":0.100000001490116, + "type":"Tile" + }, + { + "id":89, + "probability":0.100000001490116, + "type":"Tile" + }, + { + "id":90, + "type":"Tile" + }, + { + "id":91, + "type":"Tile" + }, + { + "id":92, + "type":"Tile" + }, + { + "id":93, + "type":"Tile" + }, + { + "id":94, + "type":"Tile" + }, + { + "id":95, + "type":"Tile" + }, + { + "id":96, + "type":"Tile" + }, + { + "id":97, + "type":"Tile" + }, + { + "id":98, + "type":"Tile" + }, + { + "id":99, + "type":"Tile" + }, + { + "id":100, + "type":"Tile" + }, + { + "id":101, + "type":"Tile" + }, + { + "id":102, + "type":"Tile" + }, + { + "id":103, + "type":"Tile" + }, + { + "id":104, + "type":"Tile" + }, + { + "id":105, + "type":"Tile" + }, + { + "id":106, + "type":"Tile" + }, + { + "id":107, + "type":"Tile" + }, + { + "id":108, + "type":"Tile" + }, + { + "id":109, + "type":"Tile" + }, + { + "id":110, + "probability":2, + "type":"Tile" + }, + { + "id":111, + "probability":0.100000001490116, + "type":"Tile" + }, + { + "id":112, + "probability":0.100000001490116, + "type":"Tile" + }, + { + "id":113, + "type":"Tile" + }, + { + "id":114, + "type":"Tile" + }, + { + "id":115, + "type":"Tile" + }, + { + "id":116, + "type":"Tile" + }, + { + "id":117, + "type":"Tile" + }, + { + "id":118, + "type":"Tile" + }, + { + "id":119, + "type":"Tile" + }, + { + "id":120, + "type":"Tile" + }, + { + "id":121, + "type":"Tile" + }, + { + "id":122, + "type":"Tile" + }, + { + "id":123, + "type":"Tile" + }, + { + "id":124, + "type":"Tile" + }, + { + "id":125, + "type":"Tile" + }, + { + "id":126, + "type":"Tile" + }, + { + "id":127, + "type":"Tile" + }, + { + "id":128, + "type":"Tile" + }, + { + "id":129, + "type":"Tile" + }, + { + "id":130, + "type":"Tile" + }, + { + "id":131, + "type":"Tile" + }, + { + "id":132, + "type":"Tile" + }, + { + "id":133, + "type":"Tile" + }, + { + "id":134, + "type":"Tile" + }, + { + "id":135, + "type":"Tile" + }, + { + "id":136, + "type":"Tile" + }, + { + "id":137, + "type":"Tile" + }, + { + "id":138, + "type":"Tile" + }, + { + "id":139, + "type":"Tile" + }, + { + "id":140, + "type":"Tile" + }, + { + "id":141, + "type":"Tile" + }, + { + "id":142, + "type":"Tile" + }, + { + "id":143, + "type":"Tile" + }, + { + "id":144, + "type":"Tile" + }, + { + "id":145, + "type":"Tile" + }, + { + "id":146, + "type":"Tile" + }, + { + "id":147, + "type":"Tile" + }, + { + "id":148, + "type":"Tile" + }, + { + "id":149, + "type":"Tile" + }, + { + "id":150, + "type":"Tile" + }, + { + "id":151, + "type":"Tile" + }, + { + "id":152, + "type":"Tile" + }, + { + "id":153, + "type":"Tile" + }, + { + "id":154, + "type":"Tile" + }, + { + "id":155, + "type":"Tile" + }, + { + "id":156, + "type":"Tile" + }, + { + "id":157, + "type":"Tile" + }, + { + "id":158, + "type":"Tile" + }, + { + "id":159, + "type":"Tile" + }, + { + "id":160, + "type":"Tile" + }, + { + "id":161, + "type":"Tile" + }, + { + "id":162, + "type":"Tile" + }, + { + "id":163, + "type":"Tile" + }, + { + "id":164, + "type":"Tile" + }, + { + "id":165, + "type":"Tile" + }, + { + "id":166, + "type":"Tile" + }, + { + "id":167, + "type":"Tile" + }, + { + "id":168, + "type":"Tile" + }, + { + "id":169, + "type":"Tile" + }, + { + "id":170, + "type":"Tile" + }, + { + "id":171, + "type":"Tile" + }, + { + "id":172, + "type":"Tile" + }, + { + "id":173, + "type":"Tile" + }, + { + "id":174, + "type":"Tile" + }, + { + "id":175, + "type":"Tile" + }, + { + "id":176, + "type":"Tile" + }, + { + "id":177, + "type":"Tile" + }, + { + "id":178, + "type":"Tile" + }, + { + "id":179, + "type":"Tile" + }, + { + "id":180, + "type":"Tile" + }, + { + "id":181, + "type":"Tile" + }, + { + "id":182, + "type":"Tile" + }, + { + "id":183, + "type":"Tile" + }, + { + "id":184, + "type":"Tile" + }, + { + "id":185, + "type":"Tile" + }, + { + "id":186, + "type":"Tile" + }, + { + "id":187, + "type":"Tile" + }, + { + "id":188, + "type":"Tile" + }, + { + "id":189, + "type":"Tile" + }, + { + "id":190, + "type":"Tile" + }, + { + "id":191, + "type":"Tile" + }, + { + "id":192, + "type":"Tile" + }, + { + "id":193, + "type":"Tile" + }, + { + "id":194, + "type":"Tile" + }, + { + "id":195, + "type":"Tile" + }, + { + "id":196, + "type":"Tile" + }, + { + "id":197, + "type":"Tile" + }, + { + "id":198, + "type":"Tile" + }, + { + "id":199, + "type":"Tile" + }, + { + "id":200, + "type":"Tile" + }, + { + "id":201, + "type":"Tile" + }, + { + "id":202, + "type":"Tile" + }, + { + "id":203, + "type":"Tile" + }, + { + "id":204, + "type":"Tile" + }, + { + "id":205, + "type":"Tile" + }, + { + "id":206, + "type":"Tile" + }, + { + "id":207, + "type":"Tile" + }, + { + "id":208, + "type":"Tile" + }, + { + "id":209, + "type":"Tile" + }, + { + "id":210, + "type":"Tile" + }, + { + "id":211, + "type":"Tile" + }, + { + "id":212, + "type":"Tile" + }, + { + "id":213, + "type":"Tile" + }, + { + "id":214, + "type":"Tile" + }, + { + "id":215, + "type":"Tile" + }, + { + "id":216, + "type":"Tile" + }, + { + "id":217, + "type":"Tile" + }, + { + "id":218, + "type":"Tile" + }, + { + "id":219, + "type":"Tile" + }, + { + "id":220, + "type":"Tile" + }, + { + "id":221, + "type":"Tile" + }, + { + "id":222, + "type":"Tile" + }, + { + "id":223, + "type":"Tile" + }, + { + "id":224, + "type":"Tile" + }, + { + "id":225, + "type":"Tile" + }, + { + "id":226, + "type":"Tile" + }, + { + "id":227, + "type":"Tile" + }, + { + "id":228, + "type":"Tile" + }, + { + "id":229, + "type":"Tile" + }, + { + "id":230, + "type":"Tile" + }, + { + "id":231, + "type":"Tile" + }, + { + "id":232, + "type":"Tile" + }, + { + "id":233, + "type":"Tile" + }, + { + "id":234, + "type":"Tile" + }, + { + "id":235, + "type":"Tile" + }, + { + "id":236, + "type":"Tile" + }, + { + "id":237, + "type":"Tile" + }, + { + "id":238, + "type":"Tile" + }, + { + "id":239, + "type":"Tile" + }, + { + "id":240, + "type":"Tile" + }, + { + "id":241, + "type":"Tile" + }, + { + "id":242, + "type":"Tile" + }, + { + "id":243, + "type":"Tile" + }, + { + "id":244, + "type":"Tile" + }, + { + "id":245, + "type":"Tile" + }, + { + "id":246, + "type":"Tile" + }, + { + "id":247, + "type":"Tile" + }, + { + "id":248, + "type":"Tile" + }, + { + "id":249, + "type":"Tile" + }, + { + "id":250, + "type":"Tile" + }, + { + "id":251, + "type":"Tile" + }, + { + "id":252, + "type":"Tile" + }, + { + "id":253, + "type":"Tile" + }, + { + "id":254, + "type":"Tile" + }, + { + "id":255, + "type":"Tile" + }, + { + "id":256, + "type":"Tile" + }, + { + "id":257, + "type":"Tile" + }, + { + "id":258, + "type":"Tile" + }, + { + "id":259, + "type":"Tile" + }, + { + "id":260, + "type":"Tile" + }, + { + "id":261, + "type":"Tile" + }, + { + "id":262, + "type":"Tile" + }, + { + "id":263, + "type":"Tile" + }, + { + "id":264, + "type":"Tile" + }, + { + "id":265, + "type":"Tile" + }, + { + "id":266, + "type":"Tile" + }, + { + "id":267, + "type":"Tile" + }, + { + "id":268, + "type":"Tile" + }, + { + "id":269, + "type":"Tile" + }, + { + "id":270, + "type":"Tile" + }, + { + "id":271, + "type":"Tile" + }, + { + "id":272, + "type":"Tile" + }, + { + "id":273, + "type":"Tile" + }, + { + "id":274, + "type":"Tile" + }, + { + "id":275, + "type":"Tile" + }, + { + "id":276, + "type":"Tile" + }, + { + "id":277, + "type":"Tile" + }, + { + "id":278, + "type":"Tile" + }, + { + "id":279, + "type":"Tile" + }, + { + "id":280, + "type":"Tile" + }, + { + "id":281, + "type":"Tile" + }, + { + "id":282, + "type":"Tile" + }, + { + "id":283, + "type":"Tile" + }, + { + "id":284, + "type":"Tile" + }, + { + "id":285, + "type":"Tile" + }, + { + "id":286, + "type":"Tile" + }, + { + "id":287, + "type":"Tile" + }, + { + "id":288, + "type":"Tile" + }, + { + "id":289, + "type":"Tile" + }, + { + "id":290, + "type":"Tile" + }, + { + "id":291, + "type":"Tile" + }, + { + "id":292, + "type":"Tile" + }, + { + "id":293, + "type":"Tile" + }, + { + "id":294, + "type":"Tile" + }, + { + "id":295, + "type":"Tile" + }, + { + "id":296, + "type":"Tile" + }, + { + "id":297, + "type":"Tile" + }, + { + "id":298, + "type":"Tile" + }, + { + "id":299, + "type":"Tile" + }, + { + "id":300, + "type":"Tile" + }, + { + "id":301, + "type":"Tile" + }, + { + "id":302, + "type":"Tile" + }, + { + "id":303, + "type":"Tile" + }, + { + "id":304, + "type":"Tile" + }, + { + "id":305, + "type":"Tile" + }, + { + "id":306, + "type":"Tile" + }, + { + "id":307, + "type":"Tile" + }, + { + "id":308, + "type":"Tile" + }, + { + "id":309, + "type":"Tile" + }, + { + "id":310, + "type":"Tile" + }, + { + "id":311, + "type":"Tile" + }, + { + "id":312, + "type":"Tile" + }, + { + "id":313, + "type":"Tile" + }, + { + "id":314, + "type":"Tile" + }, + { + "id":315, + "type":"Tile" + }, + { + "id":316, + "type":"Tile" + }, + { + "id":317, + "type":"Tile" + }, + { + "id":318, + "type":"Tile" + }, + { + "id":319, + "type":"Tile" + }, + { + "id":320, + "type":"Tile" + }, + { + "id":321, + "type":"Tile" + }, + { + "id":322, + "type":"Tile" + }, + { + "id":323, + "type":"Tile" + }, + { + "id":324, + "type":"Tile" + }, + { + "id":325, + "type":"Tile" + }, + { + "id":326, + "type":"Tile" + }, + { + "id":327, + "type":"Tile" + }, + { + "id":328, + "type":"Tile" + }, + { + "id":329, + "type":"Tile" + }, + { + "id":330, + "type":"Tile" + }, + { + "id":331, + "type":"Tile" + }, + { + "id":332, + "type":"Tile" + }, + { + "id":333, + "type":"Tile" + }, + { + "id":334, + "type":"Tile" + }, + { + "id":335, + "type":"Tile" + }, + { + "id":336, + "type":"Tile" + }, + { + "id":337, + "type":"Tile" + }, + { + "id":338, + "type":"Tile" + }, + { + "id":339, + "type":"Tile" + }, + { + "id":340, + "type":"Tile" + }, + { + "id":341, + "type":"Tile" + }, + { + "id":342, + "type":"Tile" + }, + { + "id":343, + "type":"Tile" + }, + { + "id":344, + "type":"Tile" + }, + { + "id":345, + "type":"Tile" + }, + { + "id":346, + "type":"Tile" + }, + { + "id":347, + "type":"Tile" + }, + { + "id":348, + "type":"Tile" + }, + { + "id":349, + "type":"Tile" + }, + { + "id":350, + "type":"Tile" + }, + { + "id":351, + "type":"Tile" + }, + { + "id":352, + "type":"Tile" + }, + { + "id":353, + "type":"Tile" + }, + { + "id":354, + "type":"Tile" + }, + { + "id":355, + "type":"Tile" + }, + { + "id":356, + "type":"Tile" + }, + { + "id":357, + "type":"Tile" + }, + { + "id":358, + "type":"Tile" + }, + { + "id":359, + "type":"Tile" + }, + { + "id":360, + "type":"Tile" + }, + { + "id":361, + "type":"Tile" + }, + { + "id":362, + "type":"Tile" + }, + { + "id":363, + "type":"Tile" + }, + { + "id":364, + "type":"Tile" + }, + { + "id":365, + "type":"Tile" + }, + { + "id":366, + "type":"Tile" + }, + { + "id":367, + "type":"Tile" + }, + { + "id":368, + "type":"Tile" + }, + { + "id":369, + "type":"Tile" + }, + { + "id":370, + "type":"Tile" + }, + { + "id":371, + "type":"Tile" + }, + { + "id":372, + "type":"Tile" + }, + { + "id":373, + "type":"Tile" + }, + { + "id":374, + "type":"Tile" + }, + { + "id":375, + "type":"Tile" + }, + { + "id":376, + "type":"Tile" + }, + { + "id":377, + "type":"Tile" + }, + { + "id":378, + "type":"Tile" + }, + { + "id":379, + "type":"Tile" + }, + { + "id":380, + "type":"Tile" + }, + { + "id":381, + "type":"Tile" + }, + { + "id":382, + "type":"Tile" + }, + { + "id":383, + "type":"Tile" + }, + { + "id":384, + "type":"Tile" + }, + { + "id":385, + "type":"Tile" + }, + { + "id":386, + "type":"Tile" + }, + { + "id":387, + "type":"Tile" + }, + { + "id":388, + "type":"Tile" + }, + { + "id":389, + "type":"Tile" + }, + { + "id":390, + "type":"Tile" + }, + { + "id":391, + "type":"Tile" + }, + { + "id":392, + "type":"Tile" + }, + { + "id":393, + "type":"Tile" + }, + { + "id":394, + "type":"Tile" + }, + { + "id":395, + "type":"Tile" + }, + { + "id":396, + "type":"Tile" + }, + { + "id":397, + "type":"Tile" + }, + { + "id":398, + "type":"Tile" + }, + { + "id":399, + "type":"Tile" + }, + { + "id":400, + "type":"Tile" + }, + { + "id":401, + "type":"Tile" + }, + { + "id":402, + "type":"Tile" + }, + { + "id":403, + "type":"Tile" + }, + { + "id":404, + "type":"Tile" + }, + { + "id":405, + "type":"Tile" + }, + { + "id":406, + "type":"Tile" + }, + { + "id":407, + "type":"Tile" + }, + { + "id":408, + "type":"Tile" + }, + { + "id":409, + "type":"Tile" + }, + { + "id":410, + "type":"Tile" + }, + { + "id":411, + "type":"Tile" + }, + { + "id":412, + "type":"Tile" + }, + { + "id":413, + "type":"Tile" + }, + { + "id":414, + "type":"Tile" + }, + { + "id":415, + "type":"Tile" + }, + { + "id":416, + "type":"Tile" + }, + { + "id":417, + "type":"Tile" + }, + { + "id":418, + "type":"Tile" + }, + { + "id":419, + "type":"Tile" + }, + { + "id":420, + "type":"Tile" + }, + { + "id":421, + "type":"Tile" + }, + { + "id":422, + "type":"Tile" + }, + { + "id":423, + "type":"Tile" + }, + { + "id":424, + "type":"Tile" + }, + { + "id":425, + "type":"Tile" + }, + { + "id":426, + "type":"Tile" + }, + { + "id":427, + "type":"Tile" + }, + { + "id":428, + "type":"Tile" + }, + { + "id":429, + "type":"Tile" + }, + { + "id":430, + "type":"Tile" + }, + { + "id":431, + "type":"Tile" + }, + { + "id":432, + "type":"Tile" + }, + { + "id":433, + "type":"Tile" + }, + { + "id":434, + "type":"Tile" + }, + { + "id":435, + "type":"Tile" + }, + { + "id":436, + "type":"Tile" + }, + { + "id":437, + "type":"Tile" + }, + { + "id":438, + "type":"Tile" + }, + { + "id":439, + "type":"Tile" + }, + { + "id":440, + "type":"Tile" + }, + { + "id":441, + "type":"Tile" + }, + { + "id":442, + "type":"Tile" + }, + { + "id":443, + "type":"Tile" + }, + { + "id":444, + "type":"Tile" + }, + { + "id":445, + "type":"Tile" + }, + { + "id":446, + "type":"Tile" + }, + { + "id":447, + "type":"Tile" + }, + { + "id":448, + "type":"Tile" + }, + { + "id":449, + "type":"Tile" + }, + { + "id":450, + "type":"Tile" + }, + { + "id":451, + "type":"Tile" + }, + { + "id":452, + "type":"Tile" + }, + { + "id":453, + "type":"Tile" + }, + { + "id":454, + "type":"Tile" + }, + { + "id":455, + "type":"Tile" + }, + { + "id":456, + "type":"Tile" + }, + { + "id":457, + "type":"Tile" + }, + { + "id":458, + "type":"Tile" + }, + { + "id":459, + "type":"Tile" + }, + { + "id":460, + "type":"Tile" + }, + { + "id":461, + "type":"Tile" + }, + { + "id":462, + "type":"Tile" + }, + { + "id":463, + "type":"Tile" + }, + { + "id":464, + "type":"Tile" + }, + { + "id":465, + "type":"Tile" + }, + { + "id":466, + "type":"Tile" + }, + { + "id":467, + "type":"Tile" + }, + { + "id":468, + "type":"Tile" + }, + { + "id":469, + "type":"Tile" + }, + { + "id":470, + "type":"Tile" + }, + { + "id":471, + "type":"Tile" + }, + { + "id":472, + "type":"Tile" + }, + { + "id":473, + "type":"Tile" + }, + { + "id":474, + "type":"Tile" + }, + { + "id":475, + "type":"Tile" + }, + { + "id":476, + "type":"Tile" + }, + { + "id":477, + "type":"Tile" + }, + { + "id":478, + "type":"Tile" + }, + { + "id":479, + "type":"Tile" + }, + { + "id":480, + "type":"Tile" + }, + { + "id":481, + "type":"Tile" + }, + { + "id":482, + "type":"Tile" + }, + { + "id":483, + "type":"Tile" + }, + { + "id":484, + "type":"Tile" + }, + { + "id":485, + "type":"Tile" + }, + { + "id":486, + "type":"Tile" + }, + { + "id":487, + "type":"Tile" + }, + { + "id":488, + "type":"Tile" + }, + { + "id":489, + "type":"Tile" + }, + { + "id":490, + "type":"Tile" + }, + { + "id":491, + "type":"Tile" + }, + { + "id":492, + "type":"Tile" + }, + { + "id":493, + "type":"Tile" + }, + { + "id":494, + "type":"Tile" + }, + { + "id":495, + "type":"Tile" + }, + { + "id":496, + "type":"Tile" + }, + { + "id":497, + "type":"Tile" + }, + { + "id":498, + "type":"Tile" + }, + { + "id":499, + "type":"Tile" + }, + { + "id":500, + "type":"Tile" + }, + { + "id":501, + "type":"Tile" + }, + { + "id":502, + "type":"Tile" + }, + { + "id":503, + "type":"Tile" + }, + { + "id":504, + "type":"Tile" + }, + { + "id":505, + "type":"Tile" + }, + { + "id":506, + "type":"Tile" + }, + { + "id":507, + "type":"Tile" + }, + { + "id":508, + "type":"Tile" + }, + { + "id":509, + "type":"Tile" + }, + { + "id":510, + "type":"Tile" + }, + { + "id":511, + "type":"Tile" + }, + { + "id":512, + "type":"Tile" + }, + { + "id":513, + "type":"Tile" + }, + { + "id":514, + "type":"Tile" + }, + { + "id":515, + "type":"Tile" + }, + { + "id":516, + "type":"Tile" + }, + { + "id":517, + "type":"Tile" + }, + { + "id":518, + "type":"Tile" + }, + { + "id":519, + "type":"Tile" + }, + { + "id":520, + "type":"Tile" + }, + { + "id":521, + "type":"Tile" + }, + { + "id":522, + "type":"Tile" + }, + { + "id":523, + "type":"Tile" + }, + { + "id":524, + "type":"Tile" + }, + { + "id":525, + "type":"Tile" + }, + { + "id":526, + "type":"Tile" + }, + { + "id":527, + "type":"Tile" + }, + { + "id":528, + "type":"Tile" + }, + { + "id":529, + "type":"Tile" + }, + { + "id":530, + "type":"Tile" + }, + { + "id":531, + "type":"Tile" + }, + { + "id":532, + "type":"Tile" + }, + { + "id":533, + "type":"Tile" + }, + { + "id":534, + "type":"Tile" + }, + { + "id":535, + "type":"Tile" + }, + { + "id":536, + "type":"Tile" + }, + { + "id":537, + "type":"Tile" + }, + { + "id":538, + "type":"Tile" + }, + { + "id":539, + "type":"Tile" + }, + { + "id":540, + "type":"Tile" + }, + { + "id":541, + "type":"Tile" + }, + { + "id":542, + "type":"Tile" + }, + { + "id":543, + "type":"Tile" + }, + { + "id":544, + "type":"Tile" + }, + { + "id":545, + "type":"Tile" + }, + { + "id":546, + "type":"Tile" + }, + { + "id":547, + "type":"Tile" + }, + { + "id":548, + "type":"Tile" + }, + { + "id":549, + "type":"Tile" + }, + { + "id":550, + "type":"Tile" + }, + { + "id":551, + "type":"Tile" + }, + { + "id":552, + "type":"Tile" + }, + { + "id":553, + "type":"Tile" + }, + { + "id":554, + "type":"Tile" + }, + { + "id":555, + "type":"Tile" + }, + { + "id":556, + "type":"Tile" + }, + { + "id":557, + "type":"Tile" + }, + { + "id":558, + "type":"Tile" + }, + { + "id":559, + "type":"Tile" + }, + { + "id":560, + "type":"Tile" + }, + { + "id":561, + "type":"Tile" + }, + { + "id":562, + "type":"Tile" + }, + { + "id":563, + "type":"Tile" + }, + { + "id":564, + "type":"Tile" + }, + { + "id":565, + "type":"Tile" + }, + { + "id":566, + "type":"Tile" + }, + { + "id":567, + "type":"Tile" + }, + { + "id":568, + "type":"Tile" + }, + { + "id":569, + "type":"Tile" + }, + { + "id":570, + "type":"Tile" + }, + { + "id":571, + "type":"Tile" + }], + "tilewidth":16, + "type":"tileset", + "version":"1.10", + "wangsets":[ + { + "colors":[ + { + "color":"#ff0000", + "name":"Sand", + "probability":1, + "tile":23 + }, + { + "color":"#00ff00", + "name":"SandStone", + "probability":0.3, + "tile":110 + }], + "name":"\u041f\u0435\u0441\u0447\u0430\u043d\u044b\u0439", + "tile":-1, + "type":"corner", + "wangtiles":[ + { + "tileid":0, + "wangid":[0, 2, 0, 1, 0, 2, 0, 2] + }, + { + "tileid":1, + "wangid":[0, 2, 0, 1, 0, 1, 0, 2] + }, + { + "tileid":2, + "wangid":[0, 2, 0, 2, 0, 1, 0, 2] + }, + { + "tileid":9, + "wangid":[0, 2, 0, 1, 0, 2, 0, 1] + }, + { + "tileid":22, + "wangid":[0, 1, 0, 1, 0, 2, 0, 2] + }, + { + "tileid":23, + "wangid":[0, 1, 0, 1, 0, 1, 0, 1] + }, + { + "tileid":24, + "wangid":[0, 2, 0, 2, 0, 1, 0, 1] + }, + { + "tileid":27, + "wangid":[0, 1, 0, 2, 0, 1, 0, 1] + }, + { + "tileid":28, + "wangid":[0, 1, 0, 1, 0, 2, 0, 1] + }, + { + "tileid":31, + "wangid":[0, 1, 0, 2, 0, 1, 0, 2] + }, + { + "tileid":44, + "wangid":[0, 1, 0, 2, 0, 2, 0, 2] + }, + { + "tileid":45, + "wangid":[0, 1, 0, 2, 0, 2, 0, 1] + }, + { + "tileid":46, + "wangid":[0, 2, 0, 2, 0, 2, 0, 1] + }, + { + "tileid":49, + "wangid":[0, 2, 0, 1, 0, 1, 0, 1] + }, + { + "tileid":50, + "wangid":[0, 1, 0, 1, 0, 1, 0, 2] + }, + { + "tileid":88, + "wangid":[0, 1, 0, 1, 0, 1, 0, 1] + }, + { + "tileid":89, + "wangid":[0, 1, 0, 1, 0, 1, 0, 1] + }, + { + "tileid":110, + "wangid":[0, 2, 0, 2, 0, 2, 0, 2] + }, + { + "tileid":111, + "wangid":[0, 2, 0, 2, 0, 2, 0, 2] + }, + { + "tileid":112, + "wangid":[0, 2, 0, 2, 0, 2, 0, 2] + }, + { + "tileid":113, + "wangid":[0, 2, 0, 2, 0, 2, 0, 2] + }, + { + "tileid":114, + "wangid":[0, 2, 0, 2, 0, 2, 0, 2] + }] + }] +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/TileSets/TilesetNature.tsj b/ZoFo/Content/MapData/TileSets/TilesetNature.tsj new file mode 100644 index 0000000..28b7c1d --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/TilesetNature.tsj @@ -0,0 +1,2537 @@ +{ "columns":24, + "image":"..\/..\/Textures\/TileSetImages\/TilesetNature.png", + "imageheight":336, + "imagewidth":384, + "margin":0, + "name":"TilesetNature", + "spacing":0, + "tilecount":504, + "tiledversion":"1.10.2", + "tileheight":16, + "tiles":[ + { + "id":0, + "type":"StopObject" + }, + { + "id":1, + "type":"StopObject" + }, + { + "id":2, + "type":"StopObject" + }, + { + "id":3, + "type":"StopObject" + }, + { + "id":4, + "type":"StopObject" + }, + { + "id":5, + "type":"StopObject" + }, + { + "id":6, + "type":"StopObject" + }, + { + "id":7, + "type":"StopObject" + }, + { + "id":8, + "type":"StopObject" + }, + { + "id":9, + "type":"StopObject" + }, + { + "id":10, + "type":"StopObject" + }, + { + "id":11, + "type":"StopObject" + }, + { + "id":12, + "type":"StopObject" + }, + { + "id":13, + "type":"StopObject" + }, + { + "id":14, + "type":"StopObject" + }, + { + "id":15, + "type":"StopObject" + }, + { + "id":16, + "type":"StopObject" + }, + { + "id":17, + "type":"StopObject" + }, + { + "id":18, + "type":"StopObject" + }, + { + "id":19, + "type":"StopObject" + }, + { + "id":20, + "type":"StopObject" + }, + { + "id":21, + "type":"StopObject" + }, + { + "id":22, + "type":"StopObject" + }, + { + "id":23, + "type":"StopObject" + }, + { + "id":24, + "type":"StopObject" + }, + { + "id":25, + "type":"StopObject" + }, + { + "id":26, + "type":"StopObject" + }, + { + "id":27, + "type":"StopObject" + }, + { + "id":28, + "type":"StopObject" + }, + { + "id":29, + "type":"StopObject" + }, + { + "id":30, + "type":"StopObject" + }, + { + "id":31, + "type":"StopObject" + }, + { + "id":32, + "type":"StopObject" + }, + { + "id":33, + "type":"StopObject" + }, + { + "id":34, + "type":"StopObject" + }, + { + "id":35, + "type":"StopObject" + }, + { + "id":36, + "type":"StopObject" + }, + { + "id":37, + "type":"StopObject" + }, + { + "id":38, + "type":"StopObject" + }, + { + "id":39, + "type":"StopObject" + }, + { + "id":40, + "type":"StopObject" + }, + { + "id":41, + "type":"StopObject" + }, + { + "id":42, + "type":"StopObject" + }, + { + "id":43, + "type":"StopObject" + }, + { + "id":44, + "type":"StopObject" + }, + { + "id":45, + "type":"StopObject" + }, + { + "id":46, + "type":"StopObject" + }, + { + "id":47, + "type":"StopObject" + }, + { + "id":48, + "type":"StopObject" + }, + { + "id":49, + "type":"StopObject" + }, + { + "id":50, + "type":"StopObject" + }, + { + "id":51, + "type":"StopObject" + }, + { + "id":52, + "type":"StopObject" + }, + { + "id":53, + "type":"StopObject" + }, + { + "id":54, + "type":"StopObject" + }, + { + "id":55, + "type":"StopObject" + }, + { + "id":56, + "type":"StopObject" + }, + { + "id":57, + "type":"StopObject" + }, + { + "id":58, + "type":"StopObject" + }, + { + "id":59, + "type":"StopObject" + }, + { + "id":60, + "type":"StopObject" + }, + { + "id":61, + "type":"StopObject" + }, + { + "id":62, + "type":"StopObject" + }, + { + "id":63, + "type":"StopObject" + }, + { + "id":64, + "type":"StopObject" + }, + { + "id":65, + "type":"StopObject" + }, + { + "id":66, + "type":"StopObject" + }, + { + "id":67, + "type":"StopObject" + }, + { + "id":68, + "type":"StopObject" + }, + { + "id":69, + "type":"StopObject" + }, + { + "id":70, + "type":"StopObject" + }, + { + "id":71, + "type":"StopObject" + }, + { + "id":72, + "type":"StopObject" + }, + { + "id":73, + "type":"StopObject" + }, + { + "id":74, + "type":"StopObject" + }, + { + "id":75, + "type":"StopObject" + }, + { + "id":76, + "type":"StopObject" + }, + { + "id":77, + "type":"StopObject" + }, + { + "id":78, + "type":"StopObject" + }, + { + "id":79, + "type":"StopObject" + }, + { + "id":80, + "type":"StopObject" + }, + { + "id":81, + "type":"StopObject" + }, + { + "id":82, + "type":"StopObject" + }, + { + "id":83, + "type":"StopObject" + }, + { + "id":84, + "type":"StopObject" + }, + { + "id":85, + "type":"StopObject" + }, + { + "id":86, + "type":"StopObject" + }, + { + "id":87, + "type":"StopObject" + }, + { + "id":88, + "type":"StopObject" + }, + { + "id":89, + "type":"StopObject" + }, + { + "id":90, + "type":"StopObject" + }, + { + "id":91, + "type":"StopObject" + }, + { + "id":92, + "type":"StopObject" + }, + { + "id":93, + "type":"StopObject" + }, + { + "id":94, + "type":"StopObject" + }, + { + "id":95, + "type":"StopObject" + }, + { + "id":96, + "type":"StopObject" + }, + { + "id":97, + "type":"StopObject" + }, + { + "id":98, + "type":"StopObject" + }, + { + "id":99, + "type":"StopObject" + }, + { + "id":100, + "type":"StopObject" + }, + { + "id":101, + "type":"StopObject" + }, + { + "id":102, + "type":"StopObject" + }, + { + "id":103, + "type":"StopObject" + }, + { + "id":104, + "type":"StopObject" + }, + { + "id":105, + "type":"StopObject" + }, + { + "id":106, + "type":"StopObject" + }, + { + "id":107, + "type":"StopObject" + }, + { + "id":108, + "type":"StopObject" + }, + { + "id":109, + "type":"StopObject" + }, + { + "id":110, + "type":"StopObject" + }, + { + "id":111, + "type":"StopObject" + }, + { + "id":112, + "type":"StopObject" + }, + { + "id":113, + "type":"StopObject" + }, + { + "id":114, + "type":"StopObject" + }, + { + "id":115, + "type":"StopObject" + }, + { + "id":116, + "type":"StopObject" + }, + { + "id":117, + "type":"StopObject" + }, + { + "id":118, + "type":"StopObject" + }, + { + "id":119, + "type":"StopObject" + }, + { + "id":120, + "type":"StopObject" + }, + { + "id":121, + "type":"StopObject" + }, + { + "id":122, + "type":"StopObject" + }, + { + "id":123, + "type":"StopObject" + }, + { + "id":124, + "type":"StopObject" + }, + { + "id":125, + "type":"StopObject" + }, + { + "id":126, + "type":"StopObject" + }, + { + "id":127, + "type":"StopObject" + }, + { + "id":128, + "type":"StopObject" + }, + { + "id":129, + "type":"StopObject" + }, + { + "id":130, + "type":"StopObject" + }, + { + "id":131, + "type":"StopObject" + }, + { + "id":132, + "type":"StopObject" + }, + { + "id":133, + "type":"StopObject" + }, + { + "id":134, + "type":"StopObject" + }, + { + "id":135, + "type":"StopObject" + }, + { + "id":136, + "type":"StopObject" + }, + { + "id":137, + "type":"StopObject" + }, + { + "id":138, + "type":"StopObject" + }, + { + "id":139, + "type":"StopObject" + }, + { + "id":140, + "type":"StopObject" + }, + { + "id":141, + "type":"StopObject" + }, + { + "id":142, + "type":"StopObject" + }, + { + "id":143, + "type":"StopObject" + }, + { + "id":144, + "type":"StopObject" + }, + { + "id":145, + "type":"StopObject" + }, + { + "id":146, + "type":"StopObject" + }, + { + "id":147, + "type":"StopObject" + }, + { + "id":148, + "type":"StopObject" + }, + { + "id":149, + "type":"StopObject" + }, + { + "id":150, + "type":"StopObject" + }, + { + "id":151, + "type":"StopObject" + }, + { + "id":152, + "type":"StopObject" + }, + { + "id":153, + "type":"StopObject" + }, + { + "id":154, + "type":"StopObject" + }, + { + "id":155, + "type":"StopObject" + }, + { + "id":156, + "type":"StopObject" + }, + { + "id":157, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":158, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":159, + "type":"StopObject" + }, + { + "id":160, + "type":"StopObject" + }, + { + "id":161, + "type":"StopObject" + }, + { + "id":162, + "type":"StopObject" + }, + { + "id":163, + "type":"StopObject" + }, + { + "id":164, + "type":"StopObject" + }, + { + "id":165, + "type":"StopObject" + }, + { + "id":166, + "type":"StopObject" + }, + { + "id":167, + "type":"StopObject" + }, + { + "id":168, + "type":"StopObject" + }, + { + "id":169, + "type":"StopObject" + }, + { + "id":170, + "type":"StopObject" + }, + { + "id":171, + "type":"StopObject" + }, + { + "id":172, + "type":"StopObject" + }, + { + "id":173, + "type":"StopObject" + }, + { + "id":174, + "type":"StopObject" + }, + { + "id":175, + "type":"StopObject" + }, + { + "id":176, + "type":"StopObject" + }, + { + "id":177, + "type":"StopObject" + }, + { + "id":178, + "type":"StopObject" + }, + { + "id":179, + "type":"StopObject" + }, + { + "id":180, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":181, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":182, + "type":"StopObject" + }, + { + "id":183, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":184, + "type":"StopObject" + }, + { + "id":185, + "type":"StopObject" + }, + { + "id":186, + "type":"StopObject" + }, + { + "id":187, + "type":"StopObject" + }, + { + "id":188, + "type":"StopObject" + }, + { + "id":189, + "type":"StopObject" + }, + { + "id":190, + "type":"StopObject" + }, + { + "id":191, + "type":"StopObject" + }, + { + "id":192, + "type":"StopObject" + }, + { + "id":193, + "type":"StopObject" + }, + { + "id":194, + "type":"StopObject" + }, + { + "id":195, + "type":"StopObject" + }, + { + "id":196, + "type":"StopObject" + }, + { + "id":197, + "type":"StopObject" + }, + { + "id":198, + "type":"StopObject" + }, + { + "id":199, + "type":"StopObject" + }, + { + "id":200, + "type":"StopObject" + }, + { + "id":201, + "type":"StopObject" + }, + { + "id":202, + "type":"StopObject" + }, + { + "id":203, + "type":"StopObject" + }, + { + "id":204, + "type":"StopObject" + }, + { + "id":205, + "type":"StopObject" + }, + { + "id":206, + "type":"StopObject" + }, + { + "id":207, + "type":"StopObject" + }, + { + "id":208, + "type":"StopObject" + }, + { + "id":209, + "type":"StopObject" + }, + { + "id":210, + "type":"StopObject" + }, + { + "id":211, + "type":"StopObject" + }, + { + "id":212, + "type":"StopObject" + }, + { + "id":213, + "type":"StopObject" + }, + { + "id":214, + "type":"StopObject" + }, + { + "id":215, + "type":"StopObject" + }, + { + "id":216, + "type":"StopObject" + }, + { + "id":217, + "type":"StopObject" + }, + { + "id":218, + "type":"StopObject" + }, + { + "id":219, + "type":"StopObject" + }, + { + "id":220, + "type":"StopObject" + }, + { + "id":221, + "type":"StopObject" + }, + { + "id":222, + "type":"StopObject" + }, + { + "id":223, + "type":"StopObject" + }, + { + "id":224, + "type":"StopObject" + }, + { + "id":225, + "type":"StopObject" + }, + { + "id":226, + "type":"StopObject" + }, + { + "id":227, + "type":"StopObject" + }, + { + "id":228, + "type":"StopObject" + }, + { + "id":229, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":230, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":231, + "type":"StopObject" + }, + { + "id":232, + "type":"StopObject" + }, + { + "id":233, + "type":"StopObject" + }, + { + "id":234, + "type":"StopObject" + }, + { + "id":235, + "type":"StopObject" + }, + { + "id":236, + "type":"StopObject" + }, + { + "id":237, + "type":"StopObject" + }, + { + "id":238, + "type":"StopObject" + }, + { + "id":239, + "type":"StopObject" + }, + { + "id":240, + "type":"StopObject" + }, + { + "id":241, + "type":"StopObject" + }, + { + "id":242, + "type":"StopObject" + }, + { + "id":243, + "type":"StopObject" + }, + { + "id":244, + "type":"StopObject" + }, + { + "id":245, + "type":"StopObject" + }, + { + "id":246, + "type":"StopObject" + }, + { + "id":247, + "type":"StopObject" + }, + { + "id":248, + "type":"StopObject" + }, + { + "id":249, + "type":"StopObject" + }, + { + "id":250, + "type":"StopObject" + }, + { + "id":251, + "type":"StopObject" + }, + { + "id":252, + "type":"StopObject" + }, + { + "id":253, + "type":"StopObject" + }, + { + "id":254, + "type":"StopObject" + }, + { + "id":255, + "type":"StopObject" + }, + { + "id":256, + "type":"StopObject" + }, + { + "id":257, + "type":"StopObject" + }, + { + "id":258, + "type":"StopObject" + }, + { + "id":259, + "type":"StopObject" + }, + { + "id":260, + "type":"StopObject" + }, + { + "id":261, + "type":"StopObject" + }, + { + "id":262, + "type":"StopObject" + }, + { + "id":263, + "type":"StopObject" + }, + { + "id":264, + "type":"StopObject" + }, + { + "id":265, + "type":"StopObject" + }, + { + "id":266, + "type":"StopObject" + }, + { + "id":267, + "type":"StopObject" + }, + { + "id":268, + "type":"StopObject" + }, + { + "id":269, + "type":"StopObject" + }, + { + "id":270, + "type":"StopObject" + }, + { + "id":271, + "type":"StopObject" + }, + { + "id":272, + "type":"StopObject" + }, + { + "id":273, + "type":"StopObject" + }, + { + "id":274, + "type":"StopObject" + }, + { + "id":275, + "type":"StopObject" + }, + { + "id":276, + "type":"StopObject" + }, + { + "id":277, + "type":"StopObject" + }, + { + "id":278, + "type":"StopObject" + }, + { + "id":279, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":280, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":281, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":282, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":283, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":9.25, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":15.75, + "x":0, + "y":6.75 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":284, + "type":"StopObject" + }, + { + "id":285, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":286, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":287, + "type":"StopObject" + }, + { + "id":288, + "type":"StopObject" + }, + { + "id":289, + "type":"StopObject" + }, + { + "id":290, + "type":"StopObject" + }, + { + "id":291, + "type":"StopObject" + }, + { + "id":292, + "type":"StopObject" + }, + { + "id":293, + "type":"StopObject" + }, + { + "id":294, + "type":"StopObject" + }, + { + "id":295, + "type":"StopObject" + }, + { + "id":296, + "type":"StopObject" + }, + { + "id":297, + "type":"StopObject" + }, + { + "id":298, + "type":"StopObject" + }, + { + "id":299, + "type":"StopObject" + }, + { + "id":300, + "type":"StopObject" + }, + { + "id":301, + "type":"StopObject" + }, + { + "id":302, + "type":"StopObject" + }, + { + "id":303, + "type":"StopObject" + }, + { + "id":304, + "type":"StopObject" + }, + { + "id":305, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":306, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":307, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":308, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":309, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":310, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":311, + "type":"StopObject" + }, + { + "id":312, + "type":"StopObject" + }, + { + "id":313, + "type":"StopObject" + }, + { + "id":314, + "type":"StopObject" + }, + { + "id":315, + "type":"StopObject" + }, + { + "id":316, + "type":"StopObject" + }, + { + "id":317, + "type":"StopObject" + }, + { + "id":318, + "type":"StopObject" + }, + { + "id":319, + "type":"StopObject" + }, + { + "id":320, + "type":"StopObject" + }, + { + "id":321, + "type":"StopObject" + }, + { + "id":322, + "type":"StopObject" + }, + { + "id":323, + "type":"StopObject" + }, + { + "id":324, + "type":"StopObject" + }, + { + "id":325, + "type":"StopObject" + }, + { + "id":326, + "type":"StopObject" + }, + { + "id":327, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":328, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "type":"StopObject" + }, + { + "id":329, + "type":"StopObject" + }, + { + "id":330, + "type":"StopObject" + }, + { + "id":331, + "type":"StopObject" + }, + { + "id":332, + "type":"StopObject" + }, + { + "id":333, + "type":"StopObject" + }, + { + "id":334, + "type":"StopObject" + }, + { + "id":335, + "type":"StopObject" + }, + { + "id":336, + "type":"StopObject" + }, + { + "id":337, + "type":"StopObject" + }, + { + "id":338, + "type":"StopObject" + }, + { + "id":339, + "type":"StopObject" + }, + { + "id":340, + "type":"StopObject" + }, + { + "id":341, + "type":"StopObject" + }, + { + "id":342, + "type":"StopObject" + }, + { + "id":343, + "type":"StopObject" + }, + { + "id":344, + "type":"StopObject" + }, + { + "id":345, + "type":"StopObject" + }, + { + "id":346, + "type":"StopObject" + }, + { + "id":347, + "type":"StopObject" + }, + { + "id":348, + "type":"StopObject" + }, + { + "id":349, + "type":"StopObject" + }, + { + "id":350, + "type":"StopObject" + }, + { + "id":351, + "type":"StopObject" + }, + { + "id":352, + "type":"StopObject" + }, + { + "id":353, + "type":"StopObject" + }, + { + "id":354, + "type":"StopObject" + }, + { + "id":355, + "type":"StopObject" + }, + { + "id":356, + "type":"StopObject" + }, + { + "id":357, + "type":"StopObject" + }, + { + "id":358, + "type":"StopObject" + }, + { + "id":359, + "type":"StopObject" + }, + { + "id":360, + "type":"StopObject" + }, + { + "id":361, + "type":"StopObject" + }, + { + "id":362, + "type":"StopObject" + }, + { + "id":363, + "type":"StopObject" + }, + { + "id":364, + "type":"StopObject" + }, + { + "id":365, + "type":"StopObject" + }, + { + "id":366, + "type":"StopObject" + }, + { + "id":367, + "type":"StopObject" + }, + { + "id":368, + "type":"StopObject" + }, + { + "id":369, + "type":"StopObject" + }, + { + "id":370, + "type":"StopObject" + }, + { + "id":371, + "type":"StopObject" + }, + { + "id":372, + "type":"StopObject" + }, + { + "id":373, + "type":"StopObject" + }, + { + "id":374, + "type":"StopObject" + }, + { + "id":375, + "type":"StopObject" + }, + { + "id":376, + "type":"StopObject" + }, + { + "id":377, + "type":"StopObject" + }, + { + "id":378, + "type":"StopObject" + }, + { + "id":379, + "type":"StopObject" + }, + { + "id":380, + "type":"StopObject" + }, + { + "id":381, + "type":"StopObject" + }, + { + "id":382, + "type":"StopObject" + }, + { + "id":383, + "type":"StopObject" + }, + { + "id":384, + "type":"StopObject" + }, + { + "id":385, + "type":"StopObject" + }, + { + "id":386, + "type":"StopObject" + }, + { + "id":387, + "type":"StopObject" + }, + { + "id":388, + "type":"StopObject" + }, + { + "id":389, + "type":"StopObject" + }, + { + "id":390, + "type":"StopObject" + }, + { + "id":391, + "type":"StopObject" + }, + { + "id":392, + "type":"StopObject" + }, + { + "id":393, + "type":"StopObject" + }, + { + "id":394, + "type":"StopObject" + }, + { + "id":395, + "type":"StopObject" + }, + { + "id":396, + "type":"StopObject" + }, + { + "id":397, + "type":"StopObject" + }, + { + "id":398, + "type":"StopObject" + }, + { + "id":399, + "type":"StopObject" + }, + { + "id":400, + "type":"StopObject" + }, + { + "id":401, + "type":"StopObject" + }, + { + "id":402, + "type":"StopObject" + }, + { + "id":403, + "type":"StopObject" + }, + { + "id":404, + "type":"StopObject" + }, + { + "id":405, + "type":"StopObject" + }, + { + "id":406, + "type":"StopObject" + }, + { + "id":407, + "type":"StopObject" + }, + { + "id":408, + "type":"StopObject" + }, + { + "id":409, + "type":"StopObject" + }, + { + "id":410, + "type":"StopObject" + }, + { + "id":411, + "type":"StopObject" + }, + { + "id":412, + "type":"StopObject" + }, + { + "id":413, + "type":"StopObject" + }, + { + "id":414, + "type":"StopObject" + }, + { + "id":415, + "type":"StopObject" + }, + { + "id":416, + "type":"StopObject" + }, + { + "id":417, + "type":"StopObject" + }, + { + "id":418, + "type":"StopObject" + }, + { + "id":419, + "type":"StopObject" + }, + { + "id":420, + "type":"StopObject" + }, + { + "id":421, + "type":"StopObject" + }, + { + "id":422, + "type":"StopObject" + }, + { + "id":423, + "type":"StopObject" + }, + { + "id":424, + "type":"StopObject" + }, + { + "id":425, + "type":"StopObject" + }, + { + "id":426, + "type":"StopObject" + }, + { + "id":427, + "type":"StopObject" + }, + { + "id":428, + "type":"StopObject" + }, + { + "id":429, + "type":"StopObject" + }, + { + "id":430, + "type":"StopObject" + }, + { + "id":431, + "type":"StopObject" + }, + { + "id":432, + "type":"StopObject" + }, + { + "id":433, + "type":"StopObject" + }, + { + "id":434, + "type":"StopObject" + }, + { + "id":435, + "type":"StopObject" + }, + { + "id":436, + "type":"StopObject" + }, + { + "id":437, + "type":"StopObject" + }, + { + "id":438, + "type":"StopObject" + }, + { + "id":439, + "type":"StopObject" + }, + { + "id":440, + "type":"StopObject" + }, + { + "id":441, + "type":"StopObject" + }, + { + "id":442, + "type":"StopObject" + }, + { + "id":443, + "type":"StopObject" + }, + { + "id":444, + "type":"StopObject" + }, + { + "id":445, + "type":"StopObject" + }, + { + "id":446, + "type":"StopObject" + }, + { + "id":447, + "type":"StopObject" + }, + { + "id":448, + "type":"StopObject" + }, + { + "id":449, + "type":"StopObject" + }, + { + "id":450, + "type":"StopObject" + }, + { + "id":451, + "type":"StopObject" + }, + { + "id":452, + "type":"StopObject" + }, + { + "id":453, + "type":"StopObject" + }, + { + "id":454, + "type":"StopObject" + }, + { + "id":455, + "type":"StopObject" + }, + { + "id":456, + "type":"StopObject" + }, + { + "id":457, + "type":"StopObject" + }, + { + "id":458, + "type":"StopObject" + }, + { + "id":459, + "type":"StopObject" + }, + { + "id":460, + "type":"StopObject" + }, + { + "id":461, + "type":"StopObject" + }, + { + "id":462, + "type":"StopObject" + }, + { + "id":463, + "type":"StopObject" + }, + { + "id":464, + "type":"StopObject" + }, + { + "id":465, + "type":"StopObject" + }, + { + "id":466, + "type":"StopObject" + }, + { + "id":467, + "type":"StopObject" + }, + { + "id":468, + "type":"StopObject" + }, + { + "id":469, + "type":"StopObject" + }, + { + "id":470, + "type":"StopObject" + }, + { + "id":471, + "type":"StopObject" + }, + { + "id":472, + "type":"StopObject" + }, + { + "id":473, + "type":"StopObject" + }, + { + "id":474, + "type":"StopObject" + }, + { + "id":475, + "type":"StopObject" + }, + { + "id":476, + "type":"StopObject" + }, + { + "id":477, + "type":"StopObject" + }, + { + "id":478, + "type":"StopObject" + }, + { + "id":479, + "type":"StopObject" + }, + { + "id":480, + "type":"StopObject" + }, + { + "id":481, + "type":"StopObject" + }, + { + "id":482, + "type":"StopObject" + }, + { + "id":483, + "type":"StopObject" + }, + { + "id":484, + "type":"StopObject" + }, + { + "id":485, + "type":"StopObject" + }, + { + "id":486, + "type":"StopObject" + }, + { + "id":487, + "type":"StopObject" + }, + { + "id":488, + "type":"StopObject" + }, + { + "id":489, + "type":"StopObject" + }, + { + "id":490, + "type":"StopObject" + }, + { + "id":491, + "type":"StopObject" + }, + { + "id":492, + "type":"StopObject" + }, + { + "id":493, + "type":"StopObject" + }, + { + "id":494, + "type":"StopObject" + }, + { + "id":495, + "type":"StopObject" + }, + { + "id":496, + "type":"StopObject" + }, + { + "id":497, + "type":"StopObject" + }, + { + "id":498, + "type":"StopObject" + }, + { + "id":499, + "type":"StopObject" + }, + { + "id":500, + "type":"StopObject" + }, + { + "id":501, + "type":"StopObject" + }, + { + "id":502, + "type":"StopObject" + }, + { + "id":503, + "type":"StopObject" + }], + "tilewidth":16, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/ZoFo/Content/MapData/TileSets/tileset 1 collision.tsj b/ZoFo/Content/MapData/TileSets/tileset 1 collision.tsj new file mode 100644 index 0000000..f13aafa --- /dev/null +++ b/ZoFo/Content/MapData/TileSets/tileset 1 collision.tsj @@ -0,0 +1,1658 @@ +{ "columns":20, + "image":"..\/..\/Textures\/TileSetImages\/TilesetVillageAbandoned.png", + "imageheight":192, + "imagewidth":320, + "margin":0, + "name":"tileset 1 collision", + "spacing":0, + "tilecount":240, + "tiledversion":"1.10.2", + "tileheight":16, + "tiles":[ + { + "id":0, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":1, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":2, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":3, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":4, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":5, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":6, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":7, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":8, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":9, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":10, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":11, + "type":"StopObject" + }, + { + "id":12, + "type":"StopObject" + }, + { + "id":13, + "type":"StopObject" + }, + { + "id":14, + "type":"StopObject" + }, + { + "id":15, + "type":"StopObject" + }, + { + "id":16, + "type":"StopObject" + }, + { + "id":17, + "type":"StopObject" + }, + { + "id":18, + "type":"StopObject" + }, + { + "id":19, + "type":"StopObject" + }, + { + "id":20, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":21, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":22, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":23, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":24, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":25, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":26, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":27, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":28, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":29, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":30, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":31, + "type":"StopObject" + }, + { + "id":32, + "type":"StopObject" + }, + { + "id":33, + "type":"StopObject" + }, + { + "id":34, + "type":"StopObject" + }, + { + "id":35, + "type":"StopObject" + }, + { + "id":36, + "type":"StopObject" + }, + { + "id":37, + "type":"StopObject" + }, + { + "id":38, + "type":"StopObject" + }, + { + "id":39, + "type":"StopObject" + }, + { + "id":40, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":41, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":42, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":43, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":44, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":45, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":46, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":47, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":48, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":49, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":50, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":51, + "type":"StopObject" + }, + { + "id":52, + "type":"StopObject" + }, + { + "id":53, + "type":"StopObject" + }, + { + "id":54, + "type":"StopObject" + }, + { + "id":55, + "type":"StopObject" + }, + { + "id":56, + "type":"StopObject" + }, + { + "id":57, + "type":"StopObject" + }, + { + "id":58, + "type":"StopObject" + }, + { + "id":59, + "type":"StopObject" + }, + { + "id":60, + "type":"StopObject" + }, + { + "id":61, + "type":"StopObject" + }, + { + "id":62, + "type":"StopObject" + }, + { + "id":63, + "type":"StopObject" + }, + { + "id":64, + "type":"StopObject" + }, + { + "id":65, + "type":"StopObject" + }, + { + "id":66, + "type":"StopObject" + }, + { + "id":67, + "type":"StopObject" + }, + { + "id":68, + "type":"StopObject" + }, + { + "id":69, + "type":"StopObject" + }, + { + "id":70, + "type":"StopObject" + }, + { + "id":71, + "type":"StopObject" + }, + { + "id":72, + "type":"StopObject" + }, + { + "id":73, + "type":"StopObject" + }, + { + "id":74, + "type":"StopObject" + }, + { + "id":75, + "type":"StopObject" + }, + { + "id":76, + "type":"StopObject" + }, + { + "id":77, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":8, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":15.5, + "x":0.5, + "y":8 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":78, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":8.5, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":15.75, + "x":0.25, + "y":7.5 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":79, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":9, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":15.75, + "x":0.25, + "y":7 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":80, + "type":"StopObject" + }, + { + "id":81, + "type":"StopObject" + }, + { + "id":82, + "type":"StopObject" + }, + { + "id":83, + "type":"StopObject" + }, + { + "id":84, + "type":"StopObject" + }, + { + "id":85, + "type":"StopObject" + }, + { + "id":86, + "type":"StopObject" + }, + { + "id":87, + "type":"StopObject" + }, + { + "id":88, + "type":"StopObject" + }, + { + "id":89, + "type":"StopObject" + }, + { + "id":90, + "type":"StopObject" + }, + { + "id":91, + "type":"StopObject" + }, + { + "id":92, + "type":"StopObject" + }, + { + "id":93, + "type":"StopObject" + }, + { + "id":94, + "type":"StopObject" + }, + { + "id":95, + "type":"StopObject" + }, + { + "id":96, + "type":"StopObject" + }, + { + "id":97, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":98, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":99, + "objectgroup": + { + "draworder":"index", + "id":2, + "name":"", + "objects":[ + { + "height":16, + "id":1, + "name":"", + "rotation":0, + "type":"", + "visible":true, + "width":16, + "x":0, + "y":0 + }], + "opacity":1, + "type":"objectgroup", + "visible":true, + "x":0, + "y":0 + }, + "probability":0.100000001490116, + "type":"StopObject" + }, + { + "id":100, + "type":"StopObject" + }, + { + "id":101, + "type":"StopObject" + }, + { + "id":102, + "type":"StopObject" + }, + { + "id":103, + "type":"StopObject" + }, + { + "id":104, + "type":"StopObject" + }, + { + "id":105, + "type":"StopObject" + }, + { + "id":106, + "type":"StopObject" + }, + { + "id":107, + "type":"StopObject" + }, + { + "id":108, + "type":"StopObject" + }, + { + "id":109, + "type":"StopObject" + }, + { + "id":110, + "type":"StopObject" + }, + { + "id":111, + "type":"StopObject" + }, + { + "id":112, + "type":"StopObject" + }, + { + "id":113, + "type":"StopObject" + }, + { + "id":114, + "type":"StopObject" + }, + { + "id":115, + "type":"StopObject" + }, + { + "id":116, + "type":"StopObject" + }, + { + "id":117, + "type":"StopObject" + }, + { + "id":118, + "type":"StopObject" + }, + { + "id":119, + "type":"StopObject" + }, + { + "id":120, + "type":"StopObject" + }, + { + "id":121, + "type":"StopObject" + }, + { + "id":122, + "type":"StopObject" + }, + { + "id":123, + "type":"StopObject" + }, + { + "id":124, + "type":"StopObject" + }, + { + "id":125, + "type":"StopObject" + }, + { + "id":126, + "type":"StopObject" + }, + { + "id":127, + "type":"StopObject" + }, + { + "id":128, + "type":"StopObject" + }, + { + "id":129, + "type":"StopObject" + }, + { + "id":130, + "type":"StopObject" + }, + { + "id":131, + "type":"StopObject" + }, + { + "id":132, + "type":"StopObject" + }, + { + "id":133, + "type":"StopObject" + }, + { + "id":134, + "type":"StopObject" + }, + { + "id":135, + "type":"StopObject" + }, + { + "id":136, + "type":"StopObject" + }, + { + "id":137, + "type":"StopObject" + }, + { + "id":138, + "type":"StopObject" + }, + { + "id":139, + "type":"StopObject" + }, + { + "id":140, + "type":"StopObject" + }, + { + "id":141, + "type":"StopObject" + }, + { + "id":142, + "type":"StopObject" + }, + { + "id":143, + "type":"StopObject" + }, + { + "id":144, + "type":"StopObject" + }, + { + "id":145, + "type":"StopObject" + }, + { + "id":146, + "type":"StopObject" + }, + { + "id":147, + "type":"StopObject" + }, + { + "id":148, + "type":"StopObject" + }, + { + "id":149, + "type":"StopObject" + }, + { + "id":150, + "type":"StopObject" + }, + { + "id":151, + "type":"StopObject" + }, + { + "id":152, + "type":"StopObject" + }, + { + "id":153, + "type":"StopObject" + }, + { + "id":154, + "type":"StopObject" + }, + { + "id":155, + "type":"StopObject" + }, + { + "id":156, + "type":"StopObject" + }, + { + "id":157, + "type":"StopObject" + }, + { + "id":158, + "type":"StopObject" + }, + { + "id":159, + "type":"StopObject" + }, + { + "id":160, + "type":"StopObject" + }, + { + "id":161, + "type":"StopObject" + }, + { + "id":162, + "type":"StopObject" + }, + { + "id":163, + "type":"StopObject" + }, + { + "id":164, + "type":"StopObject" + }, + { + "id":165, + "type":"StopObject" + }, + { + "id":166, + "type":"StopObject" + }, + { + "id":167, + "type":"StopObject" + }, + { + "id":168, + "type":"StopObject" + }, + { + "id":169, + "type":"StopObject" + }, + { + "id":170, + "type":"StopObject" + }, + { + "id":171, + "type":"StopObject" + }, + { + "id":172, + "type":"StopObject" + }, + { + "id":173, + "type":"StopObject" + }, + { + "id":174, + "type":"StopObject" + }, + { + "id":175, + "type":"StopObject" + }, + { + "id":176, + "type":"StopObject" + }, + { + "id":177, + "type":"StopObject" + }, + { + "id":178, + "type":"StopObject" + }, + { + "id":179, + "type":"StopObject" + }, + { + "id":180, + "type":"StopObject" + }, + { + "id":181, + "type":"StopObject" + }, + { + "id":182, + "type":"StopObject" + }, + { + "id":183, + "type":"StopObject" + }, + { + "id":184, + "type":"StopObject" + }, + { + "id":185, + "type":"StopObject" + }, + { + "id":186, + "type":"StopObject" + }, + { + "id":187, + "type":"StopObject" + }, + { + "id":188, + "type":"StopObject" + }, + { + "id":189, + "type":"StopObject" + }, + { + "id":190, + "type":"StopObject" + }, + { + "id":191, + "type":"StopObject" + }, + { + "id":192, + "type":"StopObject" + }, + { + "id":193, + "type":"StopObject" + }, + { + "id":194, + "type":"StopObject" + }, + { + "id":195, + "type":"StopObject" + }, + { + "id":196, + "type":"StopObject" + }, + { + "id":197, + "type":"StopObject" + }, + { + "id":198, + "type":"StopObject" + }, + { + "id":199, + "type":"StopObject" + }, + { + "id":200, + "type":"StopObject" + }, + { + "id":201, + "type":"StopObject" + }, + { + "id":202, + "type":"StopObject" + }, + { + "id":203, + "type":"StopObject" + }, + { + "id":204, + "type":"StopObject" + }, + { + "id":205, + "type":"StopObject" + }, + { + "id":206, + "type":"StopObject" + }, + { + "id":207, + "type":"StopObject" + }, + { + "id":208, + "type":"StopObject" + }, + { + "id":209, + "type":"StopObject" + }, + { + "id":210, + "type":"StopObject" + }, + { + "id":211, + "type":"StopObject" + }, + { + "id":212, + "type":"StopObject" + }, + { + "id":213, + "type":"StopObject" + }, + { + "id":214, + "type":"StopObject" + }, + { + "id":215, + "type":"StopObject" + }, + { + "id":216, + "type":"StopObject" + }, + { + "id":217, + "type":"StopObject" + }, + { + "id":218, + "type":"StopObject" + }, + { + "id":219, + "type":"StopObject" + }, + { + "id":220, + "type":"StopObject" + }, + { + "id":221, + "type":"StopObject" + }, + { + "id":222, + "type":"StopObject" + }, + { + "id":223, + "type":"StopObject" + }, + { + "id":224, + "type":"StopObject" + }, + { + "id":225, + "type":"StopObject" + }, + { + "id":226, + "type":"StopObject" + }, + { + "id":227, + "type":"StopObject" + }, + { + "id":228, + "type":"StopObject" + }, + { + "id":229, + "type":"StopObject" + }, + { + "id":230, + "type":"StopObject" + }, + { + "id":231, + "type":"StopObject" + }, + { + "id":232, + "type":"StopObject" + }, + { + "id":233, + "type":"StopObject" + }, + { + "id":234, + "type":"StopObject" + }, + { + "id":235, + "type":"StopObject" + }, + { + "id":236, + "type":"StopObject" + }, + { + "id":237, + "type":"StopObject" + }, + { + "id":238, + "type":"StopObject" + }, + { + "id":239, + "type":"StopObject" + }], + "tilewidth":16, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file 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_down-left_idle.animation b/ZoFo/Content/Textures/Animations/player_down-left_idle.animation new file mode 100644 index 0000000..6c2a6c7 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_down-left_idle.animation @@ -0,0 +1,21 @@ +{ + "id": "player_down-left_idle", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 560, + "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_down-right_idle.animation b/ZoFo/Content/Textures/Animations/player_down-right_idle.animation new file mode 100644 index 0000000..016a3f2 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_down-right_idle.animation @@ -0,0 +1,20 @@ +{ + "id": "player_down-right_idle", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 358, + "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_down_idle.animation b/ZoFo/Content/Textures/Animations/player_down_idle.animation new file mode 100644 index 0000000..243946c --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_down_idle.animation @@ -0,0 +1,20 @@ +{ + "id": "player_down_idle", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 464, + "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_down-left_mining.animation b/ZoFo/Content/Textures/Animations/player_idle_down-left_mining.animation new file mode 100644 index 0000000..ba1b3c9 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_down-left_mining.animation @@ -0,0 +1,21 @@ +{ + "id": "player_idle_down-left_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 776, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "isCycle": true, + "offset": "0, 0" + +} diff --git a/ZoFo/Content/Textures/Animations/player_idle_down_mining.animation b/ZoFo/Content/Textures/Animations/player_idle_down_mining.animation new file mode 100644 index 0000000..92bda6c --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_down_mining.animation @@ -0,0 +1,21 @@ +{ + "id": "player_idle_down_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 582, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "isCycle": true, + "offset": "0, 0" + +} diff --git a/ZoFo/Content/Textures/Animations/player_idle_left_mining.animation b/ZoFo/Content/Textures/Animations/player_idle_left_mining.animation new file mode 100644 index 0000000..81f9629 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_left_mining.animation @@ -0,0 +1,21 @@ +{ + "id": "player_idle_left_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 1358, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "isCycle": true, + "offset": "0, 0" + +} diff --git a/ZoFo/Content/Textures/Animations/player_idle_rights_mining.animation b/ZoFo/Content/Textures/Animations/player_idle_rights_mining.animation new file mode 100644 index 0000000..6570cce --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_rights_mining.animation @@ -0,0 +1,21 @@ +{ + "id": "player_idle_rights_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 388, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "isCycle": false, + "offset": "0, 0" + +} diff --git a/ZoFo/Content/Textures/Animations/player_idle_top-left_mining.animation b/ZoFo/Content/Textures/Animations/player_idle_top-left_mining.animation new file mode 100644 index 0000000..3dfef38 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_top-left_mining.animation @@ -0,0 +1,21 @@ +{ + "id": "player_idle_top-left_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 1552, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "isCycle": true, + "offset": "0, 0" + +} 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-rights_mining.animation b/ZoFo/Content/Textures/Animations/player_idle_top-rights_mining.animation new file mode 100644 index 0000000..d4a5828 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_idle_top-rights_mining.animation @@ -0,0 +1,20 @@ +{ + "id": "player_idle_top-rights_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 194, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "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/player_left_idle.animation b/ZoFo/Content/Textures/Animations/player_left_idle.animation new file mode 100644 index 0000000..8906cb3 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_left_idle.animation @@ -0,0 +1,21 @@ +{ + "id": "player_left_idle", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 696, + "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_look_down.animation b/ZoFo/Content/Textures/Animations/player_look_down.animation new file mode 100644 index 0000000..0b4e385 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_down.animation @@ -0,0 +1,20 @@ +{ + "id": "player_look_down", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 464, + "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_look_down_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_down_weapon.animation new file mode 100644 index 0000000..76f9b07 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_down_weapon.animation @@ -0,0 +1 @@ +{"id":"player_look_down_weapon","textureName":"Textures/AnimationTextures/Character/hr-level1_idle_gun","startSpriteRectangle":{"X":0,"Y":512,"Width":110,"Height":128},"frameSecond":[{"Item1":0,"Item2":5}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_look_left.animation b/ZoFo/Content/Textures/Animations/player_look_left.animation new file mode 100644 index 0000000..13e8f0e --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_left.animation @@ -0,0 +1 @@ +{"id":"player_look_left","textureName":"Textures/AnimationTextures/Character/hr-level1_idle","startSpriteRectangle":{"X":0,"Y":696,"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_look_left_down.animation b/ZoFo/Content/Textures/Animations/player_look_left_down.animation new file mode 100644 index 0000000..78f5150 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_left_down.animation @@ -0,0 +1 @@ +{"id":"player_look_left_down","textureName":"Textures/AnimationTextures/Character/hr-level1_idle","startSpriteRectangle":{"X":0,"Y":580,"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_look_left_down_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_left_down_weapon.animation new file mode 100644 index 0000000..5d7468b --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_left_down_weapon.animation @@ -0,0 +1,20 @@ +{ + "id": "player_look_left_down_weapon", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle_gun", + "startSpriteRectangle": { + "X": 0, + "Y": 640, + "Width": 110, + "Height": 128 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 22, + "isCycle": true, + "offset": "0, 0" +} diff --git a/ZoFo/Content/Textures/Animations/player_look_left_up.animation b/ZoFo/Content/Textures/Animations/player_look_left_up.animation new file mode 100644 index 0000000..9fc0cf6 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_left_up.animation @@ -0,0 +1 @@ +{"id":"player_look_left_up","textureName":"Textures/AnimationTextures/Character/hr-level1_idle","startSpriteRectangle":{"X":0,"Y":812,"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_look_left_up_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_left_up_weapon.animation new file mode 100644 index 0000000..68ddc46 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_left_up_weapon.animation @@ -0,0 +1 @@ +{"id":"player_look_left_up_weapon","textureName":"Textures/AnimationTextures/Character/hr-level1_idle_gun","startSpriteRectangle":{"X":0,"Y":896,"Width":110,"Height":128},"frameSecond":[{"Item1":0,"Item2":5}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_look_left_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_left_weapon.animation new file mode 100644 index 0000000..638f33a --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_left_weapon.animation @@ -0,0 +1,20 @@ +{ + "id": "player_look_left_weapon", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle_gun", + "startSpriteRectangle": { + "X": 0, + "Y": 768, + "Width": 110, + "Height": 128 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 22, + "isCycle": true, + "offset": "0, 0" +} diff --git a/ZoFo/Content/Textures/Animations/player_look_right.animation b/ZoFo/Content/Textures/Animations/player_look_right.animation new file mode 100644 index 0000000..3d1bf63 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_right.animation @@ -0,0 +1 @@ +{"id":"player_look_right","textureName":"Textures/AnimationTextures/Character/hr-level1_idle","startSpriteRectangle":{"X":0,"Y":232,"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_look_right_down.animation b/ZoFo/Content/Textures/Animations/player_look_right_down.animation new file mode 100644 index 0000000..fbdbeb9 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_right_down.animation @@ -0,0 +1 @@ +{"id":"player_look_right_down","textureName":"Textures/AnimationTextures/Character/hr-level1_idle","startSpriteRectangle":{"X":0,"Y":348,"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_look_right_down_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_right_down_weapon.animation new file mode 100644 index 0000000..49ca0c6 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_right_down_weapon.animation @@ -0,0 +1 @@ +{"id":"player_look_right_down_weapon","textureName":"Textures/AnimationTextures/Character/hr-level1_idle_gun","startSpriteRectangle":{"X":0,"Y":384,"Width":110,"Height":128},"frameSecond":[{"Item1":0,"Item2":5}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_look_right_up.animation b/ZoFo/Content/Textures/Animations/player_look_right_up.animation new file mode 100644 index 0000000..0fe59d4 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_right_up.animation @@ -0,0 +1 @@ +{"id":"player_look_right_up","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_look_right_up_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_right_up_weapon.animation new file mode 100644 index 0000000..897c4b5 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_right_up_weapon.animation @@ -0,0 +1 @@ +{"id":"player_look_right_up_weapon","textureName":"Textures/AnimationTextures/Character/hr-level1_idle_gun","startSpriteRectangle":{"X":0,"Y":128,"Width":110,"Height":128},"frameSecond":[{"Item1":0,"Item2":5}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_look_right_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_right_weapon.animation new file mode 100644 index 0000000..e7a753c --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_right_weapon.animation @@ -0,0 +1 @@ +{"id":"player_look_right_weapon","textureName":"Textures/AnimationTextures/Character/hr-level1_idle_gun","startSpriteRectangle":{"X":0,"Y":256,"Width":110,"Height":128},"frameSecond":[{"Item1":0,"Item2":5}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_look_up.animation b/ZoFo/Content/Textures/Animations/player_look_up.animation new file mode 100644 index 0000000..3b24dca --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_up.animation @@ -0,0 +1 @@ +{"id":"player_look_up","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/player_look_up_weapon.animation b/ZoFo/Content/Textures/Animations/player_look_up_weapon.animation new file mode 100644 index 0000000..4f45286 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_look_up_weapon.animation @@ -0,0 +1 @@ +{"id":"player_look_up_weapon","textureName":"Textures/AnimationTextures/Character/hr-level1_idle_gun","startSpriteRectangle":{"X":0,"Y":0,"Width":110,"Height":128},"frameSecond":[{"Item1":0,"Item2":5}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_right_idle.animation b/ZoFo/Content/Textures/Animations/player_right_idle.animation new file mode 100644 index 0000000..a3c1538 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_right_idle.animation @@ -0,0 +1,21 @@ +{ + "id": "player_right_idle", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 232, + "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_running_top_rotate.animation b/ZoFo/Content/Textures/Animations/player_running_top_rotate.animation new file mode 100644 index 0000000..47c6d2c --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_running_top_rotate.animation @@ -0,0 +1 @@ +{"id":"player_running_top_rotate","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/player_top-left_idle.animation b/ZoFo/Content/Textures/Animations/player_top-left_idle.animation new file mode 100644 index 0000000..feb823e --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_top-left_idle.animation @@ -0,0 +1,21 @@ +{ + "id": "player_top-left_idle", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 812, + "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_top-right_idle.animation b/ZoFo/Content/Textures/Animations/player_top-right_idle.animation new file mode 100644 index 0000000..df132a3 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_top-right_idle.animation @@ -0,0 +1,21 @@ +{ + "id": "player_top-right_idle", + "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_top_mining.animation b/ZoFo/Content/Textures/Animations/player_top_mining.animation new file mode 100644 index 0000000..061d43a --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_top_mining.animation @@ -0,0 +1,21 @@ +{ + "id": "player_top_mining", + "textureName": "Textures/AnimationTextures/Character/hr-level1_mining_tool-1", + "startSpriteRectangle": { + "X": 0, + "Y": 0, + "Width": 196, + "Height": 194 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 13, + "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/testAnimation.animation b/ZoFo/Content/Textures/Animations/testAnimation.animation new file mode 100644 index 0000000..917113d --- /dev/null +++ b/ZoFo/Content/Textures/Animations/testAnimation.animation @@ -0,0 +1,21 @@ +{ + "id": "testAnimation", + "textureName": "Textures/AnimationTextures/Character/hr-level1_idle", + "startSpriteRectangle": { + "X": 0, + "Y": 0, + "Width": 53, + "Height": 116 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 0, + "framesCount": 11, + "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..88d3740 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/testAnimationExample.animation @@ -0,0 +1,20 @@ +{ + "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..49a5fb7 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..c0bb204 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..7f7665c 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/Test/pickaxe.webp b/ZoFo/Content/Textures/Test/pickaxe.webp new file mode 100644 index 0000000..549165d Binary files /dev/null and b/ZoFo/Content/Textures/Test/pickaxe.webp differ diff --git a/ZoFo/Content/Textures/Test/rock.jpg b/ZoFo/Content/Textures/Test/rock.jpg new file mode 100644 index 0000000..e4f78d7 Binary files /dev/null and b/ZoFo/Content/Textures/Test/rock.jpg differ diff --git a/ZoFo/Content/Textures/Test/steel.png b/ZoFo/Content/Textures/Test/steel.png new file mode 100644 index 0000000..ca6d643 Binary files /dev/null and b/ZoFo/Content/Textures/Test/steel.png differ diff --git a/ZoFo/Content/Textures/Test/wood.jpg b/ZoFo/Content/Textures/Test/wood.jpg new file mode 100644 index 0000000..983d6f5 Binary files /dev/null and b/ZoFo/Content/Textures/Test/wood.jpg differ diff --git a/ZoFo/Content/Textures/TileSetImages/Pipes.png b/ZoFo/Content/Textures/TileSetImages/Pipes.png new file mode 100644 index 0000000..bc08a8e Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/Pipes.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/Tilelist1.png b/ZoFo/Content/Textures/TileSetImages/Tilelist1.png new file mode 100644 index 0000000..5252c86 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/Tilelist1.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/Tilelist2.png b/ZoFo/Content/Textures/TileSetImages/Tilelist2.png new file mode 100644 index 0000000..3ce1921 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/Tilelist2.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/Tilelist3.png b/ZoFo/Content/Textures/TileSetImages/Tilelist3.png new file mode 100644 index 0000000..861af90 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/Tilelist3.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/Tilelist4.png b/ZoFo/Content/Textures/TileSetImages/Tilelist4.png new file mode 100644 index 0000000..14a4566 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/Tilelist4.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetDesert.png b/ZoFo/Content/Textures/TileSetImages/TilesetDesert.png new file mode 100644 index 0000000..adc8527 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetDesert.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetDungeon.png b/ZoFo/Content/Textures/TileSetImages/TilesetDungeon.png new file mode 100644 index 0000000..d4f00d3 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetDungeon.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetElement.png b/ZoFo/Content/Textures/TileSetImages/TilesetElement.png new file mode 100644 index 0000000..372b134 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetElement.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetField.png b/ZoFo/Content/Textures/TileSetImages/TilesetField.png new file mode 100644 index 0000000..0a88109 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetField.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetFloor.png b/ZoFo/Content/Textures/TileSetImages/TilesetFloor.png new file mode 100644 index 0000000..abba7bf Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetFloor.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetFloorB.png b/ZoFo/Content/Textures/TileSetImages/TilesetFloorB.png new file mode 100644 index 0000000..9fb91a7 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetFloorB.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetFloorDetail.png b/ZoFo/Content/Textures/TileSetImages/TilesetFloorDetail.png new file mode 100644 index 0000000..96be714 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetFloorDetail.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetHole.png b/ZoFo/Content/Textures/TileSetImages/TilesetHole.png new file mode 100644 index 0000000..14078c1 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetHole.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetHouse.png b/ZoFo/Content/Textures/TileSetImages/TilesetHouse.png new file mode 100644 index 0000000..fa89397 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetHouse.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetLogic.png b/ZoFo/Content/Textures/TileSetImages/TilesetLogic.png new file mode 100644 index 0000000..6feb49d Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetLogic.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetNature.png b/ZoFo/Content/Textures/TileSetImages/TilesetNature.png new file mode 100644 index 0000000..fba9cb6 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetNature.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetRelief.png b/ZoFo/Content/Textures/TileSetImages/TilesetRelief.png new file mode 100644 index 0000000..f3ec0d5 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetRelief.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetReliefDetail.png b/ZoFo/Content/Textures/TileSetImages/TilesetReliefDetail.png new file mode 100644 index 0000000..ae72bb6 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetReliefDetail.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetTowers.png b/ZoFo/Content/Textures/TileSetImages/TilesetTowers.png new file mode 100644 index 0000000..19c4a84 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetTowers.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetVillageAbandoned.png b/ZoFo/Content/Textures/TileSetImages/TilesetVillageAbandoned.png new file mode 100644 index 0000000..541b26a Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetVillageAbandoned.png differ diff --git a/ZoFo/Content/Textures/TileSetImages/TilesetWater.png b/ZoFo/Content/Textures/TileSetImages/TilesetWater.png new file mode 100644 index 0000000..34127e4 Binary files /dev/null and b/ZoFo/Content/Textures/TileSetImages/TilesetWater.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/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/Game1.cs b/ZoFo/Game1.cs deleted file mode 100644 index 3c35539..0000000 --- a/ZoFo/Game1.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; -using Microsoft.Xna.Framework.Input; - -namespace ZoFo; - -public class Game1 : Game -{ - private GraphicsDeviceManager _graphics; - private SpriteBatch _spriteBatch; - - public Game1() - { - _graphics = new GraphicsDeviceManager(this); - Content.RootDirectory = "Content"; - IsMouseVisible = true; - } - - protected override void Initialize() - { - // TODO: Add your initialization logic here - - base.Initialize(); - } - - protected override void LoadContent() - { - _spriteBatch = new SpriteBatch(GraphicsDevice); - - // TODO: use this.Content to load your game content here - } - - protected override void Update(GameTime gameTime) - { - if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || - Keyboard.GetState().IsKeyDown(Keys.Escape)) - Exit(); - - // TODO: Add your update logic here - - base.Update(gameTime); - } - - protected override void Draw(GameTime gameTime) - { - GraphicsDevice.Clear(Color.CornflowerBlue); - - // TODO: Add your drawing code here - - base.Draw(gameTime); - } -} \ No newline at end of file diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs new file mode 100644 index 0000000..7274abf --- /dev/null +++ b/ZoFo/GameCore/Client.cs @@ -0,0 +1,191 @@ + +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 System.Drawing; +using System.Reflection; +using ZoFo.GameCore.GameObjects.Entities; +using System.Net.Sockets; +using System.Net; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; +using System.Linq; +using System.Web; +using ZoFo.GameCore.GUI; +using ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables; +using ZoFo.GameCore.GameObjects.MapObjects.StopObjects; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies; +using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +namespace ZoFo.GameCore +{ + public class Client + { + #region Network part + + ClientNetworkManager networkManager; + + public bool IsConnected { get { return networkManager.IsConnected; } } + public IPEndPoint InfoConnect => networkManager.InfoConnect; + + public Client() + { + networkManager = new ClientNetworkManager(); + networkManager.GetDataSent += OnDataSend; + + // Подписка на действия инпутменеджера. + // Отправляются данные апдейтса с обновлением инпута + AppManager.Instance.InputManager.ActionEvent += () => + { + networkManager.AddData(new UpdateInput() + { + InputMovementDirection = AppManager.Instance.InputManager.InputMovementDirection, + InputAttackDirection = AppManager.Instance.InputManager.InputAttackDirection + }); + }; + } + + public void OnDataSend(string data) + { + //List updateDatas = JsonSerializer.Deserialize>(data); + JArray jToken = JsonConvert.DeserializeObject(data) as JArray; + + //string[] brands = jToken.SelectToken("")?.ToObject(); + foreach (JToken update in jToken.Children()) + { + string a = update.ToString(); + UpdateTileCreated u = System.Text.Json.JsonSerializer.Deserialize(a); + } + // тут будет switch + AppManager.Instance.debugHud.Log(data); + //foreach (var item in updateDatas) + //{ + // GotData(item); + //} + + } + public void GameEndedUnexpectedly() { } + + public void JoinRoom(string ip, int port) + { + networkManager.JoinRoom(ip, port); + } + public void JoinYourself(int port) { networkManager.JoinYourself(port); } + + #endregion + + List mapObjects = new List(); + List gameObjects = new List(); + List players = new List(); + List stopObjects = new List(); + /// + /// Клиент должен обнговлять игру анимаций + /// + /// + internal void Update(GameTime gameTime) + { + for (int i = 0; i < gameObjects.Count; i++) + { + AppManager.Instance.debugHud.Set("GameTime", gameTime.TotalGameTime.ToString()); + 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 < stopObjects.Count; i++) + { + stopObjects[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.GetPoint().ToVector2(), + (update as UpdateTileCreated).sourceRectangle.GetRectangle(), + (update as UpdateTileCreated).tileSetName + )); + } + //else if (update is UpdateStopObjectCreated) + //{ + // stopObjects.Add( + // new StopObject( + // (update as UpdateStopObjectCreated).Position, + // (update as UpdateStopObjectCreated).Size.ToVector2(), + // (update as UpdateStopObjectCreated).sourceRectangle, + // (update as UpdateStopObjectCreated).tileSetName + // )); + //} + else if (update is UpdateGameObjectCreated) + { + GameObject created_gameObject; + if ((update as UpdateGameObjectCreated).GameObjectType == "EntittyForAnimationTests") + gameObjects.Add(new EntittyForAnimationTests((update as UpdateGameObjectCreated).position)); + if ((update as UpdateGameObjectCreated).GameObjectType == "Player") + { + created_gameObject = new Player((update as UpdateGameObjectCreated).position); + players.Add(created_gameObject as Player); + gameObjects.Add(created_gameObject); + } + if ((update as UpdateGameObjectCreated).GameObjectType == "Ammo") + gameObjects.Add(new Ammo((update as UpdateGameObjectCreated).position)); + if ((update as UpdateGameObjectCreated).GameObjectType == "Zombie") + gameObjects.Add(new Zombie((update as UpdateGameObjectCreated).position)); + + + (gameObjects.Last() as Entity).SetIdByClient((update as UpdateGameObjectCreated).IdEntity); + //var a = Assembly.GetAssembly(typeof(GameObject)); + //gameObjects.Add( TODO reflection + //Activator.CreateInstance(Type.GetType("ZoFo.GameCore.GameObjects.Entities.EntittyForAnimationTests") + ///*(update as UpdateGameObjectCreated).GameObjectType*/, new []{ new Vector2(100, 100) }) + //as GameObject + //); + } + else if (update is UpdatePosition) + { + var ent = FindEntityById(update.IdEntity); + + ent.position = (update as UpdatePosition).NewPosition; + DebugHUD.Instance.Log("newPosition " + ent.position); + } + } + + + public Entity FindEntityById(int id) + { + for (int i = 0; i < gameObjects.Count; i++) + { + if (gameObjects[i] is Entity) + { + if ((gameObjects[i] as Entity).Id == id) + { + return gameObjects[i] as Entity; + } + } + } + return null; + } + + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/AbstractGUI.cs b/ZoFo/GameCore/GUI/AbstractGUI.cs index 5208c96..e8ceb33 100644 --- a/ZoFo/GameCore/GUI/AbstractGUI.cs +++ b/ZoFo/GameCore/GUI/AbstractGUI.cs @@ -1,6 +1,58 @@ -namespace ZoFo.GameCore.GUI; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using MonogameLibrary.UI.Base; +using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; -public class AbstractGUI +namespace ZoFo.GameCore.GUI; + +public abstract class AbstractGUI { - + protected UIManager Manager = new(); + protected List Elements = new(); + private List ActiveElements; + protected DrawableUIElement SelectedElement; + private bool isStartedPrint = false; + private bool isPressed = false; + private Texture2D mouse; + private MouseState mouseState; + + public AbstractGUI() + { + } + + protected abstract void CreateUI(); + private GraphicsDevice graphicsDevice; + public virtual void Initialize() + { + 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.White); + spriteBatch.End(); + } } \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/BaseGUI.cs b/ZoFo/GameCore/GUI/BaseGUI.cs new file mode 100644 index 0000000..0949412 --- /dev/null +++ b/ZoFo/GameCore/GUI/BaseGUI.cs @@ -0,0 +1,127 @@ +using System; +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; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using MonogameLibrary.UI.Base; +using MonogameLibrary.UI.Elements; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.ItemManager; + + +namespace ZoFo.GameCore.GUI; + +public class BaseGUI : AbstractGUI +{ + private DrawableUIElement menuBackground; + private List ItemDisplayButtonsList; + private int buttonIndex = 0; + private string textureName; + + protected override void CreateUI() + { + ItemDisplayButtonsList = new List(); + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + Dictionary playerItems = AppManager.Instance.playerData.items; + Dictionary items = AppManager.Instance.ItemManager.tagItemPairs; + + menuBackground = new DrawableUIElement(Manager) + { + rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, + textureName = "Textures\\GUI\\background\\base" + }; + Elements.Add(menuBackground); + menuBackground.LoadTexture(AppManager.Instance.Content); + + Elements.Add(new Label(Manager) + { + rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 15, (int)(width / 4), (int)(height / 20)), + text = "Base", fontColor = Color.Black, mainColor = Color.Transparent, scale = 0.9f, + fontName = "Fonts\\Font" + }); + + DrawableUIElement baseHudBack = new DrawableUIElement(Manager) + { + rectangle = new Rectangle(width / 2 - (int)(width / 1.5) / 2, height / 2 - (int)(height / 1.5) / 2, + (int)(width / 1.5), (int)(height / 1.5)), + mainColor = Color.LightGray + }; + Elements.Add(baseHudBack); + + //player itams + foreach (var item in playerItems) + { + textureName = AppManager.Instance.ItemManager.GetItemInfo(item.Key).textureName; + var temp = new ItemDisplayLabel(Manager) + { + rectangle = new Rectangle(width / 2 - (int)(width / 1.5) / 2 + height / 80, + height / 2 - (int)(height / 1.5) / 2 + height / 80 + (height / 20 + height / 80) * (buttonIndex), + (int)(width / 5), (int)(height / 20)), + text1 = item.Key, + scale1 = 0.4f, + count = item.Value, + itemTextureName = textureName, + fontColor1 = Color.White, + mainColor = Color.Gray, + fontName1 = "Fonts\\Font3" + }; + Elements.Add(temp); + temp.Initialize(); + temp.LoadTexture(AppManager.Instance.Content); + ItemDisplayButtonsList.Add(temp); + + buttonIndex++; + } + + // craftable items + buttonIndex = 0; + foreach (var item in items) + { + ItemInfo itemInfo = AppManager.Instance.ItemManager.GetItemInfo(item.Key); + + if (itemInfo.isCraftable) + { + var temp = new ItemDisplayLabel(Manager) + { + rectangle = new Rectangle(width / 2 - (int)(width / 1.5) / 2 + height / 40 + width / 5, + height / 2 - (int)(height / 1.5) / 2 + height / 80 + + (height / 20 + height / 80) * (buttonIndex), + (int)(width / 5), (int)(height / 20)), + text1 = item.Key, + scale1 = 0.4f, + count = 0, + itemTextureName = itemInfo.textureName, + fontColor1 = Color.White, + mainColor = Color.Gray, + fontName1 = "Fonts\\Font3" + }; + Elements.Add(temp); + temp.Initialize(); + temp.LoadTexture(AppManager.Instance.Content); + ItemDisplayButtonsList.Add(temp); + + buttonIndex++; + } + } + + 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/DebugHUD.cs b/ZoFo/GameCore/GUI/DebugHUD.cs new file mode 100644 index 0000000..294530a --- /dev/null +++ b/ZoFo/GameCore/GUI/DebugHUD.cs @@ -0,0 +1,74 @@ +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 static DebugHUD Instance { get; private set; } + + public void Initialize() + { + Instance = this; + } + + 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/GameEndedGUI.cs b/ZoFo/GameCore/GUI/GameEndedGUI.cs new file mode 100644 index 0000000..03897ea --- /dev/null +++ b/ZoFo/GameCore/GUI/GameEndedGUI.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using MonogameLibrary.UI.Base; +using MonogameLibrary.UI.Elements; + +namespace ZoFo.GameCore.GUI; + +public class GameEndedGUI : AbstractGUI +{ + protected override void CreateUI() + { + // int width = AppManager.Instance.inGameHUDHelperResolution.X; + // int height = AppManager.Instance.inGameHUDHelperResolution.Y; + } + + public override void Update(GameTime gameTime) + { + + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/HUD.cs b/ZoFo/GameCore/GUI/HUD.cs new file mode 100644 index 0000000..745453a --- /dev/null +++ b/ZoFo/GameCore/GUI/HUD.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +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 HUD : AbstractGUI +{ + protected override void CreateUI() + { + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + Button pauseButton = 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(pauseButton); + pauseButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new PauseGUI()); + }; + } + public override void Update(GameTime gameTime) + { + base.Update(gameTime); + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/InventoryGUI.cs b/ZoFo/GameCore/GUI/InventoryGUI.cs new file mode 100644 index 0000000..c085803 --- /dev/null +++ b/ZoFo/GameCore/GUI/InventoryGUI.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using MonogameLibrary.UI.Base; +using MonogameLibrary.UI.Elements; + +namespace ZoFo.GameCore.GUI; + +public class InventoryGUI : AbstractGUI +{ + protected override void CreateUI() + { + // int width = AppManager.Instance.inGameHUDHelperResolution.X; + // int height = AppManager.Instance.inGameHUDHelperResolution.Y; + } + + public override void Update(GameTime gameTime) + { + + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GUI/MainMenuGUI.cs b/ZoFo/GameCore/GUI/MainMenuGUI.cs new file mode 100644 index 0000000..645faf8 --- /dev/null +++ b/ZoFo/GameCore/GUI/MainMenuGUI.cs @@ -0,0 +1,97 @@ +using System; +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; +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.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.SoundManager.StartAmbientSound("Loot"); + AppManager.Instance.SetGUI(new SelectModeMenu()); + }; + Elements.Add(playButton); + Button baseButton = 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 = "Base", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts\\Font" + }; + baseButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new BaseGUI()); + }; + Elements.Add(baseButton); + Button optionButton = 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 = "Options", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + optionButton.LeftButtonPressed += () => + { + AppManager.Instance.SoundManager.StartAmbientSound("Loot"); + 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) * 4, (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 new file mode 100644 index 0000000..39db371 --- /dev/null +++ b/ZoFo/GameCore/GUI/OptionsGUI.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +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.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); + label_OverallVolume_Percent.text = Math.Round(slider_OverallVolume.GetSliderValue * 100) + "%"; + 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); + label_MusicVolume_Percent.text = Math.Round(slider_MusicVolume.GetSliderValue * 100) + "%"; + 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); + label_EffectsVolume_Percent.text = Math.Round(slider_EffectsVolume.GetSliderValue * 100) + "%"; + 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/PauseGUI.cs b/ZoFo/GameCore/GUI/PauseGUI.cs new file mode 100644 index 0000000..d316fb7 --- /dev/null +++ b/ZoFo/GameCore/GUI/PauseGUI.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +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 PauseGUI : AbstractGUI +{ + protected override void CreateUI() + { + int width = AppManager.Instance.CurentScreenResolution.X; + int height = AppManager.Instance.CurentScreenResolution.Y; + + Button continueButton = new Button(Manager) + { + rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + height / 20 + height / 40, (int)(width / 5), (int)(height / 20)), + text = "Continue", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts\\Font" + }; + continueButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new HUD()); + }; + Elements.Add(continueButton); + Button exitButton = 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 = "Exit", + scale = 0.2f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts\\Font" + }; + exitButton.LeftButtonPressed += () => + { + AppManager.Instance.SetGUI(new MainMenuGUI()); + }; + Elements.Add(exitButton); + } + + 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 new file mode 100644 index 0000000..5b1320b --- /dev/null +++ b/ZoFo/GameCore/GUI/SelectModeMenu.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +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.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 new file mode 100644 index 0000000..9460341 --- /dev/null +++ b/ZoFo/GameCore/GUI/SelectingServerGUI.cs @@ -0,0 +1,130 @@ +using System; +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; +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.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.5f, + fontColor = Color.White, + mainColor = Color.Gray, + textAligment = MonogameLibrary.UI.Enums.TextAligment.Left, + fontName = "Fonts/Font3" + }; + 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; + try + { + if (int.TryParse(endpoint[1], out port)) + { + client.JoinRoom(endpoint[0], port); + AppManager.Instance.SetClient(client); + AppManager.Instance.SetGUI(new WaitingForPlayersGUI(false)); + } + } + catch (Exception) + { + + // throw; + } + + // ваш код здесь + }; + 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 + Client client = new Client(); + server.CreateRoom(2); + client.JoinYourself(server.MyIp.Port); + AppManager.Instance.SetServer(server); + AppManager.Instance.SetClient(client); + 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 new file mode 100644 index 0000000..2764fb1 --- /dev/null +++ b/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Xml; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +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.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 = + + // 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) + { + 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); + 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 + AppManager.Instance.ChangeState(GameState.HostPlaying); + // ваш код здесь + }; + Elements.Add(startButton); + } + else { + ip = new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 7, (int)(width / 4), (int)(height / 20)), text = AppManager.Instance.client.InfoConnect.ToString(), fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font3" }; + Elements.Add(ip); + Button waitButton = new Button(Manager) + { + rectangle = new Rectangle(width / 2 - (width / 15) / 2, height / 2 + height / 4, (int)(width / 15), (int)(height / 20)), + text = "WAITING", + scale = 0.3f, + fontColor = Color.White, + mainColor = Color.Gray, + fontName = "Fonts/Font" + }; + waitButton.LeftButtonPressed += () => + { + // start + AppManager.Instance.ChangeState(GameState.ClientPlaying); + // ваш код здесь + }; + Elements.Add(waitButton); + } + + 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 new file mode 100644 index 0000000..b129359 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/AppManager.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection.Metadata; +using System.Text; +using System.Threading.Tasks; +using ZoFo.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; +using ZoFo.GameCore.GameObjects; + +namespace ZoFo.GameCore.GameManagers +{ + public enum GameState { NotPlaying, HostPlaying, ClientPlaying } + public class AppManager : Game + { + private GraphicsDeviceManager _graphics; + private SpriteBatch _spriteBatch; + + + + public static AppManager Instance { get; private set; } + public GameState gamestate; + public AbstractGUI currentGUI; + public DebugHUD debugHud; + public Point CurentScreenResolution; + public Client client; + public Server server; + public PlayerData playerData; + + + #region Managers + + 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); + CurentScreenResolution = new Point(GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width, GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height); + SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y); + //FulscrreenSwitch(); + + + Content.RootDirectory = "Content"; + IsMouseVisible = true; + + playerData = new PlayerData(); + ItemManager = new ItemManager.ItemManager(); + 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(); + ItemManager.Initialize(); + + + base.Initialize(); + } + + protected override void LoadContent() + { + _spriteBatch = new SpriteBatch(GraphicsDevice); + debugHud.LoadContent(); + currentGUI.LoadContent(); + ItemManager.LoadItemTextures(); + + + + animationBuilder = new AnimationBuilder(); + animationBuilder.LoadAnimations(); + GameObject.debugTexture = new Texture2D(GraphicsDevice, 1, 1); + GameObject.debugTexture.SetData(new Color[] { Color.White }); + } + + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || + Keyboard.GetState().IsKeyDown(Keys.Escape)) { server.CloseConnection(); Exit(); } + + + // debugHud.Set("key", "value"); + + InputManager.Update(); + currentGUI.Update(gameTime); + switch (gamestate) + { + case GameState.NotPlaying: + break; + case GameState.HostPlaying: + server.Update(gameTime); + client.Update(gameTime); + break; + case GameState.ClientPlaying: + client.Update(gameTime); + break; + default: + break; + } + + base.Update(gameTime); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + + // Pointwrap + _spriteBatch.Begin(samplerState: SamplerState.PointWrap); + switch (gamestate) + { + case GameState.ClientPlaying: + case GameState.HostPlaying: + client.Draw(_spriteBatch); + break; + case GameState.NotPlaying: + default: + break; + } + + _spriteBatch.End(); + currentGUI.Draw(_spriteBatch); + debugHud.Draw(_spriteBatch); + + base.Draw(gameTime); + } + public void ChangeState(GameState gameState) + { + this.gamestate = gameState; + } + public void SetGUI(AbstractGUI gui) + { + currentGUI = gui; + currentGUI.Initialize(); + currentGUI.LoadContent(); + + //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 new file mode 100644 index 0000000..fa9f9d6 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionComponent.cs @@ -0,0 +1,70 @@ +using Microsoft.Win32; +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +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 +{ + public class CollisionComponent + { + //==КОНСТРУКТОР== + public CollisionComponent(GameObject gameObject) + { + + this.gameObject = gameObject; + hasCollision = false; + this.isTrigger = false; + } + + public CollisionComponent(GameObject gameObject, bool hasCollision = false, Rectangle? collisionRectangle = null, bool isTrigger = false, Rectangle? triggerRectangle = null) + { + this.gameObject = gameObject; + + this.hasCollision = hasCollision; + this.isTrigger = isTrigger; + if (hasCollision) + this.stopRectangle = collisionRectangle.Value; + if (isTrigger) + this.triggerRectangle = triggerRectangle.Value; + + + + + } + + //==ПОЛЯ== + + public GameObject gameObject { get; set; } + + + bool doesStop; + bool hasCollision; + public Rectangle stopRectangle; + + // triggers for rectangle + bool isTrigger; + public Rectangle triggerRectangle; + + //delegate + public delegate void EventHandler(object sender, EventArgs e); + + + + + //events DoorInteraction + public event EventHandler OnTriggerEnter; + public event EventHandler OnTriggerZone; + public event EventHandler OnTriggerExit; + + public event EventHandler OnCollision; + + + + } +} diff --git a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs new file mode 100644 index 0000000..25736fe --- /dev/null +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs @@ -0,0 +1,153 @@ +using Microsoft.VisualBasic; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameObjects; +using ZoFo.GameCore.GameManagers.CollisionManager; +using Microsoft.Xna.Framework; +using ZoFo.GameCore.GameManagers.MapManager.MapElements; +using ZoFo.GameCore.GameObjects.Entities; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameManagers.CollisionManager +{ + public class CollisionManager + { + //листики + + public List ObjectsWithCollisions; + public List EntitiesWithMovements; + public List ObjectsWithTriggers; + + + //чекаем коллизии в листе + public void CheckComponentCollision(CollisionComponent componentOfEntity) + { + var entity = componentOfEntity.gameObject as LivingEntity; + //for (int i = 0; i < ObjectsWithCollisions.Count; i++) + //{ + var currentRect = entity.collisionComponent.stopRectangle;//задаём РЕК + currentRect.X+=(int)entity.position.X; + currentRect.Y+=(int)entity.position.Y; + + var newRect = currentRect; // задаём значение старого РЕК новому РЕК + + + var collidedX = false; // соприкосновение + var tryingRectX = currentRect;//переменная для попытки перемещения по X + + tryingRectX.Offset((int)(entity.velocity.X), 0);//задаём значения для tryingRectX по X и по Y + + foreach (var item in ObjectsWithCollisions)//фильтрация + { + if (item == componentOfEntity) continue; + + Rectangle rectChecking = item.stopRectangle.SetOrigin(item.gameObject.position); + if (Math.Abs(item.gameObject.position.X - componentOfEntity.gameObject.position.X) < 550 + && Math.Abs(item.gameObject.position.Y - componentOfEntity.gameObject.position.Y) < 550 + && tryingRectX.Intersects(rectChecking)) + + { + collidedX = true;// меняем значение соприкосновения на true + entity.OnCollision(item);//подписываем entity на ивент коллизии + + break;// выход + } + } + + if (collidedX)// срабатывает, если перемещение блокируется + { + entity.velocity.X = 0;// задаём значение смещения entity на 0 + } + else + { + entity.position.X += entity.velocity.X; //update player position + newRect.X = tryingRectX.X;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК + } + + //==ПОВТОРЯЕМ ТОЖЕ САМОЕ ДЛЯ Y== + + var collidedY = false; // соприкосновение + var tryingRectY = currentRect;//переменная для попытки перемещения по X + + tryingRectY.Offset(new Point(0, (int)entity.velocity.Y));//задаём значения для tryingRectX по X и по Y + + foreach (var item in ObjectsWithCollisions)//фильтрация + { + if (item == componentOfEntity) continue; + Rectangle rectChecking = item.stopRectangle.SetOrigin(item.gameObject.position); + if (Math.Abs(item.gameObject.position.X - componentOfEntity.gameObject.position.X) < 550 + && Math.Abs(item.gameObject.position.Y - componentOfEntity.gameObject.position.Y) < 550 + && tryingRectY.Intersects(rectChecking)) + + { + collidedY = true;// меняем значение соприкосновения на true + entity.OnCollision(item);//подписываем entity на ивент коллизии + + break;// выход + } + } + + if (collidedY)// срабатывает, если перемещение блокируется + { + entity.velocity.Y = 0;// задаём значение смещения entity на 0 + } + else + { + entity.position.Y += entity.velocity.Y; + newRect.Y = tryingRectY.Y;//значение по X для нового РЕК приравниваем к значению испытуемого РЕК + } + + entity.graphicsComponent.ObjectDrawRectangle.X = (int)entity.position.X; + entity.graphicsComponent.ObjectDrawRectangle.Y = (int)entity.position.Y; + AppManager.Instance.server.AddData(new UpdatePosition() { NewPosition = entity.position, IdEntity = entity.Id }); + AppManager.Instance.debugHud.Set("testPos", entity.position.ToString()); //TODO remove + entity.velocity = Vector2.Zero; + } + + //обновление позиции объекта + + public void UpdatePositions() + { + foreach (var item in EntitiesWithMovements) + { + CheckComponentCollision(item); + } + } + + + public CollisionManager() + { + //graphicsComponent + //.ObjectDrawRectangle = new Rectangle(0, 0, 16 * 12, 16 * 16); + EntitiesWithMovements = new List(); + ObjectsWithCollisions = new List(); + } + //регистрация компонента(его коллизии) + public void Register(CollisionComponent component) + { + ObjectsWithCollisions.Add(component); + if (component.gameObject is LivingEntity) + { + EntitiesWithMovements.Add(component); + } + } + + + + } + public static class ExtentionClass + { + public static Rectangle SetOrigin(this Rectangle rectangle, Vector2 origin) + { + rectangle.X = (int)origin.X; + rectangle.Y = (int)origin.Y; + return rectangle; + } + } + +} diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs new file mode 100644 index 0000000..dd13535 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/InputManager.cs @@ -0,0 +1,252 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics.PackedVector; +using Microsoft.Xna.Framework.Input; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Formats.Tar; +using System.Linq; +using System.Reflection.Metadata.Ecma335; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers +{ + public enum ScopeState { Idle, Left, Right, Straight, Back, StraightLeft, StraightRight, BackLeft, BackRight } + + public class InputManager + { + public event Action ShootEvent; // событие удара(когда нажат X, событие срабатывает) + + public event Action OnInteract; // событие взаимодействия с collectable(например, лутом) + //с помощью кнопки E. + + public event Action ActionEvent; + public Vector2 InputMovementDirection; + private Vector2 prevInputMovementDirection; + public Vector2 InputAttackDirection; + private Vector2 prevInputAttackDirection; + + public event Action TalkEvent; + + public ScopeState currentScopeState; // Положение оружия. Left, Right, Straight, Back, StraightLeft, StraightRight, BackLeft, BackRight. + private ScopeState prevCurrentScopeState; + 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 isShoot; + private bool isInteract; + + private KeyboardState lastKeyboardState; + private GamePadState lastGamePadState; + public ScopeState ScopeState { get => currentScopeState; } + public string currentControlsState; + public ScopeState CurrentScopeState { get => currentScopeState; } // получить текущее состояние + + public InputManager() + { + InputMovementDirection = new Vector2(0, 0); + InputAttackDirection = new Vector2(0, 0); + this.isShoot = false; + currentScopeState = ScopeState.Idle; + } + 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 + } + + #region Работа с GamePad + #region Обработка гейм-пада. Задает Vector2 vectorMovementDirection являющийся вектором отклонения левого стика. + GamePadState gamePadState = GamePad.GetState(0); + InputMovementDirection = gamePadState.ThumbSticks.Left; + InputAttackDirection = gamePadState.ThumbSticks.Right; + #endregion + + #region читы + if (gamePadState.Triggers.Left >= 0.9 && gamePadState.Triggers.Right >= 0.9) + _cheatsEnabled = true; + if (_cheatsEnabled) + { + if (gamePadState.Buttons.Y == ButtonState.Pressed && lastGamePadState.Buttons.Y == ButtonState.Released) + InvincibilityCheat = !InvincibilityCheat; + if (gamePadState.Buttons.B == ButtonState.Pressed && lastGamePadState.Buttons.B == ButtonState.Released) + CollisionsCheat = !CollisionsCheat; + //TODO: infinite ammo cheat by gamepad + } + #endregion // Cheats + + #region set ScopeState + int currentSection = (int)Math.Ceiling(Math.Atan2(InputMovementDirection.Y, + InputMovementDirection.X) * 180 / Math.PI * 16 / 360); + switch(currentSection){ + case 1 or 0 or 16: + currentScopeState = ScopeState.Right; + break; + case 2 or 3: + currentScopeState = ScopeState.StraightRight; + break; + case 4 or 5: + currentScopeState = ScopeState.Straight; + break; + case 6 or 7: + currentScopeState = ScopeState.StraightLeft; + break; + case 8 or 9: + currentScopeState = ScopeState.Left; + break; + case 10 or 11: + currentScopeState = ScopeState.BackLeft; + break; + case 12 or 13: + currentScopeState = ScopeState.Back; + break; + case 14 or 15: + currentScopeState = ScopeState.BackRight; + break; + default: + break; + } + + #endregion + + #region Обработка нажатия выстрела. Вызывает событие ShootEvent + if (gamePadState.Buttons.X == ButtonState.Pressed && !isShoot) + { + isShoot = true; + ShootEvent?.Invoke(); + Debug.WriteLine("Выстрел"); + } + else if (gamePadState.Buttons.X == ButtonState.Released) + { + isShoot = false; + } + #endregion + + lastGamePadState = gamePadState; + #endregion + #region Работа с KeyBoard + + #region InputAttack with mouse + MouseState mouseState = Mouse.GetState(); + AppManager.Instance.debugHud.Set("mouse position", $"({mouseState.X}, {mouseState.Y}"); + // TODO: CurentScreenResolution + Vector2 a = (AppManager.Instance.CurentScreenResolution / new Point(2, 2)).ToVector2(); + + InputAttackDirection = Vector2.Normalize(new Vector2(mouseState.X - a.X, mouseState.Y - a.Y)); + AppManager.Instance.debugHud.Set("AttackDir(normalize)", $"({a.X}, {a.Y})"); + #endregion + + #region Состояние клавиатуры + KeyboardState keyBoardState = Keyboard.GetState(); // Состояние клавиатуры + #endregion + + #region читы + if (keyBoardState.IsKeyDown(Keys.LeftShift) && keyBoardState.IsKeyDown(Keys.RightShift)) + _cheatsEnabled = true; + if (_cheatsEnabled) + { + if (keyBoardState.IsKeyDown(Keys.I) && lastKeyboardState.IsKeyUp(Keys.I)) + InvincibilityCheat = !InvincibilityCheat; + if (keyBoardState.IsKeyDown(Keys.C) && lastKeyboardState.IsKeyUp(Keys.C)) + CollisionsCheat = !CollisionsCheat; + if (keyBoardState.IsKeyDown(Keys.N) && lastKeyboardState.IsKeyUp(Keys.N)) + InfiniteAmmoCheat = !InfiniteAmmoCheat; + + List lvls = new List() { Keys.D0, Keys.D1, Keys.D2, Keys.D3, Keys.D4, Keys.D5, Keys.D6, Keys.D7, Keys.D8, Keys.D9 }; + + for (int i = 0; i < lvls.Count; i++) + { + //if (keyBoardState.IsKeyDown(lvls[i]) && lastKeyboardState.IsKeyUp(lvls[i])) //TODO + // AppManager.Instance.Restart($"lvl{i}"); + } + } + #endregion // Cheats + + #region Обработка состояния объекта. Задает значение полю scopeState. + if (keyBoardState.IsKeyDown(Keys.Up) || keyBoardState.IsKeyDown(Keys.W)) + { + currentScopeState = ScopeState.Straight; + } + else if (keyBoardState.IsKeyDown(Keys.Down) || keyBoardState.IsKeyDown(Keys.S)) + { + currentScopeState = ScopeState.Back; + } + else if(keyBoardState.IsKeyDown(Keys.Left) || keyBoardState.IsKeyDown(Keys.A)) + { + currentScopeState = ScopeState.Left; + } + else if(keyBoardState.IsKeyDown(Keys.Right) || keyBoardState.IsKeyDown(Keys.D)) + { + currentScopeState = ScopeState.Right; + } + else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Up) || + keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.W)) + { + currentScopeState = ScopeState.StraightRight; + } + else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Up) || + keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.W)) + { + currentScopeState = ScopeState.StraightLeft; + } + else if(keyBoardState.IsKeyDown(Keys.Right) && keyBoardState.IsKeyDown(Keys.Down) || + keyBoardState.IsKeyDown(Keys.D) && keyBoardState.IsKeyDown(Keys.S)) + { + currentScopeState = ScopeState.BackRight; + } + else if(keyBoardState.IsKeyDown(Keys.Left) && keyBoardState.IsKeyDown(Keys.Down) || + keyBoardState.IsKeyDown(Keys.A) && keyBoardState.IsKeyDown(Keys.S)) + { + currentScopeState = ScopeState.BackLeft; + } + #endregion + + #region Обработка нажатия выстрела. Вызывает событие ShootEvent + if (keyBoardState.IsKeyDown(Keys.P) && !isShoot) + { + isShoot = true; + ShootEvent?.Invoke(); + Debug.WriteLine("Выстрел"); + } + else if (keyBoardState.IsKeyUp(Keys.P)) + { + isShoot = false; + } + #endregion + + #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 + #region ActionEvent + if(InputMovementDirection != prevInputMovementDirection || + InputAttackDirection != prevInputAttackDirection || + currentScopeState != prevCurrentScopeState) + { + ActionEvent?.Invoke(); + } + prevInputMovementDirection = InputMovementDirection; + prevInputAttackDirection = InputAttackDirection; + prevCurrentScopeState = currentScopeState; + #endregion + } + } +} 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 new file mode 100644 index 0000000..6461dc6 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/ItemManager/ItemInfo.cs @@ -0,0 +1,37 @@ +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.ItemManager +{ + public class ItemInfo + { + //поля + string tag; + public string textureName; + Texture2D itemTexture; + public bool isCraftable; + public 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; + } + //методы + 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 new file mode 100644 index 0000000..3b982e6 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.ItemManager +{ + public class ItemManager + { + //поля + public Dictionary tagItemPairs; + //методы + public ItemInfo GetItemInfo(string tag) + { + return tagItemPairs[tag]; + } + public void LoadItemTextures() + { + foreach (var item in tagItemPairs) + { + item.Value.LoadTexture(); + } + } + public void Initialize() + { + tagItemPairs = new Dictionary(); + tagItemPairs.Add("wood", new ItemInfo("wood","Textures\\Test\\wood",false,null)); + tagItemPairs.Add("rock", new ItemInfo("rock", "Textures\\Test\\rock", false, null)); + tagItemPairs.Add("steel", new ItemInfo("steel", "Textures\\Test\\steel", false, null)); + tagItemPairs.Add("pickaxe", new ItemInfo("steel", "Textures\\Test\\pickaxe", true, new Dictionary() + { + {"wood", 2}, + {"Steel", 3} + })); + } + + } +} diff --git a/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs b/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs new file mode 100644 index 0000000..5a6c78e --- /dev/null +++ b/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.ItemManager +{ + /// + /// Класс хранит информацю о количестве ресурсов у игрока + /// + public class PlayerData + { + public PlayerData() + { + LoadPlayerData(); + } + public Dictionary items; + /// + /// Принимает тэг и крафтит этот объект + /// + /// + public bool CraftItem(string itemTag) + { + Dictionary needToCraft = AppManager.Instance.ItemManager.GetItemInfo(itemTag).resourcesNeededToCraft; + foreach (var item in needToCraft) + { + if (items[item.Key] < item.Value) + { + return false; + } + } + + foreach (var item in needToCraft) + { + items[item.Key] -= item.Value; + } + return true; + } + + public void LoadPlayerData() + { + //TODO + items = new Dictionary(); + items.Add("wood", 2); + items.Add("steel", 110); + items.Add("rock", 6); + } + } +} diff --git a/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs b/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs new file mode 100644 index 0000000..3917575 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/ItemManager/WeaponItemInfo.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.ItemManager +{ + class WeaponItemInfo: EquippableItemInfo + { + //поля + float damage; + + public WeaponItemInfo(string tag) : base(tag) + { + } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Chunk.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Chunk.cs new file mode 100644 index 0000000..6337d3c --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Chunk.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.MapManager.MapElements +{ + public class Chunk + { + public int[] Data { get; set; } + public int Height { get; set; } + public int Width { get; set; } + public int X { get; set; } + public int Y { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs new file mode 100644 index 0000000..cf04682 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Layer.cs @@ -0,0 +1,20 @@ +using System; +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 +{ + public class Layer + { + public List Chunks { get; set; } + public int Height { get; set; } + public int Width { get; set; } + public int Id { get; set; } + public bool Visibility { get; set; } + public string Class { get; set; } + public string Type { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.cs new file mode 100644 index 0000000..f4c4336 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Object.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.MapManager.MapElements +{ + public class Object + { + public double Height { get; set; } + public double Width { get; set; } + public double X { get; set; } + public double Y { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/ObjectGroup.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/ObjectGroup.cs new file mode 100644 index 0000000..ac77f14 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/ObjectGroup.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 ObjectGroup + { + public string Name { get; set; } + public List Objects { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/Tile.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Tile.cs new file mode 100644 index 0000000..88ce815 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/Tile.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.MapManager.MapElements +{ + public class Tile + { + public int Id { get; set; } + public string Type { get; set; } + public ObjectGroup Objectgroup { get; set; } + } +} diff --git a/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs new file mode 100644 index 0000000..dda6f25 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileMap.cs @@ -0,0 +1,18 @@ +using System; +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 +{ + public class TileMap + { + public bool Infinite { get; set; } + public int TileHeight { get; set; } + public int TileWidth { 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 new file mode 100644 index 0000000..a271d8b --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapElements/TileSet.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +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; } + public List Tiles { 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 new file mode 100644 index 0000000..72dcdea --- /dev/null +++ b/ZoFo/GameCore/GameManagers/MapManager/MapManager.cs @@ -0,0 +1,150 @@ +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; + +namespace ZoFo.GameCore.GameManagers.MapManager +{ + public class MapManager + { + 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(Path.Combine(AppContext.BaseDirectory, string.Format(_templatePath, mapName))), options); + + // Загрузка TileSet-ов по TileSetInfo + List tileSets = new List(); + foreach (TileSetInfo tileSetInfo in tileMap.TileSets) + { + TileSet tileSet = LoadTileSet(Path.Combine(AppContext.BaseDirectory, "Content", "MapData", "TileMaps", tileSetInfo.Source)); + tileSet.FirstGid = tileSetInfo.FirstGid; + tileSets.Add(tileSet); + } + tileSets.Reverse(); + + foreach (var layer in tileMap.Layers) + { + if (layer.Type == "objectgroup") + { + + } + else + { + 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]) + { + int number = chunk.Data[i] - tileSet.FirstGid; + + int relativeColumn = number % tileSet.Columns; + int relativeRow = number / tileSet.Columns; // относительно левого угла чанка + + Rectangle sourceRectangle = new Rectangle(relativeColumn * (tileSet.TileWidth + tileSet.Spacing) + tileSet.Margin, + relativeRow * (tileSet.TileHeight + tileSet.Spacing) + tileSet.Margin, + tileSet.TileWidth, tileSet.TileHeight); + + Vector2 position = new Vector2( + (i % chunk.Width) * tileMap.TileWidth + chunk.X * tileMap.TileWidth, + (i / chunk.Height) * tileMap.TileHeight + chunk.Y * tileMap.TileHeight); + + Tile tile = tileSet.Tiles[number]; // По факту может быть StopObjectom, но на уровне Tiled это все в первую очередь Tile + string textureName = Path.Combine(AppContext.BaseDirectory, "Content", "Textures", "TileSetImages", + Path.GetFileName(tileSet.Image).Replace(".png", "")); + switch (tile.Type) + { + case "Tile": + AppManager.Instance.server.RegisterGameObject(new MapObject(position, + new Vector2(tileSet.TileWidth, tileSet.TileHeight), + sourceRectangle, + textureName)); + break; + + case "StopObject": + var collisionRectangles = LoadRectangles(tile); // Грузит коллизии обьектов + + AppManager.Instance.server.RegisterGameObject(new StopObject(position, + new Vector2(tileSet.TileWidth, tileSet.TileHeight), + sourceRectangle, + textureName, + collisionRectangles.ToArray())); + break; + + default: + break; + } + 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); + } + } + + /// + /// Загружает все квадраты коллизии тайла. + /// + /// + /// + private List LoadRectangles(Tile tile) + { + if (tile.Objectgroup == null) + { + return new List() { new Rectangle(0, 0, 0, 0) }; + } + + List collisionRectangles = new List(); + foreach (var obj in tile.Objectgroup.Objects) + { + collisionRectangles.Add(new Rectangle((int)obj.X, (int)obj.Y, (int)obj.Width, (int)obj.Height)); + } + + return collisionRectangles; + } + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..6e1e6b4 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Data.SqlTypes; +using System.Linq; +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 int port = 0; + private IPEndPoint endPoint; + private Socket socket; + 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 + { + 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 AddData(UpdateData UpdateData) + { + updates.Add(UpdateData); + } + + 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(); + 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 + var ipList = Dns.GetHostByName(hostName).AddressList; + + foreach (var ip in ipList) + { + if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + { + return ip; + } + } + return IPAddress.Loopback; + } + + //поток 2 + public void StartListening() + { + while(socket.Connected) + { + byte[] bytes = new byte[65535]; + var countAnsw = socket.Receive(bytes, SocketFlags.Partial); //Вылетает если кто то закрыл + string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером + GetDataSent(update); + } + } + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/SerializableDTO/SerializablePoint.cs b/ZoFo/GameCore/GameManagers/NetworkManager/SerializableDTO/SerializablePoint.cs new file mode 100644 index 0000000..4480a8c --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/SerializableDTO/SerializablePoint.cs @@ -0,0 +1,18 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO +{ + public class SerializablePoint + { + public int X; + public int Y; + + public SerializablePoint(Point point) { X = point.X; Y = point.Y;} + public Point GetPoint() { return new Point(X, Y);} + } +} diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/SerializableDTO/SerializableRectangle.cs b/ZoFo/GameCore/GameManagers/NetworkManager/SerializableDTO/SerializableRectangle.cs new file mode 100644 index 0000000..720344e --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/SerializableDTO/SerializableRectangle.cs @@ -0,0 +1,33 @@ +using Microsoft.Xna.Framework; +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.SerializableDTO; + +namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO +{ + [Serializable] + [JsonSerializable(typeof(SerializableRectangle))] + public class SerializableRectangle + { + public SerializablePoint Size { get; set; } + public SerializablePoint Location { get; set; } + public int X { get; set; } + public int Y { get; set; } + public SerializableRectangle() + { + + } + + public SerializableRectangle(Rectangle rectangle) { X = rectangle.X; Y = rectangle.Y; + Size = new SerializablePoint(rectangle.Size); Location = new SerializablePoint(rectangle.Location); } + + public Rectangle GetRectangle() + { + return new Rectangle() { X = X, Y = Y, Size = Size.GetPoint(), Location = Location.GetPoint() }; + } + } +} diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 8395748..697c61d 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -1,9 +1,15 @@ -using System; +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; +using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using ZoFo.GameCore.GameManagers.NetworkManager.Updates; @@ -12,48 +18,166 @@ 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() { - endPoint = new IPEndPoint(ip, port); + endPoint = new IPEndPoint(GetIp(), 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 + var ipList = Dns.GetHostEntry(hostName).AddressList; + + foreach (var ip in ipList) + { + if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + { + return ip; + } + } + return IPAddress.Loopback; + } + + /// + /// отправляет клиенту 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 < 200 && 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(); - clients.Add(client); //добавляем клиентов в лист + AppManager.Instance.debugHud.Log($"Connect {client.LocalEndPoint.ToString()}"); + Thread thread = new Thread(StartListening); + thread.IsBackground = true; + thread.Start(client); + managerThread.Add(client, thread); + clients.Add(client); + //AppManager.Instance.ChangeState(GameState.HostPlaying); + //добавляем клиентов в лист } - - StartListening(); + AppManager.Instance.ChangeState(GameState.HostPlaying); } - 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 answ = client.Receive(buff); + var buff = new byte[65535]; + var answ = client.Receive(buff, SocketFlags.Partial); + string response = Encoding.UTF8.GetString(buff, 0, answ); + GetDataSend(response); } + Task.Delay(-1); + } } } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs index 017ab85..350fd41 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ClientToServer/UpdateInput.cs @@ -1,12 +1,22 @@ using System; using System.Collections.Generic; using System.Linq; +using Microsoft.Xna.Framework; +using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer { - internal class UpdateInput + public class UpdateInput :UpdateData { + // public int IdEntity { get; set; } + public Vector2 InputMovementDirection{get;set;} + public Vector2 InputAttackDirection {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 1a0b8b9..0000000 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/IUpdateData.cs +++ /dev/null @@ -1,14 +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..8e1b5b6 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectCreated.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,9 +7,14 @@ 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; + public Vector2 position; } } 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..25415e1 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateGameObjectDeleted.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.NetworkManager.Updates.ServerToClient +{ + /// + /// Хранит объект, который надо удлить + /// + public class UpdateGameObjectDeleted : UpdateData + { + public UpdateGameObjectDeleted() { UpdateType = "UpdateGameObjectDeleted"; } + public string GameObjectType; + } +} \ 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..6f4711d --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateInteraction.cs @@ -0,0 +1,16 @@ +namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; + +/// +/// При попытке взаимодействия с объектом +/// +public class UpdateInteraction : UpdateData +{ + public UpdateInteraction() { UpdateType = "UpdateInteraction"; } + public UpdateInteraction(int id) + { + IdEntity = id; + } + + 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..591bc1b --- /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; } = "UpdateInteractionReady"; + 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..b69a860 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs @@ -6,9 +6,17 @@ 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 string lootName; + public UpdateLoot() { UpdateType = "UpdateLoot"; } + public UpdateLoot(string lootName) + { + UpdateType = "UpdateLoot"; + this.lootName = lootName; + } } } 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..189a299 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePosition.cs @@ -1,14 +1,20 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Text; using System.Threading.Tasks; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities; 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"; } + + public Vector2 NewPosition { get; set; } } } 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..948d5b5 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateTileCreated.cs @@ -0,0 +1,27 @@ +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.SerializableDTO; +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 SerializablePoint Size { get; set; } + public SerializableRectangle 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..65ef2d2 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/UpdateData.cs @@ -0,0 +1,42 @@ + +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; } //тип обновления + + public UpdateData() + { + + } + + public UpdateData(int idEntity) + { + this.IdEntity = idEntity; + } + } +} 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..204d965 --- /dev/null +++ b/ZoFo/GameCore/GameManagers/SoundManager.cs @@ -0,0 +1,138 @@ +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 Newtonsoft.Json; +using Microsoft.Xna.Framework.Media; +using System.Runtime.InteropServices; +using ZoFo.GameCore.GUI; + +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() // метод для загрузки звуков из папки + { + //List sounds = AppManager.Instance.Content.Load>("sounds/"); + + string[] k = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "Content", "sounds")).Where(x => x.EndsWith("xnb")).ToArray(); + if (k.Length > 0) + { + + string[] soundFiles = k.Select(x => x.Split("\\").Last().Split("/").Last().Replace(".xnb", "")).ToArray();// папка со звуками там где exe + foreach (var soundFile in soundFiles) + { + Sounds.Add(soundFile, AppManager.Instance.Content.Load(Path.Combine("sounds", soundFile))); + } + + } + /*/if (sounds.Count() > 0) + { + foreach (var soundFile in sounds) + { + Sounds.Add(soundFile, AppManager.Instance.Content.Load("sounds/" + soundFile)); + } + }/*/ + + + } + + 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/Entities/EntittyForAnimationTests.cs b/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs new file mode 100644 index 0000000..2bad778 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs @@ -0,0 +1,29 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.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 AnimatedGraphicsComponent(new List { "player_idle_rotate_weapon" }, "player_idle_rotate_weapon"); + + public EntittyForAnimationTests(Vector2 position) : base(position) + { + graphicsComponent.ObjectDrawRectangle = new Rectangle(0,0,16*12, 16 * 16); + 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..456d8da --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Entity.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using ZoFo.GameCore.GameManagers.CollisionManager; + +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; } + static int totalEntitiesCreated = 0; + protected Entity(Vector2 position) : base(position) + { + Id = totalEntitiesCreated; + totalEntitiesCreated++; + collisionComponent = new CollisionComponent(this); + } + /// + /// For initialisation on Client + /// + /// + public void SetIdByClient(int newId) + { + Id = newId; + } + + public virtual void Update() + { + } + public override void UpdateLogic() + { + Update(); + base.UpdateLogic(); + } + } +} + diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs new file mode 100644 index 0000000..ba4f1bc --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Ammo.cs @@ -0,0 +1,28 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + class Ammo:Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("Textures/icons/8"); + public Ammo(Vector2 position) : base(position) + { + graphicsComponent.ObjectDrawRectangle.Width = 20; + graphicsComponent.ObjectDrawRectangle.Height = 20; + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("Ammo")); + AppManager.Instance.server.DeleteObject(this); + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Antiradine.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Antiradine.cs new file mode 100644 index 0000000..01f36a9 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Antiradine.cs @@ -0,0 +1,27 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + class Antiradine:Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("Antiradine"); + public Antiradine(Vector2 position) : base(position) + { + + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("Antiradine")); + AppManager.Instance.server.DeleteObject(this); + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs new file mode 100644 index 0000000..528f614 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/BottleOfWater.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.Graphics; + +using Microsoft.Xna.Framework; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + public class BottleOfWater : Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("BottleOfWater"); + public BottleOfWater(Vector2 position) : base(position) + { + + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("BottleOfWater")); + AppManager.Instance.server.DeleteObject(this); + } + } +} 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..9bb5227 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs @@ -0,0 +1,20 @@ +using Microsoft.Xna.Framework; +using System; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables; +public class Collectable : Interactable +{ + public Collectable(Vector2 position) : base(position) + { + } + + public override void OnInteraction(object sender, CollisionComponent e) + { + // + AppManager.Instance.server.AddData(new UpdateLoot()); + AppManager.Instance.server.DeleteObject(this); + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs new file mode 100644 index 0000000..5525cfd --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Peeble.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.Graphics; +using Microsoft.Xna.Framework; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; + + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + public class Peeble:Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("Peeble"); + + public Peeble(Vector2 position) : base(position) + { + + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("Peeble")); + AppManager.Instance.server.DeleteObject(this); + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs new file mode 100644 index 0000000..1523f6e --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/PureBottleOfWater.cs @@ -0,0 +1,27 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + class PureBottleOfWater:Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("PureBottleOfWater"); + + public PureBottleOfWater(Vector2 position) : base(position) + { + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("PureBottleOfWater")); + AppManager.Instance.server.DeleteObject(this); + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs new file mode 100644 index 0000000..147f30d --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/RottenFlesh.cs @@ -0,0 +1,27 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + class RottenFlesh:Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("RottenFlesh"); + public RottenFlesh(Vector2 position) : base(position) + { + + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("RottenFlesh")); + AppManager.Instance.server.DeleteObject(this); + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs new file mode 100644 index 0000000..5618236 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Steel.cs @@ -0,0 +1,27 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables +{ + class Steel:Collectable + { + public override StaticGraphicsComponent graphicsComponent { get; } = new("Steel"); + + public Steel(Vector2 position) : base(position) + { + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("Steel")); + AppManager.Instance.server.DeleteObject(this); + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs new file mode 100644 index 0000000..85af71b --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Wood.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables; + +public class Wood : Collectable +{ + public override StaticGraphicsComponent graphicsComponent { get; } = new("Wood"); + + public Wood(Vector2 position) : base(position) + { + + } + public override void OnInteraction(object sender, CollisionComponent e) + { + AppManager.Instance.server.AddData(new UpdateLoot("Wood")); + AppManager.Instance.server.DeleteObject(this); + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Door.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Door.cs new file mode 100644 index 0000000..23ce44f --- /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.GameManagers.CollisionManager; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables; + +public class Door : Interactable +{ + public bool isOpened; + + public override StaticGraphicsComponent graphicsComponent { get; } = new("DoorInteraction"); + + public Door(Vector2 position) : base(position) + { + //graphicsComponent.OnAnimationEnd += _ => { isOpened = !isOpened; };//���������, ��� ����� ������ ������������� - SD + } + + public override void OnInteraction(object sender, CollisionComponent e) + { + //graphicsComponent.AnimationSelect("DoorInteraction", isOpened); + //graphicsComponent.AnimationStep(); + } +} \ 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..270b986 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Interactable.cs @@ -0,0 +1,30 @@ +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.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.Interactables; + +public class Interactable : Entity +{ + public override StaticGraphicsComponent 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); + collisionComponent.OnTriggerZone += OnInteraction; + } + + private void ChangeInteraction(object sender, CollisionComponent e, bool isReady) + { + AppManager.Instance.server.AddData(new UpdateInteractionReady((sender as Player).Id, isReady)); + } + + public virtual void OnInteraction(object sender, CollisionComponent e) + { + + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs new file mode 100644 index 0000000..61762ae --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Enemy.cs @@ -0,0 +1,21 @@ +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 +{ + protected float speed; + protected int health; + public Enemy(Vector2 position) : base(position) + { + } + public override void Update() + { + + + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs new file mode 100644 index 0000000..bc504f9 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -0,0 +1,37 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.Graphics; + +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies +{ + class Zombie : Enemy + { + public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent("Textures/icons/8"); + public Zombie(Vector2 position) : base(position) + { + health = 5; + speed =2; + collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); + graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); + } + + public override void Update() + { + Vector2 duration = Vector2.Normalize( + AppManager.Instance.server.players[0].position - position + ); + velocity=new Vector2(duration.X * speed, duration.Y*speed); + if(position.X>595 && 605>position.X && position.Y>495 && 505>position.Y) + { + velocity = Vector2.Zero; + } + //position.X += velocity.X*t; + //position.Y += velocity.Y * t; + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs new file mode 100644 index 0000000..cc6cb9c --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs @@ -0,0 +1,43 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using ZoFo.GameCore.GameObjects.Entities; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.Graphics; + +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 + + public void OnCollision(CollisionComponent component) + { + + } + + +} + + + + diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs new file mode 100644 index 0000000..3fafa2b --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player +{ + internal interface IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs new file mode 100644 index 0000000..2d86531 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player +{ + class LootData + { + public Dictionary loots; + + public void AddLoot(string lootName, int quantity) + { + loots.Add(lootName, quantity); + } + } +} 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..42d89c2 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -0,0 +1,57 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework.Input; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.Graphics; + +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; } + private float speed; + private int health; + public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "player_look_down" }, "player_look_down"); + private LootData lootData; + public Player(Vector2 position) : base(position) + { + //InputWeaponRotation = new Vector2(0, 0); + //InputPlayerRotation = new Vector2(0, 0); + graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 100, 100); + collisionComponent.stopRectangle = new Rectangle(0, 0, 100, 100); + } + + + public override void Update() + { + + MovementLogic(); + } + float t; + public void MovementLogic() + { + //velocity.X = 3+(float)Math.Sin(t); + t++; + if (InputPlayerRotation.X > 0.9) + { + } + if (Keyboard.GetState().IsKeyDown(Keys.D)) velocity.X = 5; + if (Keyboard.GetState().IsKeyDown(Keys.A)) velocity.X = -5; + if (Keyboard.GetState().IsKeyDown(Keys.S)) velocity.Y = 5; + if (Keyboard.GetState().IsKeyDown(Keys.W)) velocity.Y = -5; + } + public void HandleNewInput(UpdateInput updateInput) + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/GunAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/GunAttack.cs new file mode 100644 index 0000000..ffa2869 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/GunAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks +{ + internal class GunAttack : IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/HandAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/HandAttack.cs new file mode 100644 index 0000000..b993cc0 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/HandAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks +{ + internal class HandAttack : IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs new file mode 100644 index 0000000..508f02f --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks +{ + 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/GameObject.cs b/ZoFo/GameCore/GameObjects/GameObject.cs index 510f160..85189ea 100644 --- a/ZoFo/GameCore/GameObjects/GameObject.cs +++ b/ZoFo/GameCore/GameObjects/GameObject.cs @@ -1,6 +1,105 @@ -namespace ZoFo.GameCore.GameObjects; + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore; +using ZoFo.GameCore.Graphics; -public class GameObject +namespace ZoFo.GameCore.GameObjects; + +public abstract class GameObject { - + public Vector2 position; + + public Vector2 rotation; //вектор направления объекта + public virtual GraphicsComponent graphicsComponent { get; } + + #region ServerSide + public GameObject(Vector2 position) + { + this.position = position; + graphicsComponent.LoadContent(); + + graphicsComponent.ObjectDrawRectangle.X = (int)position.X; + graphicsComponent.ObjectDrawRectangle.Y = (int)position.Y; + + } + public virtual void UpdateLogic() + { + PlayAnimation_OnServer(); + + + } + + + /// + /// Это вызывается в логике игры, которая на сервере, здесь будет вызываться уведомление об анимации + /// + public void PlayAnimation_OnServer() + { + graphicsComponent.Update(); + } + + #endregion + + + #region Client Side + + public static Texture2D debugTexture; + /// + /// Для клиента + /// Это вызывается в клиентской части игры + /// + 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.Draw(graphicsComponent.ObjectDrawRectangle, spriteBatch); + //debug + DrawDebugRectangle(spriteBatch, graphicsComponent.ObjectDrawRectangle); + + 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.1f); + if (color.Value.A == 255) color = new Color(color.Value, 0.25f); + spriteBatch.Draw(debugTexture, + new Rectangle((_rectangle.X - GraphicsComponent.CameraPosition.X) * GraphicsComponent.scaling, + (_rectangle.Y - GraphicsComponent.CameraPosition.Y) * GraphicsComponent.scaling, + _rectangle.Width * GraphicsComponent.scaling, + _rectangle.Height * GraphicsComponent.scaling), color.Value); + + //TODO: debugTexture + } + #endregion } \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs new file mode 100644 index 0000000..e55976d --- /dev/null +++ b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs @@ -0,0 +1,44 @@ +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.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 StaticGraphicsComponent(); + + /// + /// Создается простой объект на карте - no animations, только где, насколько крупно рисовать, по какой сорс ректанглу рисовать и из какой текстуры + /// + /// + /// + /// + /// + public MapObject(Vector2 position, Vector2 size, Rectangle sourceRectangle, string textureName) : base(position) + { + (graphicsComponent as StaticGraphicsComponent)._textureName = textureName; + (graphicsComponent as StaticGraphicsComponent).BuildComponent(textureName); + (graphicsComponent as StaticGraphicsComponent).ObjectDrawRectangle = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y); + (graphicsComponent as StaticGraphicsComponent).LoadContent(); + this.sourceRectangle = sourceRectangle; + + } + public override void Draw(SpriteBatch spriteBatch) + { + graphicsComponent.Draw(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..392cf6f --- /dev/null +++ b/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs @@ -0,0 +1,29 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Diagnostics; +using System.Security.Cryptography.X509Certificates; +using ZoFo.GameCore.GameManagers.CollisionManager; + +namespace ZoFo.GameCore.GameObjects.MapObjects.StopObjects; + +public class StopObject : MapObject +{ + public CollisionComponent[] collisionComponents; + + + public StopObject(Vector2 position, Vector2 size, Rectangle sourceRectangle, string textureName, Rectangle[] collisions) : base(position, size, sourceRectangle, textureName) + { + + collisionComponents = new CollisionComponent[collisions.Length]; + for (int i = 0; i < collisionComponents.Length; i++) + { + collisionComponents[i] = new CollisionComponent(this, true, new Rectangle(0,0, (int)size.X, (int)size.Y)/*collisions[i]*/); + } + } + public override void Draw(SpriteBatch spriteBatch) + { + base.Draw(spriteBatch); + DrawDebugRectangle(spriteBatch, new Rectangle((int)position.X, (int)position.Y, collisionComponents[0].stopRectangle.Width, collisionComponents[0].stopRectangle.Height)); + } +} diff --git a/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs b/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs new file mode 100644 index 0000000..bc2d8ff --- /dev/null +++ b/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs @@ -0,0 +1,250 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GUI; + +namespace ZoFo.GameCore.Graphics +{ + + public class AnimatedGraphicsComponent : GraphicsComponent + { + + public event Action actionOfAnimationEnd; + public List animations; + private List textures; + private List texturesNames; + private AnimationContainer currentAnimation; + static public int Camera_XW=800; + static public int Camera_YH = 400; + static public Vector2 CameraSize = new Vector2(1800, 960); + public int parentId; + public AnimationContainer CurrentAnimation + { + get + { + return currentAnimation; + } + } + public string LastAnimation { get; set; } + public string GetCurrentAnimation + { + get { return currentAnimation.Id; } + } + + private AnimationContainer neitralAnimation; + //private SpriteBatch _spriteBatch; + + private int currentFrame; + public int CurrentFrame + { + get + { + return currentFrame; + } + } + + // Needed to ckeck whether the frame has changed since last update call + private int lastUpdateCallFrame; + public int LastUpdateCallFrame + { + get + { + return lastUpdateCallFrame; + } + } + public int CurrentFrameInterval { get => interval; } + public void Force_Set_CurrentFrameInterval(int newFrameInterval) { } + private int interval; + private int lastInterval; + private Rectangle sourceRectangle; + public AnimatedGraphicsComponent(List animationsId, string neitralAnimationId) + { + //this._spriteBatch = _spriteBatch; + currentFrame = 0; + lastInterval = 1; + LoadAnimations(animationsId, neitralAnimationId); + currentAnimation = neitralAnimation; + SetInterval(); + buildSourceRectangle(); + } + + public AnimatedGraphicsComponent(string textureName) + { + animations = new List(); + textures = new List(); + var texture = AppManager.Instance.Content.Load(textureName); + textures.Add(texture); + AnimationContainer animationContainer = new AnimationContainer(); + animationContainer.StartSpriteRectangle = new Rectangle(0, 0, texture.Width, texture.Height); + animationContainer.TextureFrameInterval = 0; + animationContainer.TextureName = texture.Name; + animationContainer.IsCycle = true; + animationContainer.FramesCount = 1; + animationContainer.FrameTime = new List>() { new Tuple(0, 10) }; + animationContainer.Id = texture.Name; + currentAnimation = animationContainer; + neitralAnimation = animationContainer; + animations.Add(animationContainer); + } + + private void LoadAnimations(List animationsId, string neitralAnimationId) + { + animations = new List(); + foreach (var id in animationsId) + { + animations.Add(AppManager.Instance.animationBuilder.Animations.Find(x => x.Id == id)); + if (id == neitralAnimationId) + { + neitralAnimation = animations.Last(); + } + } + } + + public override void LoadContent() + { + textures = new List(); + texturesNames = new List(); + + foreach (var animation in animations) + { + if (!texturesNames.Contains(animation.TextureName)) + { + texturesNames.Add(animation.TextureName); + textures.Add(AppManager.Instance.Content.Load(animation.TextureName)); + } + } + } + + public void StartAnimation(string startedanimationId) + { + currentFrame = 0; + currentAnimation = animations.Find(x => x.Id == startedanimationId); + + buildSourceRectangle(); + SetInterval(); + } + + public void StopAnimation() + { + currentFrame = 0; + interval = 0; + currentAnimation = neitralAnimation; + buildSourceRectangle(); + SetInterval(); + } + + public override void Update() + { + lastUpdateCallFrame = currentFrame; + if (interval == 0) + { + currentFrame++; + if (currentAnimation.FramesCount <= currentFrame) + { + if (!currentAnimation.IsCycle) + { + if (actionOfAnimationEnd != null) + { + actionOfAnimationEnd(currentAnimation.Id); + } + currentAnimation = neitralAnimation; + + } + + currentFrame = 0; + + } + + buildSourceRectangle(); + SetInterval(); + } + + interval--; + + } + + public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch) + { + Texture2D texture = textures[texturesNames.FindIndex(x => x == currentAnimation.TextureName)]; + float scale; + if (currentAnimation.Offset.X != 0) + { + destinationRectangle.X -= (int)currentAnimation.Offset.X; + scale = destinationRectangle.Height / sourceRectangle.Height; + destinationRectangle.Width = (int)(sourceRectangle.Width * scale); + + } + else if (currentAnimation.Offset.Y != 0) + { + destinationRectangle.Y -= (int)currentAnimation.Offset.Y; + scale = destinationRectangle.Width / sourceRectangle.Width; + destinationRectangle.Height = (int)(sourceRectangle.Height * scale); + } + + destinationRectangle.X -= CameraPosition.X; + destinationRectangle.Y -= CameraPosition.Y; + + destinationRectangle = Scaling(destinationRectangle); + + _spriteBatch.Draw(texture, destinationRectangle, sourceRectangle, Color.White, Rotation, + Vector2.Zero, Flip, 0); + } + public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle) + { + Texture2D texture = textures[texturesNames.FindIndex(x => x == currentAnimation.TextureName)]; + float scale; + if (currentAnimation.Offset.X != 0) + { + destinationRectangle.X -= (int)currentAnimation.Offset.X; + scale = destinationRectangle.Height / sourceRectangle.Height; + destinationRectangle.Width = (int)(sourceRectangle.Width * scale); + + } + else if (currentAnimation.Offset.Y != 0) + { + destinationRectangle.Y -= (int)currentAnimation.Offset.Y; + scale = destinationRectangle.Width / sourceRectangle.Width; + destinationRectangle.Height = (int)(sourceRectangle.Height * scale); + } + + destinationRectangle.X -= CameraPosition.X; + destinationRectangle.Y -= CameraPosition.Y; + + destinationRectangle = Scaling(destinationRectangle); + _spriteBatch.Draw(texture, + destinationRectangle, sourceRectangle, Color.White, 0, + Vector2.Zero, Flip, 0); + } + private void buildSourceRectangle() + { + sourceRectangle = new Rectangle(); + if (currentAnimation == null) + { + currentAnimation = neitralAnimation; + } + sourceRectangle.X = currentAnimation.StartSpriteRectangle.X + currentFrame * + (currentAnimation.StartSpriteRectangle.Width + currentAnimation.TextureFrameInterval); + sourceRectangle.Y = currentAnimation.StartSpriteRectangle.Y; + sourceRectangle.Height = currentAnimation.StartSpriteRectangle.Height; + sourceRectangle.Width = currentAnimation.StartSpriteRectangle.Width; + } + + private void SetInterval() + { + Tuple i = currentAnimation.FrameTime.Find(x => x.Item1 == currentFrame); + if (i != null) + { + interval = i.Item2; + lastInterval = interval; + } + else + { + interval = lastInterval; + } + } + + } +} diff --git a/ZoFo/GameCore/Graphics/AnimationBuilder.cs b/ZoFo/GameCore/Graphics/AnimationBuilder.cs new file mode 100644 index 0000000..50f9162 --- /dev/null +++ b/ZoFo/GameCore/Graphics/AnimationBuilder.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using Newtonsoft.Json; + +namespace ZoFo.GameCore.Graphics +{ + public class AnimationBuilder + { + public List Animations { get; private set; } + public void LoadAnimations() + { + Animations = new List(); + string[] animationFilesNames = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "Content", "Textures", "Animations")); + + StreamReader reader; + foreach (var fileName in animationFilesNames) + { + try + { + if (!fileName.EndsWith(".animation")) continue; + reader = new StreamReader(fileName); + string json = reader.ReadToEnd(); + AnimationContainer animation = JsonConvert.DeserializeObject(json); + Animations.Add(animation); + reader.Close(); + } + catch + { + + + } + } + + } + } +} diff --git a/ZoFo/GameCore/Graphics/AnimationContainer.cs b/ZoFo/GameCore/Graphics/AnimationContainer.cs new file mode 100644 index 0000000..2ffc974 --- /dev/null +++ b/ZoFo/GameCore/Graphics/AnimationContainer.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using Newtonsoft.Json; + +namespace ZoFo.GameCore.Graphics +{ + [Serializable] + public class AnimationContainer + { + [JsonProperty("id")] + public string Id { get; set; } + [JsonProperty("textureName")] + public string TextureName { get; set; } + [JsonProperty("startSpriteRectangle")] + public Rectangle StartSpriteRectangle { get; set; } + [JsonProperty("frameSecond")] + public List> FrameTime { get; set; } + [JsonProperty("textureFrameInterval")] + public int TextureFrameInterval { get; set; } + [JsonProperty("framesCount")] + public int FramesCount { get; set; } + [JsonProperty("isCycle")] + public bool IsCycle { get; set; } + [JsonProperty("offset")] + public Vector2 Offset { get; set; } + + + + } +} diff --git a/ZoFo/GameCore/Graphics/GraphicsComponent.cs b/ZoFo/GameCore/Graphics/GraphicsComponent.cs new file mode 100644 index 0000000..3fa8fa4 --- /dev/null +++ b/ZoFo/GameCore/Graphics/GraphicsComponent.cs @@ -0,0 +1,59 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace ZoFo.GameCore.Graphics; + +public abstract class GraphicsComponent +{ + public Rectangle ObjectDrawRectangle; + public static int scaling = 1; + public string mainTextureName;//TODO костыль - пофиксить + + public SpriteEffects Flip = SpriteEffects.None; + public float Rotation; + + public abstract void LoadContent(); + public abstract void Update(); + public abstract void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch); + public abstract void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle); + + protected Rectangle Scaling(Rectangle destinationRectangle) + { + destinationRectangle.X *= scaling; + destinationRectangle.Y *= scaling; + destinationRectangle.Width *= scaling; + destinationRectangle.Height *= scaling; + return destinationRectangle; + } + + public static void SetCameraPosition(Vector2 playerPosition) + { + CameraPosition = (playerPosition).ToPoint(); + CameraPosition.X -= 200; + CameraPosition.Y -= 120; + + // TODO + /* + if (CameraPosition.X > AppManager.Instance.GameManager.CameraBorder.Y - 460) + { + CameraPosition.X = (int)AppManager.Instance.GameManager.CameraBorder.Y - 460; + } + + if (CameraPosition.Y < AppManager.Instance.GameManager.CameraBorder.Z) + { + CameraPosition.Y = (int)AppManager.Instance.GameManager.CameraBorder.Z; + } + if (CameraPosition.X < AppManager.Instance.GameManager.CameraBorder.X) + { + CameraPosition.X = (int)AppManager.Instance.GameManager.CameraBorder.X; + } + if (CameraPosition.Y > AppManager.Instance.GameManager.CameraBorder.W - 240) + { + CameraPosition.Y = (int)AppManager.Instance.GameManager.CameraBorder.W - 240; + } + + AppManager.Instance.DebugHUD.Set("CameraPosition", $"{CameraPosition.X}, {CameraPosition.Y}"); + */ + } + public static Point CameraPosition = new Point(0, 0); +} \ No newline at end of file diff --git a/ZoFo/GameCore/Graphics/StaticGraphicsComponent.cs b/ZoFo/GameCore/Graphics/StaticGraphicsComponent.cs new file mode 100644 index 0000000..a631c5d --- /dev/null +++ b/ZoFo/GameCore/Graphics/StaticGraphicsComponent.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GUI; + +namespace ZoFo.GameCore.Graphics +{ + public class StaticGraphicsComponent : GraphicsComponent + { + private Texture2D texture; + public string _textureName; + + public StaticGraphicsComponent() + { + LoadContent(); + } + + public StaticGraphicsComponent(string textureName) + { + BuildComponent(textureName); + LoadContent(); + } + + public void BuildComponent(string textureName) + { + _textureName = textureName; + } + + + public override void LoadContent() + { + if (_textureName is null) + { + return; + } + + texture = AppManager.Instance.Content.Load(_textureName); + } + + public override void Update() + { + + } + + public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch) + { + DebugHUD.Instance.Log("draw "); + + destinationRectangle.X -= CameraPosition.X; + destinationRectangle.Y -= CameraPosition.Y; + destinationRectangle = Scaling(destinationRectangle); + _spriteBatch.Draw(texture, destinationRectangle, texture.Bounds, Color.White, Rotation, + Vector2.Zero, Flip, 0); + } + + public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle) + { + // Uncomment to go brrrr + //Rotation = new Random().Next(1, 365); + DebugHUD.Instance.Log("draw "); + + destinationRectangle.X -= CameraPosition.X; + destinationRectangle.Y -= CameraPosition.Y; + + destinationRectangle = Scaling(destinationRectangle); + _spriteBatch.Draw(texture, + destinationRectangle, sourceRectangle, Color.White, Rotation, + Vector2.Zero, Flip, 0); + } + } +} \ No newline at end of file diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 948ee0e..89b1bbb 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -1,22 +1,227 @@ -using System; +using Microsoft.Xna.Framework; +using MonogameLibrary.UI.Elements; +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.CollisionManager; +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.Entities.Interactables.Collectables; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies; +using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player; +using ZoFo.GameCore.GameObjects.MapObjects; +using ZoFo.GameCore.GameObjects.MapObjects.StopObjects; +using ZoFo.GameCore.Graphics; +using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO; 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; + collisionManager = new CollisionManager(); - public void OnDataSend(string data) { } - public void CreateRoom() { } - public void StartGame() { } - public void EndGame() { } + } + #region server logic as App + + #region Net Methods + //TODO Comment pls + public void OnDataSend(string data) + { + List updateDatas = JsonSerializer.Deserialize>(data); + AppManager.Instance.debugHud.Log(data); + for (int i = 0; i < updateDatas.Count; i++) + { + ProcessIUpdateData(updateDatas[i]); + } + } + /// + /// Обработка апдейтсов, которые нам прислал клиент + /// + /// + public void ProcessIUpdateData(UpdateData updateData) + { + + //ТУТ Switch case будет честное слово + switch (updateData.UpdateType) + { + case "UpdateAnimation": + break; + case "UpdateEntityHealth": + break; + case "UpdateGameEnded": + break; + case "UpdateGameObjectCreated": + break; + case "UpdateGameObjectDeleted": + break; + case "UpdateInteraction": + break; + case "UpdateInteractionReady": + break; + case "UpdateLoot": + break; + case "UpdatePlayerParametrs": + break; + case "UpdatePosition": + break; + case "UpdateTileCreated": + break; + + } + } + + public void CloseConnection() + { + networkManager.CloseConnection(); + } + + /// + /// Для красоты) Отдел Серверов + /// добавляет в лист updates новую data + /// + /// + public void AddData(UpdateData data)//добавляет в лист updates новую data + { + networkManager.AddData(data); + } + + /// + /// Создает комнату и запускает ожидание подключений + /// + /// + public void CreateRoom(int players) + { + networkManager.Start(players); + } + + #endregion + + #region Game Methods + public CollisionManager collisionManager; + /// + /// Запуск игры в комнате + /// + public void StartGame() + { + + //TODO начинает рассылку и обмен пакетами игры + //Грузит карту + collisionManager = new CollisionManager(); + gameObjects = new List(); + entities = new List(); + players = new List(); + new MapManager().LoadMap(); + + //AppManager.Instance.server.RegisterGameObject(new EntittyForAnimationTests(new Vector2(0, 0))); + AppManager.Instance.server.RegisterGameObject(new Player(new Vector2(740, 140))); + AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1000, 1000))); + AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(140, 440))); + AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(240, 440))); + } + + /// + /// Добавляет UpdateGameEnded и отключает игроков + /// + public void EndGame() + { + UpdateGameEnded gameEnded = new UpdateGameEnded(); + networkManager.AddData(gameEnded); + networkManager.CloseConnection(); + } + + public List gameObjects; + public List entities; //entity + public List players; + public void Update(GameTime gameTime) + { + if (ticks == 3) //ОБРАБАТЫВАЕТСЯ 20 РАЗ В СЕКУНДУ + { + foreach (var go in gameObjects) + { + go.UpdateLogic(); + } + collisionManager.UpdatePositions(); + 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 = new SerializableRectangle((gameObject as MapObject).sourceRectangle), + Size = new SerializablePoint((gameObject as MapObject).graphicsComponent.ObjectDrawRectangle.Size), + tileSetName = ((gameObject as MapObject).graphicsComponent as StaticGraphicsComponent)._textureName + });//TODO + return; + } + if (gameObject is Entity entity) + { + AddData(new UpdateGameObjectCreated() { GameObjectType = gameObject.GetType().Name, IdEntity = entity.Id, + position = gameObject.position}); + collisionManager.Register(entity.collisionComponent); + } + else + AddData(new UpdateGameObjectCreated() { GameObjectType = gameObject.GetType().Name, + position = gameObject.position + }); + + + if (gameObject is Player) + { + players.Add(gameObject as Player); + } + ////var elems = gameObject.GetType().GetProperties(System.Reflection.BindingFlags.Public); + ////if (elems.Count()>0) TODO + ////{ + //// AppManager.Instance.server.collisionManager.Register((elems.First().GetValue(gameObject) as CollisionComponent)); + ////} + + } + + /// + /// Удаляет игровой объект + /// + /// + public void DeleteObject(GameObject gameObject) + { + gameObjects.Remove(gameObject); + AddData(new UpdateGameObjectDeleted() + { GameObjectType = gameObject.GetType().Name} + ); + } } + + #endregion + + #endregion } diff --git a/ZoFo/GameSettings.txt b/ZoFo/GameSettings.txt new file mode 100644 index 0000000..f5dcd93 --- /dev/null +++ b/ZoFo/GameSettings.txt @@ -0,0 +1 @@ +{"IsFullScreen":false,"MainVolume":1.0,"MusicVolume":1.0,"SoundEffectsVolume":1.0,"Resolution":{"X":1440,"Y":900}} \ No newline at end of file diff --git a/ZoFo/Program.cs b/ZoFo/Program.cs index c1f32ef..deeb5db 100644 --- a/ZoFo/Program.cs +++ b/ZoFo/Program.cs @@ -1,2 +1,2 @@ -using var game = new ZoFo.Game1(); +using var game = new ZoFo.GameCore.GameManagers.AppManager(); game.Run(); \ No newline at end of file diff --git a/ZoFo/ZoFo.csproj b/ZoFo/ZoFo.csproj index ef2682f..1fd87e3 100644 --- a/ZoFo/ZoFo.csproj +++ b/ZoFo/ZoFo.csproj @@ -1,4 +1,4 @@ - + WinExe net8.0 @@ -11,22 +11,36 @@ Icon.ico - - + + + + + + - - + + - - + + + + + + + + + + + + - - + + \ No newline at end of file diff --git a/architecture.drawio.png b/architecture.drawio.png index c83ffee..4cb9f0f 100644 Binary files a/architecture.drawio.png and b/architecture.drawio.png differ diff --git a/macos-fix-mgcb.sh b/macos-fix-mgcb.sh new file mode 100755 index 0000000..a2ec83b --- /dev/null +++ b/macos-fix-mgcb.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +brew install freetype +brew install freeimage +mgcb_ver=$(ls ~/.nuget/packages/dotnet-mgcb/) +mgcb_path=~/.nuget/packages/dotnet-mgcb/$mgcb_ver/tools/net6.0/any/ + +rm $mgcb_path/libfreetype6.dylib $mgcb_path/libFreeImage.dylib + +ln -s /opt/homebrew/lib/libfreetype.dylib $mgcb_path/libfreetype6.dylib +ln -s /opt/homebrew/lib/libfreeimage.dylib $mgcb_path/libFreeImage.dylib