Merge branch 'DevelopmentX' into UpdateZombie

This commit is contained in:
SergoDobro 2024-08-18 19:30:48 +03:00 committed by GitHub
commit f0074edfd1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 121 additions and 103 deletions

View file

@ -25,6 +25,8 @@ using ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables;
using ZoFo.GameCore.GameObjects.MapObjects.StopObjects; using ZoFo.GameCore.GameObjects.MapObjects.StopObjects;
using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies; using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies;
using ZoFo.GameCore.Graphics; using ZoFo.GameCore.Graphics;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
namespace ZoFo.GameCore namespace ZoFo.GameCore
{ {
public class Client public class Client
@ -55,13 +57,21 @@ namespace ZoFo.GameCore
public void OnDataSend(string data) public void OnDataSend(string data)
{ {
List<UpdateData> updateDatas = JsonSerializer.Deserialize<List<UpdateData>>(data); //List<UpdateTileCreated> updateDatas = JsonSerializer.Deserialize<List<UpdateTileCreated>>(data);
JArray jToken = JsonConvert.DeserializeObject(data) as JArray;
//string[] brands = jToken.SelectToken("")?.ToObject<string[]>();
foreach (JToken update in jToken.Children())
{
string a = update.ToString();
UpdateTileCreated u = System.Text.Json.JsonSerializer.Deserialize<UpdateTileCreated>(a);
}
// тут будет switch // тут будет switch
AppManager.Instance.debugHud.Log(data); AppManager.Instance.debugHud.Log(data);
foreach (var item in updateDatas) //foreach (var item in updateDatas)
{ //{
GotData(item); // GotData(item);
} //}
} }
public void GameEndedUnexpectedly() { } public void GameEndedUnexpectedly() { }
@ -113,22 +123,21 @@ namespace ZoFo.GameCore
mapObjects.Add( mapObjects.Add(
new MapObject( new MapObject(
(update as UpdateTileCreated).Position, (update as UpdateTileCreated).Position,
(update as UpdateTileCreated).Size.ToVector2(), (update as UpdateTileCreated).Size.GetPoint().ToVector2(),
(update as UpdateTileCreated).sourceRectangle, (update as UpdateTileCreated).sourceRectangle.GetRectangle(),
(update as UpdateTileCreated).tileSetName (update as UpdateTileCreated).tileSetName
)); ));
} }
else if (update is UpdateStopObjectCreated) //else if (update is UpdateStopObjectCreated)
{ //{
stopObjects.Add( // stopObjects.Add(
new StopObject( // new StopObject(
(update as UpdateStopObjectCreated).Position, // (update as UpdateStopObjectCreated).Position,
(update as UpdateStopObjectCreated).Size.ToVector2(), // (update as UpdateStopObjectCreated).Size.ToVector2(),
(update as UpdateStopObjectCreated).sourceRectangle, // (update as UpdateStopObjectCreated).sourceRectangle,
(update as UpdateStopObjectCreated).tileSetName, // (update as UpdateStopObjectCreated).tileSetName
(update as UpdateStopObjectCreated).collisions // ));
)); //}
}
else if (update is UpdateGameObjectCreated) else if (update is UpdateGameObjectCreated)
{ {
GameObject created_gameObject; GameObject created_gameObject;

View file

@ -33,13 +33,13 @@ namespace ZoFo.GameCore.GameManagers.MapManager
PropertyNameCaseInsensitive = true PropertyNameCaseInsensitive = true
}; };
TileMap tileMap = TileMap tileMap =
JsonSerializer.Deserialize<TileMap>(File.ReadAllText(string.Format(_templatePath, mapName)), options); JsonSerializer.Deserialize<TileMap>(File.ReadAllText(Path.Combine(AppContext.BaseDirectory, string.Format(_templatePath, mapName))), options);
// Загрузка TileSet-ов по TileSetInfo // Загрузка TileSet-ов по TileSetInfo
List<TileSet> tileSets = new List<TileSet>(); List<TileSet> tileSets = new List<TileSet>();
foreach (TileSetInfo tileSetInfo in tileMap.TileSets) foreach (TileSetInfo tileSetInfo in tileMap.TileSets)
{ {
TileSet tileSet = LoadTileSet(Path.Combine("Content", "MapData", "TileMaps", tileSetInfo.Source)); TileSet tileSet = LoadTileSet(Path.Combine(AppContext.BaseDirectory, "Content", "MapData", "TileMaps", tileSetInfo.Source));
tileSet.FirstGid = tileSetInfo.FirstGid; tileSet.FirstGid = tileSetInfo.FirstGid;
tileSets.Add(tileSet); tileSets.Add(tileSet);
} }
@ -75,14 +75,15 @@ namespace ZoFo.GameCore.GameManagers.MapManager
(i / chunk.Height) * tileMap.TileHeight + chunk.Y * tileMap.TileHeight); (i / chunk.Height) * tileMap.TileHeight + chunk.Y * tileMap.TileHeight);
Tile tile = tileSet.Tiles[number]; // По факту может быть StopObjectom, но на уровне Tiled это все в первую очередь Tile Tile tile = tileSet.Tiles[number]; // По факту может быть StopObjectom, но на уровне Tiled это все в первую очередь Tile
string textureName = Path.Combine(AppContext.BaseDirectory, "Content", "Textures", "TileSetImages",
Path.GetFileName(tileSet.Image).Replace(".png", ""));
switch (tile.Type) switch (tile.Type)
{ {
case "Tile": case "Tile":
AppManager.Instance.server.RegisterGameObject(new MapObject(position, AppManager.Instance.server.RegisterGameObject(new MapObject(position,
new Vector2(tileSet.TileWidth, tileSet.TileHeight), new Vector2(tileSet.TileWidth, tileSet.TileHeight),
sourceRectangle, sourceRectangle,
"Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""))); textureName));
break; break;
case "StopObject": case "StopObject":
@ -91,7 +92,7 @@ namespace ZoFo.GameCore.GameManagers.MapManager
AppManager.Instance.server.RegisterGameObject(new StopObject(position, AppManager.Instance.server.RegisterGameObject(new StopObject(position,
new Vector2(tileSet.TileWidth, tileSet.TileHeight), new Vector2(tileSet.TileWidth, tileSet.TileHeight),
sourceRectangle, sourceRectangle,
"Textures/TileSetImages/" + Path.GetFileName(tileSet.Image).Replace(".png", ""), textureName,
collisionRectangles.ToArray())); collisionRectangles.ToArray()));
break; break;

View file

@ -116,8 +116,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{ {
while(socket.Connected) while(socket.Connected)
{ {
byte[] bytes = new byte[2048]; byte[] bytes = new byte[65535];
var countAnsw = socket.Receive(bytes); //Вылетает если кто то закрыл var countAnsw = socket.Receive(bytes, SocketFlags.Partial); //Вылетает если кто то закрыл
string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером
GetDataSent(update); GetDataSent(update);
} }

View file

@ -0,0 +1,18 @@
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO
{
public class SerializablePoint
{
public int X;
public int Y;
public SerializablePoint(Point point) { X = point.X; Y = point.Y;}
public Point GetPoint() { return new Point(X, Y);}
}
}

View file

@ -0,0 +1,33 @@
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO
{
[Serializable]
[JsonSerializable(typeof(SerializableRectangle))]
public class SerializableRectangle
{
public SerializablePoint Size { get; set; }
public SerializablePoint Location { get; set; }
public int X { get; set; }
public int Y { get; set; }
public SerializableRectangle()
{
}
public SerializableRectangle(Rectangle rectangle) { X = rectangle.X; Y = rectangle.Y;
Size = new SerializablePoint(rectangle.Size); Location = new SerializablePoint(rectangle.Location); }
public Rectangle GetRectangle()
{
return new Rectangle() { X = X, Y = Y, Size = Size.GetPoint(), Location = Location.GetPoint() };
}
}
}

View file

@ -53,7 +53,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public static IPAddress GetIp() public static IPAddress GetIp()
{ {
string hostName = Dns.GetHostName(); // Retrive the Name of HOST string hostName = Dns.GetHostName(); // Retrive the Name of HOST
var ipList = Dns.GetHostByName(hostName).AddressList; var ipList = Dns.GetHostEntry(hostName).AddressList;
foreach (var ip in ipList) foreach (var ip in ipList)
{ {
@ -80,15 +80,15 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
//Что это? //Что это?
//по 10 паков за раз TODO FIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXIT //по 10 паков за раз TODO FIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXITFIXIT
List<UpdateData> datasToSend = new List<UpdateData>(); List<UpdateData> datasToSend = new List<UpdateData>();
for (int i = 0; i < 5 && i<updates.Count; i++) for (int i = 0; i < 200 && i<updates.Count; i++)
datasToSend.Add(updates[i]); datasToSend.Add(updates[i]);
string data = JsonSerializer.Serialize(datasToSend); string data = JsonSerializer.Serialize(datasToSend);
var databytes = Encoding.UTF8.GetBytes(data); var databytes = Encoding.UTF8.GetBytes(data);
foreach (var item in clients) foreach (Socket socket in clients)
{ {
item.SendAsync(databytes); clients[0].SendAsync(databytes, SocketFlags.Partial);
} }
for (int i = 0; i < 5 && i< datasToSend.Count; i++) for (int i = 0; i < 200 && i< datasToSend.Count; i++)
updates.RemoveAt(0); updates.RemoveAt(0);
} }
@ -171,8 +171,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
Socket client = (Socket)socket; Socket client = (Socket)socket;
while (client.Connected) while (client.Connected)
{ {
var buff = new byte[1024]; var buff = new byte[65535];
var answ = client.Receive(buff); var answ = client.Receive(buff, SocketFlags.Partial);
string response = Encoding.UTF8.GetString(buff, 0, answ); string response = Encoding.UTF8.GetString(buff, 0, answ);
GetDataSend(response); GetDataSend(response);
} }

View file

@ -6,6 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Threading.Tasks; using System.Threading.Tasks;
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer; using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ClientToServer;
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
@ -18,22 +19,9 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
{ {
public UpdateTileCreated() { UpdateType = "UpdateTileCreated"; } public UpdateTileCreated() { UpdateType = "UpdateTileCreated"; }
public Texture2D TextureTile { get; set; } public Texture2D TextureTile { get; set; }
public Vector2 Position { get; set; } public Vector2 Position { get; set; }
public Point Size { get; set; } public SerializablePoint Size { get; set; }
public Rectangle sourceRectangle { get; set; } public SerializableRectangle sourceRectangle { get; set; }
public string tileSetName { get; set; } public string tileSetName { get; set; }
} }
/// <summary>
/// При создании тайла TODO move to another file
/// </summary>
public class UpdateStopObjectCreated : UpdateData
{
public UpdateStopObjectCreated() { UpdateType = "UpdateStopObjectCreated"; }
public Texture2D TextureTile { get; set; }
public Vector2 Position { get; set; }
public Point Size { get; set; }
public Rectangle sourceRectangle { get; set; }
public string tileSetName { get; set; }
public Rectangle[] collisions { get; set; }
}
} }

View file

@ -24,15 +24,7 @@ namespace ZoFo.GameCore.GameManagers
{ {
//List<string> sounds = AppManager.Instance.Content.Load<List<string>>("sounds/"); //List<string> sounds = AppManager.Instance.Content.Load<List<string>>("sounds/");
string a = Path.Combine("Content", "sounds"); string[] k = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "Content", "sounds")).Where(x => x.EndsWith("xnb")).ToArray();
string[] k;
if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
{
k = Directory.GetFiles(Path.Combine("bin", "Debug", "net8.0", "Content", "sounds")).Where(x => x.EndsWith("xnb")).ToArray();
}
else{
k = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "Content", "sounds")).Where(x => x.EndsWith("xnb")).ToArray();
}
if (k.Length > 0) if (k.Length > 0)
{ {

View file

@ -164,6 +164,7 @@ namespace ZoFo.GameCore.Graphics
} }
interval--; interval--;
} }
public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch) public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch)
@ -188,8 +189,9 @@ namespace ZoFo.GameCore.Graphics
destinationRectangle.Y -= CameraPosition.Y; destinationRectangle.Y -= CameraPosition.Y;
destinationRectangle = Scaling(destinationRectangle); destinationRectangle = Scaling(destinationRectangle);
_spriteBatch.Draw(texture,
destinationRectangle, sourceRectangle, Color.White); _spriteBatch.Draw(texture, destinationRectangle, sourceRectangle, Color.White, Rotation,
Vector2.Zero, Flip, 0);
} }
public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle) public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle)
{ {
@ -214,7 +216,8 @@ namespace ZoFo.GameCore.Graphics
destinationRectangle = Scaling(destinationRectangle); destinationRectangle = Scaling(destinationRectangle);
_spriteBatch.Draw(texture, _spriteBatch.Draw(texture,
destinationRectangle, sourceRectangle, Color.White); destinationRectangle, sourceRectangle, Color.White, 0,
Vector2.Zero, Flip, 0);
} }
private void buildSourceRectangle() private void buildSourceRectangle()
{ {

View file

@ -12,7 +12,7 @@ namespace ZoFo.GameCore.Graphics
public void LoadAnimations() public void LoadAnimations()
{ {
Animations = new List<AnimationContainer>(); Animations = new List<AnimationContainer>();
string[] animationFilesNames = Directory.GetFiles("Content/Textures/Animations"); string[] animationFilesNames = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, "Content", "Textures", "Animations"));
StreamReader reader; StreamReader reader;
foreach (var fileName in animationFilesNames) foreach (var fileName in animationFilesNames)

View file

@ -9,6 +9,9 @@ public abstract class GraphicsComponent
public static int scaling = 1; public static int scaling = 1;
public string mainTextureName;//TODO костыль - пофиксить public string mainTextureName;//TODO костыль - пофиксить
public SpriteEffects Flip = SpriteEffects.None;
public float Rotation;
public abstract void LoadContent(); public abstract void LoadContent();
public abstract void Update(); public abstract void Update();
public abstract void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch); public abstract void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch);

View file

@ -1,16 +0,0 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace ZoFo.GameCore.Graphics;
public interface IGraphicsComponent
{
public Rectangle ObjectDrawRectangle { get; set; }
public static int scaling = 1;
public string mainTextureName { get; set; }//TODO костыль - пофиксить
public abstract void LoadContent();
public abstract void Update();
public abstract void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch);
public abstract void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle);
}

View file

@ -8,7 +8,6 @@ using ZoFo.GameCore.GUI;
namespace ZoFo.GameCore.Graphics namespace ZoFo.GameCore.Graphics
{ {
public class StaticGraphicsComponent : GraphicsComponent public class StaticGraphicsComponent : GraphicsComponent
{ {
private Texture2D texture; private Texture2D texture;
@ -18,7 +17,7 @@ namespace ZoFo.GameCore.Graphics
{ {
LoadContent(); LoadContent();
} }
public StaticGraphicsComponent(string textureName) public StaticGraphicsComponent(string textureName)
{ {
BuildComponent(textureName); BuildComponent(textureName);
@ -29,7 +28,7 @@ namespace ZoFo.GameCore.Graphics
{ {
_textureName = textureName; _textureName = textureName;
} }
public override void LoadContent() public override void LoadContent()
{ {
@ -37,7 +36,7 @@ namespace ZoFo.GameCore.Graphics
{ {
return; return;
} }
texture = AppManager.Instance.Content.Load<Texture2D>(_textureName); texture = AppManager.Instance.Content.Load<Texture2D>(_textureName);
} }
@ -53,11 +52,14 @@ namespace ZoFo.GameCore.Graphics
destinationRectangle.X -= CameraPosition.X; destinationRectangle.X -= CameraPosition.X;
destinationRectangle.Y -= CameraPosition.Y; destinationRectangle.Y -= CameraPosition.Y;
destinationRectangle = Scaling(destinationRectangle); destinationRectangle = Scaling(destinationRectangle);
_spriteBatch.Draw(texture, destinationRectangle, Color.White); _spriteBatch.Draw(texture, destinationRectangle, texture.Bounds, Color.White, Rotation,
Vector2.Zero, Flip, 0);
} }
public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle) public override void Draw(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle)
{ {
// Uncomment to go brrrr
//Rotation = new Random().Next(1, 365);
DebugHUD.Instance.Log("draw "); DebugHUD.Instance.Log("draw ");
destinationRectangle.X -= CameraPosition.X; destinationRectangle.X -= CameraPosition.X;
@ -65,7 +67,8 @@ namespace ZoFo.GameCore.Graphics
destinationRectangle = Scaling(destinationRectangle); destinationRectangle = Scaling(destinationRectangle);
_spriteBatch.Draw(texture, _spriteBatch.Draw(texture,
destinationRectangle, sourceRectangle, Color.White); destinationRectangle, sourceRectangle, Color.White, Rotation,
Vector2.Zero, Flip, 0);
} }
} }
} }

View file

@ -21,6 +21,7 @@ using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Player;
using ZoFo.GameCore.GameObjects.MapObjects; using ZoFo.GameCore.GameObjects.MapObjects;
using ZoFo.GameCore.GameObjects.MapObjects.StopObjects; using ZoFo.GameCore.GameObjects.MapObjects.StopObjects;
using ZoFo.GameCore.Graphics; using ZoFo.GameCore.Graphics;
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
namespace ZoFo.GameCore namespace ZoFo.GameCore
{ {
@ -172,30 +173,13 @@ namespace ZoFo.GameCore
{ {
gameObjects.Add(gameObject); gameObjects.Add(gameObject);
if (gameObject is StopObject)
{
AddData(new UpdateStopObjectCreated()
{
Position = (gameObject as StopObject).position,
sourceRectangle = (gameObject as StopObject).sourceRectangle,
Size = (gameObject as StopObject).graphicsComponent.ObjectDrawRectangle.Size,
collisions = (gameObject as StopObject).collisionComponents.Select(x=>x.stopRectangle).ToArray(),
tileSetName = ((gameObject as StopObject).graphicsComponent as StaticGraphicsComponent)._textureName
});//TODO
foreach (var item in (gameObject as StopObject).collisionComponents)
{
collisionManager.Register(item);
}
return;
}
if (gameObject is MapObject) if (gameObject is MapObject)
{ {
AddData(new UpdateTileCreated() AddData(new UpdateTileCreated()
{ {
Position = (gameObject as MapObject).position, Position = (gameObject as MapObject).position,
sourceRectangle = (gameObject as MapObject).sourceRectangle, sourceRectangle = new SerializableRectangle((gameObject as MapObject).sourceRectangle),
Size = (gameObject as MapObject).graphicsComponent.ObjectDrawRectangle.Size, Size = new SerializablePoint((gameObject as MapObject).graphicsComponent.ObjectDrawRectangle.Size),
tileSetName = ((gameObject as MapObject).graphicsComponent as StaticGraphicsComponent)._textureName tileSetName = ((gameObject as MapObject).graphicsComponent as StaticGraphicsComponent)._textureName
});//TODO });//TODO
return; return;