def from_gas_section(cls, section: Section): assert section.has_t_n_header() type_name, n = section.get_t_n_header() assert type_name in ['point', 'spot', 'directional'] assert n.startswith('light_') light: Light = PointLight() if type_name == 'point' else SpotLight( ) if type_name == 'spot' else DirectionalLight() light.id = Hex.parse(n[6:]) light.active = section.get_attr_value('active') light.affects_actors = section.get_attr_value('affects_actors') light.affects_items = section.get_attr_value('affects_items') light.affects_terrain = section.get_attr_value('affects_terrain') light.color = Color(section.get_attr_value('color')) light.draw_shadow = section.get_attr_value('draw_shadow') light.inner_radius = section.get_attr_value('inner_radius') light.intensity = section.get_attr_value('intensity') light.occlude_geometry = section.get_attr_value('occlude_geometry') light.on_timer = section.get_attr_value('on_timer') light.outer_radius = section.get_attr_value('outer_radius') if type_name in ['point', 'spot']: light.position = PosDir.from_gas_section( section.get_section('position')) if type_name in ['directional', 'spot']: light.direction = PosDir.from_gas_section( section.get_section('direction')) return light
def load_profiles(cls, parent_section: Section, name) -> SingleProfile | ProfileVariants | None: profiles_section = parent_section.get_section(name) if profiles_section is None: return None profile_attr = profiles_section.get_attr('profile') if profile_attr is not None: profile_name = profile_attr.value return SingleProfile(profile_name) perlin_name = profiles_section.get_attr_value('perlin').strip() tx = profiles_section.get_attr_value('tx').strip() variant_a = cls.load_profiles(profiles_section, 'a') variant_b = cls.load_profiles(profiles_section, 'b') return ProfileVariants(variant_a, variant_b, perlin_name, tx)