void mapWithCollision(
                StateFun&& st_fun,
                EventFun&& ev_fun,
                TimeNodeFun&& tn_fun,
                NothingFun&& nothing_fun,
                const QVector<id_type<StateModel>>& createdStates,
                const QVector<id_type<EventModel>>& createdEvents,
                const QVector<id_type<TimeNodeModel>>& createdTimeNodes)
        {
            auto collidingStates = getCollidingStates(createdStates);
            if(!collidingStates.empty())
            {
                st_fun(collidingStates.first());
                return;
            }

            auto collidingEvents = getCollidingEvents(createdEvents);
            if(!collidingEvents.empty())
            {
                ev_fun(collidingEvents.first());
                return;
            }

            auto collidingTimeNodes = getCollidingTimeNodes(createdTimeNodes);
            if(!collidingTimeNodes.empty())
            {
                tn_fun(collidingTimeNodes.first());
                return;
            }

            nothing_fun();
        }
        void mapWithCollision(
                QPointF point,
                StateFun st_fun,
                EventFun ev_fun,
                TimeNodeFun tn_fun,
                NothingFun nothing_fun,
                const QVector<Id<StateModel>>& createdStates,
                const QVector<Id<EventModel>>& createdEvents,
                const QVector<Id<TimeNodeModel>>& createdTimeNodes)
        {
            auto collidingStates = getCollidingStates(point, createdStates);
            if(!collidingStates.empty())
            {
                st_fun(collidingStates.first());
                return;
            }

            auto collidingEvents = getCollidingEvents(point, createdEvents);
            if(!collidingEvents.empty())
            {
                ev_fun(collidingEvents.first());
                return;
            }

            auto collidingTimeNodes = getCollidingTimeNodes(point, createdTimeNodes);
            if(!collidingTimeNodes.empty())
            {
                tn_fun(collidingTimeNodes.first());
                return;
            }

            nothing_fun();
        }