Ejemplo n.º 1
0
        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));
        }