public void Update(UpdateEvent ev) { const float openTime = .005f, pureTime = .1f, fadeTime = .1f; if (timeSinceSnap < openTime && timeSinceSnap + ev.DeltaTime >= openTime) { Cut(); if (oldSnap != null) { oldSnap.Paste(); if (!player.IsFree(new Vector2(0f, 0f))) { int move = 1; for (; ;) { if (player.IsFree(new Vector2(move, 0f))) { player.LocalCoord += new Vector2(move, 0f); break; } if (player.IsFree(new Vector2(-move, 0f))) { player.LocalCoord += new Vector2(-move, 0f); break; } move++; } } } } timeSinceSnap += ev.DeltaTime; if (timeSinceSnap < openTime) { Sprite.Color.A = (int)(255f * Mathf.Sin(timeSinceSnap * 4f * Mathf.HalfPi)); } else if (timeSinceSnap < openTime + pureTime) { Sprite.Color.A = 255; } else if (timeSinceSnap < openTime + pureTime + fadeTime) { Sprite.Color.A = 255 - (int)(255f * Mathf.Sin((timeSinceSnap - openTime - pureTime) * (1f / fadeTime) * Mathf.HalfPi)); } else if (Sprite != null) { Sprite.Remove(); } }