void doSetAsString(void *target, const VString &value)
	{
		VEnvironmentObject* object = static_cast<VEnvironmentObject*>(target);
		int fogMode;
		if (!mapEnumValue(gsFogModeConstants, value, fogMode, false))
		{
			OGRE_EXCEPT(Ogre::Exception::ERR_RT_ASSERTION_FAILED,
				"Unknown fog mode: " + value,
				"FogModeCmd::doSet");
		}

		object->mFogMode = static_cast<Ogre::FogMode>(fogMode);
		object->updateRenderInstance();
	}
    bool populateFlagsValue(const Constant* constants, const String& label, int& value, bool caseSensitive)
    {
        assert(constants);
        std::vector<String> items = Ogre::StringUtil::split(label, ",|");

        int flags = 0;
        for (std::vector<String>::iterator i = items.begin(); i != items.end(); ++i)
        {
            String& item = *i;
            Ogre::StringUtil::trim(item);

            int flag;
            if (!mapEnumValue(constants, item, flag, caseSensitive))
                return false;
            flags |= flag;
        }

        value = flags;
        return true;
    }