public static Vector2 GetSpriterFilePosition(string spritePartFileName, MonoGameAnimator animator, string timelineName = null) { if (animator.FrameData == null) { return(Vector2.Zero); } int folderId; var spriterFile = GetSpriterFile(spritePartFileName, animator, out folderId); var spriteData = animator.FrameData.SpriteData; var fileSpriteDataFound = spriteData.FindAll((so) => { if (timelineName != null) { return(so.FolderId == folderId && so.FileId == spriterFile.Id && so.Name == timelineName); } else { return(so.FolderId == folderId && so.FileId == spriterFile.Id); } }); if (fileSpriteDataFound.Count == 0) { return(Vector2.Zero); } var fileSpriteData = fileSpriteDataFound.First(); return(new Vector2(fileSpriteData.X, -fileSpriteData.Y)); }
protected override void Load() { centre = new Vector2(Width / 2.0f, Height / 2.0f); oldState = Keyboard.GetState(); spriteBatch = new SpriteBatch(GraphicsDevice); spriteFont = Content.Load <SpriteFont>(FontName); DefaultProviderFactory <ISprite, SoundEffect> factory = new DefaultProviderFactory <ISprite, SoundEffect>(config, true); foreach (string scmlPath in Scmls) { SpriterContentLoader loader = new SpriterContentLoader(Content, scmlPath); loader.Fill(factory); Stack <SpriteDrawInfo> drawInfoPool = new Stack <SpriteDrawInfo>(); foreach (SpriterEntity entity in loader.Spriter.Entities) { var animator = new MonoGameDebugAnimator(entity, GraphicsDevice, factory, drawInfoPool); animators.Add(animator); animator.Position = centre; } } currentAnimator = animators.First(); currentAnimator.EventTriggered += CurrentAnimator_EventTriggered; }
public static SpriterFile GetSpriterFile(string spritePartFileName, MonoGameAnimator animator, out int folderId) { if (animator == null) { throw new ArgumentException("Please make sure that a Spriter animator is linked to the given entity."); } var cacheKey = new Tuple <string, string>(spritePartFileName, animator.Entity.Name); if (_spriterFilesCache.ContainsKey(cacheKey)) { folderId = _spriterFilesCache[cacheKey].Item2; return(_spriterFilesCache[cacheKey].Item1); } foreach (var folder in animator.Entity.Spriter.Folders) { var spriterFileId = Array.FindIndex(folder.Files, (file) => Path.GetFileName(file.Name) == spritePartFileName); if (spriterFileId != -1) { folderId = folder.Id; _spriterFilesCache.Add(new Tuple <string, string>(spritePartFileName, animator.Entity.Name), new Tuple <SpriterFile, int>(folder.Files[spriterFileId], folderId)); return(folder.Files[spriterFileId]); } } throw new ArgumentException("Please make sure that the given Spriter entity has a sprite part named: " + spritePartFileName); }
protected override void LoadContent() { Vector2 screenCentre = new Vector2(WindowWidth * 0.5f, WindowHeight * 0.5f); spriteFont = Content.Load <SpriteFont>(FontName); DefaultProviderFactory <ISprite, SoundEffect> factory = new DefaultProviderFactory <ISprite, SoundEffect>(Constants.Config, true); foreach (string scmlPath in Constants.ScmlFiles) { SpriterContentLoader loader = new SpriterContentLoader(Content, scmlPath); loader.Fill(factory); Stack <SpriteDrawInfo> drawInfoPool = new Stack <SpriteDrawInfo>(); foreach (SpriterEntity entity in loader.Spriter.Entities) { var animator = new MonoGameDebugAnimator(entity, GraphicsDevice, factory, drawInfoPool); animators.Add(animator); animator.Position = screenCentre; animator.EventTriggered += x => Debug.WriteLine("Event Happened: " + x); } } animator = animators.First(); }
public Player(XmasHell game) { _game = game; _currentDirection = Vector2.Zero; _idleAnimationTimer = new CountdownTimer(5); _idleAnimationTimer.Stop(); _idleAnimationTimer.Completed += (sender, args) => { Console.WriteLine("PLAY IDLE"); CurrentAnimator.Play("Idle"); }; var playerHitboxTexture = Assets.GetTexture2D("Graphics/Sprites/Player/hitbox"); var animatorConfig = new Config { MetadataEnabled = false, EventsEnabled = false, PoolingEnabled = true, TagsEnabled = false, VarsEnabled = false, SoundsEnabled = false }; var factory = new DefaultProviderFactory <ISprite, SoundEffect>(animatorConfig, true); var loader = new SpriterContentLoader(_game.Content, "Graphics/Sprites/Player/player"); loader.Fill(factory); Stack <SpriteDrawInfo> drawInfoPool = new Stack <SpriteDrawInfo>(); foreach (var entity in loader.Spriter.Entities) { var animator = new CustomSpriterAnimator(_game, entity, factory, drawInfoPool); _animators.Add(animator); } CurrentAnimator = _animators.First(); var spriteSize = new Vector2(60, 82); CurrentAnimator.Position = new Vector2(spriteSize.X / 2f, spriteSize.Y / 2f); CurrentAnimator.Play("Idle"); CurrentAnimator.AnimationFinished += AnimationFinished; _hitboxSprite = new Sprite(playerHitboxTexture) { //Scale = new Vector2( // (GameConfig.PlayerHitboxRadius * 2f) / playerHitboxTexture.Width, // (GameConfig.PlayerHitboxRadius * 2f) / playerHitboxTexture.Height //) }; _hitbox = new CollisionCircle(this, Vector2.Zero, GameConfig.PlayerHitboxRadius); // Don't forget to set the player position delegate to the MoverManager _game.GameManager.MoverManager.SetPlayerPositionDelegate(Position); }
private void SwitchEntity() { int index = animators.IndexOf(animator); ++index; if (index >= animators.Count) { index = 0; } animator = animators[index]; }
public void Initialize() { CurrentState = "main"; if (TotemAnimator == null) { TotemAnimator = ContentLoader.BoneSprites["Totem"].GetAnimator(); TotemAnimator.Speed = 0.125f; TotemPositionResolver = new ResolutionResolver(Game, new Vector2(0.5f, 1), new Vector2(0, -24)); TotemScaleResolver = new YResScaleResolver(Game, 560f); } }
//private void AnimatorFinished(string animation) //{ // switch (animation) // { // case "select_start": // _animator.PlaySafely("select_loop"); // break; // case "select_stop": // _animator.PlaySafely("idle"); // break; // default: // break; // } //} private bool BoundingBoxCollision(MonoGameAnimator animator, int x, int y) { foreach (var key in animator.FrameData.BoxData.Keys) { if (CheckBoundingBox(animator, key, animator.FrameData.BoxData[key], x, y)) { return(true); } } return(false); }
public static Vector2 GetWorldPosition(string spriterPartFilename, MonoGameAnimator animator, Vector2?optionalLocalPosition = null) { var vertex = optionalLocalPosition.HasValue ? optionalLocalPosition.Value : Vector2.Zero; var worldPosition = animator.Position + vertex; if (animator.FrameData != null) { // Compute translation int folderId = 0; var spriterPartFile = SpriterUtils.GetSpriterFile(spriterPartFilename, animator, out folderId); var spriteData = animator.FrameData.SpriteData.Find((so) => so.FileId == spriterPartFile.Id); var animationOffset = new Vector2(spriteData.X, -spriteData.Y); var scale = new Vector2(spriteData.ScaleX, spriteData.ScaleY); var realPivotPosition = new Vector2(1 - spriteData.PivotX, 1 - spriteData.PivotY); vertex *= scale; var spriteCenter = new Vector2( spriterPartFile.Width * realPivotPosition.X, spriterPartFile.Height * realPivotPosition.Y ); var worldTopLeftCornerPosition = animator.Position - (spriteCenter * scale); worldPosition = worldTopLeftCornerPosition + vertex + animationOffset; // Compute rotation var pivot = new Vector2( (spriterPartFile.Width * realPivotPosition.X) + spriteData.X, (spriterPartFile.Height * realPivotPosition.Y) - spriteData.Y ); var origin = animator.Position + pivot - spriteCenter; var rotation = -spriteData.Angle; rotation = MathHelper.WrapAngle(MathHelper.ToRadians(rotation)); // Take the animation angle into account worldPosition = MathExtension.RotatePoint( worldPosition, rotation, origin ); // Take the global angle into account worldPosition = MathExtension.RotatePoint( worldPosition, animator.Rotation, animator.Position ); } return(worldPosition); }
public static Vector2 GetSpriterWorldPosition(SpriterObject spriterObject, MonoGameAnimator animator) { var worldPosition = animator.Position; if (animator.FrameData != null) { // Compute translation var animationOffset = new Vector2(spriterObject.X, -spriterObject.Y); var scale = new Vector2(spriterObject.ScaleX, spriterObject.ScaleY); var realPivotPosition = new Vector2(1 - spriterObject.PivotX, 1 - spriterObject.PivotY); // TOFIX... realPivotPosition = new Vector2(0f, 1f); var spriterFile = GetSpriterFile(spriterObject, animator); var spriteCenter = new Vector2( spriterFile.Width * realPivotPosition.X, spriterFile.Height * realPivotPosition.Y ); var worldTopLeftCornerPosition = animator.Position - (spriteCenter * scale); worldPosition = worldTopLeftCornerPosition + animationOffset; // Compute rotation var pivot = new Vector2( (spriterFile.Width * realPivotPosition.X) + spriterObject.X, (spriterFile.Height * realPivotPosition.Y) - spriterObject.Y ); var origin = animator.Position + pivot - spriteCenter; var rotation = -spriterObject.Angle; rotation = MathHelper.WrapAngle(MathHelper.ToRadians(rotation)); // Take the animation angle into account worldPosition = MathExtension.RotatePoint( worldPosition, rotation, origin ); // Take the global angle into account worldPosition = MathExtension.RotatePoint( worldPosition, animator.Rotation, animator.Position ); } return(worldPosition); }
public static Point GetSpriterFileSize(string spritePartFileName, MonoGameAnimator animator) { foreach (var folder in animator.Entity.Spriter.Folders) { var spriterFileId = Array.FindIndex(folder.Files, (file) => Path.GetFileName(file.Name) == spritePartFileName); if (spriterFileId != -1) { var spriteBodyPart = folder.Files[spriterFileId]; return(new Point(spriteBodyPart.Width, spriteBodyPart.Height)); } } return(Point.Zero); }
public static SpriterObject GetSpriterFileData(string spritePartFileName, MonoGameAnimator animator) { if (animator.FrameData == null) { return(null); } int folderId = 0; var spriterFile = GetSpriterFile(spritePartFileName, animator, out folderId); var spriteData = animator.FrameData.SpriteData; var fileSpriteDataFound = spriteData.FindAll(so => so.FolderId == folderId && so.FileId == spriterFile.Id); if (fileSpriteDataFound.Count == 0) { return(null); } return(fileSpriteDataFound.First()); }
public static SpriterFile GetSpriterFile(SpriterObject spriterObject, MonoGameAnimator animator) { if (animator == null) { throw new ArgumentException("Please make sure that a Spriter animator is linked to the given entity."); } foreach (var folder in animator.Entity.Spriter.Folders) { var spriterFileId = Array.FindIndex(folder.Files, (file) => file.Id == spriterObject.FileId); if (spriterFileId != -1) { return(folder.Files[spriterFileId]); } } throw new ArgumentException("Please make sure that the given Spriter entity has a sprite part with file ID: " + spriterObject.FileId); }
private bool CheckBoundingBox(MonoGameAnimator animator, int id, SpriterObject info, int x, int y) { var objectData = animator.Entity.ObjectInfos[id]; Box box = animator.GetBoundingBox(info, objectData.Width, objectData.Height); GraphicsPath graphicsPath = new GraphicsPath(); graphicsPath.AddPolygon(new System.Drawing.PointF[] { new System.Drawing.PointF(box.Point1.X, box.Point1.Y), new System.Drawing.PointF(box.Point2.X, box.Point2.Y), new System.Drawing.PointF(box.Point3.X, box.Point3.Y), new System.Drawing.PointF(box.Point4.X, box.Point4.Y) }); if (graphicsPath.IsVisible(new System.Drawing.Point(x, y))) { return(true); } return(false); }
public static SpriterFile GetSpriterFile(string spritePartFileName, MonoGameAnimator animator, out int folderId) { if (animator == null) { throw new ArgumentException("Please make sure that a Spriter animator is linked to the given entity."); } foreach (var folder in animator.Entity.Spriter.Folders) { var spriterFileId = Array.FindIndex(folder.Files, (file) => Path.GetFileName(file.Name) == spritePartFileName); folderId = folder.Id; if (spriterFileId != -1) { return(folder.Files[spriterFileId]); } } throw new ArgumentException("Please make sure that the given Spriter entity has a sprite part named: " + spritePartFileName); }
public static SpriterObject GetSpriterFileData(string spritePartFileName, MonoGameAnimator animator, string timelineName = null) { if (animator.FrameData == null) { return(null); } int folderId; var spriterFile = GetSpriterFile(spritePartFileName, animator, out folderId); var spriteData = animator.FrameData.SpriteData; var fileSpriteDataFound = spriteData.Find((so) => { if (timelineName != null) { return(so.FolderId == folderId && so.FileId == spriterFile.Id && so.Name == timelineName); } else { return(so.FolderId == folderId && so.FileId == spriterFile.Id); } }); return(fileSpriteDataFound); }
// To make folderId parameter optional public static SpriterFile GetSpriterFile(string spritePartFileName, MonoGameAnimator animator) { int folderId = 0; return(GetSpriterFile(spritePartFileName, animator, out folderId)); }
public SpriterPhysicsEntity(MonoGameAnimator animator) { _animator = animator; }
public static SpriterFile GetSpriterFileStaticData(string spritePartFileName, MonoGameAnimator animator) { foreach (var folder in animator.Entity.Spriter.Folders) { var spriterFileId = Array.FindIndex(folder.Files, (file) => Path.GetFileName(file.Name) == spritePartFileName); if (spriterFileId != -1) { return(folder.Files[spriterFileId]); } } return(null); }