public void UnregisterLogicInputEventHandler(ILogicInputEventProvider provider)
    {
        ELogicInputMetaType metaType = InputUtil.GetMetaTypeOfLogicEventProvider(provider);

        if (metaType != ELogicInputMetaType.Unknown)
        {
            if ((metaType & ELogicInputMetaType.MainJoytick) != 0)
            {
                ILogicInputEventProvider temp = null;
                logicEventProviders.TryGetValue(ELogicInputMetaType.MainJoytick, out temp);
                if (temp == provider)
                {
                    logicEventProviders.Remove(ELogicInputMetaType.MainJoytick);
                }
            }
            if ((metaType & ELogicInputMetaType.SecondaryJoystick) != 0)
            {
                ILogicInputEventProvider temp = null;
                logicEventProviders.TryGetValue(ELogicInputMetaType.SecondaryJoystick, out temp);
                if (temp == provider)
                {
                    logicEventProviders.Remove(ELogicInputMetaType.SecondaryJoystick);
                }
            }
        }
    }
    public void RegisterLogicInputEventHandler(ILogicInputEventProvider provider)
    {
        ELogicInputMetaType metaType = InputUtil.GetMetaTypeOfLogicEventProvider(provider);

        if (metaType != ELogicInputMetaType.Unknown)
        {
            if ((metaType & ELogicInputMetaType.MainJoytick) != 0)
            {
                logicEventProviders[ELogicInputMetaType.MainJoytick] = provider;
            }
            if ((metaType & ELogicInputMetaType.SecondaryJoystick) != 0)
            {
                logicEventProviders[ELogicInputMetaType.SecondaryJoystick] = provider;
            }
        }
    }