public
Description: particle attractor, multiverse, ruby game programming tutorial & 2d engine
Homepage: http://geeq.at
Clone URL: git://github.com/oneup/puituniverse.git
puituniverse / from_future_import.rb
100644 161 lines (132 sloc) 2.492 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
def println s
  print "<nil>" if s.nil?
  print "#{s}\n"
  STDOUT.flush
end
 
def quit reason=nil
  println reason || "all fine, kthxbai"
  exit
end
 
def require_all folder
  dir = folder.dir
  raise "no directory #{folder} found" unless dir
 
  dir.each do |file|
    next unless file
    require("#{folder}/#{file}") if file.ends_with? ".rb"
  end
end
 
def require_package folder
  # slightly python-y packages. init.rb is required first, then everything else is required
  init_file = "#{folder}/init.rb"
  require init_file if init_file.is_file?
  require_all folder
end
 
class Object
  def is? what
    self == what
  end
  
  def is_array?
    return false
  end
  
  def is_symbol?
    return false
  end
end
 
class Range
  def limit value
    return first if value < first
    return last if value > last
    return value
  end
end
 
class NilClass
  def empty?
    return true
  end
end
 
class String
  def dir
    Dir.new(self)
    #files = []
    #dir.each {|f| files << f }
    #files
  end
  
  def is_dir?
    begin
      Dir.new(self)
    rescue
      return false
    end
    true
  end
  
  def each_dir
    self.dir.each do |target|
      yield(target) if target.is_dir?
    end
  end
  
  def uppercase
    upcase
  end
 
  def uppercase!
    upcase!
  end
  
  def starts_with? what
    self[0...what.size] == what
  end
  
  def ends_with? what
    self[-what.size, what.size] == what
  end
  
  def lines
    ll
    self.each_line {|l| ll << l}
    ll
  end
  
  def classify
    camelize(self.sub(/.*\./, ''))
  end
  
  def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
    return camelize(self) unless lower_case_and_underscored_word
 
    if first_letter_in_uppercase
      lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
    else
      lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1]
    end
  end
  
  def instantiate
    Kernel.const_get(self.classify)
  end
end
 
class Array
  def count
    self.size
  end
  
  def is_array?
    true
  end
end
 
class Symbol
  def is_symbol?
    true
  end
end
 
class Hash
  def keys
    self.collect {|key, value| key}
  end
  
  def values
    self.collect {|key, value| value}
  end
end
 
def probability p
  rand < p
end
 
def repl
  # thx mike http://mike-burns.blogspot.com/2005/06/ruby-repl.html
  print "exc"
  while true
    '> '.display
    gets.each do | e |
      puts(eval(e))
    end
  end
end