コード例 #1
0
        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));
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: ExampleGame.cs プロジェクト: warmuuh/SpriterDotNet
        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();
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: ExampleGame.cs プロジェクト: warmuuh/SpriterDotNet
        private void SwitchEntity()
        {
            int index = animators.IndexOf(animator);

            ++index;
            if (index >= animators.Count)
            {
                index = 0;
            }
            animator = animators[index];
        }
コード例 #7
0
ファイル: MenuStateManager.cs プロジェクト: RisaI/mff-totem
 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);
     }
 }
コード例 #8
0
        //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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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());
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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);
        }
コード例 #16
0
        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);
        }
コード例 #17
0
        // To make folderId parameter optional
        public static SpriterFile GetSpriterFile(string spritePartFileName, MonoGameAnimator animator)
        {
            int folderId = 0;

            return(GetSpriterFile(spritePartFileName, animator, out folderId));
        }
コード例 #18
0
 public SpriterPhysicsEntity(MonoGameAnimator animator)
 {
     _animator = animator;
 }
コード例 #19
0
        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);
        }