diff --git a/MonogameLibrary/UI/Elements/ItemDisplayButton.cs b/MonogameLibrary/UI/Elements/ItemDisplayButton.cs index c44ffe2..5024c1f 100644 --- a/MonogameLibrary/UI/Elements/ItemDisplayButton.cs +++ b/MonogameLibrary/UI/Elements/ItemDisplayButton.cs @@ -29,6 +29,7 @@ public class ItemDisplayButton : Button private ContentManager content; public string discriptions1; public Dictionary resourcesNeededToCraft1; + public TextAligment TextAligment = TextAligment.Left; public ItemDisplayButton(UIManager manager) : base(manager) @@ -46,7 +47,7 @@ public class ItemDisplayButton : Button 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 + fontColor = fontColor1, text = text1, scale = scale1, fontName = fontName1, mainColor = Color.Transparent, textAligment = TextAligment }; Label itemCount = new Label(Manager) { @@ -87,6 +88,10 @@ public class ItemDisplayButton : Button { if (presentState != hoverState) { + if (resourcesNeededToCraft1 == null) + { + resourcesNeededToCraft1 = new Dictionary(); + } hoverWindow = new HoverWindow(Manager) { rectangle = new Rectangle(Mouse.GetState().Position.X, Mouse.GetState().Position.Y, rectangle.Width, rectangle.Height * 10), diff --git a/MonogameLibrary/UI/Elements/ItemDisplayLabel.cs b/MonogameLibrary/UI/Elements/ItemDisplayLabel.cs index c209753..9a8cdde 100644 --- a/MonogameLibrary/UI/Elements/ItemDisplayLabel.cs +++ b/MonogameLibrary/UI/Elements/ItemDisplayLabel.cs @@ -30,6 +30,7 @@ public class ItemDisplayLabel : DrawableUIElement public Dictionary resourcesNeededToCraft1; public HoverState hoverState = HoverState.None; private ContentManager content; + public TextAligment TextAligment = TextAligment.Left; public ItemDisplayLabel(UIManager manager) : base(manager) @@ -47,7 +48,7 @@ public class ItemDisplayLabel : DrawableUIElement 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 + fontColor = fontColor1, text = text1, scale = scale1, fontName = fontName1, mainColor = Color.Transparent, textAligment = TextAligment }; Label itemCount = new Label(Manager) { diff --git a/ZoFo/Content/Content.mgcb b/ZoFo/Content/Content.mgcb index c36df59..ac62f4a 100644 --- a/ZoFo/Content/Content.mgcb +++ b/ZoFo/Content/Content.mgcb @@ -44,9 +44,6 @@ #begin MapData/TileMaps/main.tmj /copy:MapData/TileMaps/main.tmj -#begin MapData/TileSets/bonfire.tsj -/copy:MapData/TileSets/bonfire.tsj - #begin MapData/TileSets/IconSet.tsj /copy:MapData/TileSets/IconSet.tsj @@ -59,6 +56,30 @@ #begin MapData/TileSets/TilesetNature.tsj /copy:MapData/TileSets/TilesetNature.tsj +#begin sounds/Background menu music.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:sounds/Background menu music.wav + +#begin sounds/Background music.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:sounds/Background music.wav + +#begin sounds/Button click.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:sounds/Button click.wav + +#begin sounds/Craft sound.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:sounds/Craft sound.wav + #begin sounds/Loot.wav /importer:WavImporter /processor:SoundEffectProcessor @@ -101,8 +122,17 @@ /processorParam:Quality=Best /build:sounds/Zombi stoit.wav -#begin Textures/Animations/explosion_1.animation -/copy:Textures/Animations/explosion_1.animation +#begin sounds/zombie sound 2.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:sounds/zombie sound 2.wav + +#begin sounds/zombie sound.wav +/importer:WavImporter +/processor:SoundEffectProcessor +/processorParam:Quality=Best +/build:sounds/zombie sound.wav #begin Textures/Animations/player_down_idle.animation /copy:Textures/Animations/player_down_idle.animation @@ -191,6 +221,33 @@ #begin Textures/Animations/player_right_idle.animation /copy:Textures/Animations/player_right_idle.animation +#begin Textures/Animations/player_run_down.animation +/copy:Textures/Animations/player_run_down.animation + +#begin Textures/Animations/player_run_left_down.animation +/copy:Textures/Animations/player_run_left_down.animation + +#begin Textures/Animations/player_run_left_up.animation +/copy:Textures/Animations/player_run_left_up.animation + +#begin Textures/Animations/player_run_left.animation +/copy:Textures/Animations/player_run_left.animation + +#begin Textures/Animations/player_run_right_down.animation +/copy:Textures/Animations/player_run_right_down.animation + +#begin Textures/Animations/player_run_right_up.animation +/copy:Textures/Animations/player_run_right_up.animation + +#begin Textures/Animations/player_run_right.animation +/copy:Textures/Animations/player_run_right.animation + +#begin Textures/Animations/player_run_right.zip +/copy:Textures/Animations/player_run_right.zip + +#begin Textures/Animations/player_run_up.animation +/copy:Textures/Animations/player_run_up.animation + #begin Textures/Animations/player_running_top_rotate.animation /copy:Textures/Animations/player_running_top_rotate.animation diff --git a/ZoFo/Content/Textures/Animations/player_down-left_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_down-left_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_down-left_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_down-left_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_down-right_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_down-right_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_down-right_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_down-right_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_down_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_down_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_down_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_down_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_left_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_left_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_left_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_left_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_right_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_right_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_right_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_right_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_top-left_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_top-left_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_top-left_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_top-left_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_top-right_idle.animation b/ZoFo/Content/Textures/Animations/Simple Idles/player_top-right_idle.animation similarity index 100% rename from ZoFo/Content/Textures/Animations/player_top-right_idle.animation rename to ZoFo/Content/Textures/Animations/Simple Idles/player_top-right_idle.animation diff --git a/ZoFo/Content/Textures/Animations/player_run_down.animation b/ZoFo/Content/Textures/Animations/player_run_down.animation new file mode 100644 index 0000000..6dfae3f --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_down.animation @@ -0,0 +1 @@ +{"id":"player_run_down","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":528,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_left.animation b/ZoFo/Content/Textures/Animations/player_run_left.animation new file mode 100644 index 0000000..382a37c --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_left.animation @@ -0,0 +1 @@ +{"id":"player_run_left","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":792,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_left_down.animation b/ZoFo/Content/Textures/Animations/player_run_left_down.animation new file mode 100644 index 0000000..4fc1ba6 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_left_down.animation @@ -0,0 +1 @@ +{"id":"player_run_left_down","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":660,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_left_up.animation b/ZoFo/Content/Textures/Animations/player_run_left_up.animation new file mode 100644 index 0000000..2ce06d9 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_left_up.animation @@ -0,0 +1 @@ +{"id":"player_run_left_up","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":924,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_right.animation b/ZoFo/Content/Textures/Animations/player_run_right.animation new file mode 100644 index 0000000..f326ea9 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_right.animation @@ -0,0 +1 @@ +{"id":"player_run_right","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":264,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_right.zip b/ZoFo/Content/Textures/Animations/player_run_right.zip new file mode 100644 index 0000000..ca73be1 Binary files /dev/null and b/ZoFo/Content/Textures/Animations/player_run_right.zip differ diff --git a/ZoFo/Content/Textures/Animations/player_run_right_down.animation b/ZoFo/Content/Textures/Animations/player_run_right_down.animation new file mode 100644 index 0000000..400a15d --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_right_down.animation @@ -0,0 +1 @@ +{"id":"player_run_right_down","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":396,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_right_up.animation b/ZoFo/Content/Textures/Animations/player_run_right_up.animation new file mode 100644 index 0000000..2470613 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_right_up.animation @@ -0,0 +1 @@ +{"id":"player_run_right_up","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":132,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/Textures/Animations/player_run_up.animation b/ZoFo/Content/Textures/Animations/player_run_up.animation new file mode 100644 index 0000000..7837205 --- /dev/null +++ b/ZoFo/Content/Textures/Animations/player_run_up.animation @@ -0,0 +1 @@ +{"id":"player_run_up","textureName":"Textures/AnimationTextures/Character/hr-level1_running","startSpriteRectangle":{"X":0,"Y":0,"Width":88,"Height":132},"frameSecond":[{"Item1":0,"Item2":2}],"textureFrameInterval":0,"framesCount":22,"isCycle":true,"offset":"0, 0"} diff --git a/ZoFo/Content/sounds/Background menu music.wav b/ZoFo/Content/sounds/Background menu music.wav new file mode 100644 index 0000000..ece5b88 Binary files /dev/null and b/ZoFo/Content/sounds/Background menu music.wav differ diff --git a/ZoFo/Content/sounds/Background music.wav b/ZoFo/Content/sounds/Background music.wav new file mode 100644 index 0000000..3b20c6e Binary files /dev/null and b/ZoFo/Content/sounds/Background music.wav differ diff --git a/ZoFo/Content/sounds/Button click.wav b/ZoFo/Content/sounds/Button click.wav new file mode 100644 index 0000000..ee91234 Binary files /dev/null and b/ZoFo/Content/sounds/Button click.wav differ diff --git a/ZoFo/Content/sounds/Craft sound.wav b/ZoFo/Content/sounds/Craft sound.wav new file mode 100644 index 0000000..9ca7686 Binary files /dev/null and b/ZoFo/Content/sounds/Craft sound.wav differ diff --git a/ZoFo/Content/sounds/zombie sound 2.wav b/ZoFo/Content/sounds/zombie sound 2.wav new file mode 100644 index 0000000..d3df275 Binary files /dev/null and b/ZoFo/Content/sounds/zombie sound 2.wav differ diff --git a/ZoFo/Content/sounds/zombie sound.wav b/ZoFo/Content/sounds/zombie sound.wav new file mode 100644 index 0000000..c4f351d Binary files /dev/null and b/ZoFo/Content/sounds/zombie sound.wav differ diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 5e0006a..b9e1185 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -249,6 +249,16 @@ namespace ZoFo.GameCore { UpdatePlayerHealth(update as UpdatePlayerParametrs); } + else if (update is UpdateLoot) + { + if ((update as UpdateLoot).quantity == 0) + { + return; + } + var ent = FindEntityById(update.IdEntity); + if (ent != null) + (ent as Player).lootData.AddLoot_Client((update as UpdateLoot).lootName, (update as UpdateLoot).quantity); + } } public void UpdatePlayerHealth(UpdatePlayerParametrs update) diff --git a/ZoFo/GameCore/GUI/AbstractGUI.cs b/ZoFo/GameCore/GUI/AbstractGUI.cs index e8ceb33..6aafbb2 100644 --- a/ZoFo/GameCore/GUI/AbstractGUI.cs +++ b/ZoFo/GameCore/GUI/AbstractGUI.cs @@ -38,7 +38,7 @@ public abstract class AbstractGUI public virtual void LoadContent() { - Manager.LoadContent(AppManager.Instance.Content, "Font"); + Manager.LoadContent(AppManager.Instance.Content, "Fonts/Font"); mouse = AppManager.Instance.Content.Load("Textures/GUI/mouse"); } diff --git a/ZoFo/GameCore/GUI/BaseGUI.cs b/ZoFo/GameCore/GUI/BaseGUI.cs index d46ac63..ed2b745 100644 --- a/ZoFo/GameCore/GUI/BaseGUI.cs +++ b/ZoFo/GameCore/GUI/BaseGUI.cs @@ -142,6 +142,7 @@ public class BaseGUI : AbstractGUI ItemDisplayButtonsList.Add(temp); temp.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StartAmbientSound("Craft sound"); AppManager.Instance.playerData.CraftItem(item.Key); AppManager.Instance.SetGUI(new BaseGUI()); }; @@ -163,7 +164,9 @@ public class BaseGUI : AbstractGUI textureName = "Textures\\GUI\\checkboxs_off" }; Elements.Add(bTExit); - bTExit.LeftButtonPressed += () => { AppManager.Instance.SetGUI(new MainMenuGUI()); }; + bTExit.LeftButtonPressed += () => { AppManager.Instance.SetGUI(new MainMenuGUI()); + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); + }; } public override void Update(GameTime gameTime) diff --git a/ZoFo/GameCore/GUI/HUD.cs b/ZoFo/GameCore/GUI/HUD.cs index bf27190..bb82b2a 100644 --- a/ZoFo/GameCore/GUI/HUD.cs +++ b/ZoFo/GameCore/GUI/HUD.cs @@ -17,7 +17,7 @@ public class HUD : AbstractGUI { private Bar hpBar; private Bar radBar; - private AbstractGUI overlayGUI; + public AbstractGUI overlayGUI; protected override void CreateUI() { int width = AppManager.Instance.CurentScreenResolution.X; @@ -28,11 +28,13 @@ public class HUD : AbstractGUI Elements.Add(pauseButton); pauseButton.LoadTexture(AppManager.Instance.Content); pauseButton.LeftButtonPressed += () => - { - AppManager.Instance.SetGUI(new FinishingGUI()); - //overlayGUI = new PauseGUI(); - //overlayGUI.Initialize(); - //overlayGUI.LoadContent(); + { + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); + AppManager.Instance.SetGUI(new PauseGUI()); + //AppManager.Instance.SetGUI(new FinishingGUI()); + overlayGUI = new PauseGUI(); + overlayGUI.Initialize(); + overlayGUI.LoadContent(); }; Button invButton = new Button(Manager) { fontName = "Fonts\\Font3", scale = 0.4f, text = "inv", fontColor = Color.Black, mainColor = Color.Transparent, rectangle = new Rectangle(width - width / 30 - width / 40, height / 15 + width / 40, width / 40, width / 40), textureName = "Textures/GUI/checkboxs_off"}; @@ -65,6 +67,7 @@ public class HUD : AbstractGUI radBar.LoadTexture(AppManager.Instance.Content); } + public override void Update(GameTime gameTime) { overlayGUI?.Update(gameTime); diff --git a/ZoFo/GameCore/GUI/InventoryGUI.cs b/ZoFo/GameCore/GUI/InventoryGUI.cs index c20be82..1f8fb86 100644 --- a/ZoFo/GameCore/GUI/InventoryGUI.cs +++ b/ZoFo/GameCore/GUI/InventoryGUI.cs @@ -62,7 +62,7 @@ public class InventoryGUI : AbstractGUI (height / 20 + height / 80) * (buttonIndex) - height / 10, (int)(width / 5), (int)(height / 20)), text1 = item.Key, - scale1 = 0.4f, + scale1 = 0.3f, count = item.Value, itemTextureName = itemInfo.textureName, fontColor1 = Color.White, diff --git a/ZoFo/GameCore/GUI/MainMenuGUI.cs b/ZoFo/GameCore/GUI/MainMenuGUI.cs index 645faf8..c0e1a38 100644 --- a/ZoFo/GameCore/GUI/MainMenuGUI.cs +++ b/ZoFo/GameCore/GUI/MainMenuGUI.cs @@ -40,7 +40,7 @@ public class MainMenuGUI : AbstractGUI }; playButton.LeftButtonPressed += () => { - AppManager.Instance.SoundManager.StartAmbientSound("Loot"); + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SetGUI(new SelectModeMenu()); }; Elements.Add(playButton); @@ -55,6 +55,7 @@ public class MainMenuGUI : AbstractGUI }; baseButton.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SetGUI(new BaseGUI()); }; Elements.Add(baseButton); @@ -69,7 +70,7 @@ public class MainMenuGUI : AbstractGUI }; optionButton.LeftButtonPressed += () => { - AppManager.Instance.SoundManager.StartAmbientSound("Loot"); + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SetGUI(new OptionsGUI()); }; Elements.Add(optionButton); diff --git a/ZoFo/GameCore/GUI/OptionsGUI.cs b/ZoFo/GameCore/GUI/OptionsGUI.cs index 39db371..e0920d3 100644 --- a/ZoFo/GameCore/GUI/OptionsGUI.cs +++ b/ZoFo/GameCore/GUI/OptionsGUI.cs @@ -43,6 +43,7 @@ public class OptionsGUI : AbstractGUI 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); }; @@ -64,6 +65,7 @@ public class OptionsGUI : AbstractGUI 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); }; @@ -85,6 +87,7 @@ public class OptionsGUI : AbstractGUI 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); }; @@ -109,6 +112,7 @@ public class OptionsGUI : AbstractGUI button_FullScreen.SetIsChecked(AppManager.Instance.SettingsManager.IsFullScreen); button_FullScreen.Checked += (newCheckState) => { + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SettingsManager.SetIsFullScreen(newCheckState); }; Elements.Add(button_FullScreen); @@ -120,6 +124,7 @@ public class OptionsGUI : AbstractGUI Elements.Add(bTExit); bTExit.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SetGUI(new MainMenuGUI()); }; diff --git a/ZoFo/GameCore/GUI/PauseGUI.cs b/ZoFo/GameCore/GUI/PauseGUI.cs index d316fb7..d0ebdf7 100644 --- a/ZoFo/GameCore/GUI/PauseGUI.cs +++ b/ZoFo/GameCore/GUI/PauseGUI.cs @@ -31,6 +31,7 @@ public class PauseGUI : AbstractGUI }; continueButton.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SetGUI(new HUD()); }; Elements.Add(continueButton); @@ -45,6 +46,9 @@ public class PauseGUI : AbstractGUI }; exitButton.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StopAllSounds(); + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); + AppManager.Instance.SoundManager.StartAmbientSound("Background menu music"); AppManager.Instance.SetGUI(new MainMenuGUI()); }; Elements.Add(exitButton); diff --git a/ZoFo/GameCore/GUI/SelectModeMenu.cs b/ZoFo/GameCore/GUI/SelectModeMenu.cs index b833447..ba0cb7a 100644 --- a/ZoFo/GameCore/GUI/SelectModeMenu.cs +++ b/ZoFo/GameCore/GUI/SelectModeMenu.cs @@ -38,6 +38,9 @@ public class SelectModeMenu : AbstractGUI }; singleButton.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StopAllSounds(); + AppManager.Instance.SoundManager.StartAmbientSound("Background music"); + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); // single Server server = new Server(); Client client = new Client(); @@ -68,6 +71,7 @@ public class SelectModeMenu : AbstractGUI }; optionButton.LeftButtonPressed += () => { + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); AppManager.Instance.SetGUI(new SelectingServerGUI()); // multi @@ -80,6 +84,9 @@ public class SelectModeMenu : AbstractGUI Elements.Add(bTExit); bTExit.LeftButtonPressed += () => { + + AppManager.Instance.SoundManager.StartAmbientSound("Button click"); + AppManager.Instance.SetGUI(new MainMenuGUI()); }; } diff --git a/ZoFo/GameCore/GameManagers/AppManager.cs b/ZoFo/GameCore/GameManagers/AppManager.cs index b52f9be..1f657cd 100644 --- a/ZoFo/GameCore/GameManagers/AppManager.cs +++ b/ZoFo/GameCore/GameManagers/AppManager.cs @@ -62,12 +62,14 @@ namespace ZoFo.GameCore.GameManagers ItemManager = new ItemManager.ItemManager(); Instance = this; InputManager = new InputManager(); + SoundManager = new SoundManager(); + SoundManager.LoadSounds(); SettingsManager = new SettingsManager(); SettingsManager.LoadSettings(); - SoundManager = new SoundManager(); + AssetManager = new AssetManager(); - SoundManager.LoadSounds(); - + + SoundManager.StartAmbientSound("Background menu music"); currentGUI = new MainMenuGUI(); debugHud = new DebugHUD(); diff --git a/ZoFo/GameCore/GameManagers/AssetsManager/AssetManager.cs b/ZoFo/GameCore/GameManagers/AssetsManager/AssetManager.cs index 334957f..5fd12ba 100644 --- a/ZoFo/GameCore/GameManagers/AssetsManager/AssetManager.cs +++ b/ZoFo/GameCore/GameManagers/AssetsManager/AssetManager.cs @@ -12,7 +12,9 @@ public class AssetManager public AssetContainer Player = new() { - Animations = [ "player_look_down" ], + Animations = [ "player_look_down", "player_run_up", "player_run_down", "player_run_right", + "player_run_left", "player_run_right_up", "player_run_left_up", "player_run_right_down", + "player_run_left_down" ], IdleAnimation = "player_look_down" }; } \ No newline at end of file diff --git a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs index eac118f..234e912 100644 --- a/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs +++ b/ZoFo/GameCore/GameManagers/CollisionManager/CollisionManager.cs @@ -10,6 +10,7 @@ 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; using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO; @@ -24,8 +25,27 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager public List ObjectsWithCollisions; public List EntitiesWithMovements; public List ObjectsWithTriggers; + + public List GetEntitiesToUpdate(Player player) + { + float ViewDistance = 500; + List EntitiesInPlayerArea = new List(); + Rectangle ViewArea = new Rectangle((int)(player.position.X), (int)(player.position.Y), + (int)(ViewDistance), (int)(ViewDistance)); + + for (int i = 0; i < ObjectsWithCollisions.Count; i++) + { + if (ViewArea.Contains((float)ObjectsWithCollisions[i].gameObject.position.X, (float)ObjectsWithCollisions[i].gameObject.position.Y)); + { + EntitiesInPlayerArea.Add(ObjectsWithCollisions[i]); + } + } + return EntitiesInPlayerArea; + } + + //чекаем коллизии в листе /// diff --git a/ZoFo/GameCore/GameManagers/InputManager.cs b/ZoFo/GameCore/GameManagers/InputManager.cs index a49dfde..e6079b2 100644 --- a/ZoFo/GameCore/GameManagers/InputManager.cs +++ b/ZoFo/GameCore/GameManagers/InputManager.cs @@ -5,18 +5,11 @@ 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.Security.Cryptography.X509Certificates; -using System.Text; -using System.Threading.Tasks; using ZoFo.GameCore.GUI; namespace ZoFo.GameCore.GameManagers { public enum ScopeState { Idle, Left, Right, Top, Down, TopLeft, TopRight, DownLeft, DownRight } - public class InputManager { public event Action ShootEvent; // событие удара(когда нажат X, событие срабатывает) @@ -177,7 +170,6 @@ namespace ZoFo.GameCore.GameManagers #region Обработка взаимодействия с collectable(например лутом). Вызывает событие OnInteract if (keyBoardState.IsKeyDown(Keys.E) && !isInteract) { - OnInteract?.Invoke(); Debug.WriteLine("взаимодействие с Collectable"); } @@ -204,18 +196,33 @@ namespace ZoFo.GameCore.GameManagers DebugHUD.Instance.Set("controls", currentScopeState.ToString()); } #region работа с ScopeState и Vector2 + /// + /// возвращает число от -14 до 16, начиная с + /// + /// + /// + public int ConvertAttackVector2ToState(Vector2 vector){ + int currentSection = (int)Math.Ceiling(Math.Atan2(vector.Y, + vector.X) * (180 / Math.PI) / 360 * 32); + return currentSection; + } public ScopeState ConvertVector2ToState(Vector2 vector) { - //if() - int currentSection = (int)Math.Ceiling(Math.Atan2(vector.Y, + int currentSection = 0; + if(vector.X == 0f && vector.Y == 0f){ + currentScopeState = ScopeState.Idle; + } + else + { + currentSection = (int)Math.Ceiling(Math.Atan2(vector.Y, vector.X) * (180 / Math.PI) / 360 * 16); - - DebugHUD.DebugSet("current section", currentSection.ToString()); - //DebugHUD.DebugSet("y", InputMovementDirection.Y.ToString()); - //DebugHUD.DebugSet("x", InputMovementDirection.X.ToString()); + switch(currentSection) { + case -1: + currentScopeState = ScopeState.Idle; + break; case 0 or 1: currentScopeState = ScopeState.Right; break; @@ -243,8 +250,41 @@ namespace ZoFo.GameCore.GameManagers default: break; } + + DebugHUD.DebugSet("current section", currentSection.ToString()); + DebugHUD.DebugSet("y", vector.Y.ToString()); + DebugHUD.DebugSet("x", vector.X.ToString()); + } return currentScopeState; - } + } + public static Vector2 ConvertStateToVector2(ScopeState scopeState) + { + switch (scopeState) + { + case ScopeState.Idle: + return new Vector2(0, 0); + case ScopeState.Left: + return new Vector2(-1, 0); + case ScopeState.Right: + return new Vector2(1, 0); + case ScopeState.Top: + return new Vector2(0, -1); + case ScopeState.Down: + return new Vector2(0, 1); + case ScopeState.TopLeft: + return new Vector2(-1, -1); + case ScopeState.TopRight: + return new Vector2(-1, 1); + case ScopeState.DownLeft: + return new Vector2(1, -1); + case ScopeState.DownRight: + return new Vector2(1, 1); + default: + return new Vector2(0, 0); + } + + + } #endregion public bool ButtonClicked(Keys key) => keyBoardState.IsKeyUp(key) && keyBoardState.IsKeyDown(key); } diff --git a/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs b/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs index 0678c21..2b4cc3d 100644 --- a/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs +++ b/ZoFo/GameCore/GameManagers/ItemManager/ItemManager.cs @@ -25,11 +25,15 @@ namespace ZoFo.GameCore.GameManagers.ItemManager public void Initialize() { tagItemPairs = new Dictionary(); - tagItemPairs.Add("Ammo", new ItemInfo("Ammo", "деньги в метро", "Textures\\icons\\Collectables\\Ammo",false,null)); - 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", "метал, метал, \nжелезо, метал", "Textures\\Test\\steel", false, null)); - tagItemPairs.Add("pickaxe", new ItemInfo("steel", "прямой путь к \nстановлению каменьщиком", "Textures\\Test\\pickaxe", true, new Dictionary() + tagItemPairs.Add("rottenflesh", new ItemInfo("rottenflesh", "БУХАТЬ", "Textures/icons/Collectables/RottenFlesh",false,null)); + tagItemPairs.Add("purebottleofwater", new ItemInfo("purebottleofwater", "БУХАТЬ 2", "Textures/icons/Collectables/PureBottleOfWater",false,null)); + tagItemPairs.Add("bottleofwater", new ItemInfo("bottleofwater", "БУХАТЬ", "Textures/icons/Collectables/BottleOfWater",false,null)); + //tagItemPairs.Add("antiradin", new ItemInfo("antiradin", "радиацию опускает", "Textures/icons/Collectables/Ammo",false,null)); + tagItemPairs.Add("ammo", new ItemInfo("ammo", "деньги в метро", "Textures/icons/Collectables/Ammo",false,null)); + tagItemPairs.Add("wood", new ItemInfo("wood", "бревна кусок", "Textures/icons/Collectables/Wood",false,null)); + tagItemPairs.Add("peeble", new ItemInfo("peeble", "пять галек", "Textures/icons/Collectables/Peeble", false, null)); + tagItemPairs.Add("steel", new ItemInfo("steel", "метал, метал, \nжелезо, метал", "Textures/icons/Collectables/Steel", false, null)); + tagItemPairs.Add("pickaxe", new ItemInfo("pickaxe", "прямой путь к \nстановлению каменьщиком", "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 index f58cc30..54e1df5 100644 --- a/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs +++ b/ZoFo/GameCore/GameManagers/ItemManager/PlayerData.cs @@ -54,7 +54,7 @@ namespace ZoFo.GameCore.GameManagers.ItemManager items = new Dictionary(); items.Add("wood", 5); items.Add("steel", 110); - items.Add("rock", 6); + items.Add("peeble", 6); } } } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs index b69a860..0e1a360 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdateLoot.cs @@ -11,12 +11,16 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient /// public class UpdateLoot : UpdateData { - public string lootName; - public UpdateLoot() { UpdateType = "UpdateLoot"; } - public UpdateLoot(string lootName) + public string lootName { get; set; } + public int quantity { get; set; } + public UpdateLoot() { UpdateType = "UpdateLoot"; isImportant = true; } + public UpdateLoot(string lootName, int quantity, int id) { UpdateType = "UpdateLoot"; this.lootName = lootName; + this.quantity = quantity; + IdEntity = id; + isImportant = true; } } } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs index 9d4e196..57c4c2a 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/Updates/ServerToClient/UpdatePlayerParametrs.cs @@ -11,8 +11,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient /// public class UpdatePlayerParametrs : UpdateData { - public UpdatePlayerParametrs() { UpdateType = "UpdatePlayerParametrs"; } - public float radiatoin; - public float health; + public UpdatePlayerParametrs() { UpdateType = "UpdatePlayerParametrs"; isImportant = true; } + public float radiatoin { get; set; } + public float health { get; set; } } } diff --git a/ZoFo/GameCore/GameManagers/SettingsManager.cs b/ZoFo/GameCore/GameManagers/SettingsManager.cs index 25dd40d..13d870a 100644 --- a/ZoFo/GameCore/GameManagers/SettingsManager.cs +++ b/ZoFo/GameCore/GameManagers/SettingsManager.cs @@ -28,18 +28,21 @@ namespace ZoFo.GameCore.GameManagers public void SetMainVolume(float volume) { settingsContainer.MainVolume = volume; - //AppManager.Instance.SoundManager.Update(); + // AppManager.Instance.SoundManager.Update(); SaveSettings(); } public void SetMusicVolume(float volume) { settingsContainer.MusicVolume = volume; + //AppManager.Instance.SoundManager.Update(); + SaveSettings(); } public void SetSoundEffectsVolume(float volume) { settingsContainer.SoundEffectsVolume = volume; + // AppManager.Instance.SoundManager.Update(); SaveSettings(); } @@ -68,6 +71,7 @@ namespace ZoFo.GameCore.GameManagers } public void SaveSettings() { + AppManager.Instance.SoundManager.Update(); using (StreamWriter streamWriter = new StreamWriter("GameSettings.txt")) { string _str = JsonConvert.SerializeObject(settingsContainer); diff --git a/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs b/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs index 7a9454f..67166c8 100644 --- a/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs +++ b/ZoFo/GameCore/GameObjects/Entities/EntittyForAnimationTests.cs @@ -12,6 +12,7 @@ namespace ZoFo.GameCore.GameObjects { //public override GraphicsComponent graphicsComponent { get; } = new GraphicsComponent(new List { "тут пишите название анимации" }, "сдублируйте " + + public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(new List { "zombie_idle" }, "zombie_idle"); @@ -19,6 +20,7 @@ namespace ZoFo.GameCore.GameObjects public EntittyForAnimationTests(Vector2 position) : base(position) { graphicsComponent.ObjectDrawRectangle = new Rectangle(0,0,16*20, 16 * 20); + position = new Vector2(10, 10); } diff --git a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs index 35950f2..ec5d4af 100644 --- a/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs +++ b/ZoFo/GameCore/GameObjects/Entities/Interactables/Collectables/Collectable.cs @@ -1,6 +1,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; +using System.Linq; using ZoFo.GameCore.GameManagers; using ZoFo.GameCore.GameManagers.CollisionManager; using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; @@ -29,9 +30,8 @@ public class Collectable : Interactable public override void OnInteraction(GameObject sender) { DebugHUD.DebugLog("collected"); - string lootname = this.GetType().ToString().ToLower(); - (sender as Player).lootData.AddLoot(lootname, 1); - AppManager.Instance.server.AddData(new UpdateLoot(lootname)); + string lootname = this.GetType().ToString().ToLower().Split('.').Last(); + (sender as Player).lootData.AddLoot(lootname, 1, (sender as Player).Id); AppManager.Instance.server.DeleteObject(this); base.OnInteraction(sender); } diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs index 37ed494..67bc472 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Enemies/Zombie.cs @@ -43,17 +43,38 @@ namespace ZoFo.GameCore.GameObjects } public override void Update() - { - if (isDying) return; - Vector2 duration = Vector2.Normalize( - AppManager.Instance.server.players[0].position - position + { + if (isDying) return; + float m = 10000000; + int j = -1; + for (int i = 0; i < AppManager.Instance.server.players.Count; i++) + { + var player = AppManager.Instance.server.players[i]; + if (m > (player.position.X - position.X) * (player.position.X - position.X) + (player.position.Y - position.Y) * (player.position.Y - position.Y)) + { + m = (player.position.X - position.X) * (player.position.X - position.X) + (player.position.Y - position.Y) * (player.position.Y - position.Y); + j = i; + } + } + Vector2 duration = Vector2.Zero; + if (m<= 130000) + { + duration = Vector2.Normalize( + AppManager.Instance.server.players[j].position - position ); + if (Random.Shared.NextDouble() > 0.999) + { + AppManager.Instance.SoundManager.StartSound("zombie sound", position, AppManager.Instance.server.players[0].position, pitch: new Random().Next(-1, 2) * (float)new Random().NextDouble()); + } + } - - - + if (!isAttacking) { velocity += new Vector2(duration.X * speed, duration.Y * speed); } + + + + } public void OnPlayerClose(GameObject sender) { @@ -61,6 +82,8 @@ namespace ZoFo.GameCore.GameObjects if(!isAttacking) { + + AppManager.Instance.SoundManager.StartSound("Zombi napal", position, AppManager.Instance.server.players[0].position,pitch:new Random().Next(-1,2)*(float)new Random().NextDouble()); StartAnimation("zombie_attack"); isAttacking = true; } @@ -69,18 +92,13 @@ namespace ZoFo.GameCore.GameObjects } public void EndAttack(string a) - { - if (AppManager.Instance.gamestate == GameState.HostPlaying) - { - var damagedPlayers = AppManager.Instance.server.collisionManager.GetPlayersInZone(collisionComponent.triggerRectangle.SetOrigin(position)); - //TODO ДАМАЖИТЬ ИГРОКОВ В ЗОНЕ - if (damagedPlayers.Length > 0) - { - DebugHUD.DebugLog("End of" + a); - foreach (var item in damagedPlayers) - item.TakeDamage(5); - } - isAttacking = false; + { + if (AppManager.Instance.gamestate != GameState.HostPlaying) return; + var damagedPlayers=AppManager.Instance.server.collisionManager.GetPlayersInZone(collisionComponent.triggerRectangle.SetOrigin(position)); + //TODO ДАМАЖИТЬ ИГРОКОВ В ЗОНЕ + if (damagedPlayers.Length>0) { DebugHUD.DebugLog("End of" + a); + foreach (var item in damagedPlayers) + item.TakeDamage(1); } } diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs index 4637b81..0104778 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/LivingEntity.cs @@ -38,15 +38,15 @@ public class LivingEntity : Entity { base.UpdateAnimations(); } - Vector2 prevPosition_forClient; + protected Vector2 prevPosition_forClient; public override void Draw(SpriteBatch spriteBatch) { - if ((position - prevPosition_forClient).X < 0) + if ((positionDraw - prevPosition_forClient).X < 0) graphicsComponent.Flip = SpriteEffects.FlipHorizontally; - else if ((position - prevPosition_forClient).X > 0) + else if ((positionDraw - prevPosition_forClient).X > 0) graphicsComponent.Flip = SpriteEffects.None; base.Draw(spriteBatch); - prevPosition_forClient = position; + prevPosition_forClient = positionDraw; } public virtual void Die() diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs index 3fafa2b..daaa390 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/IPlayerWeaponAttack.cs @@ -8,6 +8,6 @@ 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 index 00e6b38..075ba4f 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/LootData.cs @@ -3,6 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; +using ZoFo.GameCore.GUI; namespace ZoFo.GameCore.GameObjects { @@ -10,7 +13,23 @@ namespace ZoFo.GameCore.GameObjects { public Dictionary loots; - public void AddLoot(string lootName, int quantity) + public void AddLoot(string lootName, int quantity, int id) + { + if (lootName == null) + { + DebugHUD.DebugLog("PROBLEM, loot is null"); + DebugHUD.DebugLog("PROBLEM, loot is null"); + DebugHUD.DebugLog("PROBLEM, loot is null"); + return; + } + AppManager.Instance.server.AddData(new UpdateLoot(lootName, quantity, id)); + + if (loots.ContainsKey(lootName)) + loots[lootName] +=quantity; + else + loots.Add(lootName, quantity); + } + public void AddLoot_Client(string lootName, int quantity) { if (loots.ContainsKey(lootName)) loots[lootName] +=quantity; diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs index d23586e..0e829df 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/Player.cs @@ -11,6 +11,7 @@ using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; using ZoFo.GameCore.Graphics; using System.Diagnostics; using ZoFo.GameCore.GUI; +using System.Runtime.InteropServices; namespace ZoFo.GameCore.GameObjects; @@ -18,18 +19,21 @@ public class Player : LivingEntity { public Vector2 InputWeaponRotation { get; set; } public Vector2 InputPlayerRotation { get; set; } - - private float speed; - public int reloading; - public float health= 100; + + private float speed; + public int reloading; + public float health = 100; public float MaxHealth = 100; + public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(AppManager.Instance.AssetManager.Player.Animations, AppManager.Instance.AssetManager.Player.IdleAnimation); + + public AnimatedGraphicsComponent animatedGraphicsComponent => graphicsComponent as AnimatedGraphicsComponent; + public float rad = 0; public float MaxRad = 100; public LootData lootData; - - - public override GraphicsComponent graphicsComponent { get; } = new AnimatedGraphicsComponent(AppManager.Instance.AssetManager.Player); + + public bool IsTryingToInteract { get; set; } @@ -37,58 +41,176 @@ public class Player : LivingEntity /// Факт того, что плеер в этом апдейте пытается стрелять /// public bool IsTryingToShoot { get; set; } + + ScopeState prevScopeState; public Player(Vector2 position) : base(position) { lootData = new LootData(); lootData.loots = new Dictionary(); graphicsComponent.ObjectDrawRectangle = new Rectangle(0, 0, 30, 30); - collisionComponent.stopRectangle = new Rectangle(0, 20, 30, 10); - speed = 5; + collisionComponent.stopRectangle = new Rectangle(10, 15, 10, 15); + speed = 5; - StartAnimation("player_look_down"); + StartAnimation("player_look_down"); } - public override void Update() + public override void Update() { - if (reloading>0) + #region название current текстуры + var idName = animatedGraphicsComponent.CurrentAnimation.Id; + #endregion + + #region анимация управления подбора лута + DebugHUD.DebugSet("texture name", idName); + if (reloading > 0) { reloading--; } - #region анимация управления, стрельбы - switch(AppManager.Instance.InputManager.ConvertVector2ToState(InputPlayerRotation)) + switch (AppManager.Instance.InputManager.ConvertVector2ToState(InputPlayerRotation)) { case ScopeState.Top: - + if (idName != "player_run_up") + StartAnimation("player_run_up"); break; case ScopeState.Down: - - break; + if (idName != "player_run_down") + StartAnimation("player_run_down"); + break; case ScopeState.Right: - //StartAnimation("player_running_top_rotate"); - break; case ScopeState.Left: - - break; + if (idName != "player_run_right") + StartAnimation("player_run_right"); + break; case ScopeState.TopRight: - - break; case ScopeState.TopLeft: - - break; + if (idName != "player_run_right_up") + StartAnimation("player_run_right_up"); + break; case ScopeState.DownRight: - - break; case ScopeState.DownLeft: - - break; + if (idName != "player_run_right_down") + StartAnimation("player_run_right_down"); + break; + case ScopeState.Idle: + break; + } + if (AppManager.Instance.InputManager.ConvertVector2ToState(InputPlayerRotation) != ScopeState.Idle) + { + prevScopeState = AppManager.Instance.InputManager.ConvertVector2ToState(InputPlayerRotation); + } + else if (AppManager.Instance.InputManager.ConvertVector2ToState(InputPlayerRotation) == ScopeState.Idle) + { + + + + + switch (prevScopeState) + { + case ScopeState.Top: + if (idName != "player_look_up_weapon") + StartAnimation("player_look_up_weapon"); + break; + case ScopeState.Down: + if (idName != "player_look_down_weapon") + StartAnimation("player_look_down_weapon"); + break; + case ScopeState.Right: + case ScopeState.Left: + if (idName != "player_look_right") + StartAnimation("player_look_right"); + break; + case ScopeState.TopRight: + case ScopeState.TopLeft: + if (idName != "player_look_right_up_weapon") + StartAnimation("player_look_right_up_weapon"); + break; + case ScopeState.DownRight: + case ScopeState.DownLeft: + if (idName != "player_look_right_down_weapon") + StartAnimation("player_look_right_down_weapon"); + break; + case ScopeState.Idle: + if (idName != "player_look_down") + StartAnimation("player_look_down"); + break; + } + + + + + + } + + + + + #endregion + + #region анимация поворота оружия + int currentAttackSection = AppManager.Instance.InputManager.ConvertAttackVector2ToState(InputWeaponRotation); + switch (currentAttackSection) + { + case 0 or 1: + //right + break; + case 2 or 3: + //down_right_right + break; + case 4 or 5: + //down_right + break; + case 6 or 7: + //down_right_left + break; + case 8 or 9: + //down + break; + case 10 or 11: + //down_left_right + break; + case 12 or 13: + //down_left + break; + case 14 or 15: + //down_left_left + break; + case 16 or -14: + //left + break; + case -13 or -12: + //top_left_left + break; + case -11 or -10: + //top_left + break; + case -9 or -8: + //top_left_right + break; + case -7 or -6: + //top + break; + case -5 or -4: + //top_right_left + break; + case -3 or -2: + //top_right + break; + case -1 or 0: + //top_right_right + break; } #endregion + MovementLogic(); } - public void MovementLogic() + public void WeaponAttack() + { + + } + public void MovementLogic() { velocity += InputPlayerRotation * speed; DebugHUD.DebugSet("player pos server", position.ToString()); @@ -120,7 +242,7 @@ public class Player : LivingEntity base.Die(); } - #endregion + #endregion public void HandleShoot(UpdateInputShoot updateInputShoot) { if (reloading > 0) @@ -128,24 +250,34 @@ public class Player : LivingEntity reloading = 5; IsTryingToShoot = true; - var rect = collisionComponent.stopRectangle.SetOrigin(position); - rect.Width += 100; - rect.Height += 100; - Entity[] entities = AppManager.Instance.server.collisionManager.GetEntities(rect, this); - AppManager.Instance.server.RegisterGameObject(new Particle(rect.Location.ToVector2())); - if (entities.Length>0) + Entity[] entities = AppManager.Instance.server.collisionManager.GetEntities(GetDamageArea(InputManager.ConvertStateToVector2(prevScopeState)), this); + if (entities != null) { - DebugHUD.DebugSet("ent[0]", entities[0].ToString()); - if (entities != null) + foreach (Entity entity in entities) { - foreach (Entity entity in entities) + if (entity is Enemy) { - if (entity is Enemy) - { - (entity as Enemy).TakeDamage(1); - } + (entity as Enemy).TakeDamage(1); } } } } + public override void Draw(SpriteBatch spriteBatch) + { + + DrawDebugRectangle(spriteBatch, GetDamageArea((position - prevPosition_forClient)), Color.Green); + base.Draw(spriteBatch); + } + public Rectangle GetDamageArea(Vector2 direction) + { + direction.Normalize(); + var rect = collisionComponent.stopRectangle.SetOrigin(position); + int size = 10; + rect.X -= size; + rect.Y -= size; + rect.Width += 2 * size; + rect.Height += 2 * size; + rect = rect.SetOrigin(direction*15); + return rect; + } } \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs index 508f02f..9136797 100644 --- a/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs +++ b/ZoFo/GameCore/GameObjects/Entities/LivingEntities/Player/PlayerAttacks/SwordAttack.cs @@ -1,13 +1,25 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.CollisionManager; +using ZoFo.GameCore.GameObjects.MapObjects.StopObjects; namespace ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player.PlayerAttacks { internal class SwordAttack : IPlayerWeaponAttack { + Rectangle rectangle; + public SwordAttack(){ + } + public Rectangle Attack(Vector2 position){ + rectangle = new Rectangle((int)position.X, (int)position.Y, 30, 10); + return rectangle; + } } } diff --git a/ZoFo/GameCore/GameObjects/GameObject.cs b/ZoFo/GameCore/GameObjects/GameObject.cs index f6134bb..335d042 100644 --- a/ZoFo/GameCore/GameObjects/GameObject.cs +++ b/ZoFo/GameCore/GameObjects/GameObject.cs @@ -58,6 +58,7 @@ public abstract class GameObject public void PlayAnimation_OnClient() { graphicsComponent.Update(); + } /// @@ -69,14 +70,19 @@ public abstract class GameObject graphicsComponent.LoadContent(); } + /// + /// for smooth client draw + /// + public Vector2 positionDraw; /// /// Для клиента /// Обновление, которое вызывается у клиента, для просмотра анимаций /// public virtual void UpdateAnimations() { - graphicsComponent.ObjectDrawRectangle.X = (int)position.X; //Move To place where Updates Sets your position - graphicsComponent.ObjectDrawRectangle.Y = (int)position.Y; + positionDraw = (position * 0.15f + positionDraw*0.85f); + graphicsComponent.ObjectDrawRectangle.X = (int)positionDraw.X; //Move To place where Updates Sets your position + graphicsComponent.ObjectDrawRectangle.Y = (int)positionDraw.Y; PlayAnimation_OnClient(); } diff --git a/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs b/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs index 85c4a7e..b171d4c 100644 --- a/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs +++ b/ZoFo/GameCore/Graphics/AnimatedGraphicsComponent.cs @@ -136,7 +136,16 @@ namespace ZoFo.GameCore.Graphics buildSourceRectangle(); SetInterval(); + } + + public void StartCyclingAnimation(string startedanimationId) + { + currentFrame = 0; + currentAnimation = animations.Find(x => x.Id == startedanimationId); + currentAnimation.IsCycle = true; + buildSourceRectangle(); + SetInterval(); } public void StopAnimation() diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index a8b7b92..7701e87 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -124,13 +124,11 @@ namespace ZoFo.GameCore 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 Player(new Vector2(760, 140))); //for (int i = 0; i < 20; i++) // for (int j = 0; j < 20; j++) // AppManager.Instance.server.RegisterGameObject(new Zombie(new Vector2(1300 + i*70, 1000+j*70))); - - AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(140, 440))); - AppManager.Instance.server.RegisterGameObject(new Ammo(new Vector2(240, 440))); + } /// diff --git a/ZoFo/GameSettings.txt b/ZoFo/GameSettings.txt index f5dcd93..5c15cbb 100644 --- a/ZoFo/GameSettings.txt +++ b/ZoFo/GameSettings.txt @@ -1 +1 @@ -{"IsFullScreen":false,"MainVolume":1.0,"MusicVolume":1.0,"SoundEffectsVolume":1.0,"Resolution":{"X":1440,"Y":900}} \ No newline at end of file +{"IsFullScreen":false,"MainVolume":1.0,"MusicVolume":0.0,"SoundEffectsVolume":1.0,"Resolution":{"X":1440,"Y":900}} \ No newline at end of file diff --git a/ZoFo/ZoFo.csproj b/ZoFo/ZoFo.csproj index 1fd87e3..85b8274 100644 --- a/ZoFo/ZoFo.csproj +++ b/ZoFo/ZoFo.csproj @@ -35,8 +35,8 @@ - - + +