protected override void UpdatePosition() { for (float i = 0; i < Parameter.ProjectileMovementTotalTimeElapsed; i += Parameter.ProjectileMovementTimeElapsedPerInteraction) { if (IsExternallyRefreshingPosition) { offsetFactor = MathHelper.Max(offsetFactor - 2 * Parameter.ProjectileMovementTimeElapsedPerInteraction, 0); } else { offsetFactor = MathHelper.Min(offsetFactor + 2 * Parameter.ProjectileMovementTimeElapsedPerInteraction, 1); } base.UpdateMovementIteraction(Parameter.ProjectileMovementTimeElapsedPerInteraction); rotationAngle -= 2 * Parameter.ProjectileMovementTimeElapsedPerInteraction * MathHelper.Pi; projectile.FlipbookList[0].Position = Position + offsetFactor * Vector2.Transform(offset * (float)Math.Sin(rotationAngle), Matrix.CreateRotationZ(FlipbookList[0].Rotation + MathHelper.PiOver2)); if (projectile.CheckOutOfBounds(projectile.FlipbookList[0].Position) || projectile.UpdateCollider(projectile.FlipbookList[0].Position)) { Destroy(); break; } if (Helper.SquaredEuclideanDistance(lastSESpawnPosition, projectile.Position) > 500) { specialEffectList.Add(SpecialEffectBuilder.RaonLauncherProjectile1(projectile.Position, projectile.CurrentFlipbookRotation)); lastSESpawnPosition = projectile.Position; } } //Animation float transparency = 1; for (int i = specialEffectList.Count - 1; i >= 0; i--) { specialEffectList[i].Flipbook.SetCurrentFrame(projectile.FlipbookList[0].GetCurrentFrame()); //I am using color mult because of weakness specialEffectList[i].Flipbook.Color = projectile.FlipbookList[0].Color * (transparency -= 0.05f); if (specialEffectList[i].Flipbook.Color == Color.Transparent) { toBeRemovedSpecialEffectList.Add(specialEffectList[i]); } } toBeRemovedSpecialEffectList.ForEach((x) => specialEffectList.Remove(x)); }