diff --git a/AnimationsFileCreator/AnimationsFileCreator.csproj b/AnimationsFileCreator/AnimationsFileCreator.csproj
new file mode 100644
index 0000000..b8c3b86
--- /dev/null
+++ b/AnimationsFileCreator/AnimationsFileCreator.csproj
@@ -0,0 +1,17 @@
+
+
+
+ Exe
+ net8.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AnimationsFileCreator/Program.cs b/AnimationsFileCreator/Program.cs
new file mode 100644
index 0000000..68768cf
--- /dev/null
+++ b/AnimationsFileCreator/Program.cs
@@ -0,0 +1,72 @@
+using DangerousD.GameCore.Graphics;
+using Microsoft.Xna.Framework;
+using Newtonsoft.Json;
+using System;
+using NativeFileDialogSharp;
+using System.IO;
+using System.Linq;
+using System.Reflection.Metadata;
+using Zofo.GameCore.ZoFo_grafics;
+
+namespace AnimationsFileCreator
+{
+ class Program
+ {
+ [STAThread]
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Добро пожаловать в костыльную программу по созданию файлов анимации для игры DungerousD");
+ Console.Write("Введите название текстуры (нажмите enter, чтобы выбрать файл во всплывающем окошке): ");
+ string textureName = Console.ReadLine();
+ if (textureName == "")
+ {
+
+ DialogResult result = Dialog.FileOpen();
+ textureName = result.Path.Split('\\').Last();
+ textureName = textureName.Split('.')[0];
+ }
+ Console.WriteLine("Введите количество кадров анимации: ");
+ int framesCount = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите длительность кадра в анимации: ");
+ int interval = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию X ректенгла анимации: ");
+ Rectangle rectangle = new Rectangle();
+ rectangle.X = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию Y ректенгла анимации: ");
+ rectangle.Y = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию Width ректенгла анимации: ");
+ rectangle.Width = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите начальную позицию Height ректенгла анимации: ");
+ rectangle.Height = int.Parse(Console.ReadLine());
+ Console.WriteLine("Введите название для этого файла - id анимации");
+ string id = Console.ReadLine();
+ Console.WriteLine("Введите 1 если анимация зациклена, и 0 если нет");
+ AnimationContainer container = new AnimationContainer();
+
+ int a = int.Parse(Console.ReadLine());
+ if (a==1)
+ {
+ container.IsCycle = true;
+ }
+ else
+ {
+ container.IsCycle = false;
+ }
+ Console.WriteLine("Введите отклонение анимации от стандартной (сначала X, потом enter, потом Y): ");
+ int otklx = int.Parse(Console.ReadLine());
+ int otkly = int.Parse(Console.ReadLine());
+ container.Offset =new Vector2(otklx,otkly);
+ container.FramesCount = framesCount;
+ container.FrameTime = new System.Collections.Generic.List>();
+ container.FrameTime.Add(new Tuple(0, interval));
+ container.StartSpriteRectangle = rectangle;
+ container.TextureName = textureName;
+ container.TextureFrameInterval = 1;
+ container.Id = id;
+ string json = JsonConvert.SerializeObject(container);
+ StreamWriter writer = new StreamWriter("../../../../ZoFo/Content/animations/"+id);
+ writer.WriteLine(json);
+ writer.Close();
+ }
+ }
+}
diff --git a/MonogameLibrary/UI/Elements/Slider.cs b/MonogameLibrary/UI/Elements/Slider.cs
index f614f53..fd884d8 100644
--- a/MonogameLibrary/UI/Elements/Slider.cs
+++ b/MonogameLibrary/UI/Elements/Slider.cs
@@ -21,7 +21,7 @@ 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 +56,7 @@ namespace MonogameLibrary.UI.Elements
public override void LoadTexture(ContentManager content)
{
- texture2 = content.Load("Textures\\GUI\\checkboxs_off");
+ texture2 = content.Load("Textures\\GUI\\switch");
base.LoadTexture(content);
}
@@ -73,11 +73,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/ZoFo.sln b/ZoFo.sln
index 81a0c18..3ea9985 100644
--- a/ZoFo.sln
+++ b/ZoFo.sln
@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ZoFo", "ZoFo\ZoFo.csproj",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MonogameLibrary", "MonogameLibrary\MonogameLibrary.csproj", "{40880E68-4B3A-417B-A39B-95DE46AA2E7E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AnimationsFileCreator", "AnimationsFileCreator\AnimationsFileCreator.csproj", "{7B143D5C-5198-4ADE-9291-ECC924B78633}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
{40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40880E68-4B3A-417B-A39B-95DE46AA2E7E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7B143D5C-5198-4ADE-9291-ECC924B78633}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/ZoFo/Content/Content.mgcb b/ZoFo/Content/Content.mgcb
index e1730da..a608235 100644
--- a/ZoFo/Content/Content.mgcb
+++ b/ZoFo/Content/Content.mgcb
@@ -27,6 +27,13 @@
/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 Textures/GUI/checkboxs_off-on.png
/importer:TextureImporter
/processor:TextureProcessor
@@ -75,3 +82,39 @@
/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_backgrownd.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:Textures/GUI/Switch_backgrownd.png
+
+#begin Textures/GUI/switch.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:Textures/GUI/switch.png
+
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/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/checkboxs_off-on.png b/ZoFo/Content/Textures/GUI/checkboxs_off-on.png
index 0537fc1..682b82a 100644
Binary files a/ZoFo/Content/Textures/GUI/checkboxs_off-on.png 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
index f258fcb..f6533ba 100644
Binary files a/ZoFo/Content/Textures/GUI/checkboxs_off.png 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
index 9f7a350..693b0cc 100644
Binary files a/ZoFo/Content/Textures/GUI/checkboxs_on.png and b/ZoFo/Content/Textures/GUI/checkboxs_on.png 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/GameCore/Client.cs b/ZoFo/GameCore/Client.cs
index 5ee0546..49b1813 100644
--- a/ZoFo/GameCore/Client.cs
+++ b/ZoFo/GameCore/Client.cs
@@ -27,12 +27,14 @@ namespace ZoFo.GameCore
public void GameEndedUnexpectedly(){ }
- public void JoinRoom(){ }
-
- public void JoinYourself(){ }
+ public void JoinRoom(string ip)
+ {
+ networkManager.JoinRoom(ip);
+ }
+ public void JoinYourself(){ networkManager.JoinYourself(); }
internal void Update(GameTime gameTime)
- {
+ {
}
internal void Draw(SpriteBatch spriteBatch)
diff --git a/ZoFo/GameCore/GUI/AbstractGUI.cs b/ZoFo/GameCore/GUI/AbstractGUI.cs
index 2c2d7f6..bdc4d60 100644
--- a/ZoFo/GameCore/GUI/AbstractGUI.cs
+++ b/ZoFo/GameCore/GUI/AbstractGUI.cs
@@ -21,6 +21,8 @@ public abstract class AbstractGUI
protected DrawableUIElement SelectedElement;
private bool isStartedPrint = false;
private bool isPressed = false;
+ private Texture2D mouse;
+ private MouseState mouseState;
public AbstractGUI()
{
@@ -37,20 +39,20 @@ public abstract class AbstractGUI
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);
- }
-
- public virtual void ResolutioChenges()
- {
-
+ spriteBatch.Begin();
+ spriteBatch.Draw(mouse, new Rectangle(mouseState.Position.X, mouseState.Position.Y, 20, 40), Color.Red);
+ spriteBatch.End();
}
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GUI/MainMenuGUI.cs b/ZoFo/GameCore/GUI/MainMenuGUI.cs
index 45c3e65..4683ddd 100644
--- a/ZoFo/GameCore/GUI/MainMenuGUI.cs
+++ b/ZoFo/GameCore/GUI/MainMenuGUI.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
+using System.Threading;
using System.Xml;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
@@ -20,15 +21,15 @@ public class MainMenuGUI : AbstractGUI
{
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\\MenuBackground" };
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.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font"});
-
-
- Button playButton = new Button(Manager)
+
+ 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.White, 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",
@@ -37,12 +38,12 @@ public class MainMenuGUI : AbstractGUI
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
- playButton.LeftButtonPressed += () =>
- {
-
+ playButton.LeftButtonPressed += () =>
+ {
+ AppManager.Instance.SetGUI(new SelectModeMenu());
};
Elements.Add(playButton);
- Button optionButton = new Button(Manager)
+ Button optionButton = new Button(Manager)
{
rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + (height / 20 + height / 40) * 2, (int)(width / 5), (int)(height / 20)),
text = "Options",
@@ -51,12 +52,12 @@ public class MainMenuGUI : AbstractGUI
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
- optionButton.LeftButtonPressed += () =>
+ optionButton.LeftButtonPressed += () =>
{
AppManager.Instance.SetGUI(new OptionsGUI());
};
Elements.Add(optionButton);
- Button exitButton = new Button(Manager)
+ Button exitButton = new Button(Manager)
{
rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + (height / 20 + height / 40) * 3, (int)(width / 5), (int)(height / 20)),
text = "Exit",
@@ -65,15 +66,14 @@ public class MainMenuGUI : AbstractGUI
mainColor = Color.Gray,
fontName = "Fonts\\Font"
};
- exitButton.LeftButtonPressed += () =>
+ exitButton.LeftButtonPressed += () =>
{
AppManager.Instance.Exit();
};
Elements.Add(exitButton);
-
-
- }
+
+ }
public override void Update(GameTime gameTime)
{
base.Update(gameTime);
diff --git a/ZoFo/GameCore/GUI/OptionsGUI.cs b/ZoFo/GameCore/GUI/OptionsGUI.cs
index 11f8c5e..a60611b 100644
--- a/ZoFo/GameCore/GUI/OptionsGUI.cs
+++ b/ZoFo/GameCore/GUI/OptionsGUI.cs
@@ -30,11 +30,11 @@ public class OptionsGUI : AbstractGUI
Label label_OverallVolume = new Label(Manager)
- { fontName = "Fonts\\Font", scale = 0.2f, text = "All Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3, 50, 50), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
+ { fontName = "Fonts\\Font", scale = 0.2f, text = "All Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_OverallVolume);
var slider_OverallVolume = new Slider(Manager)
- { rectangle = new Rectangle(width / 2, height / 3, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\checkbox_on", MinValue = 0, MaxValue = 1 };
+ { rectangle = new Rectangle(width / 2, height / 3, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\Switch_backgrownd", MinValue = 0, MaxValue = 1 };
slider_OverallVolume.SliderChanged += (newVal) =>
{
@@ -42,11 +42,11 @@ public class OptionsGUI : AbstractGUI
Elements.Add(slider_OverallVolume);
Label label_MusicVolume = new Label(Manager)
- { fontName = "Fonts\\Font", scale = 0.2f, text = "Music Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 1, 50, 50), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
+ { fontName = "Fonts\\Font", scale = 0.2f, text = "Music Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 1, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_MusicVolume);
var slider_MusicVolume = new Slider(Manager)
- { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 1, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\checkboxs_on", MinValue = 0, MaxValue = 1 };
+ { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 1, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\Switch_backgrownd", MinValue = 0, MaxValue = 1 };
slider_MusicVolume.SliderChanged += (newVal) =>
{
@@ -55,11 +55,11 @@ public class OptionsGUI : AbstractGUI
Label label_EffectsVolume = new Label(Manager)
- { fontName = "Fonts\\Font", scale = 0.2f, text = "Effects Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 2, 50, 50), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
+ { fontName = "Fonts\\Font", scale = 0.2f, text = "Effects Volume", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 2, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_EffectsVolume);
var slider_EffectsVolume = new Slider(Manager)
- { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 2, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\checkboxs_on", MinValue = 0, MaxValue = 1 };
+ { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 2, width / 10, height / 20), indentation = 4, textureName = "Textures\\GUI\\Switch_backgrownd", MinValue = 0, MaxValue = 1 };
slider_EffectsVolume.SliderChanged += (newVal) =>
{
@@ -67,7 +67,7 @@ public class OptionsGUI : AbstractGUI
Elements.Add(slider_EffectsVolume);
Label lblSwitchMode = new Label(Manager)
- { fontName = "Fonts\\Font", scale = 0.2f, text = "Left/Right Mode", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 3, 50, 50), mainColor = Color.Transparent};
+ { fontName = "Fonts\\Font", scale = 0.2f, text = "Resolution set", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 3, width / 40, height / 20), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(lblSwitchMode);
//var button_left_right_mode = new CheckBox(Manager) { rectangle = new Rectangle(rightBorder - checkboxlength, lblSwitchMode.rectangle.Y - 12, checkboxlength, checkboxlength) };
@@ -76,10 +76,10 @@ public class OptionsGUI : AbstractGUI
Label label_IsFullScreen = new Label(Manager)
- { fontName = "Fonts\\Font", scale = 0.2f, text = "Full Screen", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 4, 50, 50), mainColor = Color.Transparent};
+ { fontName = "Fonts\\Font", scale = 0.2f, text = "Full Screen", fontColor = Color.White, rectangle = new Rectangle(width / 3, height / 3 + (height / 20 + height / 40) * 4, width / 40, width / 40), mainColor = Color.Transparent, textAligment = MonogameLibrary.UI.Enums.TextAligment.Left };
Elements.Add(label_IsFullScreen);
- var button_FullScreen = new CheckBox(Manager) { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 4, width / 30, width / 30) };
+ var button_FullScreen = new CheckBox(Manager) { rectangle = new Rectangle(width / 2, height / 3 + (height / 20 + height / 40) * 4, width / 40, width / 40) };
button_FullScreen.Checked += (newCheckState) =>
{
@@ -88,11 +88,11 @@ public class OptionsGUI : AbstractGUI
Button bTExit = new Button(Manager)
- { fontName = "Fonts\\Font", scale = 0.2f, text = "<-", rectangle = new Rectangle(width / 30, height / 30, 40, 40), textureName = "Textures\\GUI\\checkboxs_off" };
+ { fontName = "Fonts\\Font3", scale = 0.4f, text = "<-", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width / 30, height / 30, width / 40, width / 40), textureName = "Textures\\GUI\\checkboxs_off"};
Elements.Add(bTExit);
bTExit.LeftButtonPressed += () =>
{
-
+ AppManager.Instance.SetGUI(new MainMenuGUI());
};
}
diff --git a/ZoFo/GameCore/GUI/SelectModeMenu.cs b/ZoFo/GameCore/GUI/SelectModeMenu.cs
index b08e782..5f3262e 100644
--- a/ZoFo/GameCore/GUI/SelectModeMenu.cs
+++ b/ZoFo/GameCore/GUI/SelectModeMenu.cs
@@ -9,19 +9,60 @@ using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using MonogameLibrary.UI.Base;
using MonogameLibrary.UI.Elements;
+using ZoFo.GameCore.GameManagers;
namespace ZoFo.GameCore.GUI;
public class SelectModeMenu : AbstractGUI
{
+ private DrawableUIElement menuBackground;
protected override void CreateUI()
{
- // int width = AppManager.Instance.inGameHUDHelperResolution.X;
- // int height = AppManager.Instance.inGameHUDHelperResolution.Y;
+ int width = AppManager.Instance.CurentScreenResolution.X;
+ int height = AppManager.Instance.CurentScreenResolution.Y;
+
+ menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures\\GUI\\MenuBackground" };
+ Elements.Add(menuBackground);
+ menuBackground.LoadTexture(AppManager.Instance.Content);
+
+ Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 6, (int)(width / 4), (int)(height / 20)), text = "Select mode", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font"});
+
+ Button playButton = new Button(Manager)
+ {
+ rectangle = new Rectangle(width / 4 - (width / 7) / 2, height / 2, (int)(width / 7), (int)(height / 20)),
+ text = "singleplayer",
+ scale = 0.3f,
+ fontColor = Color.White,
+ mainColor = Color.Gray,
+ fontName = "Fonts\\Font"
+ };
+ playButton.LeftButtonPressed += () =>
+ {
+ // single
+
+ // ваш код здесь
+ };
+ Elements.Add(playButton);
+ Button optionButton = new Button(Manager)
+ {
+ rectangle = new Rectangle(width / 2 + width / 4 - (width / 7) / 2, height / 2, (int)(width / 7), (int)(height / 20)),
+ text = "multiplayer",
+ scale = 0.3f,
+ fontColor = Color.White,
+ mainColor = Color.Gray,
+ fontName = "Fonts\\Font"
+ };
+ optionButton.LeftButtonPressed += () =>
+ {
+ // multi
+
+ // ваш код здесь
+ };
+ Elements.Add(optionButton);
}
public override void Update(GameTime gameTime)
{
-
+ base.Update(gameTime);
}
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameManagers/AppManager.cs b/ZoFo/GameCore/GameManagers/AppManager.cs
index 8d3fe80..c2c8756 100644
--- a/ZoFo/GameCore/GameManagers/AppManager.cs
+++ b/ZoFo/GameCore/GameManagers/AppManager.cs
@@ -20,9 +20,9 @@ namespace ZoFo.GameCore.GameManagers
{
private GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch;
-
-
-
+
+
+
public static AppManager Instance { get; private set; }
public GameState gamestate;
public AbstractGUI currentGUI;
@@ -31,13 +31,13 @@ namespace ZoFo.GameCore.GameManagers
public Client client;
public Server server;
-
+
#region Managers
-
+
public InputManager InputManager;
public ItemManager.ItemManager ItemManager;
- public AnimationBuilder animationBuilder{get;set; }
+ public AnimationBuilder animationBuilder { get; set; }
#endregion
@@ -45,27 +45,27 @@ namespace ZoFo.GameCore.GameManagers
{
_graphics = new GraphicsDeviceManager(this);
SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y);
- FulscrreenSwitch();
-
-
+ // FulscrreenSwitch();
+
+
Content.RootDirectory = "Content";
IsMouseVisible = true;
Instance = this;
InputManager = new InputManager();
-
-
+
+
currentGUI = new MainMenuGUI();
debugHud = new DebugHUD();
+ IsMouseVisible = false;
}
protected override void Initialize()
{
currentGUI.Initialize();
- debugHud.Initialize();
-
+ debugHud.Initialize();
base.Initialize();
@@ -86,9 +86,9 @@ namespace ZoFo.GameCore.GameManagers
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed ||
Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
-
+
debugHud.Set("key", "value");
-
+
InputManager.Update();
currentGUI.Update(gameTime);
switch (gamestate)
@@ -113,14 +113,13 @@ namespace ZoFo.GameCore.GameManagers
{
GraphicsDevice.Clear(Color.CornflowerBlue);
-
currentGUI.Draw(_spriteBatch);
debugHud.Draw(_spriteBatch);
switch (gamestate)
{
case GameState.ClientPlaying:
case GameState.HostPlaying:
- client.Draw(_spriteBatch);
+ client.Draw(_spriteBatch);
break;
case GameState.NotPlaying:
default:
@@ -135,7 +134,7 @@ namespace ZoFo.GameCore.GameManagers
}
public void SetGUI(AbstractGUI gui)
{
- currentGUI = gui;
+ currentGUI = gui;
currentGUI.Initialize();
currentGUI.LoadContent();
@@ -157,5 +156,8 @@ namespace ZoFo.GameCore.GameManagers
{
_graphics.IsFullScreen = !_graphics.IsFullScreen;
}
+
+ public void SetServer(Server server) { this.server = server; }
+ public void SetClient(Client client) { this.client = client; }
}
}
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs
index ea57f60..5e75de6 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs
@@ -5,6 +5,7 @@ using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
using System.Text;
+using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
@@ -20,6 +21,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
List updates = new List();
public delegate void OnDataSent(string Data);
public event OnDataSent GetDataSent; // event
+
+ public ClientNetworkManager()
+ {
+ Init();
+ }
+
public void Init() //create endPoint, socket
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@@ -27,11 +34,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void SendData()
{
- while(socket.Connected)
- {
- byte[] bytes = Encoding.UTF8.GetBytes(updates.ToString());
+ byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(updates)); //нужно сериализовать
socket.Send(bytes);
- }
+ }
+
+ public void AddData(IUpdateData UpdateData)
+ {
+ updates.Add(UpdateData);
}
public void StopConnection()
@@ -47,24 +56,21 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
///
public void JoinRoom(string ip) // multyplayer
{
+
endPoint = new IPEndPoint(IPAddress.Parse(ip), port);
-
socket.Connect(endPoint);
-
SendData();
Thread listen = new Thread(StartListening);
listen.Start();
}
///
- /// создается
+ /// создается одиночная комната к которой ты подключаешься
///
public void JoinYourself() // single player
{
endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);
-
socket.Connect(endPoint);
-
SendData();
Thread listen = new Thread(StartListening);
listen.Start();
diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs
index 2a22c8c..c092973 100644
--- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs
+++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs
@@ -16,7 +16,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{
public class ServerNetworkManager
{
- private IPAddress ip = IPAddress.Any;
+ private IPAddress ip =IPAddress.Parse("127.0.0.1"); //IPAddress.Any
private int port = 7632;
private IPEndPoint endPoint;
private Socket socket;
@@ -25,14 +25,23 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public delegate void OnDataSend(string data);
public event OnDataSend GetDataSend; // event
Dictionary managerThread;
+ Thread serverTheread;
+
+ public ServerNetworkManager() { Init(); }
public void Init() //create Socket
{
endPoint = new IPEndPoint(ip, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
managerThread = new Dictionary();
+ clients = new List();
+ updates = new List();
+ managerThread = new Dictionary();
}
- public void SendData() //отправляет клиенту Data
+ ///
+ /// отправляет клиенту Data
+ ///
+ public void SendData()
{
string data = JsonSerializer.Serialize(updates);
var databytes = Encoding.UTF8.GetBytes(data);
@@ -41,10 +50,14 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
item.SendAsync(databytes);
}
}
- public void AddData(IUpdateData data)//добавляет в лист updates новую data
+ ///
+ /// добавляет в лист updates новую data
+ ///
+ ///
+ public void AddData(IUpdateData data)
{
updates.Add(data);
- }
+ }
public void CloseConnection() //По сути коне игры и отключение игроков
{
foreach (var item in clients)
@@ -66,6 +79,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients.Clear();
}
+ public void Start(object players)
+ {
+ serverTheread = new Thread(StartWaitingForPlayers);
+ serverTheread.Start(players);
+ }
+
//Потоки Клиентов
public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться
{
diff --git a/ZoFo/GameCore/GameManagers/SettingsManager.cs b/ZoFo/GameCore/GameManagers/SettingsManager.cs
new file mode 100644
index 0000000..25dd40d
--- /dev/null
+++ b/ZoFo/GameCore/GameManagers/SettingsManager.cs
@@ -0,0 +1,93 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using Microsoft.Xna;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.Xna.Framework;
+using Newtonsoft.Json.Serialization;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace ZoFo.GameCore.GameManagers
+{
+ public class SettingsManager //нужно что-то менять с разрешением
+ {
+ private SettingsContainer settingsContainer = new SettingsContainer();
+ public bool IsFullScreen { get => settingsContainer.IsFullScreen; }
+ public float MainVolume { get => settingsContainer.MainVolume; }
+ public float MusicVolume { get => settingsContainer.MusicVolume; }
+ public float SoundEffectsVolume { get => settingsContainer.SoundEffectsVolume; }
+ public Point Resolution { get => settingsContainer.Resolution; }
+ public void SetResolution(Point resolution)
+ {
+ settingsContainer.Resolution = resolution;
+ //AppManager.Instance.resolution = resolution;
+ }
+ public void SetMainVolume(float volume)
+ {
+ settingsContainer.MainVolume = volume;
+ //AppManager.Instance.SoundManager.Update();
+ SaveSettings();
+ }
+ public void SetMusicVolume(float volume)
+ {
+ settingsContainer.MusicVolume = volume;
+ SaveSettings();
+
+ }
+ public void SetSoundEffectsVolume(float volume)
+ {
+ settingsContainer.SoundEffectsVolume = volume;
+ SaveSettings();
+
+ }
+ public void SetIsFullScreen(bool isFullScreen)
+ {
+ settingsContainer.IsFullScreen = isFullScreen;
+ //AppManager.Instance.SetIsFullScreen(isFullScreen);
+ SaveSettings();
+ }
+ public void LoadSettings()
+ {
+ if (!File.Exists("GameSettings.txt"))
+ {
+ SaveSettings();
+ return;
+ }
+
+ settingsContainer = JsonConvert.DeserializeObject(File.ReadAllText("GameSettings.txt"));
+ SetIsFullScreen(settingsContainer.IsFullScreen);
+ SetMainVolume(settingsContainer.MainVolume);
+ SetMusicVolume(settingsContainer.MusicVolume);
+ SetResolution(settingsContainer.Resolution);
+ SetSoundEffectsVolume(settingsContainer.SoundEffectsVolume);
+
+
+ }
+ public void SaveSettings()
+ {
+ using (StreamWriter streamWriter = new StreamWriter("GameSettings.txt"))
+ {
+ string _str = JsonConvert.SerializeObject(settingsContainer);
+ streamWriter.Write(_str);
+ }
+ }
+
+ }
+ [Serializable]
+ public class SettingsContainer
+ {
+ [JsonProperty("IsFullScreen")]
+ public bool IsFullScreen { get; set; } = false;
+ [JsonProperty("MainVolume")]
+ public float MainVolume { get; set; } = 1;
+ [JsonProperty("MusicVolume")]
+ public float MusicVolume { get; set; } = 1;
+ [JsonProperty("SoundEffectsVolume")]
+ public float SoundEffectsVolume { get; set; } = 1;
+ [JsonProperty("Resolution")]
+ public Point Resolution { get; set; } = new Point(GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width, GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height);
+ }
+}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameManagers/SoundManager.cs b/ZoFo/GameCore/GameManagers/SoundManager.cs
index a43fc7c..d99211e 100644
--- a/ZoFo/GameCore/GameManagers/SoundManager.cs
+++ b/ZoFo/GameCore/GameManagers/SoundManager.cs
@@ -114,7 +114,7 @@ namespace ZoFo.GameCore.GameManagers
SoundEffect = soundEffect;
Position = position;
}
- /*/ public void UpdateVolume(Vector2 playerPos)
+ /*/public void UpdateVolume(Vector2 playerPos)
{
if (isAmbient)
SoundEffect.Volume = baseVolume * AppManager.Instance.SettingsManager.MusicVolume * AppManager.Instance.SettingsManager.MainVolume;
diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs
index a1333ea..39b9037 100644
--- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs
+++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs
@@ -1,7 +1,21 @@
-using System;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player;
public class Player : LivingEntity
{
+ private int health;
+ Server server = new Server();
+ public void Update(GameTime gameTime)
+ {
+ // server.AddData();
+ }
+
+ public void TextureLoad(SpriteBatch spriteBatch)
+ {
+
+ }
}
diff --git a/ZoFo/GameCore/GameObjects/GameObject.cs b/ZoFo/GameCore/GameObjects/GameObject.cs
index 813c583..3b9707d 100644
--- a/ZoFo/GameCore/GameObjects/GameObject.cs
+++ b/ZoFo/GameCore/GameObjects/GameObject.cs
@@ -1,5 +1,8 @@
using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using ZoFo.GameCore.GameManagers;
using ZoFo.GameCore.ZoFo_graphics;
namespace ZoFo.GameCore.GameObjects;
@@ -7,9 +10,65 @@ namespace ZoFo.GameCore.GameObjects;
public abstract class GameObject
{
public Vector2 position;
- public Vector2 rotation;
-
+ public Vector2 rotation; //вектор направления объекта
protected abstract GraphicsComponent graphicsComponent { get; }
- public void Draw() { }
+ #region ServerSide
+ public GameObject(Vector2 position)
+ {
+ this.position = position;
+ }
+
+
+ ///
+ /// Это вызывается в логике игры, которая на сервере, здесь будет вызываться уведомление об анимации
+ ///
+ public void PlayAnimation_OnServer()
+ {
+ //TODO
+ }
+
+ #endregion
+
+
+ #region Client Side
+
+ ///
+ /// Это вызывается в клиентской части игры
+ ///
+ public void PlayAnimation_OnClient()
+ {
+ graphicsComponent.Update();
+ }
+ public void LoadContent()
+ {
+ graphicsComponent.LoadContent();
+ }
+
+ public virtual void Update(GameTime gameTime)
+ {
+ //PlayAnimation();
+ }
+
+ public virtual void Draw(SpriteBatch spriteBatch)
+ {
+ graphicsComponent.DrawAnimation(graphicsComponent.ObjectDrawRectangle, spriteBatch);
+ //debug
+ if (AppManager.Instance.InputManager.CollisionsCheat)
+ DrawDebugRectangle(spriteBatch, graphicsComponent.ObjectDrawRectangle);
+
+ }
+ public void DrawDebugRectangle(SpriteBatch spriteBatch, Rectangle _rectangle, Nullable color = null)
+ {
+ if (color is null) color = new Color(1, 0, 0, 0.25f);
+ if (color.Value.A == 255) color = new Color(color.Value, 0.25f);
+ //spriteBatch.Draw(debugTexture,
+ // new Rectangle((_rectangle.X - GraphicsComponent.CameraPosition.X) * GraphicsComponent.scaling,
+ // (_rectangle.Y - GraphicsComponent.CameraPosition.Y) * GraphicsComponent.scaling,
+ // _rectangle.Width * GraphicsComponent.scaling,
+ // _rectangle.Height * GraphicsComponent.scaling), color.Value);
+
+ //TODO: debugTexture
+ }
+ #endregion
}
\ No newline at end of file
diff --git a/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs
new file mode 100644
index 0000000..1dc14cf
--- /dev/null
+++ b/ZoFo/GameCore/GameObjects/MapObjects/MapObject.cs
@@ -0,0 +1,26 @@
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ZoFo.GameCore.GameManagers;
+using ZoFo.GameCore.ZoFo_graphics;
+
+namespace ZoFo.GameCore.GameObjects.MapObjects
+{
+ internal class MapObject : GameObject
+ {
+ public virtual bool IsColliderOn { get; protected set; } = true;
+ private Rectangle _sourceRectangle;
+ protected override GraphicsComponent graphicsComponent => new("tiles");
+
+ public MapObject(Vector2 position, Vector2 size, Rectangle sourceRectangle) : base(position)
+ {
+ _sourceRectangle = sourceRectangle;
+ graphicsComponent.ObjectDrawRectangle = new Rectangle(0,0, (int)size.X, (int)size.Y);
+ }
+
+ }
+}
diff --git a/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs b/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs
new file mode 100644
index 0000000..e914310
--- /dev/null
+++ b/ZoFo/GameCore/GameObjects/MapObjects/StopObjects/StopObject.cs
@@ -0,0 +1,13 @@
+using Microsoft.Xna.Framework;
+using System;
+using ZoFo.GameCore.ZoFo_graphics;
+
+namespace ZoFo.GameCore.GameObjects.MapObjects.StopObjects;
+
+public abstract class StopObject : GameObject
+{
+ protected StopObject(Vector2 position) : base(position)
+ {
+ //TODO
+ }
+}
diff --git a/ZoFo/GameCore/GameObjects/MapObjects/Tiles/Tile.cs b/ZoFo/GameCore/GameObjects/MapObjects/Tiles/Tile.cs
new file mode 100644
index 0000000..eb166b8
--- /dev/null
+++ b/ZoFo/GameCore/GameObjects/MapObjects/Tiles/Tile.cs
@@ -0,0 +1,8 @@
+using System;
+
+namespace ZoFo.GameCore.GameObjects.MapObjects.Tiles;
+
+public class Tile
+{
+
+}
diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs
index b62dbba..9faf5df 100644
--- a/ZoFo/GameCore/Server.cs
+++ b/ZoFo/GameCore/Server.cs
@@ -37,19 +37,27 @@ namespace ZoFo.GameCore
{
networkManager.AddData(data);
}
- public void CreateRoom(int players) //Создает комнату и запускает ожидание подключений
+ ///
+ /// Создает комнату и запускает ожидание подключений
+ ///
+ ///
+ public void CreateRoom(int players)
{
- networkManager.StartWaitingForPlayers(players);
+ networkManager.Start(players);
}
// public void StartGame() { } принудительный запуск
- public void EndGame() //Добавляет UpdateGameEnded и отключает игроков
+
+ ///
+ /// Добавляет UpdateGameEnded и отключает игроков
+ ///
+ public void EndGame()
{
UpdateGameEnded gameEnded = new UpdateGameEnded();
networkManager.AddData(gameEnded);
networkManager.CloseConnection();
- }
- internal void Update(GameTime gameTime)
+ }
+ public void Update(GameTime gameTime)
{
}
diff --git a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs
index a60cee1..b6ab88a 100644
--- a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs
+++ b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs
@@ -15,6 +15,10 @@ namespace ZoFo.GameCore.ZoFo_graphics
public class GraphicsComponent
{
+ public Rectangle ObjectDrawRectangle { get; set; }
+
+
+
public event Action actionOfAnimationEnd;
private List animations;
private List textures;