public EndLevelFlag(float initialx, float initialy)
        {
            creation();

            horizontal_pos = initialx;
            vertical_pos = initialy;

            width = 128f;
            height = 128f;

            state = EndLevelFlagState.Untouched;
            currentFrame = 0;
            lastFrameIncrement = 0;

            velocity = Vector2.Zero;
            acceleration = Vector2.Zero;
        }
        public override void update(GameTime currentTime)
        {
            if (state == EndLevelFlagState.Untouched)
            {
                foreach (Entity en in Entity.globalEntityList)
                {
                    if (en is Player)
                    {
                        if (hitTest(en))
                        {
                            if ((uint)(LevelState.LevelRecordTime) < Game1.MagnetBoySaveData.levelBestTime(Game1.CurrentLevel))
                            {

            #if WINDOWS
                                Game1.MagnetBoySaveData.setLevelRecord(Game1.CurrentLevel, LevelState.LevelRecordTime, System.Security.Principal.WindowsIdentity.GetCurrent().Name);
            #endif
            #if XBOX
                                Game1.MagnetBoySaveData.setLevelRecord(Game1.CurrentLevel, LevelState.LevelRecordTime, GameInput.LockedPlayerGamerTag);
            #endif
                            }

            #if XBOX
                            SaveGameModule.saveGame();
            #endif
                            AudioFactory.playSFX("sfx/fanfare");
                            AudioFactory.stopSong();

                            LevelState.showLevelCompleteText = true;

                            state = EndLevelFlagState.Spinning;
                            currentAnimation = "flagDie";
                            currentFrame = 0;
                            lastFrameIncrement = currentTime.TotalGameTime.TotalMilliseconds;
                            stateTimer = 0;
                            break;
                        }
                    }
                }
            }
            else if (state == EndLevelFlagState.Spinning)
            {
                stateTimer += currentTime.ElapsedGameTime.Milliseconds;

                if (currentFrame == AnimationFactory.getAnimationFrameCount(currentAnimation) - 1)
                {
                    currentAnimation = "flagMagnetIdle";
                    currentFrame = 0;
                    lastFrameIncrement = currentTime.TotalGameTime.TotalMilliseconds;
                    stateTimer = 0;
                    state = EndLevelFlagState.Touched;
                }
            }
            else if (state == EndLevelFlagState.Touched)
            {
                stateTimer += currentTime.ElapsedGameTime.Milliseconds;

                if (stateTimer % 1000 < 12)
                {
                    Color clr = Color.HotPink;

                    switch (Game1.gameRandom.Next() % 6)
                    {
                        case 0:
                            clr = Color.Violet;
                            break;
                        case 1:
                            clr = Color.Crimson;
                            break;
                        case 2:
                            clr = Color.LimeGreen;
                            break;
                        case 3:
                            clr = Color.Linen;
                            break;
                        case 4:
                            clr = Color.CornflowerBlue;
                            break;
                        default:
                            break;
                    }

                    Vector2 randPos = new Vector2(width / 2 + (float)((Game1.gameRandom.NextDouble() * width) - (width / 2)), height / -2 + (float)((Game1.gameRandom.NextDouble() * width) - (width / 2)));

                    for (int i = 0; i < 12; i++)
                    {
                        LevelState.levelParticlePool.pushParticle(ParticlePool.ParticleType.ColouredSpark, Position + randPos, Vector2.Zero, (float)(i * Math.PI / 6.0), 0.0f, clr);
                    }

                    switch (Game1.gameRandom.Next() % 3)
                    {
                        case 0:
                            AudioFactory.playSFX("sfx/firework");
                            break;
                        case 1:
                            AudioFactory.playSFX("sfx/firework2");
                            break;
                        default:
                            AudioFactory.playSFX("sfx/firework3");
                            break;
                    }

                }

                if (stateTimer > waitDuration)
                {
                    state = EndLevelFlagState.EndGame;
                    stateTimer = 0;
                }
            }
            else if (state == EndLevelFlagState.EndGame)
            {
                //LevelState.EndLevelFlag = true;
                LevelState.fadingOut = true;

                stateTimer += currentTime.ElapsedGameTime.Milliseconds;
            }

            // if the last frame time hasn't been set, set it now
            if (lastFrameIncrement == 0)
            {
                lastFrameIncrement = currentTime.TotalGameTime.TotalMilliseconds;
            }

            // update the current frame if needed
            if (currentTime.TotalGameTime.TotalMilliseconds - lastFrameIncrement > AnimationFactory.getAnimationSpeed(currentAnimation))
            {
                lastFrameIncrement = currentTime.TotalGameTime.TotalMilliseconds;

                currentFrame = (currentFrame + 1) % AnimationFactory.getAnimationFrameCount(currentAnimation);
            }
        }