diff --git a/Install-Package b/Install-Package new file mode 100644 index 0000000..e69de29 diff --git a/ZoFo/Game1.cs b/ZoFo/Game1.cs index 6a61626..b9272db 100644 --- a/ZoFo/Game1.cs +++ b/ZoFo/Game1.cs @@ -27,7 +27,7 @@ public class Game1 : Game { _spriteBatch = new SpriteBatch(GraphicsDevice); - // TODO: use this.Content to load your game content here + // TODO: use this.Content to load your game content here } protected override void Update(GameTime gameTime) diff --git a/ZoFo/GameCore/GameObjects/Bullet.cs b/ZoFo/GameCore/GameObjects/Bullet.cs new file mode 100644 index 0000000..4e2197d --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Bullet.cs @@ -0,0 +1,7 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; +public class Bullet : Projectile +{ + +} diff --git a/ZoFo/GameCore/GameObjects/Collectable.cs b/ZoFo/GameCore/GameObjects/Collectable.cs new file mode 100644 index 0000000..7a32b43 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Collectable.cs @@ -0,0 +1,7 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; +public class Collectable : Entity +{ + +} diff --git a/ZoFo/GameCore/GameObjects/Enemy.cs b/ZoFo/GameCore/GameObjects/Enemy.cs new file mode 100644 index 0000000..934da77 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Enemy.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Net.Mime; +using System.Reflection; +using Microsoft.Xna.Framework.Content; + +namespace ZoFo.GameCore.GameObjects; +public class Enemy : LivingEntity +{ + +} \ No newline at end of file diff --git a/ZoFo/GameCore/GameObjects/Entity.cs b/ZoFo/GameCore/GameObjects/Entity.cs new file mode 100644 index 0000000..0600b1d --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Entity.cs @@ -0,0 +1,29 @@ +using System; +using ZoFo.GameCore.GameObjects; +using Microsoft.Xna.Framework.Content; + +namespace ZoFo.GameCore.GameObjects; +public class Entity : GameObject +{ + public int Id{ get; set; } + //public CollisionComponent collisionComponents{ get; set; } + //public AnimationComponent animationComponent{ get; set; } + + // в апдейте может заявляет изменения позиции + public void UpdateLogic() + { + + } + + + + // Методы для клиента + public void UpdateAnimation() + { + + } + public void Draw(ContentManager manager) + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/GunAttack.cs b/ZoFo/GameCore/GameObjects/GunAttack.cs new file mode 100644 index 0000000..b3a611e --- /dev/null +++ b/ZoFo/GameCore/GameObjects/GunAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects +{ + internal class GunAttack:IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/HandAttack.cs b/ZoFo/GameCore/GameObjects/HandAttack.cs new file mode 100644 index 0000000..3d73249 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/HandAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects +{ + internal class HandAttack:IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/IPlayerWeaponAttack.cs b/ZoFo/GameCore/GameObjects/IPlayerWeaponAttack.cs new file mode 100644 index 0000000..f47220e --- /dev/null +++ b/ZoFo/GameCore/GameObjects/IPlayerWeaponAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects +{ + internal interface IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/LivingEntity.cs b/ZoFo/GameCore/GameObjects/LivingEntity.cs new file mode 100644 index 0000000..44270fa --- /dev/null +++ b/ZoFo/GameCore/GameObjects/LivingEntity.cs @@ -0,0 +1,7 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; +public class LivingEntity : Entity +{ + +} diff --git a/ZoFo/GameCore/GameObjects/LootData.cs b/ZoFo/GameCore/GameObjects/LootData.cs new file mode 100644 index 0000000..93f67f1 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/LootData.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects +{ + internal class LootData + { + public Dictionary loots; + public void AddLoot(object lootObject, int quantity) + { + + } + } +} diff --git a/ZoFo/GameCore/GameObjects/Player.cs b/ZoFo/GameCore/GameObjects/Player.cs new file mode 100644 index 0000000..5a033e3 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Player.cs @@ -0,0 +1,7 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; +public class Player : LivingEntity +{ + +} diff --git a/ZoFo/GameCore/GameObjects/Projectile.cs b/ZoFo/GameCore/GameObjects/Projectile.cs new file mode 100644 index 0000000..80cbf5a --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Projectile.cs @@ -0,0 +1,7 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; +public class Projectile : LivingEntity +{ + +} diff --git a/ZoFo/GameCore/GameObjects/Rock.cs b/ZoFo/GameCore/GameObjects/Rock.cs new file mode 100644 index 0000000..1ff7a29 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Rock.cs @@ -0,0 +1,7 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; +public class Rock : Projectile +{ + +} diff --git a/ZoFo/GameCore/GameObjects/StopObject.cs b/ZoFo/GameCore/GameObjects/StopObject.cs new file mode 100644 index 0000000..cddb0d5 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/StopObject.cs @@ -0,0 +1,8 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; + +public class StopObject +{ + +} diff --git a/ZoFo/GameCore/GameObjects/SwordAttack.cs b/ZoFo/GameCore/GameObjects/SwordAttack.cs new file mode 100644 index 0000000..507ae6b --- /dev/null +++ b/ZoFo/GameCore/GameObjects/SwordAttack.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ZoFo.GameCore.GameObjects +{ + internal class SwordAttack:IPlayerWeaponAttack + { + + } +} diff --git a/ZoFo/GameCore/GameObjects/Tile.cs b/ZoFo/GameCore/GameObjects/Tile.cs new file mode 100644 index 0000000..16cc1c9 --- /dev/null +++ b/ZoFo/GameCore/GameObjects/Tile.cs @@ -0,0 +1,8 @@ +using System; + +namespace ZoFo.GameCore.GameObjects; + +public class Tile +{ + +} diff --git a/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs b/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs new file mode 100644 index 0000000..d18303c --- /dev/null +++ b/ZoFo/GameCore/ZoFo_grafics/AnimationBuilder.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using Newtonsoft.Json; +using Zofo.GameCore.ZoFo_grafics; + +namespace DangerousD.GameCore.Graphics +{ + public class AnimationBuilder + { + public List Animations { get; private set; } + public void LoadAnimations() + { + Animations = new List(); + string[] animationFilesNames = Directory.GetFiles("../../../Content/animations"); + + StreamReader reader; + foreach (var fileName in animationFilesNames) + { + reader = new StreamReader(fileName); + string json = reader.ReadToEnd(); + AnimationContainer animation = JsonConvert.DeserializeObject(json); + Animations.Add(animation); + reader.Close(); + } + + } + } +} diff --git a/ZoFo/GameCore/ZoFo_grafics/AnimationContainer.cs b/ZoFo/GameCore/ZoFo_grafics/AnimationContainer.cs new file mode 100644 index 0000000..36596d0 --- /dev/null +++ b/ZoFo/GameCore/ZoFo_grafics/AnimationContainer.cs @@ -0,0 +1,32 @@ +using Microsoft.Xna.Framework; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Zofo.GameCore.ZoFo_grafics +{ + [Serializable] + public class AnimationContainer + { + [JsonProperty("id")] + public string Id { get; set; } + [JsonProperty("textureName")] + public string TextureName { get; set; } + [JsonProperty("startSpriteRectangle")] + public Rectangle StartSpriteRectangle { get; set; } + [JsonProperty("frameSecond")] + public List> FrameTime { get; set; } + [JsonProperty("textureFrameInterval")] + public int TextureFrameInterval { get; set; } + [JsonProperty("framesCount")] + public int FramesCount { get; set; } + [JsonProperty("isCycle")] + public bool IsCycle { get; set; } + [JsonProperty("offset")] + public Vector2 Offset { get; set; } + + + + } +} diff --git a/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs new file mode 100644 index 0000000..6a3572b --- /dev/null +++ b/ZoFo/GameCore/ZoFo_grafics/GraphicsComponent.cs @@ -0,0 +1,278 @@ +/*using ZoFo.GameCore.GameObjects; +using ZoFo.GameCore.GameManagers; +using ZoFo.GameCore.GameManagers.NetworkManager; +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.Security.Cryptography.X509Certificates; +using System.Text; +using Zofo.GameCore.ZoFo_grafics; + +namespace ZoFo.GameCore.ZoFo_graphics +{ + + public class GraphicsComponent + { + public event Action actionOfAnimationEnd; + private List animations; + private List textures; + private List texturesNames; + private AnimationContainer currentAnimation; + static public int scaling = 4; + public int parentId; + public AnimationContainer CurrentAnimation + { + get + { + return currentAnimation; + } + } + public string LastAnimation { get; set; } + public string GetCurrentAnimation + { + get { return currentAnimation.Id; } + } + + private AnimationContainer neitralAnimation; + //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(); + buildSourceRectangle(); + } + + public GraphicsComponent(string textureName) + { + animations = new List(); + textures = new List(); + var texture = AppManager.Instance.Content.Load(textureName); + textures.Add(texture); + AnimationContainer animationContainer = new AnimationContainer(); + animationContainer.StartSpriteRectangle = new Rectangle(0, 0, texture.Width, texture.Height); + animationContainer.TextureFrameInterval = 0; + animationContainer.TextureName = texture.Name; + animationContainer.IsCycle = true; + animationContainer.FramesCount = 1; + animationContainer.FrameTime = new List>() { new Tuple(0, 10) }; + animationContainer.Id = texture.Name; + currentAnimation = animationContainer; + neitralAnimation = animationContainer; + animations.Add(animationContainer); + } + + private void LoadAnimations(List animationsId, string neitralAnimationId) + { + animations = new List(); + foreach (var id in animationsId) + { + animations.Add(AppManager.Instance.AnimationBuilder.Animations.Find(x => x.Id == id)); + if (id == neitralAnimationId) + { + neitralAnimation = animations.Last(); + } + } + } + + public void LoadContent() + { + textures = new List(); + texturesNames = new List(); + + foreach (var animation in animations) + { + if (!texturesNames.Contains(animation.TextureName)) + { + texturesNames.Add(animation.TextureName); + textures.Add(AppManager.Instance.Content.Load(animation.TextureName)); + } + } + } + + public void StartAnimation(string startedanimationId) + { + if (AppManager.Instance.multiPlayerStatus != MultiPlayerStatus.SinglePlayer) + { + LivingEntity entity = AppManager.Instance.GameManager.livingEntities.Find(x => x.id == parentId); + if (((entity is Player) || AppManager.Instance.multiPlayerStatus == MultiPlayerStatus.Host) && startedanimationId != GetCurrentAnimation) + { + AppManager.Instance.NetworkTasks.Add(new NetworkTask(parentId, startedanimationId, Vector2.Zero)); + } + } + currentFrame = 0; + currentAnimation = animations.Find(x => x.Id == startedanimationId); + + buildSourceRectangle(); + SetInterval(); + } + + public void StopAnimation() + { + currentFrame = 0; + interval = 0; + currentAnimation = neitralAnimation; + buildSourceRectangle(); + SetInterval(); + } + + public void Update() + { + if (interval == 0) + { + currentFrame++; + if (currentAnimation.FramesCount <= currentFrame) + { + if (!currentAnimation.IsCycle) + { + if (actionOfAnimationEnd != null) + { + actionOfAnimationEnd(currentAnimation.Id); + } + currentAnimation = neitralAnimation; + + } + + currentFrame = 0; + + } + + buildSourceRectangle(); + SetInterval(); + } + + interval--; + } + + public void DrawAnimation(Rectangle destinationRectangle, SpriteBatch _spriteBatch) + { + Texture2D texture = textures[texturesNames.FindIndex(x => x == currentAnimation.TextureName)]; + float scale; + if (currentAnimation.Offset.X != 0) + { + destinationRectangle.X -= (int)currentAnimation.Offset.X; + scale = destinationRectangle.Height / sourceRectangle.Height; + destinationRectangle.Width = (int)(sourceRectangle.Width * scale); + + } + else if (currentAnimation.Offset.Y != 0) + { + destinationRectangle.Y -= (int)currentAnimation.Offset.Y; + scale = destinationRectangle.Width / sourceRectangle.Width; + destinationRectangle.Height = (int)(sourceRectangle.Height * scale); + } + + destinationRectangle.X -= CameraPosition.X; + destinationRectangle.Y -= CameraPosition.Y; + + destinationRectangle = Scaling(destinationRectangle); + _spriteBatch.Draw(texture, + destinationRectangle, sourceRectangle, Color.White); + } + public void DrawAnimation(Rectangle destinationRectangle, SpriteBatch _spriteBatch, Rectangle sourceRectangle) + { + Texture2D texture = textures[texturesNames.FindIndex(x => x == currentAnimation.TextureName)]; + float scale; + if (currentAnimation.Offset.X != 0) + { + destinationRectangle.X -= (int)currentAnimation.Offset.X; + scale = destinationRectangle.Height / sourceRectangle.Height; + destinationRectangle.Width = (int)(sourceRectangle.Width * scale); + + } + else if (currentAnimation.Offset.Y != 0) + { + destinationRectangle.Y -= (int)currentAnimation.Offset.Y; + scale = destinationRectangle.Width / sourceRectangle.Width; + destinationRectangle.Height = (int)(sourceRectangle.Height * scale); + } + + destinationRectangle.X -= CameraPosition.X; + destinationRectangle.Y -= CameraPosition.Y; + + destinationRectangle = Scaling(destinationRectangle); + _spriteBatch.Draw(texture, + destinationRectangle, sourceRectangle, Color.White); + } + private Rectangle Scaling(Rectangle destinationRectangle) + { + destinationRectangle.X *= scaling; + destinationRectangle.Y *= scaling; + destinationRectangle.Width *= scaling; + destinationRectangle.Height *= scaling; + return destinationRectangle; + } + private void buildSourceRectangle() + { + sourceRectangle = new Rectangle(); + if (currentAnimation == null) + { + currentAnimation = neitralAnimation; + } + sourceRectangle.X = currentAnimation.StartSpriteRectangle.X + currentFrame * + (currentAnimation.StartSpriteRectangle.Width + currentAnimation.TextureFrameInterval); + sourceRectangle.Y = currentAnimation.StartSpriteRectangle.Y; + sourceRectangle.Height = currentAnimation.StartSpriteRectangle.Height; + sourceRectangle.Width = currentAnimation.StartSpriteRectangle.Width; + } + + private void SetInterval() + { + Tuple i = currentAnimation.FrameTime.Find(x => x.Item1 == currentFrame); + if (i != null) + { + interval = i.Item2; + lastInterval = interval; + } + else + { + interval = lastInterval; + } + } + public static void SetCameraPosition(Vector2 playerPosition) + { + CameraPosition = (playerPosition).ToPoint(); + CameraPosition.X -= 200; + CameraPosition.Y -= 120; + + if (CameraPosition.X > AppManager.Instance.GameManager.CameraBorder.Y - 460) + { + CameraPosition.X = (int)AppManager.Instance.GameManager.CameraBorder.Y - 460; + } + + if (CameraPosition.Y < AppManager.Instance.GameManager.CameraBorder.Z) + { + CameraPosition.Y = (int)AppManager.Instance.GameManager.CameraBorder.Z; + } + if (CameraPosition.X < AppManager.Instance.GameManager.CameraBorder.X) + { + CameraPosition.X = (int)AppManager.Instance.GameManager.CameraBorder.X; + } + if (CameraPosition.Y > AppManager.Instance.GameManager.CameraBorder.W - 240) + { + CameraPosition.Y = (int)AppManager.Instance.GameManager.CameraBorder.W - 240; + } + AppManager.Instance.DebugHUD.Set("CameraPosition", $"{CameraPosition.X}, {CameraPosition.Y}"); + } + public static Point CameraPosition = new Point(-700, 300); + } +} +*/ \ No newline at end of file diff --git a/ZoFo/ZoFo.csproj b/ZoFo/ZoFo.csproj index ef2682f..e29984f 100644 --- a/ZoFo/ZoFo.csproj +++ b/ZoFo/ZoFo.csproj @@ -11,22 +11,23 @@ Icon.ico - - + + - - + + - - + + + - - + + \ No newline at end of file