Class: TableScript::TableEntryEnvironment
- Inherits:
-
Object
- Object
- TableScript::TableEntryEnvironment
show all
- Defined in:
- lib/tablescript/table_entry_environment.rb
Instance Method Summary
collapse
Constructor Details
Returns a new instance of TableEntryEnvironment.
22
23
24
25
26
|
# File 'lib/tablescript/table_entry_environment.rb', line 22
def initialize( table_name, roller )
@table_name = table_name
@roller = roller
@entries = []
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_id, *args) ⇒ Object
98
99
100
|
# File 'lib/tablescript/table_entry_environment.rb', line 98
def method_missing( method_id, *args )
raise "Undefined command '#{method_id}' in table #{@table_name}"
end
|
Instance Method Details
#dice_to_roll ⇒ Object
64
65
66
|
# File 'lib/tablescript/table_entry_environment.rb', line 64
def dice_to_roll
"d#{@entries.size}"
end
|
#dynamic(*args, &blk) ⇒ Object
Also known as:
d
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/tablescript/table_entry_environment.rb', line 47
def dynamic( *args, &blk )
if args.empty?
@entries << TableEntry.new( blk )
else
count = args.shift
if count.is_a?(Integer)
entry = TableEntry.new( blk )
1.upto count do
@entries << entry
end
end
raise "Too many parameters for d in table #{@table_name}" unless args.empty?
end
end
|
#fixed(*args, &blk) ⇒ Object
Also known as:
f
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/tablescript/table_entry_environment.rb', line 28
def fixed( *args, &blk )
if args.empty?
@entries << TableEntry.new( blk )
else
roll = args.shift
if roll.is_a?(Integer)
@entries[ roll - 1 ] = TableEntry.new( blk )
elsif roll.class == Range
entry = TableEntry.new( blk )
roll.each do |i|
@entries[ i - 1 ] = entry
end
end
raise "Too many parameters for f in table #{@table_name}" unless args.empty?
end
end
|
#lookup(index) ⇒ Object
68
69
70
71
|
# File 'lib/tablescript/table_entry_environment.rb', line 68
def lookup( index )
raise "No table entry for a roll of #{index}." if ( index <= 0 or index > @entries.size )
@entries[ index - 1 ].evaluate( index )
end
|
#reroll ⇒ Object
73
74
75
76
|
# File 'lib/tablescript/table_entry_environment.rb', line 73
def reroll
rolled_value = @roller.roll( dice_to_roll )
lookup( rolled_value )
end
|
#reroll_and_ignore(*args) ⇒ Object
78
79
80
81
82
|
# File 'lib/tablescript/table_entry_environment.rb', line 78
def reroll_and_ignore( *args )
validate_ignored_values( args )
rolled_value = @roller.roll_and_ignore( dice_to_roll, args )
lookup( rolled_value )
end
|
#reroll_and_ignore_duplicates(times, *args) ⇒ Object
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/tablescript/table_entry_environment.rb', line 84
def reroll_and_ignore_duplicates( times, *args )
ignored_entries = entries_from_ignored_values( args )
evaluated_rolled_entries = []
until evaluated_rolled_entries.size == times do
rolled_value = @roller.roll( dice_to_roll )
rolled_entry = @entries[ rolled_value - 1 ]
unless ignored_entries.include? rolled_entry
ignored_entries << rolled_entry
evaluated_rolled_entries << rolled_entry.evaluate( rolled_value )
end
end
evaluated_rolled_entries
end
|