tried to fix host error

This commit is contained in:
bmvolf 2023-08-18 17:09:37 +03:00
commit 61ea7a5644
7 changed files with 136 additions and 49 deletions

View file

@ -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"}

View file

@ -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"
}

View file

@ -36,9 +36,9 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public abstract void Move(GameTime gameTime); public abstract void Move(GameTime gameTime);
public void TakeDamage(int damage) public virtual void TakeDamage()
{ {
monster_health -= damage; monster_health--;
if (monster_health <= 0) if (monster_health <= 0)
{ {
Death(); Death();

View file

@ -14,7 +14,6 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
{ {
public class Zombie : CoreEnemy public class Zombie : CoreEnemy
{ {
private bool isAttack;
float leftBorder; float leftBorder;
float rightBorder; float rightBorder;
@ -32,6 +31,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
rightBorder = (int)position.X + 100; rightBorder = (int)position.X + 100;
physicsManager = new PhysicsManager(); physicsManager = new PhysicsManager();
Random random = new Random(); Random random = new Random();
monster_health = 2;
if(random.Next(0, 2) == 0) if(random.Next(0, 2) == 0)
{ {
isGoRight = true; isGoRight = true;
@ -58,18 +58,19 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
Target(); Target();
Move(gameTime); Move(gameTime);
} }
fixBorder(); //fixBorder();
base.Update(gameTime); base.Update(gameTime);
} }
public override void Attack() public override void Attack()
{ {
AppManager.Instance.GameManager.GetPlayer1.Death(name); isAttaking = true;
PlayAttackAnimation();
AppManager.Instance.GameManager.GetClosestPlayer(Pos).Death(name);
} }
public void PlayAttackAnimation() public void PlayAttackAnimation()
{ {
velocity.X = 0; velocity.X = 0;
isAttaking = true;
if (isGoRight) if (isGoRight)
{ {
if (GraphicsComponent.GetCurrentAnimation != "ZombieRightAttack") if (GraphicsComponent.GetCurrentAnimation != "ZombieRightAttack")
@ -123,7 +124,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
} }
public override void OnCollision(GameObject gameObject) public override void OnCollision(GameObject gameObject)
{ {
if (gameObject.id == AppManager.Instance.GameManager.GetPlayer1.id && AppManager.Instance.GameManager.GetPlayer1.IsAlive) if (gameObject.id == AppManager.Instance.GameManager.GetClosestPlayer(Pos).id && AppManager.Instance.GameManager.GetClosestPlayer(Pos).IsAlive)
{ {
if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Client) if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.Client)
{ {
@ -183,10 +184,9 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities.Monsters
public override void Attack(GameTime gameTime) public override void Attack(GameTime gameTime)
{} {}
public void TakeDamage() public override void TakeDamage()
{ {
monster_health--; monster_health--;
GraphicsComponent.StartAnimation("ZombieRightAttack");
Particle particle = new Particle(Pos); Particle particle = new Particle(Pos);
if (monster_health <= 0) if (monster_health <= 0)
{ {

View file

@ -10,6 +10,7 @@ using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using DangerousD.GameCore.GameObjects.LivingEntities.Monsters; using DangerousD.GameCore.GameObjects.LivingEntities.Monsters;
using DangerousD.GameCore.Network; using DangerousD.GameCore.Network;
using DangerousD.GameCore.GameObjects.MapObjects;
namespace DangerousD.GameCore.GameObjects.LivingEntities namespace DangerousD.GameCore.GameObjects.LivingEntities
{ {
@ -65,6 +66,10 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
{ {
bullets++; bullets++;
} }
if(a == "playerShootBoomUpRight" || a == "playerShootBoomUpLeft")
{
isShooting = false;
}
}; };
} }
@ -73,7 +78,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
public bool IsAlive { get { return isAlive; } } public bool IsAlive { get { return isAlive; } }
protected override GraphicsComponent GraphicsComponent { get; } = new(new List<string> { "playerMoveLeft", "playerMoveRight", "DeathFromZombie", "playerRightStay", "playerStayLeft", protected override GraphicsComponent GraphicsComponent { get; } = new(new List<string> { "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() public void Attack()
{ {
@ -183,6 +189,8 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
isShooting = true; isShooting = true;
bullets--; bullets--;
if (isRight) if (isRight)
{
if (!isUping)
{ {
StartCicycleAnimation("playerShootRight"); 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()); 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());
@ -190,36 +198,38 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
{ {
Zombie targetZombie = (Zombie)targets.First(); Zombie targetZombie = (Zombie)targets.First();
targetZombie.TakeDamage(); targetZombie.TakeDamage();
}
targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(GetShootRectangle(isRight), typeof(SilasHands)).OrderBy(x => (x.Pos - Pos).LengthSquared());
if (targets.Count() > 0)
{
SilasHands targetHand = (SilasHands)targets.First();
targetHand.TakeDamage();
} }
SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X + 30, Pos.Y + 7)); SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X + 30, Pos.Y + 7));
} }
else else
{
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));
}
}
else if(!isRight)
{
if (!isUping)
{ {
StartCicycleAnimation("playerShootLeft"); StartCicycleAnimation("playerShootLeft");
var targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(new Rectangle((int)Pos.X - shootLength, (int)(Pos.Y - 10f), shootLength, 10), typeof(Zombie)); 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 != null)
{
foreach (var target in targets)
{
Zombie targetZombie = (Zombie)target;
targetZombie.TakeDamage();
}
}
targets = AppManager.Instance.GameManager.physicsManager.CheckRectangle(GetShootRectangle(isRight), typeof(SilasHands));
if (targets.Count() > 0) if (targets.Count() > 0)
{ {
SilasHands targetHand = (SilasHands)targets.First(); Zombie targetZombie = (Zombie)targets.First();
targetHand.TakeDamage(); targetZombie.TakeDamage();
} }
SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X - 12, Pos.Y + 7)); SmokeAfterShoot smokeAfterShoot = new SmokeAfterShoot(new Vector2(Pos.X - 12, Pos.Y + 7));
} }
else
{
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));
}
}
} }
} }
} }
@ -282,14 +292,7 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
} }
else if (AppManager.Instance.InputManager.VectorMovementDirection.X == 0)//стоит else if (AppManager.Instance.InputManager.VectorMovementDirection.X == 0)//стоит
{ {
if(bullets < 5) if (isRight)
{
if (GraphicsComponent.GetCurrentAnimation != "playerReload")
{
GraphicsComponent.StartAnimation("playerReload");
}
}
else if (isRight)
{ {
if (isUping) if (isUping)
{ {
@ -298,6 +301,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
GraphicsComponent.StartAnimation("playerShootUpRight"); GraphicsComponent.StartAnimation("playerShootUpRight");
} }
} }
else if (bullets < 5)
{
if (GraphicsComponent.GetCurrentAnimation != "playerReload")
{
GraphicsComponent.StartAnimation("playerReload");
}
}
else else
{ {
GraphicsComponent.StartAnimation("playerRightStay"); GraphicsComponent.StartAnimation("playerRightStay");
@ -312,6 +322,13 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
GraphicsComponent.StartAnimation("playerShootUpLeft"); GraphicsComponent.StartAnimation("playerShootUpLeft");
} }
} }
else if (bullets < 5)
{
if (GraphicsComponent.GetCurrentAnimation != "playerReload")
{
GraphicsComponent.StartAnimation("playerReload");
}
}
else else
{ {
GraphicsComponent.StartAnimation("playerStayLeft"); GraphicsComponent.StartAnimation("playerStayLeft");
@ -331,13 +348,51 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
isOnGround = false; isOnGround = false;
} }
public class Bullet : GameObjects.LivingEntity public class Bullet : LivingEntity
{ {
public Bullet(Vector2 position) : base(position) public Bullet(Vector2 position) : base(position)
{ {
Height = 5;
Width = 5;
}
protected override GraphicsComponent GraphicsComponent { get; } = new(new List<string> { "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;
}
public void ShootUpLeft()
{
direction = new Vector2(-1, -1);
acceleration = Vector2.Zero;
velocity = new Vector2(10, 10) * direction;
maindirection = velocity;
}
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");
} }
} }
} }

View file

@ -10,6 +10,8 @@ public abstract class LivingEntity : Entity
public Vector2 velocity; public Vector2 velocity;
public Vector2 acceleration; public Vector2 acceleration;
public Vector2 Acceleration { get; private set; }
public LivingEntity(Vector2 position) : base(position) public LivingEntity(Vector2 position) : base(position)
{ {
acceleration = new Vector2(0, 30); acceleration = new Vector2(0, 30);

View file

@ -192,5 +192,10 @@ namespace DangerousD.GameCore
} }
} }
} }
public Player GetClosestPlayer(Vector2 position)
{
return players.OrderBy(x => (x.Pos - position).Length()).First();
}
} }
} }