diff --git a/DangerousD/Content/Content.mgcb b/DangerousD/Content/Content.mgcb index 5b7403d..8e2e30b 100644 --- a/DangerousD/Content/Content.mgcb +++ b/DangerousD/Content/Content.mgcb @@ -13,6 +13,19 @@ #---------------------------------- Content ---------------------------------# +#begin animation1.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:animation1.png + + #begin ButtonFont.spritefont /importer:FontDescriptionImporter /processor:FontDescriptionProcessor diff --git a/DangerousD/GameCore/Graphics/GraphicsComponent.cs b/DangerousD/GameCore/Graphics/GraphicsComponent.cs index c5834ab..024a3d2 100644 --- a/DangerousD/GameCore/Graphics/GraphicsComponent.cs +++ b/DangerousD/GameCore/Graphics/GraphicsComponent.cs @@ -10,6 +10,7 @@ namespace DangerousD.GameCore.Graphics { public class GraphicsComponent { + public Action actionOfAnimationEnd; private List animations; private List textures; private List texturesNames; @@ -115,9 +116,11 @@ namespace DangerousD.GameCore.Graphics if (!currentAnimation.IsCycle) { currentAnimation = neitralAnimation; + actionOfAnimationEnd(); } currentFrame = 0; + } buildSourceRectangle(); @@ -146,6 +149,28 @@ namespace DangerousD.GameCore.Graphics } + _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); + } + + _spriteBatch.Draw(texture, destinationRectangle, sourceRectangle, Color.White); } diff --git a/DangerousD/GameCore/Managers/PhysicsManager.cs b/DangerousD/GameCore/Managers/PhysicsManager.cs index 8fc47c0..7ae99f9 100644 --- a/DangerousD/GameCore/Managers/PhysicsManager.cs +++ b/DangerousD/GameCore/Managers/PhysicsManager.cs @@ -144,11 +144,30 @@ namespace DangerousD.GameCore.Managers { rectangle.X = (int)(entity2.Pos.X + (i / length) * distance.X); rectangle.Y = (int)(entity2.Pos.Y + (i / length) * distance.Y); + } + + for (int i = 0; i < AppManager.Instance.GameManager.entities.Count; i++) + { + if (AppManager.Instance.GameManager.entities[i].Rectangle.Intersects(rectangle)) + { + return AppManager.Instance.GameManager.entities[i]; + } + } + for (int i = 0; i < AppManager.Instance.GameManager.mapObjects.Count; i++) + { + if (AppManager.Instance.GameManager.mapObjects[i].Rectangle.Intersects(rectangle)) + { + return AppManager.Instance.GameManager.mapObjects[i]; + } + } - //if (rectangle.Intersects(GameManager.Rectangle)) - //{ - // return game - //} + + for (int i = 0; i < AppManager.Instance.GameManager.livingEntities.Count; i++) + { + if (AppManager.Instance.GameManager.livingEntities[i].Rectangle.Intersects(rectangle)) + { + return AppManager.Instance.GameManager.livingEntities[i]; + } } return gameObject; } @@ -156,23 +175,35 @@ namespace DangerousD.GameCore.Managers { Rectangle rectangle; Vector2 direction = entity1.Pos - targetCast; - rectangle = new Rectangle((int)entity1.Pos.X, (int)entity1.Pos.Y, 1, 1); - GameObject gameObject = null; + rectangle = new Rectangle((int)targetCast.X, (int)targetCast.Y, 1, 1); double k = direction.Length(); for (int i = 0; i < k; i++) { - rectangle.X = (int)(entity1.Pos.X + (i / k) * direction.X); - rectangle.Y = (int)(entity1.Pos.Y + (i / k) * direction.X); - if (gameObject != null) + rectangle.X = (int)(targetCast.X + (i / k) * direction.X); + rectangle.Y = (int)(targetCast.Y + (i / k) * direction.X); + } + for (int i = 0; i < AppManager.Instance.GameManager.entities.Count; i++) + { + if (AppManager.Instance.GameManager.entities[i].Rectangle.Intersects(rectangle)) { - break; - return gameObject; + return AppManager.Instance.GameManager.entities[i]; + } + } + for (int i = 0; i < AppManager.Instance.GameManager.mapObjects.Count; i++) + { + if (AppManager.Instance.GameManager.mapObjects[i].Rectangle.Intersects(rectangle)) + { + return AppManager.Instance.GameManager.mapObjects[i]; + } + } + for (int i = 0; i < AppManager.Instance.GameManager.livingEntities.Count; i++) + { + if (AppManager.Instance.GameManager.livingEntities[i].Rectangle.Intersects(rectangle)) + { + return AppManager.Instance.GameManager.livingEntities[i]; } - } - - return null; } }