agt 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +7 -0
  3. data/README.md +5 -0
  4. data/app/assets/javascripts/agt/config.coffee +9 -0
  5. data/app/assets/javascripts/agt/dom.coffee +12 -0
  6. data/app/assets/javascripts/agt/function.coffee +317 -0
  7. data/app/assets/javascripts/agt/geom/circle.coffee +338 -0
  8. data/app/assets/javascripts/agt/geom/cubic_bezier.coffee +37 -0
  9. data/app/assets/javascripts/agt/geom/diamond.coffee +241 -0
  10. data/app/assets/javascripts/agt/geom/ellipsis.coffee +141 -0
  11. data/app/assets/javascripts/agt/geom/linear_spline.coffee +56 -0
  12. data/app/assets/javascripts/agt/geom/matrix.coffee +240 -0
  13. data/app/assets/javascripts/agt/geom/mixins/geometry.coffee +171 -0
  14. data/app/assets/javascripts/agt/geom/mixins/intersections.coffee +150 -0
  15. data/app/assets/javascripts/agt/geom/mixins/path.coffee +145 -0
  16. data/app/assets/javascripts/agt/geom/mixins/proxyable.coffee +9 -0
  17. data/app/assets/javascripts/agt/geom/mixins/spline.coffee +329 -0
  18. data/app/assets/javascripts/agt/geom/mixins/surface.coffee +55 -0
  19. data/app/assets/javascripts/agt/geom/mixins/triangulable.coffee +112 -0
  20. data/app/assets/javascripts/agt/geom/point.coffee +454 -0
  21. data/app/assets/javascripts/agt/geom/polygon.coffee +119 -0
  22. data/app/assets/javascripts/agt/geom/quad_bezier.coffee +43 -0
  23. data/app/assets/javascripts/agt/geom/quint_bezier.coffee +42 -0
  24. data/app/assets/javascripts/agt/geom/rectangle.coffee +599 -0
  25. data/app/assets/javascripts/agt/geom/spiral.coffee +90 -0
  26. data/app/assets/javascripts/agt/geom/transformation_proxy.coffee +43 -0
  27. data/app/assets/javascripts/agt/geom/triangle.coffee +442 -0
  28. data/app/assets/javascripts/agt/impulse.coffee +105 -0
  29. data/app/assets/javascripts/agt/index.coffee +56 -0
  30. data/app/assets/javascripts/agt/inflector/inflection.coffee +21 -0
  31. data/app/assets/javascripts/agt/inflector/inflections.coffee +75 -0
  32. data/app/assets/javascripts/agt/inflector/inflector.coffee +235 -0
  33. data/app/assets/javascripts/agt/inheritance.coffee +132 -0
  34. data/app/assets/javascripts/agt/math.coffee +45 -0
  35. data/app/assets/javascripts/agt/mixins/activable.coffee +31 -0
  36. data/app/assets/javascripts/agt/mixins/aliasable.coffee +25 -0
  37. data/app/assets/javascripts/agt/mixins/alternate_case.coffee +72 -0
  38. data/app/assets/javascripts/agt/mixins/cloneable.coffee +71 -0
  39. data/app/assets/javascripts/agt/mixins/delegation.coffee +90 -0
  40. data/app/assets/javascripts/agt/mixins/disposable.coffee +7 -0
  41. data/app/assets/javascripts/agt/mixins/equatable.coffee +37 -0
  42. data/app/assets/javascripts/agt/mixins/formattable.coffee +52 -0
  43. data/app/assets/javascripts/agt/mixins/globalizable.coffee +175 -0
  44. data/app/assets/javascripts/agt/mixins/has_ancestors.coffee +47 -0
  45. data/app/assets/javascripts/agt/mixins/has_collection.coffee +107 -0
  46. data/app/assets/javascripts/agt/mixins/has_nested_collection.coffee +51 -0
  47. data/app/assets/javascripts/agt/mixins/memoizable.coffee +64 -0
  48. data/app/assets/javascripts/agt/mixins/parameterizable.coffee +101 -0
  49. data/app/assets/javascripts/agt/mixins/poolable.coffee +62 -0
  50. data/app/assets/javascripts/agt/mixins/sourcable.coffee +45 -0
  51. data/app/assets/javascripts/agt/mixins/state_machine.coffee +47 -0
  52. data/app/assets/javascripts/agt/net/router.coffee +165 -0
  53. data/app/assets/javascripts/agt/object.coffee +9 -0
  54. data/app/assets/javascripts/agt/particles/actions/base_action.coffee +7 -0
  55. data/app/assets/javascripts/agt/particles/actions/die_on_surface.coffee +14 -0
  56. data/app/assets/javascripts/agt/particles/actions/force.coffee +11 -0
  57. data/app/assets/javascripts/agt/particles/actions/friction.coffee +14 -0
  58. data/app/assets/javascripts/agt/particles/actions/live.coffee +9 -0
  59. data/app/assets/javascripts/agt/particles/actions/macro_action.coffee +13 -0
  60. data/app/assets/javascripts/agt/particles/actions/move.coffee +11 -0
  61. data/app/assets/javascripts/agt/particles/actions/null_action.coffee +9 -0
  62. data/app/assets/javascripts/agt/particles/counters/by_rate.coffee +17 -0
  63. data/app/assets/javascripts/agt/particles/counters/fixed.coffee +9 -0
  64. data/app/assets/javascripts/agt/particles/counters/null_counter.coffee +9 -0
  65. data/app/assets/javascripts/agt/particles/emission.coffee +35 -0
  66. data/app/assets/javascripts/agt/particles/emitters/null_emitter.coffee +7 -0
  67. data/app/assets/javascripts/agt/particles/emitters/path.coffee +10 -0
  68. data/app/assets/javascripts/agt/particles/emitters/ponctual.coffee +9 -0
  69. data/app/assets/javascripts/agt/particles/emitters/surface.coffee +10 -0
  70. data/app/assets/javascripts/agt/particles/initializers/explosion.coffee +19 -0
  71. data/app/assets/javascripts/agt/particles/initializers/life.coffee +16 -0
  72. data/app/assets/javascripts/agt/particles/initializers/macro_initializer.coffee +10 -0
  73. data/app/assets/javascripts/agt/particles/initializers/null_initializer.coffee +7 -0
  74. data/app/assets/javascripts/agt/particles/initializers/particle_sub_system.coffee +12 -0
  75. data/app/assets/javascripts/agt/particles/initializers/stream.coffee +20 -0
  76. data/app/assets/javascripts/agt/particles/mixins/randomizable.coffee +10 -0
  77. data/app/assets/javascripts/agt/particles/particle.coffee +32 -0
  78. data/app/assets/javascripts/agt/particles/sub_system.coffee +11 -0
  79. data/app/assets/javascripts/agt/particles/system.coffee +103 -0
  80. data/app/assets/javascripts/agt/particles/timers/instant.coffee +11 -0
  81. data/app/assets/javascripts/agt/particles/timers/limited.coffee +19 -0
  82. data/app/assets/javascripts/agt/particles/timers/null_timer.coffee +11 -0
  83. data/app/assets/javascripts/agt/particles/timers/unlimited.coffee +9 -0
  84. data/app/assets/javascripts/agt/particles/timers/until_death.coffee +11 -0
  85. data/app/assets/javascripts/agt/promise.coffee +214 -0
  86. data/app/assets/javascripts/agt/random/random.coffee +100 -0
  87. data/app/assets/javascripts/agt/random/seeds/lagged_fibonnacci.coffee +53 -0
  88. data/app/assets/javascripts/agt/random/seeds/linear.coffee +16 -0
  89. data/app/assets/javascripts/agt/random/seeds/linear_congruential.coffee +23 -0
  90. data/app/assets/javascripts/agt/random/seeds/math_random.coffee +9 -0
  91. data/app/assets/javascripts/agt/random/seeds/mersenne_twister.coffee +42 -0
  92. data/app/assets/javascripts/agt/random/seeds/no_random.coffee +12 -0
  93. data/app/assets/javascripts/agt/random/seeds/paul_houle.coffee +19 -0
  94. data/app/assets/javascripts/agt/signal.coffee +272 -0
  95. data/app/assets/javascripts/agt/sprites/animation.coffee +13 -0
  96. data/app/assets/javascripts/agt/sprites/sprite.coffee +30 -0
  97. data/app/assets/javascripts/agt/widgets/hash.coffee +36 -0
  98. data/app/assets/javascripts/agt/widgets/widgets.coffee +194 -0
  99. data/app/assets/javascripts/agt/widgets/widgets/checked_input.coffee +7 -0
  100. data/app/assets/javascripts/agt/widgets/widgets/focus_bubbling.coffee +15 -0
  101. data/lib/agt.rb +8 -0
  102. data/lib/agt/version.rb +5 -0
  103. metadata +173 -0
@@ -0,0 +1,194 @@
1
+ namespace('agt.widgets')
2
+
3
+ #
4
+ __widgets__ = {}
5
+
6
+ # The `__instances__` object stores the returned instances of the various widgets,
7
+ # stored by widget type and then mapped with their target DOM element as key.
8
+ __instances__ = {}
9
+
10
+ __subscriptions__ = {}
11
+
12
+ ### Public ###
13
+
14
+ # The `widgets` function is both the main module and the function
15
+ # used to register the widgets to apply on a page.
16
+ widgets = agt.widgets = (name, selector, options={}, block) ->
17
+ unless __widgets__[name]?
18
+ throw new Error "Unable to find widget '#{name}'"
19
+
20
+ # The options specific to the widget registration and activation are
21
+ # extracted from the options object.
22
+ events = options.on or 'init'
23
+ ifCondition = options.if
24
+ unlessCondition = options.unless
25
+ mediaCondition = options.media
26
+
27
+ delete options.on
28
+ delete options.if
29
+ delete options.unless
30
+ delete options.media
31
+
32
+ # Events can be passed as a string with event names separated with spaces.
33
+ events = events.split /\s+/g if typeof events is 'string'
34
+
35
+ # The widgets instances are stored in a Hash with the DOM element they
36
+ # target as key. The instances hashes are stored per widget type.
37
+ instances = __instances__[name] ||= new agt.widgets.Hash
38
+
39
+ # This method execute a test condition for the given element. The condition
40
+ # can be either a function or a value converted to boolean.
41
+ testCondition = (condition, element) ->
42
+ if typeof condition is 'function' then condition(element) else !!condition
43
+
44
+ # The DOM elements handled by a widget will receive a handled class
45
+ # to differenciate them from unhandled elements.
46
+ handledClass = "#{name}-handled"
47
+
48
+ # This method will test if an element can be handled by the current widget.
49
+ # It will test for both the handled class presence and the widget
50
+ # conditions. Note that if both the `if` and `unless` conditions
51
+ # are passed in the options object they will be tested as both part
52
+ # of a single `&&` condition.
53
+ canBeHandled = (element) ->
54
+ res = !element.classList.contains(handledClass)
55
+ res &&= testCondition(ifCondition, element) if ifCondition?
56
+ res &&= not testCondition(unlessCondition, element) if unlessCondition?
57
+ res
58
+
59
+ # If a media condition have been specified, the widget activation will be
60
+ # conditionned based on the result of this condition. The condition is
61
+ # verified each time the `resize` event is triggered.
62
+ if mediaCondition?
63
+ # The media condition can be either a boolean value, a function, or,
64
+ # to simply the setup, an object with `min` and `max` property containing
65
+ # the minimal and maximal window width where the widget is activated.
66
+ if typeof mediaCondition is 'object'
67
+ {min, max} = mediaCondition
68
+ mediaCondition = ->
69
+ res = true
70
+ res &&= window.innerWidth >= min if min?
71
+ res &&= window.innerWidth <= max if max?
72
+ res
73
+
74
+ # The media handler is registered on the `resize` event of the `window`
75
+ # object.
76
+ mediaHandler = (element, widget) ->
77
+ return unless widget?
78
+
79
+ condition_matched = testCondition(mediaCondition, element)
80
+
81
+ if condition_matched and not widget.active
82
+ widget.activate()
83
+ else if not condition_matched and widget.active
84
+ widget.deactivate()
85
+
86
+ window.addEventListener 'resize', ->
87
+ instances.eachPair (element, widget) ->
88
+ mediaHandler element, widget
89
+
90
+ # The `handler` function is the function registered on specified event and
91
+ # will proceed to the creation of the widgets if the conditions are met.
92
+ handler = ->
93
+ elements = document.querySelectorAll selector
94
+
95
+ Array::forEach.call elements, (element) ->
96
+ return unless canBeHandled element
97
+
98
+ widget = new agt.widgets.Widget(element)
99
+ args = [widget, element, Object.create(options), elements]
100
+ __widgets__[name].call(args...)
101
+ element.classList.add handledClass
102
+ instances.set element, widget
103
+
104
+ # The widgets activation state are resolved at creation
105
+ if mediaCondition?
106
+ mediaHandler(element, widget)
107
+ else
108
+ widget.activate()
109
+
110
+ document.dispatchEvent agt.domEvent("#{name}:handled", {element, widget})
111
+
112
+ block?.call element, element, widget
113
+
114
+ # For each event specified, the handler is registered as listener.
115
+ # A special case is the `init` event that simply mean to trigger the
116
+ # handler as soon a the function is called.
117
+ events.forEach (event) ->
118
+ switch event
119
+ when 'init' then handler()
120
+ when 'load', 'resize'
121
+ widgets.subscribe name, window, event, handler
122
+ else
123
+ widgets.subscribe name, document, event, handler
124
+
125
+ # The `widgets.define` is used to create a new widget usable through the
126
+ # `widgets` method. Basically, a widget is defined using a `name`, and a
127
+ # `block` function that will be called for each DOM elements targeted by
128
+ # the widget.
129
+ #
130
+ # The `block` function should have the following signature:
131
+ #
132
+ # function(element:HTMLElement, options:Object):Object
133
+ #
134
+ # The `options` object will contains all the options passed to the `widgets`
135
+ # method except the `on`, `if`, `unless` and `media` ones.
136
+ widgets.define = (name, block) -> __widgets__[name] = block
137
+
138
+ # A shorthand method to register a jQuery widget.
139
+ widgets.$define = (name, baseOptions={}, block) ->
140
+ [baseOptions, block] = [{}, baseOptions] if typeof baseOptions is 'function'
141
+ throw new Error "#{name} jquery widget isn't defined" unless $.fn[name]
142
+ __widgets__[name] = (element, options={}) ->
143
+ options[k] = v for k,v of baseOptions when not options[k]?
144
+ res = $(element)[name](options)
145
+ block?(res, options)
146
+
147
+ widgets.delete = (name) ->
148
+ __subscriptions__[name]?.forEach (subscription) -> subscription.off()
149
+ widgets.release(name)
150
+ delete __widgets__[name]
151
+
152
+ widgets.reset = (names...) ->
153
+ names = Object.keys(__instances__) if names.length is 0
154
+ widgets.delete(name) for name in names
155
+
156
+ widgets.widgetsFor = (element, widget) ->
157
+ if widget?
158
+ __instances__[widget].get(element)
159
+ else
160
+ instances.get(element) for instances in __instances__ when instances.hasKey(element)
161
+
162
+ widgets.subscribe = (name, to, evt, handler) ->
163
+ __subscriptions__[name] ||= []
164
+ to.addEventListener(evt, handler)
165
+ subscription = off: -> to.removeEventListener(evt, handler)
166
+ __subscriptions__[name].push subscription
167
+ subscription
168
+
169
+ # The `widgets.release` method can be used to completely remove the widgets
170
+ # of the given `name` from the page.
171
+ # It's the widget responsibility to clean up its dependencies during
172
+ # the `dispose` call.
173
+ widgets.release = (names...) ->
174
+ names = Object.keys(__instances__) if names.length is 0
175
+ for name in names
176
+ __instances__[name].each (value) -> value.dispose()
177
+
178
+ # Activates all the widgets instances of type `name`.
179
+ widgets.activate = (names...) ->
180
+ names = Object.keys(__instances__) if names.length is 0
181
+ for name in names
182
+ __instances__[name].each (value) -> value.activate()
183
+
184
+ # Deactivates all the widgets instances of type `name`.
185
+ widgets.deactivate = (names...) ->
186
+ names = Object.keys(__instances__) if names.length is 0
187
+ for name in names
188
+ __instances__[name].each (value) -> value.deactivate()
189
+
190
+ class agt.widgets.Widget
191
+ @include agt.mixins.Activable
192
+ @include agt.mixins.Disposable
193
+
194
+ constructor: (@element) ->
@@ -0,0 +1,7 @@
1
+ # Public: Decorates an input that support the `checked` property with
2
+ # a `checked` class whenever its property is `true`. It allows to have
3
+ # css rules on checked input on IE versions that doesn't support
4
+ # the `:checked` selector.
5
+ agt.widgets.define 'checked_input', (element) ->
6
+ element.addEventListener 'change', ->
7
+ element.classList.toggle 'checked', element.checked
@@ -0,0 +1,15 @@
1
+ # Public: This widgets decorates all the dom path until the current
2
+ # element with a `focus` class when the element have the focus.
3
+ agt.widgets.define 'bubbling_focus', (element) ->
4
+ blur = ->
5
+ Array::forEach.call document.querySelectorAll('.focus'), (el) ->
6
+ el.classList.remove('.focus')
7
+
8
+ element.addEventListener 'blur', -> blur()
9
+ element.addEventListener 'focus', ->
10
+ blur()
11
+ node = element
12
+ node.classList.add('focus')
13
+ while node.nodeName.toLowerCase() isnt 'html'
14
+ node = node.parentNode
15
+ node.classList.add('focus')
@@ -0,0 +1,8 @@
1
+ require "agt/version"
2
+
3
+ module Agt
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module Agt
2
+ module Rails
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,173 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: agt
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Cédric Néhémie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Some game tools
42
+ email:
43
+ - cedric.nehemie@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/agt/version.rb
49
+ - lib/agt.rb
50
+ - app/assets/javascripts/agt/config.coffee
51
+ - app/assets/javascripts/agt/dom.coffee
52
+ - app/assets/javascripts/agt/function.coffee
53
+ - app/assets/javascripts/agt/geom/circle.coffee
54
+ - app/assets/javascripts/agt/geom/cubic_bezier.coffee
55
+ - app/assets/javascripts/agt/geom/diamond.coffee
56
+ - app/assets/javascripts/agt/geom/ellipsis.coffee
57
+ - app/assets/javascripts/agt/geom/linear_spline.coffee
58
+ - app/assets/javascripts/agt/geom/matrix.coffee
59
+ - app/assets/javascripts/agt/geom/mixins/geometry.coffee
60
+ - app/assets/javascripts/agt/geom/mixins/intersections.coffee
61
+ - app/assets/javascripts/agt/geom/mixins/path.coffee
62
+ - app/assets/javascripts/agt/geom/mixins/proxyable.coffee
63
+ - app/assets/javascripts/agt/geom/mixins/spline.coffee
64
+ - app/assets/javascripts/agt/geom/mixins/surface.coffee
65
+ - app/assets/javascripts/agt/geom/mixins/triangulable.coffee
66
+ - app/assets/javascripts/agt/geom/point.coffee
67
+ - app/assets/javascripts/agt/geom/polygon.coffee
68
+ - app/assets/javascripts/agt/geom/quad_bezier.coffee
69
+ - app/assets/javascripts/agt/geom/quint_bezier.coffee
70
+ - app/assets/javascripts/agt/geom/rectangle.coffee
71
+ - app/assets/javascripts/agt/geom/spiral.coffee
72
+ - app/assets/javascripts/agt/geom/transformation_proxy.coffee
73
+ - app/assets/javascripts/agt/geom/triangle.coffee
74
+ - app/assets/javascripts/agt/impulse.coffee
75
+ - app/assets/javascripts/agt/index.coffee
76
+ - app/assets/javascripts/agt/inflector/inflection.coffee
77
+ - app/assets/javascripts/agt/inflector/inflections.coffee
78
+ - app/assets/javascripts/agt/inflector/inflector.coffee
79
+ - app/assets/javascripts/agt/inheritance.coffee
80
+ - app/assets/javascripts/agt/math.coffee
81
+ - app/assets/javascripts/agt/mixins/activable.coffee
82
+ - app/assets/javascripts/agt/mixins/aliasable.coffee
83
+ - app/assets/javascripts/agt/mixins/alternate_case.coffee
84
+ - app/assets/javascripts/agt/mixins/cloneable.coffee
85
+ - app/assets/javascripts/agt/mixins/delegation.coffee
86
+ - app/assets/javascripts/agt/mixins/disposable.coffee
87
+ - app/assets/javascripts/agt/mixins/equatable.coffee
88
+ - app/assets/javascripts/agt/mixins/formattable.coffee
89
+ - app/assets/javascripts/agt/mixins/globalizable.coffee
90
+ - app/assets/javascripts/agt/mixins/has_ancestors.coffee
91
+ - app/assets/javascripts/agt/mixins/has_collection.coffee
92
+ - app/assets/javascripts/agt/mixins/has_nested_collection.coffee
93
+ - app/assets/javascripts/agt/mixins/memoizable.coffee
94
+ - app/assets/javascripts/agt/mixins/parameterizable.coffee
95
+ - app/assets/javascripts/agt/mixins/poolable.coffee
96
+ - app/assets/javascripts/agt/mixins/sourcable.coffee
97
+ - app/assets/javascripts/agt/mixins/state_machine.coffee
98
+ - app/assets/javascripts/agt/net/router.coffee
99
+ - app/assets/javascripts/agt/object.coffee
100
+ - app/assets/javascripts/agt/particles/actions/base_action.coffee
101
+ - app/assets/javascripts/agt/particles/actions/die_on_surface.coffee
102
+ - app/assets/javascripts/agt/particles/actions/force.coffee
103
+ - app/assets/javascripts/agt/particles/actions/friction.coffee
104
+ - app/assets/javascripts/agt/particles/actions/live.coffee
105
+ - app/assets/javascripts/agt/particles/actions/macro_action.coffee
106
+ - app/assets/javascripts/agt/particles/actions/move.coffee
107
+ - app/assets/javascripts/agt/particles/actions/null_action.coffee
108
+ - app/assets/javascripts/agt/particles/counters/by_rate.coffee
109
+ - app/assets/javascripts/agt/particles/counters/fixed.coffee
110
+ - app/assets/javascripts/agt/particles/counters/null_counter.coffee
111
+ - app/assets/javascripts/agt/particles/emission.coffee
112
+ - app/assets/javascripts/agt/particles/emitters/null_emitter.coffee
113
+ - app/assets/javascripts/agt/particles/emitters/path.coffee
114
+ - app/assets/javascripts/agt/particles/emitters/ponctual.coffee
115
+ - app/assets/javascripts/agt/particles/emitters/surface.coffee
116
+ - app/assets/javascripts/agt/particles/initializers/explosion.coffee
117
+ - app/assets/javascripts/agt/particles/initializers/life.coffee
118
+ - app/assets/javascripts/agt/particles/initializers/macro_initializer.coffee
119
+ - app/assets/javascripts/agt/particles/initializers/null_initializer.coffee
120
+ - app/assets/javascripts/agt/particles/initializers/particle_sub_system.coffee
121
+ - app/assets/javascripts/agt/particles/initializers/stream.coffee
122
+ - app/assets/javascripts/agt/particles/mixins/randomizable.coffee
123
+ - app/assets/javascripts/agt/particles/particle.coffee
124
+ - app/assets/javascripts/agt/particles/sub_system.coffee
125
+ - app/assets/javascripts/agt/particles/system.coffee
126
+ - app/assets/javascripts/agt/particles/timers/instant.coffee
127
+ - app/assets/javascripts/agt/particles/timers/limited.coffee
128
+ - app/assets/javascripts/agt/particles/timers/null_timer.coffee
129
+ - app/assets/javascripts/agt/particles/timers/unlimited.coffee
130
+ - app/assets/javascripts/agt/particles/timers/until_death.coffee
131
+ - app/assets/javascripts/agt/promise.coffee
132
+ - app/assets/javascripts/agt/random/random.coffee
133
+ - app/assets/javascripts/agt/random/seeds/lagged_fibonnacci.coffee
134
+ - app/assets/javascripts/agt/random/seeds/linear.coffee
135
+ - app/assets/javascripts/agt/random/seeds/linear_congruential.coffee
136
+ - app/assets/javascripts/agt/random/seeds/math_random.coffee
137
+ - app/assets/javascripts/agt/random/seeds/mersenne_twister.coffee
138
+ - app/assets/javascripts/agt/random/seeds/no_random.coffee
139
+ - app/assets/javascripts/agt/random/seeds/paul_houle.coffee
140
+ - app/assets/javascripts/agt/signal.coffee
141
+ - app/assets/javascripts/agt/sprites/animation.coffee
142
+ - app/assets/javascripts/agt/sprites/sprite.coffee
143
+ - app/assets/javascripts/agt/widgets/hash.coffee
144
+ - app/assets/javascripts/agt/widgets/widgets/checked_input.coffee
145
+ - app/assets/javascripts/agt/widgets/widgets/focus_bubbling.coffee
146
+ - app/assets/javascripts/agt/widgets/widgets.coffee
147
+ - LICENSE.md
148
+ - README.md
149
+ homepage: https://github.com/abe33/agt.git
150
+ licenses:
151
+ - MIT
152
+ metadata: {}
153
+ post_install_message:
154
+ rdoc_options: []
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubyforge_project:
169
+ rubygems_version: 2.0.3
170
+ signing_key:
171
+ specification_version: 4
172
+ summary: Some game tools
173
+ test_files: []