static public bool Allows(XperItem item, XperAction type, XperRange range)
    {
        bool validAction = (s_singleton.AttributionsOf(item) & type) == type;
        bool validRange  = (s_singleton.RangeModeOf(item) & range) == range;

        return(validAction && validRange);
    }
 public XperEntry(XperAction type, XperRange range, XperItem item)
 {
     m_type            = type;
     m_item            = item;
     m_range           = range;
     m_timeOfEntry     = Time.time;
     m_introducedFirst = XperManager.FirstInteractionIntroduced(item);
     m_height          = StageManager.stageHeight;
 }
    public XperRange RangeModeOf(XperItem item)
    {
        XperRange res = 0;

        switch (item)
        {
        case XperItem.Erlenmeyer:
            res = m_erlenmeyerRangeMode;
            break;

        case XperItem.Becher:
            res = m_becherRangeMode;
            break;

        case XperItem.WaterTap:
            res = m_waterTapRangeMode;
            break;

        case XperItem.PipetteTap:
            res = m_pipetteTapRangeMode;
            break;

        case XperItem.Tube:
            res = m_tubeRangeMode;
            break;

        case XperItem.CogWheel:
            res = m_cogWheelRangeMode;
            break;

        case XperItem.AgitatorButton:
            res = m_agitatorButtonRangeMode;
            break;

        case XperItem.HodPane:
            res = m_hodPaneRangeMode;
            break;

        case XperItem.Cork:
            res = m_corkRangeMode;
            break;

        case XperItem.Agitator:
            res = m_agitatorRangeMode;
            break;

        case XperItem.Match:
            res = m_matchRangeMode;
            break;

        case XperItem.MatchBox:
            res = m_matchBoxRangeMode;
            break;

        case XperItem.Spatula:
            res = m_spatulaRangeMode;
            break;

        case XperItem.InstructorButton:
            res = m_instructorButtonRangeMode;
            break;

        case XperItem.Pen:
            res = m_markerRangeMode;
            break;

        case XperItem.PenCork:
            res = m_markerCorkRangeMode;
            break;
        }

        return(res);
    }
    public void SetRangeModeOf(XperItem item, XperRange type)
    {
        switch (item)
        {
        case XperItem.Erlenmeyer:
            m_erlenmeyerRangeMode = type;
            break;

        case XperItem.Becher:
            m_becherRangeMode = type;
            break;

        case XperItem.WaterTap:
            m_waterTapRangeMode = type;
            break;

        case XperItem.PipetteTap:
            m_pipetteTapRangeMode = type;
            break;

        case XperItem.Tube:
            m_tubeRangeMode = type;
            break;

        case XperItem.CogWheel:
            m_cogWheelRangeMode = type;
            break;

        case XperItem.AgitatorButton:
            m_agitatorButtonRangeMode = type;
            break;

        case XperItem.HodPane:
            m_hodPaneRangeMode = type;
            break;

        case XperItem.Cork:
            m_corkRangeMode = type;
            break;

        case XperItem.Agitator:
            m_agitatorRangeMode = type;
            break;

        case XperItem.Match:
            m_matchRangeMode = type;
            break;

        case XperItem.MatchBox:
            m_matchBoxRangeMode = type;
            break;

        case XperItem.Spatula:
            m_spatulaRangeMode = type;
            break;

        case XperItem.InstructorButton:
            m_instructorButtonRangeMode = type;
            break;

        case XperItem.Pen:
            m_markerRangeMode = type;
            break;

        case XperItem.PenCork:
            m_markerCorkRangeMode = type;
            break;
        }
    }
    public XperAction AttributionsOf(XperItem item)
    {
        XperAction res = 0;

        switch (item)
        {
        case XperItem.Erlenmeyer:
            res = m_erlenmeyerAttributions;
            break;

        case XperItem.Becher:
            res = m_becherAttributions;
            break;

        case XperItem.WaterTap:
            res = m_waterTapAttributions;
            break;

        case XperItem.PipetteTap:
            res = m_pipetteTapAttributions;
            break;

        case XperItem.Tube:
            res = m_tubeAttributions;
            break;

        case XperItem.CogWheel:
            res = m_cogWheelAttributions;
            break;

        case XperItem.AgitatorButton:
            res = m_agitatorButtonAttributions;
            break;

        case XperItem.HodPane:
            res = m_hodPaneAttributions;
            break;

        case XperItem.Cork:
            res = m_corkAttributions;
            break;

        case XperItem.Agitator:
            res = m_agitatorAttributions;
            break;

        case XperItem.Match:
            res = m_matchAttributions;
            break;

        case XperItem.MatchBox:
            res = m_matchBoxAttributions;
            break;

        case XperItem.Spatula:
            res = m_spatulaAttributions;
            break;

        case XperItem.InstructorButton:
            res = m_instructorButtonAttributions;
            break;

        case XperItem.Pen:
            res = m_markerAttributions;
            break;

        case XperItem.PenCork:
            res = m_markerCorkAttributions;
            break;
        }

        return(res);
    }
    public void SetAttributionsOf(XperItem item, XperAction type)
    {
        switch (item)
        {
        case XperItem.Erlenmeyer:
            m_erlenmeyerAttributions = type;
            break;

        case XperItem.Becher:
            m_becherAttributions = type;
            break;

        case XperItem.WaterTap:
            m_waterTapAttributions = type;
            break;

        case XperItem.PipetteTap:
            m_pipetteTapAttributions = type;
            break;

        case XperItem.Tube:
            m_tubeAttributions = type;
            break;

        case XperItem.CogWheel:
            m_cogWheelAttributions = type;
            break;

        case XperItem.AgitatorButton:
            m_agitatorButtonAttributions = type;
            break;

        case XperItem.HodPane:
            m_hodPaneAttributions = type;
            break;

        case XperItem.Cork:
            m_corkAttributions = type;
            break;

        case XperItem.Agitator:
            m_agitatorAttributions = type;
            break;

        case XperItem.Match:
            m_matchAttributions = type;
            break;

        case XperItem.MatchBox:
            m_matchBoxAttributions = type;
            break;

        case XperItem.Spatula:
            m_spatulaAttributions = type;
            break;

        case XperItem.InstructorButton:
            m_instructorButtonAttributions = type;
            break;

        case XperItem.Pen:
            m_markerAttributions = type;
            break;

        case XperItem.PenCork:
            m_markerCorkAttributions = type;
            break;
        }
    }
 static public XperAction FirstInteractionIntroduced(XperItem item)
 {
     return(s_singleton.m_xperFirstIntroduced[item]);
 }