diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb
index ea7bb60..f16b512 100644
--- a/DangerousD/Content/Content.mgcb
+++ b/DangerousD/Content/Content.mgcb
@@ -21,18 +21,6 @@
/processorParam:TextureFormat=Compressed
/build:ButtonFont.spritefont
-#begin checkboxs_off.png
-/importer:TextureImporter
-/processor:TextureProcessor
-/processorParam:ColorKeyColor=255,0,255,255
-/processorParam:ColorKeyEnabled=True
-/processorParam:GenerateMipmaps=False
-/processorParam:PremultiplyAlpha=True
-/processorParam:ResizeToPowerOfTwo=False
-/processorParam:MakeSquare=False
-/processorParam:TextureFormat=Color
-/build:checkboxs_off.png
-
#begin checkboxs_off-on.png
/importer:TextureImporter
/processor:TextureProcessor
@@ -45,6 +33,18 @@
/processorParam:TextureFormat=Color
/build:checkboxs_off-on.png
+#begin checkboxs_off.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:checkboxs_off.png
+
#begin checkboxs_on.png
/importer:TextureImporter
/processor:TextureProcessor
@@ -81,14 +81,7 @@
/processorParam:TextureFormat=Color
/build:deathBackground.jpg
-
-#begin DoomTestSong.mp3
-/importer:Mp3Importer
-/processor:SoundEffectProcessor
-/processorParam:Quality=Best
-/build:sounds/DoomTestSong.mp3
-
-#begin doors.png
+#begin door.png
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
@@ -98,7 +91,7 @@
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
-/build:doors.png
+/build:door.png
#begin Font_12.spritefont
/importer:FontDescriptionImporter
@@ -140,7 +133,7 @@
/processorParam:TextureFormat=Color
/build:menuFon.jpg
-#begin MenuFon2.jpg
+#begin menuFon2.jpg
/importer:TextureImporter
/processor:TextureProcessor
/processorParam:ColorKeyColor=255,0,255,255
@@ -150,7 +143,7 @@
/processorParam:ResizeToPowerOfTwo=False
/processorParam:MakeSquare=False
/processorParam:TextureFormat=Color
-/build:MenuFon2.jpg
+/build:menuFon2.jpg
#begin menuFon3.jpg
/importer:TextureImporter
@@ -243,6 +236,19 @@
/processorParam:TextureFormat=Color
/build:sliderBackground.png
+
+#begin smokeAnimation2.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:smokeAnimation2.png
+
#begin sounds/DoomTestSong.mp3
/importer:Mp3Importer
/processor:SoundEffectProcessor
@@ -255,18 +261,6 @@
/processorParam:Quality=Best
/build:sounds/shotgun_shot.mp3
-#begin SmokeAnimation2.png
-/importer:TextureImporter
-/processor:TextureProcessor
-/processorParam:ColorKeyColor=255,0,255,255
-/processorParam:ColorKeyEnabled=True
-/processorParam:GenerateMipmaps=False
-/processorParam:PremultiplyAlpha=True
-/processorParam:ResizeToPowerOfTwo=False
-/processorParam:MakeSquare=False
-/processorParam:TextureFormat=Color
-/build:SmokeAnimation2.png
-
#begin textboxbackground1-1.png
/importer:TextureImporter
/processor:TextureProcessor
@@ -279,18 +273,6 @@
/processorParam:TextureFormat=Color
/build:textboxbackground1-1.png
-#begin textboxbackground2,5-1.png
-/importer:TextureImporter
-/processor:TextureProcessor
-/processorParam:ColorKeyColor=255,0,255,255
-/processorParam:ColorKeyEnabled=True
-/processorParam:GenerateMipmaps=False
-/processorParam:PremultiplyAlpha=True
-/processorParam:ResizeToPowerOfTwo=False
-/processorParam:MakeSquare=False
-/processorParam:TextureFormat=Color
-/build:textboxbackground2,5-1.png
-
#begin textboxbackground2-1.png
/importer:TextureImporter
/processor:TextureProcessor
@@ -303,6 +285,18 @@
/processorParam:TextureFormat=Color
/build:textboxbackground2-1.png
+#begin textboxbackground2,5-1.png
+/importer:TextureImporter
+/processor:TextureProcessor
+/processorParam:ColorKeyColor=255,0,255,255
+/processorParam:ColorKeyEnabled=True
+/processorParam:GenerateMipmaps=False
+/processorParam:PremultiplyAlpha=True
+/processorParam:ResizeToPowerOfTwo=False
+/processorParam:MakeSquare=False
+/processorParam:TextureFormat=Color
+/build:textboxbackground2,5-1.png
+
#begin textboxbackground6-1.png
/importer:TextureImporter
/processor:TextureProcessor
diff --git a/DangerousD/Content/Door.tsx b/DangerousD/Content/Door.tsx
index 8e5687c..a250dd5 100644
--- a/DangerousD/Content/Door.tsx
+++ b/DangerousD/Content/Door.tsx
@@ -1,4 +1,4 @@
-
+
diff --git a/DangerousD/Content/animations/DeathFromGhost b/DangerousD/Content/animations/DeathFromGhost
new file mode 100644
index 0000000..b4ef48e
--- /dev/null
+++ b/DangerousD/Content/animations/DeathFromGhost
@@ -0,0 +1 @@
+{"id":"DeathFromGhost","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":246,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/DeathFromHunchman b/DangerousD/Content/animations/DeathFromHunchman
new file mode 100644
index 0000000..a00ed27
--- /dev/null
+++ b/DangerousD/Content/animations/DeathFromHunchman
@@ -0,0 +1 @@
+{"id":"DeathFromHunchman","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":1,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/DeathFromSilasMaster b/DangerousD/Content/animations/DeathFromSilasMaster
new file mode 100644
index 0000000..3f9a76b
--- /dev/null
+++ b/DangerousD/Content/animations/DeathFromSilasMaster
@@ -0,0 +1 @@
+{"id":"DeathFromSilasMaster","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":295,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/DeathFromSlime b/DangerousD/Content/animations/DeathFromSlime
new file mode 100644
index 0000000..5a692f6
--- /dev/null
+++ b/DangerousD/Content/animations/DeathFromSlime
@@ -0,0 +1 @@
+{"id":"DeathFromSlime","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":50,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/DeathFromSpider b/DangerousD/Content/animations/DeathFromSpider
new file mode 100644
index 0000000..98a08a5
--- /dev/null
+++ b/DangerousD/Content/animations/DeathFromSpider
@@ -0,0 +1 @@
+{"id":"DeathFromSpider","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":148,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/DeathFromWerewolf b/DangerousD/Content/animations/DeathFromWerewolf
new file mode 100644
index 0000000..8f0b150
--- /dev/null
+++ b/DangerousD/Content/animations/DeathFromWerewolf
@@ -0,0 +1 @@
+{"id":"DeathFromWerewolf","textureName":"deathAnimation","startSpriteRectangle":{"X":1,"Y":197,"Width":48,"Height":48},"frameSecond":[{"Item1":0,"Item2":10}],"textureFrameInterval":1,"framesCount":5,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/playerShootBoomUpLeft b/DangerousD/Content/animations/playerShootBoomUpLeft
new file mode 100644
index 0000000..093eb3c
--- /dev/null
+++ b/DangerousD/Content/animations/playerShootBoomUpLeft
@@ -0,0 +1 @@
+{"id":"playerShootBoomUpLeft","textureName":"playerAnimation","startSpriteRectangle":{"X":267,"Y":34,"Width":24,"Height":32},"frameSecond":[{"Item1":0,"Item2":12}],"textureFrameInterval":1,"framesCount":2,"isCycle":false,"offset":"0, 0"}
diff --git a/DangerousD/Content/animations/playerShootBoomUpRight b/DangerousD/Content/animations/playerShootBoomUpRight
new file mode 100644
index 0000000..3f70e03
--- /dev/null
+++ b/DangerousD/Content/animations/playerShootBoomUpRight
@@ -0,0 +1,24 @@
+{
+ "id": "playerShootBoomUpRight",
+ "textureName": "playerAnimation",
+ "startSpriteRectangle": {
+ "X": 267,
+ "Y": 1,
+ "Width": 24,
+ "Height": 32
+ },
+ "frameSecond": [
+ {
+ "Item1": 0,
+ "Item2": 3
+ },
+ {
+ "Item1": 1,
+ "Item2": 20
+ }
+ ],
+ "textureFrameInterval": 1,
+ "framesCount": 2,
+ "isCycle": false,
+ "offset": "0, 0"
+}
diff --git a/DangerousD/Content/doors.png b/DangerousD/Content/door.png
similarity index 100%
rename from DangerousD/Content/doors.png
rename to DangerousD/Content/door.png
diff --git a/DangerousD/Content/lvl2.tmx b/DangerousD/Content/lvl2.tmx
new file mode 100644
index 0000000..d610a6f
--- /dev/null
+++ b/DangerousD/Content/lvl2.tmx
@@ -0,0 +1,652 @@
+
+
diff --git a/DangerousD/Content/MenuFon2.jpg b/DangerousD/Content/menuFon2.jpg
similarity index 100%
rename from DangerousD/Content/MenuFon2.jpg
rename to DangerousD/Content/menuFon2.jpg
diff --git a/DangerousD/Content/SmokeAnimation2.png b/DangerousD/Content/smokeAnimation2.png
similarity index 100%
rename from DangerousD/Content/SmokeAnimation2.png
rename to DangerousD/Content/smokeAnimation2.png
diff --git a/DangerousD/GameCore/GUI/DeathGUI.cs b/DangerousD/GameCore/GUI/DeathGUI.cs
index 31bff02..ce73850 100644
--- a/DangerousD/GameCore/GUI/DeathGUI.cs
+++ b/DangerousD/GameCore/GUI/DeathGUI.cs
@@ -23,7 +23,7 @@ internal class DeathGUI : AbstractGui
Elements.Add(butMenu);
butMenu.LeftButtonPressed += () =>
{
- AppManager.Instance.ChangeGameState(GameState.Menu);
+ AppManager.Instance.Restart("lvl");
};
foreach (var item in Elements)
{
diff --git a/DangerousD/GameCore/GUI/LobbyGUI.cs b/DangerousD/GameCore/GUI/LobbyGUI.cs
index 90ba3c9..1d8a2e1 100644
--- a/DangerousD/GameCore/GUI/LobbyGUI.cs
+++ b/DangerousD/GameCore/GUI/LobbyGUI.cs
@@ -135,6 +135,7 @@ namespace DangerousD.GameCore.GUI
};
Elements.Add(joinByIpButton);
joinByIpButton.LeftButtonPressed += () => {
+ AppManager.Instance.ChangeGameState(GameState.Game);
AppManager.Instance.NetworkManager.ClientInit(searchBarTextBox.text);
};
}
diff --git a/DangerousD/GameCore/GameObjects/Entities/Door.cs b/DangerousD/GameCore/GameObjects/Entities/Door.cs
index fe18355..0584251 100644
--- a/DangerousD/GameCore/GameObjects/Entities/Door.cs
+++ b/DangerousD/GameCore/GameObjects/Entities/Door.cs
@@ -21,7 +21,7 @@ namespace DangerousD.GameCore.GameObjects.Entities
Height = (int)size.Y;
}
- protected override GraphicsComponent GraphicsComponent { get; } = new("doors");
+ protected override GraphicsComponent GraphicsComponent { get; } = new("door");
public override void Update(GameTime gameTime)
{
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs
index 62923ba..e06b177 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/CoreEnemy.cs
@@ -36,9 +36,9 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public abstract void Move(GameTime gameTime);
- public void TakeDamage(int damage)
+ public virtual void TakeDamage()
{
- monster_health -= damage;
+ monster_health--;
if (monster_health <= 0)
{
Death();
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs
index 60e02d6..fee2677 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Monsters/Zombie.cs
@@ -32,6 +32,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
rightBorder = (int)position.X + 100;
physicsManager = new PhysicsManager();
Random random = new Random();
+ monster_health = 2;
if(random.Next(0, 2) == 0)
{
isGoRight = true;
@@ -183,10 +184,9 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
public override void Attack(GameTime gameTime)
{}
- public void TakeDamage()
+ public override void TakeDamage()
{
monster_health--;
- GraphicsComponent.StartAnimation("ZombieRightAttack");
Particle particle = new Particle(Pos);
if (monster_health <= 0)
{
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs
index 8644b77..e199e4d 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/AnimationRectangle.cs
@@ -25,14 +25,15 @@ namespace DangerousD.GameCore.GameObjects.PlayerDeath
private void PlayDeath(string deathName)
{
- if (GraphicsComponent.GetCurrentAnimation != "DeathFromZombie")
- {
- GraphicsComponent.StartAnimation("DeathFromZombie");
- }
- if (GraphicsComponent.GetCurrentAnimation != "DeathFromSilasHand")
- {
- GraphicsComponent.StartAnimation("DeathFromSilasHand");
- }
+ //if (GraphicsComponent.GetCurrentAnimation != "DeathFromZombie")
+ //{
+ // GraphicsComponent.StartAnimation("DeathFromZombie");
+ //}
+ //if (GraphicsComponent.GetCurrentAnimation != "DeathFromSilasHand")
+ //{
+ // GraphicsComponent.StartAnimation("DeathFromSilasHand");
+ //}
+ GraphicsComponent.StartAnimation(deathName);
}
}
diff --git a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
index fc34e25..deb8ae4 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntities/Player/Player.cs
@@ -10,6 +10,7 @@ using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;
using DangerousD.GameCore.GameObjects.LivingEntities.Monsters;
using DangerousD.GameCore.Network;
+using DangerousD.GameCore.GameObjects.MapObjects;
namespace DangerousD.GameCore.GameObjects.LivingEntities
{
@@ -65,6 +66,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
{
bullets++;
}
+ if(a == "playerShootBoomUpRight" || a == "playerShootBoomUpLeft")
+ {
+ isShooting = false;
+ }
};
}
@@ -73,7 +78,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public bool IsAlive { get { return isAlive; } }
protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "playerMoveLeft", "playerMoveRight", "DeathFromZombie", "playerRightStay", "playerStayLeft",
- "playerJumpRight" , "playerJumpLeft", "playerShootLeft", "playerShootRight", "playerReload", "smokeAfterShoot", "playerShootUpRight", "playerShootUpLeft"}, "playerReload");
+ "playerJumpRight" , "playerJumpLeft", "playerShootLeft", "playerShootRight", "playerReload", "smokeAfterShoot", "playerShootUpRight", "playerShootUpLeft", "playerShootBoomUpRight",
+ "playerShootBoomUpLeft"}, "playerReload");
public void Attack()
{
@@ -89,10 +95,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
}
public Rectangle GetShootRectangle(bool isRight)
{
- if (isRight)
+ if (isRight)
return new Rectangle((int)Pos.X, (int)(Pos.Y) + 10, shootLength + Width, Height / 2);
else
- return new Rectangle((int)Pos.X-shootLength, (int)(Pos.Y) + 10, shootLength, Height / 2);
+ return new Rectangle((int)Pos.X - shootLength, (int)(Pos.Y) + 10, shootLength, Height / 2);
}
public override void Draw(SpriteBatch spriteBatch)
{
@@ -118,7 +124,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
return;
}
isAttacked = true;
- if(monsterName == "Zombie")
+ if (monsterName == "Zombie")
{
AnimationRectangle deathRectangle = new AnimationRectangle(Pos, "DeathFrom" + monsterName);
deathRectangle.Gr.actionOfAnimationEnd += (a) =>
@@ -129,7 +135,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
}
};
}
- else if(monsterName == "Spider")
+ else if (monsterName == "Spider")
{
AnimationRectangle deathRectangle = new AnimationRectangle(Pos, "DeathFrom" + monsterName);
deathRectangle.Gr.actionOfAnimationEnd += (a) =>
@@ -184,41 +190,37 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
bullets--;
if (isRight)
{
- StartCicycleAnimation("playerShootRight");
- var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X, (int)(Pos.Y - 10f), shootLength + 24, 10), typeof(Zombie)).OrderBy(x => (x.Pos - Pos).LengthSquared());
- if (targets.Count() > 0)
+ if (!isUping)
{
- Zombie targetZombie = (Zombie)targets.First();
- targetZombie.TakeDamage();
-
+ StartCicycleAnimation("playerShootRight");
+ Bullet bullet = new Bullet(new Vector2(Pos.X + 16, Pos.Y));
+ bullet.ShootRight();
+ SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X + 12, Pos.Y - 8));
}
- targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(GetShootRectangle(isRight), typeof(SilasHands)).OrderBy(x => (x.Pos - Pos).LengthSquared());
- if (targets.Count() > 0)
+ else
{
- SilasHands targetHand = (SilasHands)targets.First();
- targetHand.TakeDamage();
+ StartCicycleAnimation("playerShootBoomUpRight");
+ Bullet bullet = new Bullet(new Vector2(Pos.X + 16, Pos.Y));
+ bullet.ShootUpRight();
+ SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X + 12, Pos.Y - 8));
}
- SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X + 30, Pos.Y + 7));
}
- else
+ else if(!isRight)
{
- StartCicycleAnimation("playerShootLeft");
- var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X - shootLength, (int)(Pos.Y - 10f), shootLength, 10), typeof(Zombie));
- if (targets != null)
+ if (!isUping)
{
- foreach (var target in targets)
- {
- Zombie targetZombie = (Zombie)target;
- targetZombie.TakeDamage();
- }
+ StartCicycleAnimation("playerShootBoomUpLeft");
+ Bullet bullet = new Bullet(new Vector2(Pos.X, Pos.Y));
+ bullet.ShootLeft();
+ SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X - 6, Pos.Y - 7));
}
- targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(GetShootRectangle(isRight), typeof(SilasHands));
- if (targets.Count() > 0)
+ else
{
- SilasHands targetHand = (SilasHands)targets.First();
- targetHand.TakeDamage();
+ StartCicycleAnimation("playerShootBoomUpLeft");
+ Bullet bullet = new Bullet(new Vector2(Pos.X, Pos.Y));
+ bullet.ShootUpLeft();
+ SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X - 6, Pos.Y - 7));
}
- SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X - 12, Pos.Y + 7));
}
}
}
@@ -239,7 +241,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
FallingThroughPlatform = false;
}
GraphicsComponent.SetCameraPosition(Pos);
- if (!isAttacked || AppManager.Instance.InputManager.InvincibilityCheat)
+ if (!isAttacked || AppManager.Instance.InputManager.InvincibilityCheat)
{
if (!isShooting)
{
@@ -282,14 +284,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
}
else if (AppManager.Instance.InputManager.VectorMovementDirection.X == 0)//стоит
{
- if(bullets < 5)
- {
- if (GraphicsComponent.GetCurrentAnimation != "playerReload")
- {
- GraphicsComponent.StartAnimation("playerReload");
- }
- }
- else if (isRight)
+ if (isRight)
{
if (isUping)
{
@@ -298,6 +293,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
GraphicsComponent.StartAnimation("playerShootUpRight");
}
}
+ else if (bullets < 5)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "playerReload")
+ {
+ GraphicsComponent.StartAnimation("playerReload");
+ }
+ }
else
{
GraphicsComponent.StartAnimation("playerRightStay");
@@ -312,6 +314,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
GraphicsComponent.StartAnimation("playerShootUpLeft");
}
}
+ else if (bullets < 5)
+ {
+ if (GraphicsComponent.GetCurrentAnimation != "playerReload")
+ {
+ GraphicsComponent.StartAnimation("playerReload");
+ }
+ }
else
{
GraphicsComponent.StartAnimation("playerStayLeft");
@@ -319,11 +328,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
}
}
}
- if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer)
- {
- NetworkTask task = new NetworkTask(id, Pos);
- AppManager.Instance.NetworkTasks.Add(task);
- }
}
public void MoveDown()
{
@@ -331,13 +335,89 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
isOnGround = false;
}
- public class Bullet : GameObjects.LivingEntity
+ public class Bullet : LivingEntity
{
public Bullet(Vector2 position) : base(position)
{
+ Height = 5;
+ Width = 5;
+ }
+ protected override GraphicsComponent GraphicsComponent { get; } = new(new List { "playerMoveLeft" }, "playerMoveLeft");
+ Vector2 direction;
+ Vector2 maindirection;
+ public void ShootUpRight()
+ {
+ direction = new Vector2(1, -1);
+ acceleration = Vector2.Zero;
+ velocity = new Vector2(10, 10) * direction;
+ maindirection = velocity;
+ if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Client)
+ {
+ NetworkTask task = new NetworkTask(typeof(Bullet), Pos, id, velocity);
+ AppManager.Instance.NetworkTasks.Add(task);
+ AppManager.Instance.GameManager.Remove(this);
+ }
+ }
+ public void ShootRight()
+ {
+ direction = new Vector2(1, 0);
+ acceleration = Vector2.Zero;
+ velocity = new Vector2(10, 10) * direction;
+ maindirection = velocity;
+ if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Client)
+ {
+ NetworkTask task = new NetworkTask(typeof(Bullet), Pos, id, velocity);
+ AppManager.Instance.NetworkTasks.Add(task);
+ AppManager.Instance.GameManager.Remove(this);
+ }
+ }
+ public void ShootLeft()
+ {
+ direction = new Vector2(-1, 0);
+ acceleration = Vector2.Zero;
+ velocity = new Vector2(10, 10) * direction;
+ maindirection = velocity;
+ if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Client)
+ {
+ NetworkTask task = new NetworkTask(typeof(Bullet), Pos, id, velocity);
+ AppManager.Instance.NetworkTasks.Add(task);
+ AppManager.Instance.GameManager.Remove(this);
+ }
+ }
+ public void ShootUpLeft()
+ {
+ direction = new Vector2(-1, -1);
+ acceleration = Vector2.Zero;
+ velocity = new Vector2(10, 10) * direction;
+ maindirection = velocity;
+ if (AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Client)
+ {
+ NetworkTask task = new NetworkTask(typeof(Bullet), Pos, id, velocity);
+ AppManager.Instance.NetworkTasks.Add(task);
+ AppManager.Instance.GameManager.Remove(this);
+ }
+ }
+ public override void OnCollision(GameObject gameObject)
+ {
+ if (gameObject is not Player)
+ {
+ if (gameObject is CoreEnemy)
+ {
+ CoreEnemy enemy = (CoreEnemy)gameObject;
+ enemy.TakeDamage();
+ AppManager.Instance.GameManager.Remove(this);
+ }
+ base.OnCollision(gameObject);
+ }
+ }
+ public override void Update(GameTime gameTime)
+ {
+ if (maindirection != velocity)
+ {
+ AppManager.Instance.GameManager.Remove(this);
+ }
+ base.Update(gameTime);
}
- protected override GraphicsComponent GraphicsComponent { get; } = new("ZombieMoveLeft");
-
}
}
-}
+}
\ No newline at end of file
diff --git a/DangerousD/GameCore/GameObjects/LivingEntity.cs b/DangerousD/GameCore/GameObjects/LivingEntity.cs
index c496696..1523401 100644
--- a/DangerousD/GameCore/GameObjects/LivingEntity.cs
+++ b/DangerousD/GameCore/GameObjects/LivingEntity.cs
@@ -10,6 +10,8 @@ public abstract class LivingEntity : Entity
public Vector2 velocity;
public Vector2 acceleration;
+ public Vector2 Acceleration { get; private set; }
+
public LivingEntity(Vector2 position) : base(position)
{
acceleration = new Vector2(0, 30);
diff --git a/DangerousD/GameCore/Managers/AppManager.cs b/DangerousD/GameCore/Managers/AppManager.cs
index aedb493..62c57b8 100644
--- a/DangerousD/GameCore/Managers/AppManager.cs
+++ b/DangerousD/GameCore/Managers/AppManager.cs
@@ -23,7 +23,7 @@ namespace DangerousD.GameCore
public class AppManager : Game
{
public static AppManager Instance { get; private set; }
- public string IpAddress { get; private set; } = "127.0.0.1";
+ public string IpAddress { get; private set; } = "0.0.0.0";
private GraphicsDeviceManager _graphics;
private SpriteBatch _spriteBatch;
public GameState gameState { get; private set; }
@@ -208,7 +208,7 @@ namespace DangerousD.GameCore
case GameState.Lobby:
break;
case GameState.Game:
- GameManager.mapManager.LoadLevel("lvl");
+ GameManager.mapManager.LoadLevel(currentMap);
GameManager.FindBorders();
break;
case GameState.Death:
@@ -220,6 +220,7 @@ namespace DangerousD.GameCore
public void NetworkSync(List networkTasks)
{
+ DebugHUD.Log("networksync");
foreach (NetworkTask networkTask in networkTasks)
{
switch (networkTask.operation)
@@ -235,6 +236,12 @@ namespace DangerousD.GameCore
SoundManager.StartSound(networkTask.name, networkTask.position, GameManager.GetPlayer1.Pos);
break;
case NetworkTaskOperationEnum.CreateEntity:
+ if (networkTask.type == typeof(Player.Bullet))
+ {
+ Player.Bullet bullet = new Player.Bullet(networkTask.position);
+ bullet.id = networkTask.objId;
+ bullet.velocity = networkTask.velocity;
+ }
break;
case NetworkTaskOperationEnum.SendPosition:
if (networkTask.objId != GameManager.GetPlayer1.id )
@@ -326,7 +333,9 @@ namespace DangerousD.GameCore
}
public void Restart(string map)
{
-
+ GameManager = new();
+ ChangeGameState(GameState.Menu);
+ currentMap = map;
}
}
}
diff --git a/DangerousD/GameCore/Managers/GameManager.cs b/DangerousD/GameCore/Managers/GameManager.cs
index 8d1c7c4..f4eed81 100644
--- a/DangerousD/GameCore/Managers/GameManager.cs
+++ b/DangerousD/GameCore/Managers/GameManager.cs
@@ -30,6 +30,9 @@ namespace DangerousD.GameCore
public List otherObjects = new();
public Vector4 CameraBorder;
public Player GetPlayer1 { get; private set; }
+ private int _lastUpdate = 0;
+ private int _currTime = 0;
+
public GameManager()
{
others = new List();
@@ -130,10 +133,16 @@ namespace DangerousD.GameCore
public void Update(GameTime gameTime)
{
+ _currTime += gameTime.ElapsedGameTime.Milliseconds;
if (AppManager.Instance.NetworkTasks.Count > 0)
{
- AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList());
- AppManager.Instance.NetworkTasks.Clear();
+ if (_currTime - _lastUpdate > 50)
+ {
+ AppManager.Instance.DebugHUD.Log("sending");
+ AppManager.Instance.NetworkManager.SendMsg(AppManager.Instance.NetworkTasks.ToList());
+ AppManager.Instance.NetworkTasks.Clear();
+ _lastUpdate = _currTime;
+ }
}
foreach (var item in BackgroundObjects)
item.Update(gameTime);
diff --git a/DangerousD/GameCore/Managers/MapManager.cs b/DangerousD/GameCore/Managers/MapManager.cs
index 9087d97..222b897 100644
--- a/DangerousD/GameCore/Managers/MapManager.cs
+++ b/DangerousD/GameCore/Managers/MapManager.cs
@@ -41,7 +41,7 @@ namespace DangerousD.GameCore.Managers
{
InstantiateTiles(layer, tileSize);
}
-
+
foreach (XmlNode layer in xml.DocumentElement.SelectNodes("objectgroup"))
{
InstantiateEntities(layer);
@@ -91,16 +91,20 @@ namespace DangerousD.GameCore.Managers
private void InstantiateEntities(XmlNode group)
{
- string entityGroup = group.Attributes["class"] is not null ? group.Attributes["class"].Value : "";
+ string entityGroup = group.Attributes["class"] is not null ? "." + group.Attributes["class"].Value : "";
+ Debug.Write(entityGroup);
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)
{
string entityType = entity.Attributes["type"] is not null ? "." + entity.Attributes["type"].Value : "";
- Type type = Type.GetType($"DangerousD.GameCore.GameObjects.{entityGroup}{entityType}");
+ Type type = Type.GetType($"DangerousD.GameCore.GameObjects{entityGroup}{entityType}");
+
Vector2 pos =
new Vector2(float.Parse(entity.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX,
float.Parse(entity.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY) * _scale;
+
Entity inst;
if (type.Equals(typeof(Player)))
{
@@ -111,6 +115,30 @@ namespace DangerousD.GameCore.Managers
int gid = entity.Attributes["gid"] is not null ? int.Parse(entity.Attributes["gid"].Value) : 0;
inst = (Entity)Activator.CreateInstance(type, pos, new Vector2(32, 48), new Rectangle((gid - 872)*32, 0, 32, 48));
}
+ else if (type.Equals(typeof(TeleportingDoor)))
+ {
+ int gid = entity.Attributes["gid"] is not null ? int.Parse(entity.Attributes["gid"].Value) : 0;
+ XmlNode node = entity.SelectSingleNode("properties/property[@name = 'nextLevel']");
+
+ bool resetLevel = node is not null ? bool.Parse(node.Attributes["value"].Value) : false;
+ if (resetLevel)
+ {
+ inst = (Entity)Activator.CreateInstance(type, pos, new Vector2(32, 48), new Rectangle((gid - 872) * 32, 0, 32, 48),
+ new Vector2(0,0),
+ () => { });
+ }
+ else
+ {
+ node = entity.SelectSingleNode("properties/property[@name = 'destination']");
+ string target = node is not null ? node.Attributes["value"].Value : "0";
+ XmlNode dest = group.SelectSingleNode($"object[@id = '{target}']");
+
+ inst = (Entity)Activator.CreateInstance(type, pos, new Vector2(32, 48), new Rectangle((gid - 872) * 32, 0, 32, 48),
+ new Vector2(float.Parse(dest.Attributes["x"].Value, CultureInfo.InvariantCulture) + offsetX,
+ float.Parse(dest.Attributes["y"].Value, CultureInfo.InvariantCulture) + offsetY) * _scale,
+ () => { });
+ }
+ }
else
{
inst = (Entity)Activator.CreateInstance(type, pos);
diff --git a/DangerousD/GameCore/Network/NetworkManager.cs b/DangerousD/GameCore/Network/NetworkManager.cs
index 56ac3a1..41b48f1 100644
--- a/DangerousD/GameCore/Network/NetworkManager.cs
+++ b/DangerousD/GameCore/Network/NetworkManager.cs
@@ -21,27 +21,19 @@ namespace DangerousD.GameCore.Network
private void Init(string IpAddress)
{
- try
- {
- socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- IPAddress address = IPAddress.Parse(IpAddress);
- int port = 51873;
- endPoint = new IPEndPoint(address, port);
- }
- catch { }
+ socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ IPAddress address = IPAddress.Parse(IpAddress);
+ int port = 51873;
+ endPoint = new IPEndPoint(address, port);
}
private void AcceptSockets()
{
while (true)
{
- try
- {
- Socket clientSocket = socket.Accept();
- clientSockets.Add(clientSocket);
- Thread receiveThread = new Thread(BeginHostReceive);
- receiveThread.Start(clientSocket);
- }
- catch { }
+ Socket clientSocket = socket.Accept();
+ clientSockets.Add(clientSocket);
+ Thread receiveThread = new Thread(BeginHostReceive);
+ receiveThread.Start(clientSocket);
}
}
@@ -50,46 +42,41 @@ namespace DangerousD.GameCore.Network
Socket clientSocket = clSocket as Socket;
while (clientSocket != null)
{
- try
+ byte[] bytesCount = new byte[4];
+ clientSocket.Receive(bytesCount);
+ int length = BitConverter.ToInt32(bytesCount);
+ byte[] Data = new byte[length];
+ StateObject so = new StateObject(clientSocket, Data);
+ while (so.UploadedBytesCount < length)
{
- 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);
+ int count = clientSocket.Receive(so.buffer, so.UploadedBytesCount, length - so.UploadedBytesCount, SocketFlags.None);
+ so.UploadedBytesCount += count;
}
- catch { }
+ List tasks = JsonConvert.DeserializeObject>(Encoding.Unicode.GetString(so.buffer, 0, length));
+ GetReceivingMessages(tasks);
}
}
public void HostInit(string IpAddress)
{
- try
- {
- Init(IpAddress);
- socket.Bind(endPoint);
- socket.Listen(4);
- Thread acceptThread = new Thread(AcceptSockets);
- acceptThread.Start();
- state = "Host";
- AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Host);
- }
- catch { }
+ Init(IpAddress);
+ socket.Bind(endPoint);
+ socket.Listen(4);
+ Thread acceptThread = new Thread(AcceptSockets);
+ acceptThread.Start();
+ state = "Host";
+ AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Host);
}
public void ClientInit(string IpAddress)
{
- try
- {
- Init(IpAddress);
- socket.Connect(endPoint);
- state = "Client";
- Thread.Sleep(10);
- Thread ReceivingThread = new Thread(ReceiveMsgFromHost);
- ReceivingThread.Start();
- NetworkTask connectionTask = new NetworkTask("Player");
- AppManager.Instance.NetworkTasks.Add(connectionTask);
- AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Client);
- }
- catch { }
+ Init(IpAddress);
+ socket.Connect(endPoint);
+ state = "Client";
+ Thread.Sleep(10);
+ Thread ReceivingThread = new Thread(ReceiveMsgFromHost);
+ ReceivingThread.Start();
+ NetworkTask connectionTask = new NetworkTask("Player");
+ AppManager.Instance.NetworkTasks.Add(connectionTask);
+ AppManager.Instance.SetMultiplayerState(MultiPlayerStatus.Client);
}
public void SendMsg(List networkTask, Socket ignoreSocket = null)
{
@@ -97,65 +84,38 @@ namespace DangerousD.GameCore.Network
int count = Data.Length;
if (state == "Host")
{
- try
+ foreach (Socket socket in clientSockets)
{
- foreach (Socket socket in clientSockets)
+ if (!(socket == ignoreSocket))
{
- if (!(socket == ignoreSocket))
- {
- socket.Send(BitConverter.GetBytes(count));
- socket.Send(Data);
- }
+ socket.Send(BitConverter.GetBytes(count));
+ socket.Send(Data);
}
}
- catch { }
}
else
{
- try
- {
- socket.Send(BitConverter.GetBytes(count));
- socket.Send(Data);
- }
- catch { }
+ socket.Send(BitConverter.GetBytes(count));
+ socket.Send(Data);
}
}
private void ReceiveMsgFromHost()
{
while (true)
{
- try
+ byte[] bytesCount = new byte[4];
+ socket.Receive(bytesCount);
+ int length = BitConverter.ToInt32(bytesCount);
+ byte[] Data = new byte[length];
+ StateObject so = new StateObject(socket, Data);
+ while (so.UploadedBytesCount < length)
{
- 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);
+ int count = socket.Receive(so.buffer, so.UploadedBytesCount, length-so.UploadedBytesCount, SocketFlags.None);
+ so.UploadedBytesCount += count;
}
- catch { }
+ List tasks = JsonConvert.DeserializeObject>(Encoding.Unicode.GetString(so.buffer, 0, length));
+ GetReceivingMessages(tasks);
}
}
-
- private void AsyncReceiveCallback(IAsyncResult ar)
- {
- try
- {
- 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
- {
- List tasks = JsonConvert.DeserializeObject>(so.sb.ToString());
- GetReceivingMessages(tasks);
- }
- }
- catch { }
- }
}
}
diff --git a/DangerousD/GameCore/Network/NetworkTask.cs b/DangerousD/GameCore/Network/NetworkTask.cs
index f9b6072..17bf92b 100644
--- a/DangerousD/GameCore/Network/NetworkTask.cs
+++ b/DangerousD/GameCore/Network/NetworkTask.cs
@@ -38,11 +38,12 @@ namespace DangerousD.GameCore.Network
///
///
///
- public NetworkTask(Type EntityType, Vector2 EntityPosition, int ParentId)
+ public NetworkTask(Type EntityType, Vector2 EntityPosition, int ParentId, Vector2 velocity)
{
operation = NetworkTaskOperationEnum.CreateEntity;
type = EntityType;
position = EntityPosition;
+ this.velocity = velocity;
objId = ParentId;
}
diff --git a/DangerousD/GameCore/Network/StateObject.cs b/DangerousD/GameCore/Network/StateObject.cs
index f98170b..3648ad1 100644
--- a/DangerousD/GameCore/Network/StateObject.cs
+++ b/DangerousD/GameCore/Network/StateObject.cs
@@ -12,7 +12,6 @@ namespace DangerousD.GameCore.Network
public Socket workSocket;
public int bufferSize;
public byte[] buffer;
- public StringBuilder sb = new StringBuilder();
public int UploadedBytesCount;
public StateObject(Socket socket, byte[] buffer)