public override void ReceiveMessage(IGameMessage msg)
        {
            switch (msg.EventId)
            {
            case (int)MessageId.NewOverheadText:
            {
                SetFlag(new OverheadForcedTextUpdateFlag(msg.AsNewOverheadText().Message));
                break;
            }

            case (int)MessageId.NewAnimation:
            {
                SetFlag(new AnimationUpdateFlag(msg.AsNewAnimation().Animation));
                break;
            }

            case (int)MessageId.ParticleEffect:
            {
                SetFlag(new ParticleEffectUpdateFlag(msg.AsParticleEffect().Effect));
                break;
            }

            case (int)MessageId.ForcedMovement:
            {
                SetFlag(new ForcedMovementUpdateFlag(msg.AsForcedMovement().Movement));
                break;
            }

            case (int)MessageId.ChatMessage:
            {
                SetFlag(new PlayerChatUpdateFlag(msg.AsChatMessage().Chat));
                break;
            }

            case (int)MessageId.UpdatePlayerAppearance:
            {
                HandleAppearanceMessage(msg.AsPlayerAppearance());
                break;
            }

            case (int)MessageId.TookDamageLostHealth:
            {
                SetFlag(new DamageUpdateFlag(msg.AsTookDamangeLostHealth()));
                break;
            }

            case (int)MessageId.NewFacingDirection:
            {
                SetFlag(new FacingCoordinateUpdateFlag(msg.AsNewFacingDirection().FacingState));
                break;
            }

            case (int)MessageId.NewInteractingEntity:
            {
                SetFlag(new InteractingEntityUpdateFlag(msg.AsNewInteractingEntity().Interacting));
                break;
            }

            case (int)MessageId.DefinitionChange:
            {
                SetFlag(new DefinitionChangeUpdateFlag(msg.AsDefinitionChange().Definition));
                break;
            }

            case (int)MessageId.Move:
            {
                Movement = msg.AsMove();
                break;
            }

            case (int)MessageId.Teleport:
            {
                Reinitialize = true;
                break;
            }

            case (int)MessageId.FrameEnd:
            {
                Reset();
                break;
            }
            }
        }