protected override void OnConstruct()
        {
            var net = this.world.GetModule <ME.ECS.Network.INetworkModuleBase>();

            net.RegisterObject(this);
            if (this.pointerClick == true)
            {
                this.pointerClickEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerClick, InputPointerClick>(this, InputEventType.PointerClick, net, this.RPC);
            }
            if (this.pointerDoubleClick == true)
            {
                this.pointerDoubleClickEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerDoubleClick, InputPointerDoubleClick>(this, InputEventType.PointerDoubleClick, net, this.RPC);
            }
            if (this.pointerDragBegin == true)
            {
                this.pointerDragBeginEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerDragBegin, InputPointerDragBegin>(this, InputEventType.PointerDragBegin, net, this.RPC);
            }
            if (this.pointerDragMove == true)
            {
                this.pointerDragMoveEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerDragMove, InputPointerDragMove>(this, InputEventType.PointerDragMove, net, this.RPC);
            }
            if (this.pointerDragEnd == true)
            {
                this.pointerDragEndEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerDragEnd, InputPointerDragEnd>(this, InputEventType.PointerDragEnd, net, this.RPC);
            }
            if (this.pointerUp == true)
            {
                this.pointerUpEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerUp, InputPointerUp>(this, InputEventType.PointerUp, net, this.RPC);
            }
            if (this.pointerDown == true)
            {
                this.pointerDownEvent = new InputAction <ME.ECS.Essentials.Input.Input.Markers.InputPointerDown, InputPointerDown>(this, InputEventType.PointerDown, net, this.RPC);
            }

            if (this.gesturePitchDown == true)
            {
                this.gesturePitchDownEvent = new InputGesture <ME.ECS.Essentials.Input.Input.Markers.InputGesturePitchDown, InputGesturePitchDown>(this, InputEventType.GesturePitchDown, net, this.RPC);
            }
            if (this.gesturePitchMove == true)
            {
                this.gesturePitchMoveEvent = new InputGesture <ME.ECS.Essentials.Input.Input.Markers.InputGesturePitchMove, InputGesturePitchMove>(this, InputEventType.GesturePitchMove, net, this.RPC);
            }
            if (this.gesturePitchUp == true)
            {
                this.gesturePitchUpEvent = new InputGesture <ME.ECS.Essentials.Input.Input.Markers.InputGesturePitchUp, InputGesturePitchUp>(this, InputEventType.GesturePitchUp, net, this.RPC);
            }

            this.AddModule <ME.ECS.Essentials.Input.Input.Modules.InputModule>();
            this.AddSystem <ME.ECS.Essentials.Input.Input.Systems.SendMessagesSystem>();

            this.inputMaskFilter = Filter.Create("InputFeature-MaskFilter").With <InputMask>().Push();
        }
        protected override void OnDeconstruct()
        {
            this.pointerClickEvent       = default;
            this.pointerDoubleClickEvent = default;
            this.pointerDragBeginEvent   = default;
            this.pointerDragMoveEvent    = default;
            this.pointerDragEndEvent     = default;
            this.pointerUpEvent          = default;
            this.pointerDownEvent        = default;

            this.gesturePitchDownEvent = default;
            this.gesturePitchMoveEvent = default;
            this.gesturePitchUpEvent   = default;

            this.getWorldPointerCallback = default;

            this.actions.Clear();
            this.camera = null;
        }