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()); }
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"); } }
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; }
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; }
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 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(); }
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); }
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); } }
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); } }
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); } }
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; }
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); }
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 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)); }