예제 #1
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");
            }
        }
예제 #2
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);
        }
예제 #3
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);
        }
예제 #4
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);
        }
예제 #5
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);
        }