Sha256: 8b2752d81e97dd834134689f048293ce68a8582ccbc48475e930f5ab13f8a492

Contents?: true

Size: 1.27 KB

Versions: 2

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module Engine::Components
  class OrthographicCamera < Engine::Component

    def initialize(width:, height:, far:)
      @width = width
      @height = height
      @far = far
      @near = 0

      Engine::Camera.instance = self
    end

    def destroy
      Engine::Camera.instance = nil if Engine::Camera.instance == self
    end

    def matrix
      @matrix ||=
        begin
          camera_pos = game_object.pos - game_object.forward * (@far / 2)
          Matrix[
            [right[0], up[0], -front[0], 0],
            [right[1], up[1], -front[1], 0],
            [right[2], up[2], -front[2], 0],
            [-camera_pos.dot(right), -camera_pos.dot(up), camera_pos.dot(front), 1]
          ]
        end
    end

    def update(delta_time)
      @right = nil if game_object.rotation != @rotation
      @up = nil if game_object.rotation != @rotation
      @front = nil if game_object.rotation != @rotation
      @matrix = nil if game_object.rotation.to_a != @rotation
      @rotation = game_object.rotation.to_a
    end

    private

    def right
      @right ||= game_object.right / (@width / 2)
    end

    def up
      @up ||= game_object.up / (@height / 2)
    end

    def front
      @front ||= game_object.forward / (@far / 2)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby_rpg-0.0.3 lib/engine/components/orthographic_camera.rb
ruby_rpg-0.0.2 lib/engine/components/orthographic_camera.rb