Beispiel #1
0
        private static IEnumerable <SdnFileEntry> LoadAssets(Spriter spriter, string rootFolder)
        {
            for (int i = 0; i < spriter.Folders.Length; ++i)
            {
                SpriterFolder folder = spriter.Folders[i];

                for (int j = 0; j < folder.Files.Length; ++j)
                {
                    SpriterFile file = folder.Files[j];
                    string      path = rootFolder;
                    path += "/";
                    path += file.Name;

                    SdnFileEntry entry = new SdnFileEntry
                    {
                        FolderId = folder.Id,
                        FileId   = file.Id
                    };

                    if (file.Type == SpriterFileType.Sound)
                    {
                        entry.Sound = ContentLoader.Load <AudioClip>(path);
                    }
                    else
                    {
                        entry.Sprite = ContentLoader.Load <Sprite>(path);
                    }

                    yield return(entry);
                }
            }
        }
        public override float GetRadius()
        {
            if (_spriterPartFile == null)
            {
                _spriterPartFile = FindSpriterFile(_spritePartName);

                if (_spriterPartFile == null)
                {
                    return(0f);
                }
            }

            var currentAnimator = _spriterPhysicsEntity.GetCurrentAnimator();

            if (currentAnimator.FrameData != null)
            {
                var spriteData = currentAnimator.FrameData.SpriteData.Find((so) => so.FileId == _spriterFileId);

                if (spriteData == null)
                {
                    return(0f);
                }

                var widthRadius  = _spriterPartFile.Width * spriteData.ScaleX * currentAnimator.Scale.X;
                var heightRadius = _spriterPartFile.Height * spriteData.ScaleY * currentAnimator.Scale.Y;

                return(((widthRadius + heightRadius) / 4f) * _scale);
            }

            return(0f);
        }
Beispiel #3
0
        private static IEnumerable <SdnFileEntry> LoadAssets(Spriter spriter, string rootFolder, SpriterDotNetBehaviour spriterDotNetBehaviour, bool andAssignAudioClips)
        {
            for (int i = 0; i < spriter.Folders.Length; ++i)
            {
                SpriterFolder folder = spriter.Folders[i];

                for (int j = 0; j < folder.Files.Length; ++j)
                {
                    SpriterFile file = folder.Files[j];
                    string      path = rootFolder;
                    path += "/";
                    path += file.Name;

                    SdnFileEntry entry = new SdnFileEntry
                    {
                        FolderId = folder.Id,
                        FileId   = file.Id
                    };

                    if (file.Type == SpriterFileType.Sound)
                    {
                        spriterDotNetBehaviour.StartCoroutine(GetAudioClip(entry, path, spriterDotNetBehaviour, andAssignAudioClips));
                    }
                    else
                    {
                        entry.Sprite = LoadNewSprite(path);
                    }

                    yield return(entry);
                }
            }
        }
 public SpriterCollisionCircle(ISpriterPhysicsEntity entity, string spritePartName, Vector2?relativePosition = null, float scale = 1f) : base(entity)
 {
     _spriterPhysicsEntity = entity;
     _spritePartName       = spritePartName;
     _spriterPartFile      = FindSpriterFile(spritePartName);
     _relativePosition     = relativePosition ?? Vector2.Zero;
     _scale = scale;
 }
        public override Vector2 GetCenter()
        {
            var currentAnimator = _spriterPhysicsEntity.GetCurrentAnimator();

            if (_spriterPartFile == null)
            {
                _spriterPartFile = FindSpriterFile(_spritePartName);

                if (_spriterPartFile == null)
                {
                    return(currentAnimator.Position);
                }
            }

            if (currentAnimator.FrameData != null)
            {
                var spriteData = currentAnimator.FrameData.SpriteData.Find((so) => so.FileId == _spriterFileId);
                var pivotX     = (_spriterPartFile.Width * spriteData.PivotX) + spriteData.X;
                var pivotY     = (_spriterPartFile.Height * spriteData.PivotY) - spriteData.Y;

                // Compute rotation
                var realPivotPosition = new Vector2(1 - spriteData.PivotX, 1 - spriteData.PivotY);
                var pivot             = new Vector2(
                    (_spriterPartFile.Width * realPivotPosition.X) + spriteData.X,
                    (_spriterPartFile.Height * realPivotPosition.Y) - spriteData.Y
                    );

                var spriteCenter = new Vector2(
                    _spriterPartFile.Width * realPivotPosition.X,
                    _spriterPartFile.Height * realPivotPosition.Y
                    );

                var origin   = currentAnimator.Position + pivot - spriteCenter;
                var rotation = -spriteData.Angle;
                rotation = MathHelper.WrapAngle(MathHelper.ToRadians(rotation));

                var centerPosition =
                    currentAnimator.Position +
                    new Vector2(pivotX, pivotY) -
                    new Vector2(_spriterPartFile.Width / 2f, _spriterPartFile.Height / 2f) +
                    _relativePosition
                ;

                centerPosition = MathExtension.RotatePoint(
                    centerPosition, rotation, origin
                    );

                centerPosition = MathExtension.RotatePoint(
                    centerPosition, currentAnimator.Rotation, currentAnimator.Position
                    );

                return(centerPosition);
            }

            return(currentAnimator.Position);
        }
Beispiel #6
0
        private string FormatPath(SpriterFolder folder, SpriterFile file, string spriterName)
        {
            string fileName = Path.GetFileNameWithoutExtension(file.Name);

            if (String.IsNullOrEmpty(folder.Name))
            {
                return(String.Format("{0}/{1}", spriterName, fileName));
            }
            return(String.Format("{0}/{1}/{2}", spriterName, folder.Name, fileName));
        }
Beispiel #7
0
        public SpriterCollisionConvexPolygon(ISpriterPhysicsEntity entity, String spritePartName,
                                             Vector2?relativePosition = null, float scale = 1f) : base(entity)
        {
            _spriterPhysicsEntity = entity;
            int folderId = 0;

            _spriterPartFile  = SpriterUtils.GetSpriterFile(spritePartName, _spriterPhysicsEntity.GetCurrentAnimator(), out folderId);
            _relativePosition = relativePosition ?? Vector2.Zero;

            Vertices.Add(Vector2.Zero);
            Vertices.Add(new Vector2(_spriterPartFile.Width, 0) * scale);
            Vertices.Add(new Vector2(_spriterPartFile.Width, _spriterPartFile.Height) * scale);
            Vertices.Add(new Vector2(0, _spriterPartFile.Height) * scale);
        }
        public override void Start()
        {
            base.Start();

            _initialized = false;

            Boss.MoveTo(new Vector2(GameConfig.VirtualResolution.X / 2f, GameConfig.VirtualResolution.Y / 5f), 0.5f, true);

            Boss.CurrentAnimator.Play("Idle");
            Boss.CurrentAnimator.AnimationFinished += AnimationFinishedHandler;

            _branch1File = SpriterUtils.GetSpriterFile("branch1.png", Boss.CurrentAnimator);
            _branch2File = SpriterUtils.GetSpriterFile("branch2.png", Boss.CurrentAnimator);

            _branches = new List <XmasSnowflakeBranch>(8);
        }
Beispiel #9
0
        public SpriterCollisionConvexPolygon(ISpriterPhysicsEntity entity, String spritePartName,
                                             Vector2?relativePosition = null, Vector2?scaleVector = null) : base(entity)
        {
            var scale = Vector2.One;

            if (scaleVector.HasValue)
            {
                scale = scaleVector.Value;
            }

            _spriterPhysicsEntity = entity;
            _spriterPartFile      = SpriterUtils.GetSpriterFile(spritePartName, _spriterPhysicsEntity.GetCurrentAnimator());
            _relativePosition     = relativePosition ?? Vector2.Zero;

            Vertices.Add(Vector2.Zero);
            Vertices.Add(new Vector2(_spriterPartFile.Width, 0) * scale);
            Vertices.Add(new Vector2(_spriterPartFile.Width, _spriterPartFile.Height) * scale);
            Vertices.Add(new Vector2(0, _spriterPartFile.Height) * scale);
        }
Beispiel #10
0
        private static void InitInfos(SpriterAnimation animation)
        {
            if (animation.Timelines == null)
            {
                animation.Timelines = new SpriterTimeline[0];
            }

            var infos = from t in animation.Timelines
                        from k in t.Keys
                        let o = k.ObjectInfo
                                where o != null && (float.IsNaN(o.PivotX) || float.IsNaN(o.PivotY))
                                select o;

            foreach (SpriterObject info in infos)
            {
                SpriterFile file = animation.Entity.Spriter.Folders[info.FolderId].Files[info.FileId];
                info.PivotX = file.PivotX;
                info.PivotY = file.PivotY;
            }
        }
        public override void Start()
        {
            base.Start();

            Boss.Speed = GameConfig.BossDefaultSpeed * 2.5f;
            Boss.CurrentAnimator.AnimationFinished += AnimationFinishedHandler;
            Boss.CurrentAnimator.EventTriggered    += EventTriggeredHandler;
            Boss.MoveOutside(true);

            _candyBars = new List <XmasCandyBar>();

            _patternStarted = false;
            _stretchOut     = false;
            _stretchIn      = false;

            Boss.StartShootTimer     = false;
            Boss.ShootTimerTime      = 0.0005f;
            Boss.ShootTimerFinished += ShootTimerFinished;

            _body2File = SpriterUtils.GetSpriterFile("body2.png", Boss.CurrentAnimator);
        }
 private string FormatPath(SpriterFolder folder, SpriterFile file, string spriterName)
 {
     string fileName = Path.GetFileNameWithoutExtension(file.Name);
     if (String.IsNullOrEmpty(folder.Name)) return String.Format("{0}/{1}", spriterName, fileName);
     return String.Format("{0}/{1}/{2}", spriterName, folder.Name, fileName);
 }
        public virtual void SetSound(Spriter spriter, SpriterFolder folder, SpriterFile file, TSound sound)
        {
            IAssetProvider <TSound> provider = SoundProviders.GetOrCreate(spriter);

            provider.Set(folder.Id, file.Id, sound);
        }
        public virtual void SetSprite(Spriter spriter, SpriterFolder folder, SpriterFile file, TSprite sprite)
        {
            IAssetProvider <TSprite> provider = SpriteProviders.GetOrCreate(spriter);

            provider.Set(folder.Id, file.Id, sprite);
        }