Sha256: c36bd805070fc9b88cab19fba0ffd4a3c23430734682f6b88b1d3cade57d5b25

Contents?: true

Size: 858 Bytes

Versions: 2

Compression:

Stored size: 858 Bytes

Contents

# frozen_string_literal: true

module Engine::Components
  class AudioSource < Engine::Component
    def initialize(clip, radius: 1000)
      @clip = clip
      @radius = radius
      @source = NativeAudio::AudioSource.new(clip)
    end

    def play
      @source.play
    end

    def stop
      @source.stop
    end

    def pause
      @source.pause
    end

    def resume
      @source.resume
    end

    def volume=(volume)
      @source.set_volume(volume)
    end

    def update(delta_time)
      camera = Engine::Camera.instance
      local_pos = camera.game_object.world_to_local_coordinate(game_object.pos)
      angle = Math.atan2(local_pos[0], -local_pos[2]) * 180 / Math::PI
      angle = (angle + 360) % 360
      distance = (local_pos.magnitude * 255 / @radius).clamp(0, 255)
      
      @source.set_pos(angle, distance)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ruby_rpg-0.0.4 lib/engine/components/audio_source.rb
ruby_rpg-0.0.3 lib/engine/components/audio_source.rb