コード例 #1
0
ファイル: Holly.cs プロジェクト: Noxalus/Xmas-Hell
        public Holly(XmasLog boss, CustomSpriterAnimator animator)
        {
            _boss         = boss;
            _animator     = animator.Clone();
            _angularSpeed = 5f;

            var hollyLeafPosition = SpriterUtils.GetWorldPosition("holly-leaf.png", boss.CurrentAnimator);

            Position(hollyLeafPosition);
            _animator.Play("Growth");

            _animator.AnimationFinished += AnimationFinished;

            // Physics
            _boundingBoxes = new List <CollisionElement>
            {
                new SpriterCollisionCircle(this, "holly-leaf.png", new Vector2(-30, 0), 0.4f, "holly-leaf"),
                new SpriterCollisionCircle(this, "holly-leaf.png", new Vector2(45, 10), 0.3f, "holly-leaf"),
                new SpriterCollisionCircle(this, "holly-leaf.png", new Vector2(-30, 0), 0.4f, "holly-leaf_000"),
                new SpriterCollisionCircle(this, "holly-leaf.png", new Vector2(45, 10), 0.3f, "holly-leaf_000"),
                new SpriterCollisionCircle(this, "holly-leaf.png", new Vector2(-30, 0), 0.4f, "holly-leaf_001"),
                new SpriterCollisionCircle(this, "holly-leaf.png", new Vector2(45, 10), 0.3f, "holly-leaf_001"),
                new SpriterCollisionCircle(this, "holly-balls.png", Vector2.Zero, 0.8f)
            };

            foreach (var boundingBox in _boundingBoxes)
            {
                _boss.AddHitBox(boundingBox);
            }

            MoveTo(_boss.Game.ViewportAdapter.Center.ToVector2());
        }
コード例 #2
0
        private void AnimationFinishedHandler(string animationName)
        {
            if (animationName == "StretchOutBorderWidth" || animationName == "StretchOutBorderHeight")
            {
                // Retrieve the candy bar position
                var spriteData = Boss.CurrentAnimator.FrameData.SpriteData;

                int folderId      = 0;
                var body2File     = SpriterUtils.GetSpriterFile("body2.png", Boss.CurrentAnimator, out folderId);
                var worldPosition = SpriterUtils.GetWorldPosition("body2.png", Boss.CurrentAnimator, new Vector2(body2File.Width / 2f, 0f));
                var angle         = Boss.Rotation();

                var candyBar = Boss.CurrentAnimator.Clone();
                candyBar.StretchOut = false;
                candyBar.Position   = worldPosition;
                candyBar.Rotation   = angle;
                candyBar.Progress   = 0;
                candyBar.Speed      = 1;
                candyBar.Play("StretchInBorderWidth");

                _candyBars.Clear();
                _candyBars.Add(candyBar);

                var bodyFile     = SpriterUtils.GetSpriterFile("body.png", Boss.CurrentAnimator, out folderId);
                var bodyPosition = SpriterUtils.GetWorldPosition("body.png", Boss.CurrentAnimator);
                var bodyRotation = Boss.Rotation() + MathHelper.Pi + ((float)Boss.Game.GameManager.Random.NextDouble() * (-(MathHelper.PiOver4 / 1.5f)));

                if (bodyPosition.Y <= 0)
                {
                    bodyPosition.X += Boss.Width() / 2f + body2File.Width;
                    bodyPosition.Y  = 0;
                    bodyRotation    = -MathHelper.PiOver2;
                }
                else if (bodyPosition.Y > Boss.Game.ViewportAdapter.VirtualHeight)
                {
                    bodyPosition.X -= Boss.Width() / 2f + body2File.Width;
                    bodyPosition.Y  = Boss.Game.ViewportAdapter.VirtualHeight;
                    bodyRotation    = MathHelper.PiOver2;
                }
                else if (bodyPosition.X > Boss.Game.ViewportAdapter.VirtualWidth)
                {
                    bodyPosition.X  = Boss.Game.ViewportAdapter.VirtualWidth;
                    bodyPosition.Y += Boss.Height();
                    bodyRotation    = 0;
                }
                else if (bodyPosition.X <= 0)
                {
                    bodyPosition.X  = 0;
                    bodyPosition.Y -= Boss.Height();
                    bodyRotation    = MathHelper.Pi;
                }

                Boss.Position(bodyPosition);
                Boss.Rotation(bodyRotation);

                //Boss.CurrentAnimator.Play("StretchOutBorderHeight");
            }
        }
コード例 #3
0
        private void ShootCarrot()
        {
            var carrotPosition = SpriterUtils.GetWorldPosition("nose.png", Boss.CurrentAnimator);

            Boss.TriggerPattern("XmasSnowman/pattern3_2", BulletType.Type2, true, carrotPosition);

            Boss.StartShootTimer     = true;
            Boss.ShootTimerTime      = 0.003f;
            Boss.ShootTimerFinished += ShootTimerFinished;
        }
コード例 #4
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            var xmasTitleDummyPosition = SpriterUtils.GetSpriterFilePosition("xmas-title.png", SpriterFile["Main"]);

            SpriterFile["XmasTitle"].Position = Game.ViewportAdapter.Center.ToVector2() + xmasTitleDummyPosition;

            var hellTitleDummyPosition = SpriterUtils.GetSpriterFilePosition("hell-title.png", SpriterFile["Main"]);

            SpriterFile["HellTitle"].Position = Game.ViewportAdapter.Center.ToVector2() + hellTitleDummyPosition;
        }
コード例 #5
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);
        }
コード例 #6
0
        public BigArms(XmasSnowman boss, CustomSpriterAnimator animator, bool rightArm)
        {
            _boss              = boss;
            _animator          = animator.Clone();
            _rightArm          = rightArm;
            _verticalDirection = 1;
            _speed             = 200;

            _initialPosition = new Vector2(GameConfig.VirtualResolution.X / 2f, GameConfig.VirtualResolution.Y / 2f + 300);

            Position(_initialPosition);

            // Physics
            _boundingBoxes = new List <CollisionElement>
            {
                new SpriterCollisionConvexPolygon(this, "big-arm.png", new Vector2(177f, 10f), new Vector2(0.1f, 0.95f)),
                new SpriterCollisionCircle(this, "big-arm.png", new Vector2(-50f, -250f), 0.1f),
                new SpriterCollisionCircle(this, "big-arm.png", new Vector2(-105f, -295f), 0.1f),
                new SpriterCollisionCircle(this, "big-arm.png", new Vector2(-160f, -340f), 0.1f),
                new SpriterCollisionCircle(this, "big-arm.png", new Vector2(50f, -250f), 0.1f),
                new SpriterCollisionCircle(this, "big-arm.png", new Vector2(105f, -295f), 0.1f),
                new SpriterCollisionCircle(this, "big-arm.png", new Vector2(160f, -340f), 0.1f),
            };

            foreach (var boundingBox in _boundingBoxes)
            {
                _boss.AddHitBox(boundingBox);
            }

            // Animations
            _animator.Play("Idle");

            var spriteSize = SpriterUtils.GetSpriterFileSize("big-arm.png", _animator);

            if (rightArm)
            {
                _horizontalDirection = -1;
                _horizontalLimits    = new Point(GameConfig.VirtualResolution.X + 200, GameConfig.VirtualResolution.X + 200 + spriteSize.Y / 2);
                Rotation(MathHelper.Pi);
            }
            else
            {
                _horizontalDirection = 1;
                _horizontalLimits    = new Point(-200 - spriteSize.Y / 2, -200);
            }

            Position(new Vector2(_horizontalLimits.X, 0));
            ChangeHorizontalPosition();
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: SpriterGuiLabel.cs プロジェクト: 07101994/Xmas-Hell
        public void Synchronize()
        {
            // Synchronize current GUI button animator with the related dummy element from the Spriter file
            var spriterDummyData = SpriterUtils.GetSpriterFileData(_replacedPartFilename, _referenceAnimator);

            if (spriterDummyData != null)
            {
                var dummyPosition = new Vector2(spriterDummyData.X, -spriterDummyData.Y);
                var dummyScale    = new Vector2(spriterDummyData.ScaleX, spriterDummyData.ScaleY);

                Position = _referenceAnimator.Position + dummyPosition;
                Rotation = -MathHelper.ToRadians(spriterDummyData.Angle);
                Scale    = dummyScale;
                Color    = new Color(Color, spriterDummyData.Alpha);
            }
        }
コード例 #9
0
        private void ReplaceBranches()
        {
            // Start by retrieving the position of all branches from Spriter object
            var spriteData = Boss.CurrentAnimator.FrameData.SpriteData;

            var branch1Sprites = spriteData.FindAll(so => so.FileId == _branch1File.Id);
            var branch2Sprites = spriteData.FindAll(so => so.FileId == _branch2File.Id);

            foreach (var branch1Sprite in branch1Sprites)
            {
                var branchTexture = Assets.GetTexture2D("Graphics/Sprites/Bosses/XmasSnowflake/branch1");
                var worldPosition = SpriterUtils.GetSpriterWorldPosition(branch1Sprite, Boss.CurrentAnimator);
                var angle         = MathHelper.ToRadians(branch1Sprite.Angle);

                var sprite = new Sprite(branchTexture)
                {
                    Position = worldPosition,
                    Rotation = angle,
                    Origin   = new Vector2(branch1Sprite.PivotX * branchTexture.Width, branch1Sprite.PivotY * branchTexture.Height),
                    Scale    = new Vector2(branch1Sprite.ScaleX, branch1Sprite.ScaleY)
                };

                var branch = new XmasSnowflakeBranch(Boss, sprite);

                _branches.Add(branch);
            }

            foreach (var branch2Sprite in branch2Sprites)
            {
                var branchTexture = Assets.GetTexture2D("Graphics/Sprites/Bosses/XmasSnowflake/branch2");
                var worldPosition = SpriterUtils.GetSpriterWorldPosition(branch2Sprite, Boss.CurrentAnimator);
                var angle         = MathHelper.ToRadians(branch2Sprite.Angle);

                var sprite = new Sprite(branchTexture)
                {
                    Position = worldPosition,
                    Rotation = angle,
                    Origin   = new Vector2(branch2Sprite.PivotX * branchTexture.Width, branch2Sprite.PivotY * branchTexture.Height),
                    Scale    = new Vector2(branch2Sprite.ScaleX, branch2Sprite.ScaleY)
                };

                var branch = new XmasSnowflakeBranch(Boss, sprite);

                _branches.Add(branch);
            }
        }
コード例 #10
0
        private void EventTriggeredHandler(string eventName)
        {
            if (eventName == "almostFinished")
            {
                // Retrieve the candy bar position
                var worldPosition = SpriterUtils.GetWorldPosition("body2.png", Boss.CurrentAnimator, new Vector2(_body2File.Width / 2f, 0f));
                var angle         = Boss.Rotation();

                var candyBarAnimator = Boss.CurrentAnimator.Clone();
                candyBarAnimator.StretchOut = false;
                candyBarAnimator.Position   = worldPosition;
                candyBarAnimator.Rotation   = angle;

                var candyBar = new XmasCandyBar(Boss, candyBarAnimator);

                _candyBars.Add(candyBar);
            }
        }
コード例 #11
0
ファイル: MainMenuScreen.cs プロジェクト: 07101994/Xmas-Hell
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            if (_shootFrequency.TotalMilliseconds < 0)
            {
                Game.GameManager.MoverManager.TriggerPattern(_patternFile, BulletType.Type1, false);
                _shootFrequency = TimeSpan.FromSeconds(1);
            }
            else
            {
                _shootFrequency -= gameTime.ElapsedGameTime;
            }

            var xmasTitleDummyPosition = SpriterUtils.GetSpriterFilePosition("xmas-title.png", Animators["MainMenu"]);

            Animators["XmasTitle"].Position = Game.ViewportAdapter.Center.ToVector2() + xmasTitleDummyPosition;
        }
コード例 #12
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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        private void GetRandomPositionAndAngle()
        {
            // Retrieve the candy bar position
            var worldPosition     = SpriterUtils.GetWorldPosition("body2.png", Boss.CurrentAnimator, new Vector2(_body2File.Width / 2f, 0f));
            var screenSide        = Boss.GetSideFromPosition(worldPosition);
            var newRandomPosition = Boss.GetRandomOutsidePosition(screenSide);
            var newRandomAngle    = Boss.GetRandomOutsideAngle(screenSide, 50, 90);

            if (screenSide == ScreenSide.Left || screenSide == ScreenSide.Right)
            {
                newRandomPosition.X = (screenSide == ScreenSide.Left) ? 0 : Boss.Game.ViewportAdapter.VirtualWidth;
                Boss.CurrentAnimator.Play("StretchOutBorderWidth");
            }
            else if (screenSide == ScreenSide.Top || screenSide == ScreenSide.Bottom)
            {
                newRandomPosition.Y = (screenSide == ScreenSide.Top) ? 0 : Boss.Game.ViewportAdapter.VirtualHeight;
                Boss.CurrentAnimator.Play("StretchOutBorderHeight");
            }

            Boss.Position(newRandomPosition);
            Boss.Rotation(MathHelper.ToRadians(newRandomAngle));
        }