Module: Doom::Render::RendererFactory
- Defined in:
- lib/doom/render/renderer_factory.rb
Constant Summary collapse
- TYPES =
i[classic zbuffer rasterizer raytracing].freeze
- SWITCH_TYPES =
i[classic rasterizer raytracing].freeze
Class Method Summary collapse
- .build(type, wad, map, textures, palette, colormap, flats, sprites = nil, animations = nil) ⇒ Object
- .build_like(renderer, type) ⇒ Object
- .next_type(renderer) ⇒ Object
- .normalize(type) ⇒ Object
- .type_of(renderer) ⇒ Object
Class Method Details
.build(type, wad, map, textures, palette, colormap, flats, sprites = nil, animations = nil) ⇒ Object
11 12 13 14 15 16 17 18 19 |
# File 'lib/doom/render/renderer_factory.rb', line 11 def build(type, wad, map, textures, palette, colormap, flats, sprites = nil, animations = nil) klass = case normalize(type) when :classic then Renderer when :zbuffer then ZBufferRenderer when :rasterizer then HardwareRenderer when :raytracing then RayTracingRenderer end klass.new(wad, map, textures, palette, colormap, flats, sprites, animations) end |
.build_like(renderer, type) ⇒ Object
21 22 23 24 |
# File 'lib/doom/render/renderer_factory.rb', line 21 def build_like(renderer, type) build(type, renderer.wad, renderer.map, renderer.textures, renderer.palette, renderer.colormap, renderer.flats.values, renderer.sprites, renderer.animations) end |
.next_type(renderer) ⇒ Object
44 45 46 47 |
# File 'lib/doom/render/renderer_factory.rb', line 44 def next_type(renderer) current_index = SWITCH_TYPES.index(type_of(renderer)) || 0 SWITCH_TYPES[(current_index + 1) % SWITCH_TYPES.size] end |
.normalize(type) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/doom/render/renderer_factory.rb', line 26 def normalize(type) value = (type || :classic).to_sym unless TYPES.include?(value) raise ArgumentError, "unknown renderer #{type.inspect}; expected #{TYPES.join(' or ')}" end value end |
.type_of(renderer) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/doom/render/renderer_factory.rb', line 36 def type_of(renderer) return :raytracing if renderer.is_a?(RayTracingRenderer) return :rasterizer if renderer.is_a?(HardwareRenderer) return :zbuffer if renderer.is_a?(ZBufferRenderer) :classic end |