NetworkAnimationSupport(ChangeState)

This commit is contained in:
AnloGames 2023-08-18 12:30:44 +03:00
parent 5f032d527b
commit bed41c5bf0
5 changed files with 65 additions and 25 deletions

View file

@ -30,6 +30,7 @@ namespace DangerousD.GameCore
LoadContent();
AppManager.Instance.GameManager.Register(this);
GraphicsComponent.parentId = id;
}
public virtual void OnCollision(GameObject gameObject)
@ -62,5 +63,9 @@ namespace DangerousD.GameCore
//wdaspriteBatch.Draw(debugTexture,new Rectangle(Rectangle.X-GraphicsComponent.CameraPosition.X,Rectangle.Y-GraphicsComponent.CameraPosition.Y,Rectangle.Width,Rectangle.Height), Color.White);
}
public GraphicsComponent GetGraphicsComponent()
{
return this.GraphicsComponent;
}
}
}

View file

@ -32,14 +32,17 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
private int bullets;
public bool FallingThroughPlatform = false;
public bool isUping = false;
public bool isNetworkPlayer;
public int Bullets { get { return bullets; } }
public Player(Vector2 position, bool isNetworkPlayer = false) : base(position)
{
this.isNetworkPlayer = isNetworkPlayer;
Width = 16;
Height = 32;
@ -48,24 +51,24 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
AppManager.Instance.InputManager.ShootEvent += Shoot;
AppManager.Instance.InputManager.MovEventJump += Jump;
AppManager.Instance.InputManager.MovEventDown += MoveDown;
velocity = new Vector2(0, 0);
rightBorder = (int)position.X + 100;
leftBorder = (int)position.X - 100;
bullets = 5;
this.GraphicsComponent.actionOfAnimationEnd += (a) =>
{
if (a == "playerShootLeft" || a == "playerShootRight")
{
isShooting = false;
}
if (a == "playerReload")
{
bullets++;
}
};
}
velocity = new Vector2(0, 0);
rightBorder = (int)position.X + 100;
leftBorder = (int)position.X - 100;
bullets = 5;
this.GraphicsComponent.actionOfAnimationEnd += (a) =>
{
if (a == "playerShootLeft" || a == "playerShootRight")
{
isShooting = false;
}
if (a == "playerReload")
{
bullets++;
}
};
}
public bool IsAlive { get { return isAlive; } }
@ -251,6 +254,5 @@ namespace DangerousD.GameCore.GameObjects.LivingEntities
isOnGround = false;
AppManager.Instance.DebugHUD.Log("FallingThroughPlatform");
}
}
}

View file

@ -1,4 +1,5 @@
using DangerousD.GameCore.Managers;
using DangerousD.GameCore.Network;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
@ -18,6 +19,7 @@ namespace DangerousD.GameCore.Graphics
private List<string> texturesNames;
private AnimationContainer currentAnimation;
static private int scaling = 4;
public int parentId;
public AnimationContainer CurrentAnimation
{
get
@ -105,6 +107,14 @@ namespace DangerousD.GameCore.Graphics
public void StartAnimation(string startedanimationId)
{
if (startedanimationId == "playerShootRight" && parentId == 17)
{
string a = "2";
}
if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer && startedanimationId != GetCurrentAnimation)
{
AppManager.Instance.NetworkTasks.Add(new NetworkTask(parentId, startedanimationId, Vector2.Zero));
}
currentFrame = 0;
currentAnimation = animations.Find(x => x.Id == startedanimationId);

View file

@ -111,9 +111,8 @@ namespace DangerousD.GameCore
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
if (GameManager.GetPlayer1 != null)
DebugHUD.Set("Objid: ", GameManager.GetPlayer1.id.ToString());
if (GameManager.GetPlayer1 != null)
DebugHUD.Set("id: ", GameManager.GetPlayer1.id.ToString());
InputManager.Update();
SoundManager.Update();
@ -229,10 +228,11 @@ namespace DangerousD.GameCore
case NetworkTaskOperationEnum.CreateEntity:
break;
case NetworkTaskOperationEnum.SendPosition:
if (networkTask.objId != GameManager.GetPlayer1.id)
if (networkTask.objId != GameManager.GetPlayer1.id )
{
LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId);
entity.SetPosition(networkTask.position);
if (entity != null)
entity.SetPosition(networkTask.position);
if (multiPlayerStatus == MultiPlayerStatus.Host)
{
NetworkTasks.Add(networkTask);
@ -240,6 +240,20 @@ namespace DangerousD.GameCore
}
break;
case NetworkTaskOperationEnum.ChangeState:
if (networkTask.objId != GameManager.GetPlayer1.id)
{
List<GraphicsComponent> gcs = new List<GraphicsComponent>();
foreach (var player in GameManager.players)
{
gcs.Add(player.GetGraphicsComponent());
}
LivingEntity entity = GameManager.livingEntities.Find(x => x.id == networkTask.objId);
if (entity != null)
{
GraphicsComponent gc = entity.GetGraphicsComponent();
gc.StartAnimation(networkTask.name);
}
}
break;
case NetworkTaskOperationEnum.ConnectToHost:
Player connectedPlayer = new Player(Vector2.Zero, true);
@ -257,13 +271,15 @@ namespace DangerousD.GameCore
if (!GameManager.GetPlayer1.isIdFromHost)
{
GameManager.GetPlayer1.id = networkTask.objId;
GraphicsComponent gcsd = GameManager.GetPlayer1.GetGraphicsComponent();
gcsd.parentId = networkTask.objId;
GameManager.GetPlayer1.isIdFromHost = true;
}
break;
case NetworkTaskOperationEnum.AddConnectedPlayer:
Player remoteConnectedPlayer = new Player(networkTask.position, true);
remoteConnectedPlayer.id = networkTask.objId;
remoteConnectedPlayer.GetGraphicsComponent().parentId = networkTask.objId;
break;
default:
break;

View file

@ -150,14 +150,21 @@ namespace DangerousD.GameCore
}
else
{
for (int i = 0; i < livingEntitiesWithoutPlayers.Count; i++)
{
livingEntitiesWithoutPlayers[i].PlayAnimation();
}
}
foreach (Player player in players)
{
if (player.id != GetPlayer1.id)
{
player.PlayAnimation();
}
}
GetPlayer1.Update(gameTime);
foreach (var item in otherObjects)
item.Update(gameTime);