Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def self.randomize_table( table, width, height )
- newtable = table.deep_clone
- tier1classes = [ 1, 6, 11]
- tier2classes = [ 2, 7, 10, 12, 14]
- tier3classes = [ 3, 4, 5, 8, 9, 13, 15]
- tier1_dist1 = 2 # // Tier 1 distance from another tier 1
- tier2_dist1 = 3 # // Tier 2 distance from another tier 1
- tier2_dist2 = 4 # // Tier 2 distance from another tier 2
- tier3_dist1 = 6 # // Tier 3 distance from another tier 1
- tier3_dist2 = 5 # // Tier 3 distance from another tier 2
- tier3_dist3 = 6 # // Tier 3 distance from another tier 3
- tier1_positions = []
- tier2_positions = []
- tier3_positions = []
- rngblock = proc { |x, y, dist|
- rng = create_block_range( x, y, dist ) - create_block_range( x, y, dist-1 )
- rng = rng.inject([]) { |r, a| r << a if a[0] >= 0 && a[1] >= 0 ; r }
- rng }
- mrngblock = proc { |rs, rng, dist|
- result = rng.deep_clone
- rs.each { |rss|
- result -= create_block_range( rss[0], rss[1], dist )
- result -= [rss[0], rss[1]] }
- result
- }
- rngfinal = proc { |*rules|
- rrange = []
- rules.each { |rl|
- rrange += rl[0].inject([]) { |r, a|
- r | rngblock.call( a[0], a[1], rl[1] ) }
- }
- rules.each { |rl| rrange = mrngblock.call( rl[0], rrange, rl[1] ) }
- rrange
- }
- # // Tier 1
- x, y = rand( width ), rand( height )
- tier1_positions << [x, y]
- i = tier1classes.shift
- newtable[xy_from_index( x, y, width )][1] = [ClassBlock, i]
- while !tier1classes.empty?()
- range = rngfinal( [tier1_positions, tier1_dist1] )
- r = range.randomize()[0]
- tier1_positions << [r[0], r[1]]
- newtable[xy_from_index( r[0], r[1], width )][1] = [ClassBlock, tier1classes.shift]
- end
- # // Tier 2
- while !tier2classes.empty?()
- range = rngfinal( [tier1_positions, tier2_dist1],
- [tier2_positions, tier2_dist2]
- )
- r = range.randomize()[0]
- tier2_positions << [r[0], r[1]]
- newtable[xy_from_index( r[0], r[1], width )][1] = [ClassBlock, tier2classes.shift]
- end
- # // Tier 3
- while !tier3classes.empty?()
- range = rngfinal( [tier1_positions, tier3_dist1],
- [tier2_positions, tier3_dist2],
- [tier3_positions, tier3_dist3]
- )
- r = range.randomize()[0]
- tier3_positions << [r[0], r[1]]
- newtable[xy_from_index( r[0], r[1], width )][1] = [ClassBlock, tier3classes.shift]
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment