public override void ReceiveMessage(IGameMessage msg)
        {
            // TODO : handle ForcedMovement in Transform,
            // TODO : handle ForcedMovement movement over time in a separate component
            switch (msg.EventId)
            {
            case (int)MessageId.FrameBegin:
            {
                OnUpdate();
                break;
            }

            case (int)MessageId.BeginMovePath:
            {
                OnBeginMovePath(msg.AsBeginMovePath());
                break;
            }

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

            case (int)MessageId.NewPlayerFollowTarget:
            {
                OnNewFollowPlayer(msg.AsNewPlayerFollowTarget());
                break;
            }

            case (int)MessageId.SyncLocalsToGlobals:
            {
                SyncLocalsToGlobals(Parent.AssertGetClientPosition());
                break;
            }
            }
        }