diff --git a/AnimationsFileCreator/Program.cs b/AnimationsFileCreator/Program.cs index bda2baf..9a712a0 100644 --- a/AnimationsFileCreator/Program.cs +++ b/AnimationsFileCreator/Program.cs @@ -5,6 +5,7 @@ using System; using System.Windows.Forms; using System.IO; using System.Linq; +using System.Reflection.Metadata; namespace AnimationsFileCreator { @@ -62,7 +63,7 @@ namespace AnimationsFileCreator container.TextureFrameInterval = 1; container.Id = id; string json = JsonConvert.SerializeObject(container); - StreamWriter writer = new StreamWriter("../../../../DangerousD/Content/animations/" + id); + StreamWriter writer = new StreamWriter("../../../../DangerousD/Content/animations/"+id); writer.WriteLine(json); writer.Close(); } diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index 0ea387f..6729fe5 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -10,6 +10,7 @@ #-------------------------------- References --------------------------------# +/reference:references/MonoGame.Extended.Content.Pipeline.dll #---------------------------------- Content ---------------------------------# @@ -83,6 +84,19 @@ /processorParam:TextureFormat=Color /build:menuFon.jpg +#begin MonstersAnimations.png +#begin menuFon.jpg +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:menuFon.jpg + #begin MenuFon2.jpg /importer:TextureImporter /processor:TextureProcessor @@ -107,7 +121,7 @@ /processorParam:TextureFormat=Color /build:menuFon3.jpg -#begin PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png +#begin tiles.png /importer:TextureImporter /processor:TextureProcessor /processorParam:ColorKeyColor=255,0,255,255 @@ -117,7 +131,7 @@ /processorParam:ResizeToPowerOfTwo=False /processorParam:MakeSquare=False /processorParam:TextureFormat=Color -/build:PC_Computer_Dangerous_Dave_In_The_Haunted_Mansion_Death_Sequences.png +/build:tiles.png #begin wall.jpg /importer:TextureImporter diff --git a/DangerousD/Content/animations/SilasAttack b/DangerousD/Content/animations/SilasAttack new file mode 100644 index 0000000..4727523 --- /dev/null +++ b/DangerousD/Content/animations/SilasAttack @@ -0,0 +1,20 @@ +{ + "id": "SilasAttack", + "textureName": "MonstersAnimations", + "startSpriteRectangle": { + "X": 1, + "Y": 618, + "Width": 72, + "Height": 80 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 5 + } + ], + "textureFrameInterval": 1, + "framesCount": 2, + "isCycle": true, + "offset": "0, 0" +} diff --git a/DangerousD/Content/animations/SilasBallMove b/DangerousD/Content/animations/SilasBallMove new file mode 100644 index 0000000..9a0b5f4 --- /dev/null +++ b/DangerousD/Content/animations/SilasBallMove @@ -0,0 +1 @@ +{"id":"SilasBallMove","textureName":"MonstersAnimations","startSpriteRectangle":{"X":147,"Y":618,"Width":24,"Height":24},"frameSecond":[{"Item1":0,"Item2":8}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SilasHandMove b/DangerousD/Content/animations/SilasHandMove new file mode 100644 index 0000000..06589c3 --- /dev/null +++ b/DangerousD/Content/animations/SilasHandMove @@ -0,0 +1 @@ +{"id":"SilasHandMove","textureName":"MonstersAnimations","startSpriteRectangle":{"X":197,"Y":618,"Width":24,"Height":24},"frameSecond":[{"Item1":0,"Item2":8}],"textureFrameInterval":1,"framesCount":2,"isCycle":true,"offset":"0, 0"} diff --git a/DangerousD/Content/animations/SilasMove b/DangerousD/Content/animations/SilasMove new file mode 100644 index 0000000..334d3c5 --- /dev/null +++ b/DangerousD/Content/animations/SilasMove @@ -0,0 +1,20 @@ +{ + "id": "SilasMove", + "textureName": "MonstersAnimations", + "startSpriteRectangle": { + "X": 1, + "Y": 618, + "Width": 72, + "Height": 80 + }, + "frameSecond": [ + { + "Item1": 0, + "Item2": 60 + } + ], + "textureFrameInterval": 1, + "framesCount": 2, + "isCycle": true, + "offset": "0, 0" +} diff --git a/DangerousD/Content/lvl.tmx b/DangerousD/Content/lvl.tmx new file mode 100644 index 0000000..b81ea88 --- /dev/null +++ b/DangerousD/Content/lvl.tmx @@ -0,0 +1,759 @@ + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,75,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,52, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,0,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,40,41,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,53,54,0 + + +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,52, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,74,75,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,13,75,0,0,0,0 + + +52,0,0,0,52,0,0,0,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,0,0,52,0,0,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,0,52,0,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +52,52,52,52,52,52,52,52,52,0,0,0,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,0,0,0,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,0,0,0,52,52,52,52, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +52,52,52,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,46,0,0,66,67,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,66,67,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,66,67,0, +0,0,0,0,0,0,76,76,76,76,76,76,76,76,76,76, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,51,52,52,52,52,52,52, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,75,0,0,0,0,0,0,0,0,0,0,0,0, +52,52,52,52,0,0,0,0,0,0,0,0,0,0,0,0, +76,76,76,76,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,149,152,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,150,153,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,151,154,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,149,152,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,150,153,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,151,154,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,149,152,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,79,80,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,92,93,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,105,106,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,149,152,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,150,153,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,151,154,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,149,152,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,149,152,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,150,153,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,151,154,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,149,152,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,150,153,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,151,154,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,150,153,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,151,154,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,150,153,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,151,154,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,149,152,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,150,153,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,151,154,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,149,152,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,150,153,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,151,154,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,0,0,0,147,199,148,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,160,199,161,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +183,184,185,186,199,187,188,189,190,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,2,3,4, +29,29,29,29,5,6,29,29,29,29,29,29,14,15,16,17, +29,29,29,29,29,29,29,29,29,29,29,29,27,28,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,2,3,4,29,29,29,23,24,29,29,29,29,29, +29,29,14,15,16,17,29,29,29,29,29,29,29,29,29,29, +29,29,27,28,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,5,6, +29,29,29,23,24,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 + + +29,29,29,29,29,0,0,0,0,0,0,0,0,0,0,0, +29,29,29,29,29,0,144,144,144,144,144,144,144,144,247,144, +29,29,29,29,0,0,157,157,167,157,157,157,157,157,260,157, +29,29,29,29,0,0,157,157,180,157,254,255,157,157,260,157, +29,29,29,29,0,0,157,157,193,157,267,268,157,157,260,157, +29,29,29,29,0,0,204,204,204,204,280,281,204,272,260,272, +29,29,29,29,0,0,147,199,148,0,0,0,0,0,260,0, +29,29,29,29,0,0,147,199,148,144,144,144,144,144,260,144, +29,29,29,29,0,0,147,199,148,157,157,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,157,157,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,157,157,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,204,272,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,0,0,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,144,144,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,157,157,157,157,157,260,157, +29,29,29,29,0,0,147,199,148,157,157,157,157,157,260,157 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,178,179,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,191,192,157,157,252,253,157,157,157,157,157,157,258, +157,157,157,157,157,157,157,265,266,157,157,157,696,697,157,271, +204,204,204,204,204,204,204,278,279,204,204,204,709,710,204,284, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,258,157,157,157,252,253,157,157,157,157, +157,157,157,157,157,157,271,157,157,157,265,266,157,696,697,157, +157,157,272,204,204,204,284,204,204,204,278,279,204,709,710,204, +157,157,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +157,157,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,157,157,157,157,157,157,157,157,167,157,157,209,210, +157,157,157,157,254,255,157,157,157,157,157,180,157,157,222,223 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,157,243,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,256,257,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,269,270,157,157,157,157,217,261,262,263,264,217, +204,204,204,204,282,283,204,204,204,204,230,274,275,276,277,230, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,157,209,210,211,212,157,157,157,167,157,157,157,157, +157,254,255,157,222,223,224,225,157,157,157,180,157,157,157,157, +157,267,268,157,235,236,237,238,157,157,157,193,157,157,157,157, +204,280,281,204,204,204,204,204,204,204,204,204,204,204,204,204, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +211,212,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +224,225,157,157,252,253,157,248,249,157,157,258,157,157,157,157 + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,621,622,144,144,144,0,0,0, +157,157,157,157,157,157,157,157,634,635,157,157,157,0,0,0, +157,248,249,157,157,157,272,157,647,648,157,272,157,0,0,0, +157,250,251,157,157,157,145,147,199,200,148,145,157,0,0,0, +204,239,240,204,204,204,204,160,199,200,161,204,204,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,0,0,0, +178,179,157,157,157,157,157,243,157,157,157,157,157,0,0,0, +191,192,157,157,157,157,157,256,257,157,252,253,157,0,0,0, +157,157,157,157,157,157,157,269,270,157,265,266,157,0,0,0, +204,204,204,204,204,204,204,282,283,204,278,279,204,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +144,144,144,147,199,148,144,144,144,144,144,144,144,0,0,0, +157,157,157,147,199,148,157,243,157,157,157,157,157,0,0,0, +254,255,157,147,199,148,157,256,257,157,252,253,157,0,0,0 + + +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,2,3,4,29, +29,29,29,29,29,29,29,29,29,29,29,14,15,16,17,29, +29,29,29,29,29,29,29,29,29,29,29,27,28,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,5,6,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,5, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,19,20,21,22,0,0,29,29,29,29,29,29,29, +29,30,31,32,33,34,35,0,0,29,29,29,29,29,29,29, +29,43,44,45,46,47,48,0,0,29,29,29,29,29,29,29, +64,65,18,58,59,60,18,0,0,29,29,29,29,29,29,29, +77,78,18,71,72,73,18,0,0,68,56,56,55,56,56,69, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +29,29,29,29,0,0,147,199,148,157,157,157,157,157,260,157, +29,29,29,29,0,0,160,200,161,204,204,272,157,157,260,157, +29,29,29,29,0,0,0,0,0,0,0,0,157,157,260,157, +29,29,29,29,0,0,144,144,144,144,144,144,157,157,260,157, +29,29,29,29,0,0,157,167,157,157,157,157,157,157,260,157, +29,29,29,29,0,0,157,180,157,252,253,157,157,157,260,157, +29,29,29,29,0,0,157,193,157,265,266,157,157,157,260,157, +6,29,29,29,0,0,204,204,204,278,279,204,272,157,260,157, +29,29,29,29,0,0,0,0,0,0,0,0,0,157,260,157, +29,29,29,29,0,0,144,144,144,144,144,144,144,157,260,157, +29,29,29,29,0,0,157,157,157,157,157,157,157,219,220,221, +29,29,29,12,0,0,157,157,157,254,255,157,157,232,233,234, +29,29,29,29,26,63,157,157,157,267,268,218,213,214,215,216, +29,29,29,38,39,63,204,204,204,280,281,231,226,227,228,229, +29,29,29,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +157,157,157,157,267,268,157,696,697,157,157,193,157,157,235,236, +157,272,204,204,280,281,204,709,710,204,204,204,204,204,204,204, +157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +157,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,178,179,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,191,192,157,248,249,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,250,251,157,217,261,262,263,264,217,157, +272,204,204,204,204,204,239,240,204,230,274,275,276,277,230,204, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,157,157,157,157,157,243,157,157,209,210,211,212,157, +157,252,253,157,157,258,157,157,256,257,157,222,223,224,225,157, +218,265,266,157,157,271,157,157,269,270,157,235,236,237,238,157, +231,278,279,204,204,284,204,204,282,283,204,204,204,204,204,204, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +237,238,157,157,265,266,157,250,251,157,157,271,157,157,157,157, +204,204,204,204,278,279,204,239,240,204,204,284,204,204,204,204, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,157,157,157,157,157,157,157,243,157,157,209,210,211,212, +157,157,254,255,157,248,249,157,157,256,257,157,222,223,224,225, +157,157,267,268,157,250,251,157,157,269,270,157,235,236,237,238, +204,204,280,281,204,239,240,204,204,282,283,204,204,204,204,204, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +157,157,178,179,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,191,192,157,157,157,157,258,157,157,157,248,249,157,157, +157,157,157,157,157,696,697,157,271,157,157,157,250,251,157,157, +204,204,204,204,204,709,710,204,284,204,204,204,239,240,204,204, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +267,268,157,147,199,148,157,269,270,157,265,266,218,0,0,0, +280,281,204,160,200,161,204,282,283,204,278,279,231,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +144,144,144,147,199,148,144,144,144,144,144,144,144,0,0,0, +157,157,157,147,199,148,157,157,157,157,157,157,157,0,0,0, +157,157,157,147,199,148,157,157,157,157,252,253,157,0,0,0, +157,157,157,147,199,148,157,217,157,157,265,266,157,0,0,0, +204,204,204,160,200,161,204,230,204,204,278,279,204,0,0,0, +0,0,0,147,199,148,0,0,0,0,0,0,0,0,0,0, +144,144,144,147,199,148,144,144,144,144,144,144,144,0,0,0, +157,157,159,160,200,161,162,157,157,157,157,157,157,0,0,0, +157,171,172,173,199,174,175,176,157,157,252,253,157,0,0,0, +183,184,185,186,199,187,188,189,190,157,265,266,157,0,0,0, +196,197,198,199,199,200,201,202,203,204,278,279,204,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DangerousD/Content/map.tsx b/DangerousD/Content/map.tsx new file mode 100644 index 0000000..288bb53 --- /dev/null +++ b/DangerousD/Content/map.tsx @@ -0,0 +1,4 @@ + + + + diff --git a/DangerousD/Content/tiles.png b/DangerousD/Content/tiles.png new file mode 100644 index 0000000..3e35587 Binary files /dev/null and b/DangerousD/Content/tiles.png differ diff --git a/DangerousD/Desktop/DangerousD map/map_0.mgcontent b/DangerousD/Desktop/DangerousD map/map_0.mgcontent new file mode 100644 index 0000000..acc2649 --- /dev/null +++ b/DangerousD/Desktop/DangerousD map/map_0.mgcontent @@ -0,0 +1,16 @@ + + + C:/Users/Semejkin_AV/Desktop/DangerousD map/map.tsx + 2023-08-16T13:04:13.796245+03:00 + C:/Users/Semejkin_AV/Documents/Github_repos/DangerousD/DangerousD/Content/bin/DesktopGL/Content/../../../../../Desktop/DangerousD map/map_0.xnb + 2023-08-16T15:38:41.8125207+03:00 + TiledMapTilesetImporter + 2023-07-14T20:14:40+03:00 + TiledMapTilesetProcessor + 2023-07-14T20:14:40+03:00 + + + C:/Users/Semejkin_AV/Documents/Github_repos/DangerousD/DangerousD/Content/bin/DesktopGL/Content/../../../../../Desktop/DangerousD map/tiles_0.xnb + + + \ No newline at end of file diff --git a/DangerousD/Desktop/DangerousD map/tiles_0.mgcontent b/DangerousD/Desktop/DangerousD map/tiles_0.mgcontent new file mode 100644 index 0000000..4cfff75 --- /dev/null +++ b/DangerousD/Desktop/DangerousD map/tiles_0.mgcontent @@ -0,0 +1,22 @@ + + + C:/Users/Semejkin_AV/Desktop/DangerousD map/tiles.BMP + 2023-08-16T12:47:16.3453923+03:00 + C:/Users/Semejkin_AV/Documents/Github_repos/DangerousD/DangerousD/Content/bin/DesktopGL/Content/../../../../../Desktop/DangerousD map/tiles_0.xnb + 2023-08-16T15:38:41.7865192+03:00 + TextureImporter + 2022-07-26T14:44:56+03:00 + TextureProcessor + 2022-07-26T14:44:56+03:00 + + ColorKeyColor + 0,0,0,0 + + + ColorKeyEnabled + True + + + + + \ No newline at end of file diff --git a/DangerousD/GameCore/GUI/AbstractGui.cs b/DangerousD/GameCore/GUI/AbstractGui.cs index 24af331..7f7b212 100644 --- a/DangerousD/GameCore/GUI/AbstractGui.cs +++ b/DangerousD/GameCore/GUI/AbstractGui.cs @@ -17,9 +17,9 @@ public abstract class AbstractGui : IDrawableObject protected abstract void CreateUI(); private GraphicsDevice graphicsDevice; - public virtual void Initialize(GraphicsDevice graphicsDevice) + public virtual void Initialize() { - Manager.Initialize(graphicsDevice); + Manager.Initialize(AppManager.Instance.GraphicsDevice); this.graphicsDevice = graphicsDevice; CreateUI(); } diff --git a/DangerousD/GameCore/GUI/LobbyGUI.cs b/DangerousD/GameCore/GUI/LobbyGUI.cs index f782750..2927758 100644 --- a/DangerousD/GameCore/GUI/LobbyGUI.cs +++ b/DangerousD/GameCore/GUI/LobbyGUI.cs @@ -10,6 +10,7 @@ using System.Threading.Tasks; using DangerousD.GameCore.Managers; using MonogameLibrary.UI.Base; using System.Diagnostics; +using DangerousD.GameCore.Network; namespace DangerousD.GameCore.GUI { @@ -32,8 +33,32 @@ namespace DangerousD.GameCore.GUI Elements.Add(new Label(Manager) { rectangle = new Rectangle(screenWidth / 30 * 2, screenHeight / 30 * 5, screenWidth / 30 * 26, screenHeight / 15 * 10) }); - // Buttons + // Buttons and ip textbox { + TextBox searchBarTextBox = new TextBox(Manager) + { + rectangle = new Rectangle(screenWidth / 30 * 14, screenHeight / 30, + screenWidth / 30 * 10, screenHeight / 30 * 3), + text = "ip", + scale = 0.16f, + fontColor = Color.Gray, + fontName = "font2", + textAligment = TextAligment.Left + + }; + searchBarTextBox.TextChanged += input => { + if (searchBarTextBox.fontColor == Color.Gray) + { + searchBarTextBox.text = ""; searchBarTextBox.fontColor = Color.Black; + } + }; + searchBarTextBox.StopChanging += input => { + if (input.Length == 0) + { + searchBarTextBox.fontColor = Color.Gray; + searchBarTextBox.text = "ip"; + } + }; Button backButton = new ButtonText(Manager) { rectangle = new Rectangle(screenWidth / 30, screenHeight / 30, 60, 50), @@ -55,7 +80,9 @@ namespace DangerousD.GameCore.GUI fontName = "font2" }; hostButton.LeftButtonPressed += () => { - + + AppManager.Instance.NetworkManager.HostInit(AppManager.Instance.IpAddress); + }; Button refreshButton = new ButtonText(Manager) @@ -79,7 +106,7 @@ namespace DangerousD.GameCore.GUI fontName = "font2" }; joinSelectedButton.LeftButtonPressed += () => { - + AppManager.Instance.NetworkManager.ClientInit(AppManager.Instance.IpAddress); }; Button joinByIpButton = new ButtonText(Manager) { @@ -90,34 +117,7 @@ namespace DangerousD.GameCore.GUI fontName = "font2" }; joinByIpButton.LeftButtonPressed += () => { - - }; - } - - // SearchBar - { - TextBox searchBarTextBox = new TextBox(Manager) { - rectangle = new Rectangle(screenWidth / 30 * 14, screenHeight / 30, - screenWidth / 30 * 10, screenHeight / 30 * 3), - text = "ip", - scale = 0.16f, - fontColor = Color.Gray, - fontName = "font2", - textAligment = TextAligment.Left - - }; - searchBarTextBox.TextChanged += input => { - if (searchBarTextBox.fontColor == Color.Gray) - { - searchBarTextBox.text = ""; searchBarTextBox.fontColor = Color.Black; - } - }; - searchBarTextBox.StopChanging += input => { - if (input.Length == 0) - { - searchBarTextBox.fontColor = Color.Gray; - searchBarTextBox.text = "ip"; - } + AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text); }; } } diff --git a/DangerousD/GameCore/GUI/MenuGUI.cs b/DangerousD/GameCore/GUI/MenuGUI.cs index f619d5f..b1ac08d 100644 --- a/DangerousD/GameCore/GUI/MenuGUI.cs +++ b/DangerousD/GameCore/GUI/MenuGUI.cs @@ -35,6 +35,7 @@ internal class MenuGUI : AbstractGui butSingle.LeftButtonPressed += () => { AppManager.Instance.ChangeGameState(GameState.Game); + AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.SinglePlayer); }; var butMulti = new ButtonText(Manager) { rectangle = new Rectangle((wigth - 300) / 2, 190, 300, 50), text = "Multiplayer", fontName = "ButtonFont" }; Elements.Add(butMulti); diff --git a/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs b/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs new file mode 100644 index 0000000..b14d8af --- /dev/null +++ b/DangerousD/GameCore/GameObjects/Entities/SilasBall.cs @@ -0,0 +1,36 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DangerousD.GameCore.GameObjects.Entities +{ + public class SilasBall : LivingEntity + { + public SilasBall(Vector2 position) : base(position) + { + Height = 60; + Width = 60; + acceleration = Vector2.Zero; + + } + public SilasBall(Vector2 position, Vector2 velosity) : base(position) + { + Height = 60; + Width = 60; + acceleration = Vector2.Zero; + velocity = velosity; + + } + + protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "SilasBallMove" }, "SilasBallMove"); + public override void Update(GameTime gameTime) + { + base.Update(gameTime); + + } + } +} diff --git a/DangerousD/GameCore/GameObjects/Entity.cs b/DangerousD/GameCore/GameObjects/Entity.cs index cf2caa9..8876e2c 100644 --- a/DangerousD/GameCore/GameObjects/Entity.cs +++ b/DangerousD/GameCore/GameObjects/Entity.cs @@ -7,12 +7,9 @@ using Microsoft.Xna.Framework.Graphics; namespace DangerousD.GameCore.GameObjects { public abstract class Entity : GameObject - { - - + { public Entity(Vector2 position) : base(position) {} - + public virtual void SetPosition(Vector2 position) { _pos = position; } - } } diff --git a/DangerousD/GameCore/GameObjects/GameObject.cs b/DangerousD/GameCore/GameObjects/GameObject.cs index c354e3e..ae5cd2c 100644 --- a/DangerousD/GameCore/GameObjects/GameObject.cs +++ b/DangerousD/GameCore/GameObjects/GameObject.cs @@ -22,10 +22,12 @@ namespace DangerousD.GameCore protected abstract GraphicsComponent GraphicsComponent { get; } public GameObject(Vector2 pos) { + Initialize(); _pos = pos; Width = 500; Height = 101; //Animator = new GraphicsComponent(new() { "playerIdle" }); + LoadContent(); AppManager.Instance.GameManager.Register(this); } @@ -34,7 +36,7 @@ namespace DangerousD.GameCore { } - public virtual void Initialize(GraphicsDevice graphicsDevice) + public virtual void Initialize() { } diff --git a/DangerousD/GameCore/GameObjects/IDrawableObject.cs b/DangerousD/GameCore/GameObjects/IDrawableObject.cs index f157dcb..1d9ca5c 100644 --- a/DangerousD/GameCore/GameObjects/IDrawableObject.cs +++ b/DangerousD/GameCore/GameObjects/IDrawableObject.cs @@ -6,7 +6,7 @@ namespace DangerousD.GameCore.GUI { interface IDrawableObject { - void Initialize(GraphicsDevice graphicsDevice); + void Initialize(); void LoadContent(); void Update(GameTime gameTime); void Draw(SpriteBatch spriteBatch); diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs index 6c13e1b..d16936a 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasHands.cs @@ -1,4 +1,8 @@ -using System; +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,7 +10,61 @@ using System.Threading.Tasks; namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { - internal class SilasHands + public class SilasHands : CoreEnemy { + public SilasHands(Vector2 position) : base(position) + { + name = "SilasHand"; + Width = 48; + Height = 48; + monster_health = 2; + monster_speed = 2; + acceleration = Vector2.Zero; + + } + + protected override GraphicsComponent GraphicsComponent { get; }=new GraphicsComponent(new List() { "SilasHandMove" }, "SilasHandMove"); + + public override void Attack() + { + throw new NotImplementedException(); + } + + public override void Death() + { + throw new NotImplementedException(); + } + + public override void Move(GameTime gameTime) + { + if (Pos.Y> AppManager.Instance.GameManager.GetPlayer1.Pos.Y) + { + velocity.Y = -monster_speed; + + } + else + { + velocity.Y = monster_speed; + } + if (Pos.X> AppManager.Instance.GameManager.GetPlayer1.Pos.X) + { + velocity.X = -monster_speed; + } + else + { + velocity.X = monster_speed; + } + } + public override void Update(GameTime gameTime) + { + base.Update(gameTime); + Move(gameTime); + if ((Pos.X + 20 <= AppManager.Instance.GameManager.GetPlayer1.Pos.X || Pos.X - 20 >= AppManager.Instance.GameManager.GetPlayer1.Pos.X)&&(Pos.Y + 20 <= AppManager.Instance.GameManager.GetPlayer1.Pos.Y || Pos.Y - 20 >= AppManager.Instance.GameManager.GetPlayer1.Pos.Y)) + { + + AppManager.Instance.GameManager.GetPlayer1.Death(name); + } + GraphicsComponent.Update(); + } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs index 4a5d727..d4fb5d2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/SilasMaster.cs @@ -1,4 +1,9 @@ -using System; +using DangerousD.GameCore.GameObjects.Entities; +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,7 +11,116 @@ using System.Threading.Tasks; namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { - public class SilasMaster + public class SilasMaster : CoreEnemy { + private int attackTime = 60; + private int moveTime = 360; + private int currentTime = 0; + private bool isGoRight = true; + int leftBorder; + int rightBorder; + List hands = new List(); + List balls = new List(); + public SilasMaster(Vector2 position) : base(position) + { + name = "SilasMaster"; + Width = 144; + Height = 160; + monster_health = 15; + monster_speed = 4; + acceleration = Vector2.Zero; + leftBorder = (int)position.X - 60; + rightBorder = (int)position.X + 120; + acceleration = Vector2.Zero; + hands.Add(new SilasHands(new Vector2(Pos.X+60,Pos.Y+120))); + hands.Add(new SilasHands(new Vector2(Pos.X + 90, Pos.Y + 120))); + for (int i = 0; i < 4; i++) + { + SilasBall silasball = new SilasBall(new Vector2(Pos.X + i * 40, Pos.Y + 120), new Vector2((i - 2) * 4, 6)); + balls.Add(silasball); + } + } + protected override GraphicsComponent GraphicsComponent { get; } = new GraphicsComponent(new List() { "SilasMove", "SilasAttack" }, "SilasMove"); + public override void Attack() + { + + if (currentTime == 0) + { + GraphicsComponent.StartAnimation("SilasAttack"); + + } + else if (currentTime == attackTime / 2) + { + SpawnAttackBall(); + } + else if (currentTime >= attackTime) + { + + GraphicsComponent.StartAnimation("SilasMove"); + currentTime = 0; + } + currentTime++; + } + private void SpawnAttackBall() + { + for (int i = 0; i < balls.Count; i++) + { + balls[i].SetPosition(new Vector2(Pos.X + i * 40, Pos.Y + 120)); + } + + + } + public override void Death() + { + throw new NotImplementedException(); + } + + public override void Move(GameTime gameTime) + { + if (currentTime == 0) + { + GraphicsComponent.StartAnimation("SilasMove"); + } + else if (currentTime >= moveTime) + { + GraphicsComponent.StartAnimation("SilasAttack"); + currentTime = 0; + } + currentTime++; + if (isGoRight) + { + velocity.X = monster_speed; + } + else if (!isGoRight) + { + velocity.X = -monster_speed; + } + + if (Pos.X >= rightBorder) + { + isGoRight = false; + } + else if (Pos.X <= leftBorder) + { + isGoRight = true; + } + } + public override void Update(GameTime gameTime) + { + base.Update(gameTime); + if (hands.Count<2) + { + hands.Add(new SilasHands(new Vector2(Pos.X + 60, Pos.Y + 120))); + } + if (GraphicsComponent.CurrentAnimation.Id == "SilasMove") + { + Move(gameTime); + } + else + { + velocity = Vector2.Zero; + Attack(); + } + } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs index 34aa9d5..be2f7a2 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs @@ -7,23 +7,27 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using DangerousD.GameCore.Managers; namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { public class Zombie : CoreEnemy { private bool isGoRight = true; - int leftBorder; - int rightBorder; + float leftBorder; + float rightBorder; bool isAttaking = false; + bool isTarget = false; + PhysicsManager physicsManager; public Zombie(Vector2 position) : base(position) { - Width = 72; - Height = 120; + Width = 24; + Height = 40; monster_speed = 3; name = "Zombie"; - leftBorder = (int)position.X - 60; - rightBorder = (int)position.X + 120; + leftBorder = (int)position.X - 100; + rightBorder = (int)position.X + 100; + physicsManager = new PhysicsManager(); } protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "ZombieMoveRight", "ZombieMoveLeft", "ZombieRightAttack", "ZombieLeftAttack" }, "ZombieMoveLeft"); @@ -31,6 +35,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters { if (!isAttaking) { + Target(); Move(gameTime); } @@ -106,5 +111,25 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters } base.OnCollision(gameObject); } + + public void Target() + { + if(physicsManager.RayCast(this, AppManager.Instance.GameManager.players[0]) == null) + { + if(isGoRight && this._pos.X <= AppManager.Instance.GameManager.players[0].Pos.X) + { + isTarget = true; + leftBorder = Pos.X - 10; + rightBorder = Pos.X + AppManager.Instance.GameManager.players[0].Pos.X; + } + + else if(!isGoRight && this._pos.X >= AppManager.Instance.GameManager.players[0].Pos.X) + { + isTarget = true; + rightBorder = Pos.X + 10; + leftBorder = AppManager.Instance.GameManager.players[0].Pos.X; + } + } + } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs index 1ddaf45..1867b60 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/DeathRectangle.cs @@ -20,6 +20,9 @@ namespace DangerousD.GameCore.GameObjects.PlayerDeath protected override GraphicsComponent GraphicsComponent { get; } = new(new List {"DeathFromZombie"}, "DeathFromZombie"); + + public GraphicsComponent Gr => GraphicsComponent; + private void PlayDeath(string deathName) { if (GraphicsComponent.GetCurrentAnimation != "DeathFromZombie") diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs index 7b9c0d6..1cd7429 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs @@ -16,10 +16,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities { Width = 32; Height = 64; - GraphicsComponent.actionOfAnimationEnd += (a) => - { - AppManager.Instance.ChangeGameState(GameState.GameOver); - }; + AppManager.Instance.InputManager.MovEventJump += AnimationJump; } public bool IsAlive { get { return isAlive; } } @@ -35,9 +32,19 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities if(monsterName == "Zombie") { DeathRectangle deathRectangle = new DeathRectangle(Pos, "DeathFrom" + monsterName); - GraphicsComponent.actionOfAnimationEnd("0"); + deathRectangle.Gr.actionOfAnimationEnd += (a) => + { + if (a == "DeathFrom" + monsterName) + { + AppManager.Instance.ChangeGameState(GameState.GameOver); + } + }; } isAlive = false; } + public void AnimationJump() + { + velocity.Y = -300; + } } } diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs index 5c18831..8341080 100644 --- a/DangerousD/GameCore/GameObjects/LivingEntity.cs +++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs @@ -11,7 +11,11 @@ public abstract class LivingEntity : Entity { acceleration = new Vector2(0, 30); } - public void SetPosition(Vector2 position) { targetPosition = position; _pos = position; } //TODO befrend targetpos and physics engine + public override void SetPosition(Vector2 position) + { + targetPosition = position; _pos = position; + + } //TODO befrend targetpos and physics engine public override void Update(GameTime gameTime) { diff --git a/DangerousD/GameCore/GameObjects/MapObject.cs b/DangerousD/GameCore/GameObjects/MapObject.cs index d4180d0..24add79 100644 --- a/DangerousD/GameCore/GameObjects/MapObject.cs +++ b/DangerousD/GameCore/GameObjects/MapObject.cs @@ -1,13 +1,29 @@ -using Microsoft.Xna.Framework; +using System.Collections.Generic; +using Microsoft.Xna.Framework; using System.Security.Cryptography.X509Certificates; - +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework.Graphics; namespace DangerousD.GameCore.GameObjects; public abstract class MapObject : GameObject { public bool IsColliderOn; - public MapObject(Vector2 position) : base(position) + private Rectangle _sourceRectangle; + protected override GraphicsComponent GraphicsComponent { get; } = new("tiles"); + public MapObject(Vector2 position, Vector2 size, Rectangle sourceRectangle) : base(position) + { + _sourceRectangle = sourceRectangle; + Width = (int)size.X; + Height = (int)size.Y; + } + + public override void Initialize() { } + + public void Draw(SpriteBatch spriteBatch) + { + GraphicsComponent.DrawAnimation(Rectangle, spriteBatch, _sourceRectangle); + } } \ No newline at end of file diff --git a/DangerousD/GameCore/GameObjects/MapObjects/GrassBlock.cs b/DangerousD/GameCore/GameObjects/MapObjects/GrassBlock.cs deleted file mode 100644 index 3ada6f5..0000000 --- a/DangerousD/GameCore/GameObjects/MapObjects/GrassBlock.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Content; -using Microsoft.Xna.Framework.Graphics; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using DangerousD.GameCore.Graphics; - -namespace DangerousD.GameCore.GameObjects.MapObjects -{ - internal class GrassBlock : MapObject - { - protected override GraphicsComponent GraphicsComponent { get; } = new("wall"); - - public GrassBlock(Vector2 position) : base(position) - { - Width = 32; - Height = 32; - } - } -} diff --git a/DangerousD/GameCore/GameObjects/MapObjects/Platform.cs b/DangerousD/GameCore/GameObjects/MapObjects/Platform.cs new file mode 100644 index 0000000..f3648f9 --- /dev/null +++ b/DangerousD/GameCore/GameObjects/MapObjects/Platform.cs @@ -0,0 +1,12 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; + +namespace DangerousD.GameCore.GameObjects.MapObjects; + +public class Platform : MapObject +{ + public Platform(Vector2 position, Vector2 size, Rectangle sourceRectangle) : base(position, size, sourceRectangle) + { + IsColliderOn = true; + } +} \ No newline at end of file diff --git a/DangerousD/GameCore/GameObjects/MapObjects/StopTile.cs b/DangerousD/GameCore/GameObjects/MapObjects/StopTile.cs new file mode 100644 index 0000000..096973b --- /dev/null +++ b/DangerousD/GameCore/GameObjects/MapObjects/StopTile.cs @@ -0,0 +1,12 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; + +namespace DangerousD.GameCore.GameObjects.MapObjects; + +public class StopTile : MapObject +{ + public StopTile(Vector2 position, Vector2 size, Rectangle sourceRectangle) : base(position, size, sourceRectangle) + { + IsColliderOn = true; + } +} \ No newline at end of file diff --git a/DangerousD/GameCore/GameObjects/MapObjects/TestAnimationDeath.cs b/DangerousD/GameCore/GameObjects/MapObjects/TestAnimationDeath.cs deleted file mode 100644 index 8e9be4d..0000000 --- a/DangerousD/GameCore/GameObjects/MapObjects/TestAnimationDeath.cs +++ /dev/null @@ -1,25 +0,0 @@ -using DangerousD.GameCore.Graphics; -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; - -namespace DangerousD.GameCore.GameObjects.MapObjects -{ - internal class TestAnimationDeath : Entity - { - protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "death1", "deathbear" },"death1"); - - public TestAnimationDeath(Vector2 position) : base(position) - { - Width =512; - Height = 512; - - GraphicsComponent.StartAnimation("deathbear"); - - } - } -} diff --git a/DangerousD/GameCore/GameObjects/MapObjects/Tile.cs b/DangerousD/GameCore/GameObjects/MapObjects/Tile.cs new file mode 100644 index 0000000..2b11dda --- /dev/null +++ b/DangerousD/GameCore/GameObjects/MapObjects/Tile.cs @@ -0,0 +1,12 @@ +using DangerousD.GameCore.Graphics; +using Microsoft.Xna.Framework; + +namespace DangerousD.GameCore.GameObjects.MapObjects; + +public class Tile : MapObject +{ + public Tile(Vector2 position, Vector2 size, Rectangle sourceRectangle) : base(position, size, sourceRectangle) + { + IsColliderOn = false; + } +} \ No newline at end of file diff --git a/DangerousD/GameCore/Graphics/GraphicsComponent.cs b/DangerousD/GameCore/Graphics/GraphicsComponent.cs index 6c86077..beb6928 100644 --- a/DangerousD/GameCore/Graphics/GraphicsComponent.cs +++ b/DangerousD/GameCore/Graphics/GraphicsComponent.cs @@ -11,12 +11,19 @@ namespace DangerousD.GameCore.Graphics public class GraphicsComponent { - public Action actionOfAnimationEnd; + public event Action actionOfAnimationEnd; private List animations; private List textures; private List texturesNames; private AnimationContainer currentAnimation; - + public AnimationContainer CurrentAnimation + { + get + { + return currentAnimation; + } + } + public string LastAnimation { get; set; } public string GetCurrentAnimation { get { return currentAnimation.Id; } @@ -26,16 +33,21 @@ namespace DangerousD.GameCore.Graphics //private SpriteBatch _spriteBatch; private int currentFrame; + public int CurrentFrame + { + get + { + return currentFrame; + } + } private int interval; private int lastInterval; private Rectangle sourceRectangle; - public GraphicsComponent(List animationsId, string neitralAnimationId) { //this._spriteBatch = _spriteBatch; currentFrame = 0; lastInterval = 1; - LoadAnimations(animationsId, neitralAnimationId); currentAnimation = neitralAnimation; SetInterval(); diff --git a/DangerousD/GameCore/Levels/ILevel.cs b/DangerousD/GameCore/Levels/ILevel.cs deleted file mode 100644 index 7fbec35..0000000 --- a/DangerousD/GameCore/Levels/ILevel.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace DangerousD.GameCore.Levels -{ - interface ILevel - { - void InitLevel(); - } -} diff --git a/DangerousD/GameCore/Levels/Level1.cs b/DangerousD/GameCore/Levels/Level1.cs deleted file mode 100644 index c3558d9..0000000 --- a/DangerousD/GameCore/Levels/Level1.cs +++ /dev/null @@ -1,31 +0,0 @@ -using DangerousD.GameCore.GameObjects.LivingEntities; -using DangerousD.GameCore.GameObjects.MapObjects; -using Microsoft.Xna.Framework; -using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; -using System.Collections.Generic; - -namespace DangerousD.GameCore.Levels -{ - public class Level1 : ILevel - { - public void InitLevel() - { - new Player(new Vector2(80,0)); - var Zombie = new Zombie(new Vector2(140, 128)); - var Frank = new Frank(new Vector2(384, 128)); - - var Spider = new Spider(new Vector2(112, 0)); - var FlameSkull = new FlameSkull(new Vector2(512, 0)); - var Werewolf = new Werewolf(new Vector2(640, 0)); - var Ghost = new Ghost(new Vector2(730, 0)); - var FrankBalls = new FrankBalls(new Vector2(Frank.Pos.X, Frank.Pos.Y)); - - new GrassBlock(new Vector2(0, 224)); - for (int i = 0; i < 50; i++) - { - new GrassBlock(new Vector2(i*32, 256)); - } - new GrassBlock(new Vector2(500, 224)); - } - } -} diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs index ab061b9..f800998 100644 --- a/DangerousD/GameCore/Managers/AppManager.cs +++ b/DangerousD/GameCore/Managers/AppManager.cs @@ -14,12 +14,15 @@ using DangerousD.GameCore.Managers; namespace DangerousD.GameCore { public enum GameState { Menu, Options, Lobby, Game, Login, GameOver } + public enum MultiPlayerStatus { SinglePlayer, Host, Client } public class AppManager : Game { - public static AppManager Instance { get; private set; } + public static AppManager Instance { get; private set; } + public string IpAddress { get; private set; } = "127.0.0.1"; private GraphicsDeviceManager _graphics; - private SpriteBatch _spriteBatch; - GameState gameState; + private SpriteBatch _spriteBatch; + public GameState gameState { get; private set; } + public MultiPlayerStatus multiPlayerStatus { get; private set; } = MultiPlayerStatus.SinglePlayer; IDrawableObject MenuGUI; IDrawableObject OptionsGUI; IDrawableObject LoginGUI; @@ -28,7 +31,7 @@ namespace DangerousD.GameCore public Point inGameResolution = new Point(800, 480); private RenderTarget2D renderTarget; - public GameManager GameManager { get; private set; } = new GameManager(); + public GameManager GameManager { get; private set; } = new(); public AnimationBuilder AnimationBuilder { get; private set; } = new AnimationBuilder(); public NetworkManager NetworkManager { get; private set; } = new NetworkManager(); public InputManager InputManager { get; private set; } = new InputManager(); @@ -36,15 +39,17 @@ namespace DangerousD.GameCore public SettingsManager SettingsManager { get; private set; } = new SettingsManager(); public AppManager() { + Content.RootDirectory = "Content"; Instance = this; _graphics = new GraphicsDeviceManager(this); - Content.RootDirectory = "Content"; IsMouseVisible = true; TargetElapsedTime = TimeSpan.FromMilliseconds(1000 / 30); SettingsManager = new SettingsManager(); SettingsManager.LoadSettings(); + NetworkManager.GetReceivingMessages += NetworkSync; + resolution = SettingsManager.Resolution; _graphics.PreferredBackBufferWidth = resolution.X; _graphics.PreferredBackBufferHeight = resolution.Y; @@ -59,10 +64,11 @@ namespace DangerousD.GameCore protected override void Initialize() { + GameManager.Initialize(); AnimationBuilder.LoadAnimations(); - MenuGUI.Initialize(GraphicsDevice); - LoginGUI.Initialize(GraphicsDevice); - LobbyGUI.Initialize(GraphicsDevice); + MenuGUI.Initialize(); + LoginGUI.Initialize(); + LobbyGUI.Initialize(); base.Initialize(); } @@ -160,12 +166,45 @@ namespace DangerousD.GameCore case GameState.Lobby: break; case GameState.Game: - GameManager.mapManager.LoadLevel(""); + GameManager.mapManager.LoadLevel("lvl"); + break; + case GameState.GameOver: break; default: throw new ArgumentOutOfRangeException(); } } + public void NetworkSync(List networkTasks) + { + foreach (NetworkTask networkTask in networkTasks) + { + switch (networkTask.operation) + { + case NetworkTaskOperationEnum.TakeDamage: + break; + case NetworkTaskOperationEnum.SendSound: + SoundManager.StartSound(networkTask.name, networkTask.position, GameManager.GetPlayer1.Pos); + break; + case NetworkTaskOperationEnum.CreateEntity: + break; + case NetworkTaskOperationEnum.SendPosition: + break; + case NetworkTaskOperationEnum.ChangeState: + break; + case NetworkTaskOperationEnum.ConnectToHost: + break; + case NetworkTaskOperationEnum.GetClientPlayerId: + break; + default: + break; + } + } + + } + public void SetMultiplayerState(MultiPlayerStatus multiPlayerStatus) + { + this.multiPlayerStatus = multiPlayerStatus; + } } } diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs index 55d83c2..f2ce8c8 100644 --- a/DangerousD/GameCore/Managers/GameManager.cs +++ b/DangerousD/GameCore/Managers/GameManager.cs @@ -7,15 +7,17 @@ using Microsoft.Xna.Framework.Graphics; using System; using System.Collections.Generic; using System.Text; +using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; namespace DangerousD.GameCore { public class GameManager { - + public List GetAllGameObjects { get; private set; } public List livingEntities; public List entities; public List mapObjects; + public List others; public MapManager mapManager; public PhysicsManager physicsManager; public List players; @@ -23,13 +25,23 @@ namespace DangerousD.GameCore public Player GetPlayer1 { get; private set; } public GameManager() { + others = new List(); + GetAllGameObjects = new List(); livingEntities = new List(); mapObjects = new List(); entities = new List(); players = new List(); - mapManager = new MapManager(); + mapManager = new MapManager(1); physicsManager = new PhysicsManager(); - mapManager.Init(); + } + + public void Initialize() + { + //mapManager.LoadLevel("Level1"); + } + + public void LoadContent() + { } internal void Register(GameObject gameObject) @@ -76,8 +88,11 @@ namespace DangerousD.GameCore item.Update(gameTime); foreach (var item in entities) item.Update(gameTime); - foreach (var item in livingEntities) - item.Update(gameTime); + + for (int i = 0; i < livingEntities.Count; i++) + { + livingEntities[i].Update(gameTime); + } foreach (var item in otherObjects) item.Update(gameTime); @@ -86,4 +101,4 @@ namespace DangerousD.GameCore } } -} \ No newline at end of file +} diff --git a/DangerousD/GameCore/Managers/MapManager.cs b/DangerousD/GameCore/Managers/MapManager.cs index f5c9d28..36a0f6b 100644 --- a/DangerousD/GameCore/Managers/MapManager.cs +++ b/DangerousD/GameCore/Managers/MapManager.cs @@ -1,26 +1,115 @@ -using DangerousD.GameCore.GameObjects; -using DangerousD.GameCore.Graphics; -using DangerousD.GameCore.Levels; -using System; +using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; -using System.Net.Security; -using System.Text; -using System.Threading.Tasks; +using System.Xml; +using DangerousD.GameCore.GameObjects.MapObjects; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System.Xml.Serialization; +using DangerousD.GameCore.GameObjects; namespace DangerousD.GameCore.Managers { public class MapManager { - ILevel Level; - public void Init() + private int _columns; + private int _scale; + + public MapManager(int scale) { - Level = new Level1(); + _scale = scale; } + //Level public void LoadLevel(string level) { - Level.InitLevel(); + LoadTilesData(); + + XmlDocument xml = new(); + xml.Load($"../../../Content/{level}.tmx"); + Vector2 tileSize = new(int.Parse(xml.DocumentElement.Attributes["tilewidth"].Value), + int.Parse(xml.DocumentElement.Attributes["tileheight"].Value)); + //tileSize *= _scale; + + foreach (XmlNode layer in xml.DocumentElement.SelectNodes("layer")) + { + InstantiateTiles(layer, tileSize); + } + + foreach (XmlNode layer in xml.DocumentElement.SelectNodes("objectgroup")) + { + InstantiateEntities(layer); + } + } + + private void InstantiateTiles(XmlNode layer, Vector2 tileSize) + { + string tileType = layer.Attributes["class"].Value; + float offsetX = layer.Attributes["offsetx"] is not null ? float.Parse(layer.Attributes["offsetx"].Value) : 0; + float offsetY = layer.Attributes["offsety"] is not null ? float.Parse(layer.Attributes["offsety"].Value) : 0; + + + Debug.Write(layer.SelectNodes("data/chunk").Count); + foreach (XmlNode chunk in layer.SelectNodes("data/chunk")) + { + int chunkW = int.Parse(chunk.Attributes["width"].Value); + int chunkX = int.Parse(chunk.Attributes["x"].Value); + int chunkY = int.Parse(chunk.Attributes["y"].Value); + + + List tiles = chunk.InnerText.Split(',').Select(int.Parse).ToList(); + for (int i = 0; i < tiles.Count; i++) + { + if (tiles[i] != 0) + { + Vector2 pos = new(((chunkX+ i % chunkW) * tileSize.X + offsetX) * _scale, + ((chunkY + i / chunkW) * tileSize.Y + offsetY) * _scale); + //pos *= _scale; + Rectangle sourceRect = new(new Point((tiles[i] -1) % _columns, (tiles[i] -1) / _columns) * tileSize.ToPoint(), tileSize.ToPoint()); + Type type = Type.GetType($"DangerousD.GameCore.GameObjects.MapObjects.{tileType}"); + Activator.CreateInstance(type, pos, tileSize * _scale, sourceRect); + + /*switch (tileType) + { + case "collidable": + new StopTile(pos, tileSize * _scale, sourceRect); + break; + case "platform": + new Platform(pos, tileSize * _scale, sourceRect); + break; + case "non_collidable": + new Tile(pos, tileSize * _scale, sourceRect); + break; + }*/ + } + + } + } + } + + private void LoadTilesData() + { + XmlDocument xml = new(); + xml.Load($"../../../Content/map.tsx"); + XmlNode root = xml.DocumentElement; + + _columns = int.Parse(root.Attributes["columns"].Value); + } + + private void InstantiateEntities(XmlNode group) + { + string entityType = group.Attributes["class"].Value; + float offsetX = group.Attributes["offsetx"] is not null ? float.Parse(group.Attributes["offsetx"].Value) : 0; + float offsetY = group.Attributes["offsety"] is not null ? float.Parse(group.Attributes["offsety"].Value) : 0; + foreach (XmlNode entity in group.ChildNodes) + { + Type type = Type.GetType($"DangerousD.GameCore.GameObjects.{entityType}"); + Entity inst = (Entity)Activator.CreateInstance(type, new Vector2(float.Parse(entity.Attributes["x"].Value) + offsetX, float.Parse(entity.Attributes["y"].Value) + offsetY) * _scale); + inst.SetPosition(new Vector2(inst.Pos.X, inst.Pos.Y - inst.Height)); + inst.Height *= _scale; + inst.Width *= _scale; + } } } } diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index 7ae99f9..28ecf14 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -136,7 +136,7 @@ namespace DangerousD.GameCore.Managers Rectangle rectangle; Vector2 distance = entity1.Pos - entity2.Pos; - rectangle = new Rectangle((int)entity1.Pos.X, (int)entity1.Pos.Y, entity2.Width, entity2.Height); + rectangle = new Rectangle((int)entity1.Pos.X, (int)entity1.Pos.Y - 5, entity2.Width, entity2.Height); GameObject gameObject = null; double length = distance.Length(); @@ -144,30 +144,36 @@ namespace DangerousD.GameCore.Managers { rectangle.X = (int)(entity2.Pos.X + (i / length) * distance.X); rectangle.Y = (int)(entity2.Pos.Y + (i / length) * distance.Y); - } - - for (int i = 0; i < AppManager.Instance.GameManager.entities.Count; i++) - { - if (AppManager.Instance.GameManager.entities[i].Rectangle.Intersects(rectangle)) + if (i == length - 1) { - return AppManager.Instance.GameManager.entities[i]; + return null; } - } - for (int i = 0; i < AppManager.Instance.GameManager.mapObjects.Count; i++) - { - if (AppManager.Instance.GameManager.mapObjects[i].Rectangle.Intersects(rectangle)) + for (int j = 0; j < AppManager.Instance.GameManager.entities.Count; j++) { - return AppManager.Instance.GameManager.mapObjects[i]; + if (AppManager.Instance.GameManager.entities[j].Rectangle.Intersects(rectangle)) + { + gameObject = AppManager.Instance.GameManager.entities[j]; + } + } + for (int r = 0; r < AppManager.Instance.GameManager.mapObjects.Count; r++) + { + if (AppManager.Instance.GameManager.mapObjects[r].Rectangle.Intersects(rectangle)) + { + gameObject = AppManager.Instance.GameManager.mapObjects[r]; + } + } + for (int w = 0; w < AppManager.Instance.GameManager.livingEntities.Count; w++) + { + if (AppManager.Instance.GameManager.livingEntities[w].Rectangle.Intersects(rectangle)) + { + gameObject = AppManager.Instance.GameManager.livingEntities[w]; + } } } - - for (int i = 0; i < AppManager.Instance.GameManager.livingEntities.Count; i++) + if (gameObject == entity1) { - if (AppManager.Instance.GameManager.livingEntities[i].Rectangle.Intersects(rectangle)) - { - return AppManager.Instance.GameManager.livingEntities[i]; - } + return null; } return gameObject; } @@ -176,35 +182,57 @@ namespace DangerousD.GameCore.Managers Rectangle rectangle; Vector2 direction = entity1.Pos - targetCast; rectangle = new Rectangle((int)targetCast.X, (int)targetCast.Y, 1, 1); + GameObject gameObject = null; double k = direction.Length(); for (int i = 0; i < k; i++) { rectangle.X = (int)(targetCast.X + (i / k) * direction.X); rectangle.Y = (int)(targetCast.Y + (i / k) * direction.X); - } - for (int i = 0; i < AppManager.Instance.GameManager.entities.Count; i++) - { - if (AppManager.Instance.GameManager.entities[i].Rectangle.Intersects(rectangle)) + for (int j = 0; j < AppManager.Instance.GameManager.entities.Count; j++) { - return AppManager.Instance.GameManager.entities[i]; + if (AppManager.Instance.GameManager.entities[j].Rectangle.Intersects(rectangle)) + { + gameObject = AppManager.Instance.GameManager.entities[j]; + } + } + for (int r = 0; r < AppManager.Instance.GameManager.mapObjects.Count; r++) + { + if (AppManager.Instance.GameManager.mapObjects[r].Rectangle.Intersects(rectangle)) + { + gameObject = AppManager.Instance.GameManager.mapObjects[r]; + } + } + for (int w = 0; w < AppManager.Instance.GameManager.livingEntities.Count; w++) + { + if (AppManager.Instance.GameManager.livingEntities[w].Rectangle.Intersects(rectangle)) + { + gameObject = AppManager.Instance.GameManager.livingEntities[w]; + } } } - for (int i = 0; i < AppManager.Instance.GameManager.mapObjects.Count; i++) + if (gameObject == entity1) { - if (AppManager.Instance.GameManager.mapObjects[i].Rectangle.Intersects(rectangle)) + return null; + } + return gameObject; + } + + public List CheckRectangle(Rectangle rectangle, Type type) + { + var gameObjects = AppManager.Instance.GameManager.GetAllGameObjects; + List intersected = new List(); + for (int i = 0; i < gameObjects.Count; i++) + { + if (gameObjects[i].GetType() == type) { - return AppManager.Instance.GameManager.mapObjects[i]; + if (gameObjects[i].Rectangle.Intersects(rectangle)) + { + intersected.Add(gameObjects[i]); + } } } - for (int i = 0; i < AppManager.Instance.GameManager.livingEntities.Count; i++) - { - if (AppManager.Instance.GameManager.livingEntities[i].Rectangle.Intersects(rectangle)) - { - return AppManager.Instance.GameManager.livingEntities[i]; - } - } - return null; + return intersected; } } } \ No newline at end of file diff --git a/DangerousD/GameCore/Managers/SoundManager.cs b/DangerousD/GameCore/Managers/SoundManager.cs index 92feea5..aed8571 100644 --- a/DangerousD/GameCore/Managers/SoundManager.cs +++ b/DangerousD/GameCore/Managers/SoundManager.cs @@ -38,8 +38,11 @@ namespace DangerousD.GameCore sound.SoundEffect.IsLooped = false; sound.SoundEffect.Play(); PlayingSounds.Add(sound); + if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) + { + AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(Vector2.Zero, soundName)); + } } - public void StartSound(string soundName, Vector2 soundPos, Vector2 playerPos) // запустить звук у которого есть позиция { var sound = new Sound(Sounds[soundName], soundPos); @@ -47,6 +50,10 @@ namespace DangerousD.GameCore sound.SoundEffect.Volume = (float)sound.GetDistance(playerPos) / MaxSoundDistance; sound.SoundEffect.Play(); PlayingSounds.Add(sound); + if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) + { + AppManager.Instance.NetworkManager.SendMsg(new Network.NetworkTask(soundPos, soundName)); + } } public void StopAllSounds() // остановка всех звуков { diff --git a/DangerousD/GameCore/Network/NetworkManager.cs b/DangerousD/GameCore/Network/NetworkManager.cs index b56f9f1..caf16a1 100644 --- a/DangerousD/GameCore/Network/NetworkManager.cs +++ b/DangerousD/GameCore/Network/NetworkManager.cs @@ -10,7 +10,7 @@ namespace DangerousD.GameCore.Network { public class NetworkManager { - public delegate void ReceivingHandler(NetworkTask networkTask); + public delegate void ReceivingHandler(List networkTask); public event ReceivingHandler GetReceivingMessages; @@ -21,20 +21,27 @@ namespace DangerousD.GameCore.Network private void Init(string IpAddress) { - socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - IPAddress address = IPAddress.Parse(IpAddress); - int port = 8000; - endPoint = new IPEndPoint(address, port); + try + { + socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + IPAddress address = IPAddress.Parse(IpAddress); + int port = 8000; + endPoint = new IPEndPoint(address, port); + } + catch { } } private void AcceptSockets() { while (true) { - Socket clientSocket = socket.Accept(); - clientSockets.Add(clientSocket); - Thread receiveThread = new Thread(BeginHostReceive); - receiveThread.Start(clientSocket); - Console.WriteLine("Connected"); + try + { + Socket clientSocket = socket.Accept(); + clientSockets.Add(clientSocket); + Thread receiveThread = new Thread(BeginHostReceive); + receiveThread.Start(clientSocket); + } + catch { } } } @@ -43,77 +50,104 @@ namespace DangerousD.GameCore.Network Socket clientSocket = clSocket as Socket; while (clientSocket != null) { - byte[] bytesCount = new byte[4]; - clientSocket.Receive(bytesCount); - byte[] Data = new byte[BitConverter.ToInt32(bytesCount)]; - StateObject so = new StateObject(clientSocket, Data); - IAsyncResult count = clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so); + try + { + byte[] bytesCount = new byte[4]; + clientSocket.Receive(bytesCount); + byte[] Data = new byte[BitConverter.ToInt32(bytesCount)]; + StateObject so = new StateObject(clientSocket, Data); + IAsyncResult count = clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so); + } + catch { } } } public void HostInit(string IpAddress) { - Init(IpAddress); - socket.Bind(endPoint); - socket.Listen(4); - Thread acceptThread = new Thread(AcceptSockets); - acceptThread.Start(); - state = "Host"; - Console.WriteLine("Start Accept"); + try + { + Init(IpAddress); + socket.Bind(endPoint); + socket.Listen(4); + Thread acceptThread = new Thread(AcceptSockets); + acceptThread.Start(); + state = "Host"; + } + catch { } } public void ClientInit(string IpAddress) { - Init(IpAddress); - socket.Connect(endPoint); - state = "Client"; - Thread.Sleep(10); - Thread ReceivingThread = new Thread(ReceiveMsgFromHost); - ReceivingThread.Start(); + try + { + Init(IpAddress); + socket.Connect(endPoint); + state = "Client"; + Thread.Sleep(10); + Thread ReceivingThread = new Thread(ReceiveMsgFromHost); + ReceivingThread.Start(); + } + catch { } } public void SendMsg(NetworkTask networkTask) - { + { byte[] Data = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(networkTask)); int count = Data.Length; if (state == "Host") { - foreach (Socket socket in clientSockets) + try + { + foreach (Socket socket in clientSockets) + { + socket.Send(BitConverter.GetBytes(count)); + socket.Send(Data); + } + } + catch { } + } + else + { + try { socket.Send(BitConverter.GetBytes(count)); socket.Send(Data); } - } - else - { - socket.Send(BitConverter.GetBytes(count)); - socket.Send(Data); + catch { } } } private void ReceiveMsgFromHost() { while (true) { - byte[] bytesCount = new byte[4]; - socket.Receive(bytesCount); - byte[] Data = new byte[BitConverter.ToInt32(bytesCount)]; - StateObject so = new StateObject(socket, Data); - IAsyncResult count = socket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so); + try + { + byte[] bytesCount = new byte[4]; + socket.Receive(bytesCount); + byte[] Data = new byte[BitConverter.ToInt32(bytesCount)]; + StateObject so = new StateObject(socket, Data); + IAsyncResult count = socket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, AsyncReceiveCallback, so); + } + catch { } } } private void AsyncReceiveCallback(IAsyncResult ar) { - StateObject so = ar.AsyncState as StateObject; - Socket clientSocket = so.workSocket; - int readCount = clientSocket.EndReceive(ar); - so.UploadedBytesCount += readCount; - so.sb.Append(Encoding.Unicode.GetString(so.buffer, 0, readCount)); - if (so.UploadedBytesCount < so.bufferSize) + try { - clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, new AsyncCallback(AsyncReceiveCallback), so); - } - else - { - GetReceivingMessages(JsonConvert.DeserializeObject(so.sb.ToString())); + StateObject so = ar.AsyncState as StateObject; + Socket clientSocket = so.workSocket; + int readCount = clientSocket.EndReceive(ar); + so.UploadedBytesCount += readCount; + so.sb.Append(Encoding.Unicode.GetString(so.buffer, 0, readCount)); + if (so.UploadedBytesCount < so.bufferSize) + { + clientSocket.BeginReceive(so.buffer, 0, so.bufferSize, SocketFlags.None, new AsyncCallback(AsyncReceiveCallback), so); + } + else + { + GetReceivingMessages(JsonConvert.DeserializeObject>(so.sb.ToString())); + } } + catch { } } } } diff --git a/DangerousD/GameCore/Network/NetworkTask.cs b/DangerousD/GameCore/Network/NetworkTask.cs index a1fb999..1dbb508 100644 --- a/DangerousD/GameCore/Network/NetworkTask.cs +++ b/DangerousD/GameCore/Network/NetworkTask.cs @@ -13,6 +13,7 @@ namespace DangerousD.GameCore.Network public NetworkTaskOperationEnum operation { get; set; } public string name { get; set; } public int value { get; set; } + public bool isParam { get; set; } public int objId { get; set; } public Vector2 position { get; set; } public Vector2 velocity { get; set; } @@ -102,5 +103,28 @@ namespace DangerousD.GameCore.Network operation = NetworkTaskOperationEnum.GetClientPlayerId; objId = PlayerId; } + + /// + /// Универсальный конструктор для нестандартных операций. То, что не нужно(кроме операции) делать null. + /// + /// + /// + /// + /// + /// + /// + /// + /// + public NetworkTask(NetworkTaskOperationEnum operation, string name, int value, bool isParam, int objId, Vector2 position, Vector2 velocity, Type type) + { + this.operation = operation; + this.name = name; + this.value = value; + this.isParam = isParam; + this.objId = objId; + this.position = position; + this.velocity = velocity; + this.type = type; + } } } diff --git a/NuGet.config b/NuGet.config new file mode 100644 index 0000000..90dab50 --- /dev/null +++ b/NuGet.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file