void Init(EventBase evt)
        {
            var type = evt.GetType();

            eventBaseName  = EventDebugger.GetTypeDisplayName(type);
            eventTypeId    = evt.eventTypeId;
            eventId        = evt.eventId;
            triggerEventId = evt.triggerEventId;

            timestamp = evt.timestamp;

            target = evt.target;

            skipElements = evt.skipElements;

            isPropagationStopped          = evt.isPropagationStopped;
            isImmediatePropagationStopped = evt.isImmediatePropagationStopped;
            isDefaultPrevented            = evt.isDefaultPrevented;

            var mouseEvent         = evt as IMouseEvent;
            var mouseEventInternal = evt as IMouseEventInternal;

            hasUnderlyingPhysicalEvent = mouseEvent != null &&
                                         mouseEventInternal != null &&
                                         mouseEventInternal.triggeredByOS;

            propagationPhase = evt.propagationPhase;

            originalMousePosition = evt.originalMousePosition;
            currentTarget         = evt.currentTarget;

            dispatch = evt.dispatch;

            if (mouseEvent != null)
            {
                modifiers      = mouseEvent.modifiers;
                mousePosition  = mouseEvent.mousePosition;
                button         = mouseEvent.button;
                pressedButtons = mouseEvent.pressedButtons;
                clickCount     = mouseEvent.clickCount;

                var wheelEvent = mouseEvent as WheelEvent;
                if (wheelEvent != null)
                {
                    delta = wheelEvent.delta;
                }
            }

            var pointerEvent = evt as IPointerEvent;

            if (pointerEvent != null)
            {
                var pointerEventInternal = evt as IPointerEventInternal;
                hasUnderlyingPhysicalEvent = pointerEvent != null &&
                                             pointerEventInternal != null &&
                                             pointerEventInternal.triggeredByOS;

                modifiers      = pointerEvent.modifiers;
                mousePosition  = pointerEvent.position;
                button         = pointerEvent.button;
                pressedButtons = pointerEvent.pressedButtons;
                clickCount     = pointerEvent.clickCount;
            }

            IKeyboardEvent keyboardEvent = evt as IKeyboardEvent;

            if (keyboardEvent != null)
            {
                character = keyboardEvent.character;
                keyCode   = keyboardEvent.keyCode;
            }

            ICommandEvent commandEvent = evt as ICommandEvent;

            if (commandEvent != null)
            {
                commandName = commandEvent.commandName;
            }

            INavigationEvent navigationEvent = evt as INavigationEvent;

            if (navigationEvent != null)
            {
                deviceType = navigationEvent.deviceType;
                if (evt is NavigationMoveEvent nme)
                {
                    navigationDirection = nme.direction;
                }
            }
        }