Class: AdventureRL::FileGroupPlayer
- Inherits:
-
Object
- Object
- AdventureRL::FileGroupPlayer
- Includes:
- Helpers::Error
- Defined in:
- lib/AdventureRL/FileGroupPlayer.rb
Overview
This is an abstract class, which is inherited by
-
ClipPlayer
-
AudioPlayer
At its core, it takes a FileGroup in its #play method, and “plays” it.
Direct Known Subclasses
Constant Summary
Constants included from Helpers::Error
Helpers::Error::PADDING, Helpers::Error::STACK_TRACE_PADDING, Helpers::Error::STACK_TRACE_SIZE
Instance Method Summary collapse
-
#get_current_time ⇒ Object
(also: #get_time)
Returns the current playback time in seconds.
-
#get_filegroup ⇒ Object
Returns the currently set FileGroup.
-
#get_settings(*keys) ⇒ Object
Returns the settings as
AdventureRL::Settings, unless*keysare given, then it returns the value of@settings.get(*keys). -
#get_speed ⇒ Object
Returns the current playback speed multiplier.
-
#has_filegroup? ⇒ Boolean
Returns true if there is a currently active FileGroup.
-
#increase_current_time(seconds) ⇒ Object
(also: #increase_time, #seek)
Increase (or decrease) current_time.
-
#increase_speed(amount) ⇒ Object
Increment (or decrement) the speed value by
amount. -
#initialize(settings = {}) ⇒ FileGroupPlayer
constructor
Pass settings Hash or Settings as argument.
-
#is_playing? ⇒ Boolean
Returns
trueif is currently playing, andfalseif is paused or stopped. -
#load_filegroup(filegroup) ⇒ Object
Load a FileGroup as active FileGroup.
-
#pause ⇒ Object
Pause the currently playing FileGroup.
-
#play(filegroup) ⇒ Object
Start playing FileGroup
filegroup. -
#reset ⇒ Object
Reset the current playback.
-
#resume ⇒ Object
Resumes playing paused FileGroup.
-
#set_current_time(seconds) ⇒ Object
(also: #set_time)
Set a new current playback time in seconds.
-
#set_speed(speed) ⇒ Object
Set playback speed multiplier.
-
#stop ⇒ Object
Stop playing and clear active FileGroup.
-
#toggle ⇒ Object
Calls #resume if is paused, or calls #pause if is playing.
-
#update ⇒ Object
Check which file from FileGroup is supposed to be played.
Methods included from Helpers::Error
directory_exists?, error, error_no_directory, error_no_file, file_exists?
Constructor Details
#initialize(settings = {}) ⇒ FileGroupPlayer
Pass settings Hash or Settings as argument. Supersedes the child class’ DEFAULT_SETTINGS.
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 12 def initialize settings = {} @settings = get_default_settings.merge settings @playing = false @speed = @settings.get(:speed) @filegroup_index = 0 @filegroup = nil @current_file = nil @current_time = 0.0 @last_current_time = 0.0 @target_frame_delay = 1.0 / 24.0 # Default, will be overwritten in #play @deltatime = Deltatime.new end |
Instance Method Details
#get_current_time ⇒ Object Also known as: get_time
Returns the current playback time in seconds.
39 40 41 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 39 def get_current_time return @current_time end |
#get_filegroup ⇒ Object
Returns the currently set FileGroup.
34 35 36 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 34 def get_filegroup return @filegroup end |
#get_settings(*keys) ⇒ Object
Returns the settings as AdventureRL::Settings, unless *keys are given, then it returns the value of @settings.get(*keys).
28 29 30 31 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 28 def get_settings *keys return @settings if (keys.empty?) return @settings.get(*keys) end |
#get_speed ⇒ Object
Returns the current playback speed multiplier.
66 67 68 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 66 def get_speed return @speed end |
#has_filegroup? ⇒ Boolean
Returns true if there is a currently active FileGroup.
118 119 120 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 118 def has_filegroup? return !!get_filegroup end |
#increase_current_time(seconds) ⇒ Object Also known as: increase_time, seek
Increase (or decrease) current_time.
55 56 57 58 59 60 61 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 55 def increase_current_time seconds error( "Passed seconds must be an Integer or Float,", "but got #{seconds.inspect}:#{seconds.class.name}" ) unless ([Integer, Float].include? seconds.class) @current_time += seconds end |
#increase_speed(amount) ⇒ Object
Increment (or decrement) the speed value by amount.
80 81 82 83 84 85 86 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 80 def increase_speed amount error( "Argument passed to #increment_speed must be a Float or Integer, but got", "#{seconds.inspect}:#{amount.class.name}" ) unless ([Float, Integer].include? amount.class) @speed += amount end |
#is_playing? ⇒ Boolean
Returns true if is currently playing, and false if is paused or stopped.
151 152 153 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 151 def return @playing end |
#load_filegroup(filegroup) ⇒ Object
Load a FileGroup as active FileGroup.
96 97 98 99 100 101 102 103 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 96 def load_filegroup filegroup error( "Passed argument must be an instance of FileGroup, but got", "#{filegroup.inspect}:#{filegroup.class.name}." ) unless (filegroup.is_a? FileGroup) set_filegroup filegroup @target_frame_delay = 1.0 / get_filegroup.get_settings(:fps).to_f end |
#pause ⇒ Object
Pause the currently playing FileGroup.
106 107 108 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 106 def pause @playing = false end |
#play(filegroup) ⇒ Object
Start playing FileGroup filegroup.
89 90 91 92 93 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 89 def play filegroup load_filegroup filegroup @playing = true reset end |
#reset ⇒ Object
Reset the current playback. Start playing from the start again.
142 143 144 145 146 147 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 142 def reset @deltatime.reset @current_time = 0.0 @filegroup_index = 0 set_file end |
#resume ⇒ Object
Resumes playing paused FileGroup.
111 112 113 114 115 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 111 def resume return unless (has_filegroup?) @playing = true @deltatime.reset end |
#set_current_time(seconds) ⇒ Object Also known as: set_time
Set a new current playback time in seconds.
45 46 47 48 49 50 51 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 45 def set_current_time seconds error( "Passed seconds must be an Integer or Float,", "but got #{seconds.inspect}:#{seconds.class.name}" ) unless ([Integer, Float].include? seconds.class) @current_time = seconds end |
#set_speed(speed) ⇒ Object
Set playback speed multiplier.
71 72 73 74 75 76 77 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 71 def set_speed speed error( "Argument passed to #set_speed must be a Float or Integer, but got", "#{speed.inspect}:#{speed.class.name}" ) unless ([Float, Integer].include? speed.class) @speed = speed end |
#stop ⇒ Object
Stop playing and clear active FileGroup. Cannot call #resume after this, before calling #play again.
125 126 127 128 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 125 def stop @filegroup = nil @playing = false end |
#toggle ⇒ Object
Calls #resume if is paused, or calls #pause if is playing.
132 133 134 135 136 137 138 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 132 def toggle if () pause elsif (has_filegroup?) resume end end |
#update ⇒ Object
Check which file from FileGroup is supposed to be played. This should be called every frame.
157 158 159 160 161 |
# File 'lib/AdventureRL/FileGroupPlayer.rb', line 157 def update return unless () set_filegroup_index update_timing end |