public override void RunGreenSpace(BoardController board, BoardController.BoardSpace space, Action after) { Sprite tentacleSprite = GFX.SpriteBank.Create("madelinePartyTentacle"); SubHUDSprite tentacle = new SubHUDSprite(tentacleSprite); Vector2 targetPosition = space.screenPosition - new Vector2(tentacleSprite.Width * scaleFactor / 2, 27 * scaleFactor); tentacle.Depth = -40000; board.Scene.Add(tentacle); tentacle.Position = targetPosition; List <Sprite> tentacleExtensions = new List <Sprite>(); float posOffset = tentacleSprite.Height; tentacleSprite.Scale = new Vector2(scaleFactor); while (tentacle.Position.Y + posOffset < Engine.ViewHeight) { Sprite extension = GFX.SpriteBank.Create("madelinePartyTentacle"); extension.Play("long"); tentacle.Add(extension); extension.Position = new Vector2(0, posOffset * scaleFactor); extension.Scale = new Vector2(scaleFactor); posOffset += extension.Height; tentacleExtensions.Add(extension); } tentacle.Position.Y = Engine.ViewHeight; Tween riseTween = Tween.Create(Tween.TweenMode.Oneshot, Ease.CubeIn, 0.25f, true); riseTween.OnUpdate = t => tentacle.Position.Y = Calc.LerpClamp(Engine.ViewHeight, targetPosition.Y, t.Eased); riseTween.OnComplete = t => { tentacleSprite.Play("tentacle_grab"); board.Add(new Coroutine(PullDown(board, after, tentacle, space))); }; board.Add(riseTween); }
private IEnumerator PullDown(BoardController board, Action after, SubHUDSprite tentacle, BoardController.BoardSpace startSpace) { yield return(1.5f); // The highest space with the exact same x // Or if there is no space with the same x // Then the closest space to the point at the bottom of the screen but with the same x BoardController.BoardSpace endSpace = BoardController.boardSpaces .FindAll(s => s.x == startSpace.x && !s.screenPosition.Equals(startSpace.screenPosition)) .OrderBy(a => a.y) .DefaultIfEmpty(BoardController.boardSpaces .OrderBy(a => (a.screenPosition - new Vector2(startSpace.screenPosition.X, Engine.ViewHeight)).LengthSquared()) .First(s => !s.screenPosition.Equals(startSpace.screenPosition))) .First(); var grabbed = board.playerTokens.Where(t => t != null && t.currentSpace.screenPosition.Equals(startSpace.screenPosition)); tentacle.sprite.Play("tentacle_pull"); Vector2 offset = new Vector2(tentacle.sprite.Width * scaleFactor / 2, 27 * scaleFactor); Vector2 speed = (endSpace.screenPosition - startSpace.screenPosition).SafeNormalize() * 150 * Engine.DeltaTime; Vector2 pos = startSpace.screenPosition; while (tentacle.Position != endSpace.screenPosition - offset) { pos = Vector2.Clamp(pos + speed, Vector2.Min(startSpace.screenPosition, endSpace.screenPosition), Vector2.Max(startSpace.screenPosition, endSpace.screenPosition)); speed += speed.SafeNormalize() * 150 * Engine.DeltaTime; dragToPos(tentacle, grabbed, pos, offset); yield return(null); } yield return(0.5f); float tentacleStartY = tentacle.Position.Y; tentacle.sprite.Rate = 0.5f; tentacle.sprite.Play("tentacle_ungrab"); tentacle.sprite.OnLastFrame = s => { tentacle.sprite.OnLastFrame = null; Tween fallTween = Tween.Create(Tween.TweenMode.Oneshot, Ease.CubeInOut, 0.25f, true); fallTween.OnUpdate = t => tentacle.Position.Y = Calc.LerpClamp(tentacleStartY, Engine.ViewHeight + tentacle.sprite.Height * scaleFactor, t.Percent); fallTween.OnComplete = t => { tentacle.RemoveSelf(); after(); }; board.Add(fallTween); }; foreach (PlayerToken token in grabbed) { token.currentSpace = endSpace; } }
private void BtnAddTask_Click(object sender, EventArgs e) { if (!String.IsNullOrWhiteSpace(txtBoard.Text)) { board.Name = (txtBoard.Text).Trim(); _boardController.Add(board); this.Close(); } else { MessageBox.Show("Eklenemedi"); } }
public override void RunGreenSpace(BoardController board, BoardController.BoardSpace space, Action after) { Sprite seekerSprite = GFX.SpriteBank.Create("seeker"); SubHUDSprite seeker = new SubHUDSprite(seekerSprite); seeker.Collider = new Hitbox(50, 50, -25, -25); seeker.Depth = -40000; board.Scene.Add(seeker); seeker.Position = space.screenPosition + startOffset; seekerSprite.FlipX = true; seekerSprite.Play("recover"); seekerSprite.OnFinish += s => seekerSprite.Play("windUp"); seekerSprite.Scale = new Vector2(2, 2); board.Add(new Coroutine(SeekerCharge(board, after, seeker, seeker.Position, space.screenPosition - startOffset / 2))); }
private void btnCreate_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtBoardName.Text)) { MessageBox.Show("Tahta adı boş geçilemez."); return; } if (_boardID == 0) { board = new Board(); board.Name = txtBoardName.Text; bool result = _boardController.Add(board); if (result) { MessageBox.Show("Yeni tahtanız başarıyla oluşturuldu."); } else { MessageBox.Show("Bır hata olustu"); } } else { board.Name = txtBoardName.Text; bool result = _boardController.Update(board); if (result) { MessageBox.Show("Guncelleme basarılı"); } else { MessageBox.Show("Bır hata olustu"); } } this.Close(); }
void Start() { BoardController.Add(this); OnStart(); }