public bool CanTrigger()
    {
        if (!repeatable && triggered)
        {
            return(false);
        }
        if (onNumExps && numExpsInSociety != society.GetNumOfExps())
        {
            return(false);
        }
        if (exp != null)
        {
            if (!EqualIfNotNull(expState, exp.GetState(), checkExp))
            {
                return(false);
            }
            //if (!EqualIfNotNull (expAnimState, ...
        }
        if (!EqualIfNotNull(socState, society.GetState(), checkSoc))
        {
            return(false);
        }
        print(onAttack + "  " + (!society.ExpsAreAttackingEachOther()));
        if (onAttack && !society.ExpsAreAttackingEachOther())
        {
            return(false);
        }
        if (onFactoryExp && onFilledGenes && !society.GetExpWithId(-1).dna.HasFilledGenes())
        {
            return(false);
        }
        if (onSameGenes && !society.GetExpWithId(-1).dna.SameTypeOfExp(expGeneMap))
        {
            return(false);
        }

        if (onSocietyCompletion && !society.GetState().Equals(Society.SocState.Finished))
        {
            return(false);
        }
        triggered = true;
        return(true);
    }