shattered_pack 0.4.0.1 → 0.5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/shattered_model.rb +1 -4
- data/lib/shattered_pack/base.rb +1 -1
- data/lib/shattered_pack/keyboard_input/key_converter.rb +3 -3
- data/lib/shattered_pack/keyboard_input/keyboard_input.rb +3 -1
- data/lib/shattered_pack/pre_initialize/pre_initialize.rb +6 -1
- data/lib/shattered_pack.rb +2 -5
- data/lib/shattered_state/actor/actor.rb +5 -1
- data/lib/shattered_state/base.rb +31 -16
- data/lib/shattered_state.rb +1 -4
- data/lib/shattered_view/base.rb +106 -41
- data/lib/shattered_view/camera.rb +7 -7
- data/lib/shattered_view/resources.rb +18 -2
- data/lib/shattered_view.rb +3 -5
- metadata +10 -29
- data/lib/mock_objects/shattered_ogre/input.rb +0 -6
- data/lib/mock_objects/shattered_ogre/light.rb +0 -4
- data/lib/mock_objects/shattered_ogre/mesh.rb +0 -17
- data/lib/mock_objects/shattered_ogre/node.rb +0 -17
- data/lib/mock_objects/shattered_ogre/renderer.rb +0 -11
- data/lib/mock_objects/shattered_ogre/resource_handler.rb +0 -9
- data/lib/mock_objects/shattered_ogre/scene.rb +0 -28
- data/lib/shattered_model/fuzzy_logic.rb +0 -188
- data/lib/shattered_model/linear_interpolator.rb +0 -29
- data/lib/shattered_pack/runner.rb +0 -11
- data/lib/shattered_state/runner.rb +0 -39
- data/lib/shattered_view/extensions.rb +0 -10
- data/lib/shattered_view/light.rb +0 -29
- data/lib/shattered_view/mesh/animation.rb +0 -20
- data/lib/shattered_view/mesh/mesh.rb +0 -152
- data/lib/shattered_view/node.rb +0 -105
- data/lib/shattered_view/overlay.rb +0 -20
- data/lib/shattered_view/rmaterial.rb +0 -43
- data/lib/shattered_view/runner.rb +0 -48
- data/lib/shattered_view/vector.rb +0 -258
@@ -1,258 +0,0 @@
|
|
1
|
-
class Object
|
2
|
-
# This is a shorthand to define vector object coordinates.
|
3
|
-
#
|
4
|
-
# Creates a vector object at coordinates x,y,z
|
5
|
-
def v(x, y, z)
|
6
|
-
Vector.new(x, y, z)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
class SymbolToVectorError < StandardError #:nodoc:
|
11
|
-
end
|
12
|
-
|
13
|
-
class Symbol #:nodoc:
|
14
|
-
# Vectors in symbol form can be any of the following:
|
15
|
-
# :x => v(1,0,0)
|
16
|
-
# :y => v(0,1,0)
|
17
|
-
# :z => v(0,0,1),
|
18
|
-
# :up => v(0,1,0)
|
19
|
-
# :down => v(0,-1,0)
|
20
|
-
# :left => v(-1,0,0)
|
21
|
-
# :right => v(1,0,0)
|
22
|
-
# :forward => v(0,0,1)
|
23
|
-
# :backward => v(0,0,-1)
|
24
|
-
# :zero => v(0,0,0)
|
25
|
-
def to_v
|
26
|
-
@definitions ||= {:x => v(1,0,0),:y => v(0,1,0),:z => v(0,0,1),
|
27
|
-
:up => v(0,1,0),:down => v(0,-1,0),
|
28
|
-
:left => v(-1,0,0),:right => v(1,0,0),
|
29
|
-
:forward => v(0,0,1),:backward => v(0,0,-1),
|
30
|
-
:zero => v(0,0,0)}
|
31
|
-
return @definitions[self] unless @definitions[self].nil?
|
32
|
-
raise SymbolToVectorError, "Undefined vector for symbol #{self}"
|
33
|
-
end
|
34
|
-
|
35
|
-
# Multiplication defined for vectors carries over to their symbolic equivalence.
|
36
|
-
def *(number)
|
37
|
-
return to_v * number
|
38
|
-
end
|
39
|
-
|
40
|
-
# Addition for vectors
|
41
|
-
def +(number)
|
42
|
-
return to_v + number
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
class Array #:nodoc:
|
47
|
-
# Vector extensions for array. Allows for coersion of a 3 element Array into a vector.
|
48
|
-
|
49
|
-
# Randomize the order of an array
|
50
|
-
#
|
51
|
-
# [1, 2, 3].shuffle #=> [2, 3, 1]
|
52
|
-
#
|
53
|
-
def shuffle
|
54
|
-
sort_by {rand}
|
55
|
-
end
|
56
|
-
|
57
|
-
# Create a vector from an array.
|
58
|
-
#
|
59
|
-
# [1, 2, 3].to_v #=> same as Vector.new(1, 2, 3)
|
60
|
-
#
|
61
|
-
def to_v
|
62
|
-
raise StandardError, "vector #{self.inspect} does not have 3 elements" if self.length < 3
|
63
|
-
Vector.new self[0], self[1] ,self[2]
|
64
|
-
end
|
65
|
-
|
66
|
-
# Returns this Array as an Ogre vector object: Vector3. Should only be used internally by
|
67
|
-
# Shattered to communicate with the Ogre engine.
|
68
|
-
def to_v3
|
69
|
-
self.to_v.to_v3
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
# Vector is a three dimensional array, that allows for various operations on itself.
|
74
|
-
# To create a vector, use the shorthand:
|
75
|
-
# v(0,0,0) # Creates a zero vector
|
76
|
-
class Vector
|
77
|
-
|
78
|
-
attr_reader :x, :y, :z
|
79
|
-
|
80
|
-
# Create a new Vector object. It requires exactly 3 arguments: x, y and z. Any value that
|
81
|
-
# can be converted to a float is acceptable.
|
82
|
-
#
|
83
|
-
# *NOTE:* The recomended way to create Vector objects is to use the <tt>v(1,2,3)</tt> shorthand.
|
84
|
-
def initialize(x_val, y_val, z_val)
|
85
|
-
@x, @y, @z = [x_val, y_val, z_val].collect{ |x| x.to_f }
|
86
|
-
end
|
87
|
-
|
88
|
-
# Iterate through x, y and z with a block. The passed value is the value of each component of
|
89
|
-
# the vector.
|
90
|
-
def each(&block)
|
91
|
-
self.to_a.each do |component|
|
92
|
-
yield component
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
# Returns this Vector as an Ogre vector object: Vector3. Should only be used internally by
|
97
|
-
# Shattered to communicate with the Ogre engine.
|
98
|
-
def to_v3 # :nodoc:
|
99
|
-
ShatteredOgre::Vector3.new @x, @y, @z
|
100
|
-
end
|
101
|
-
|
102
|
-
# Returns self
|
103
|
-
def to_v
|
104
|
-
self
|
105
|
-
end
|
106
|
-
|
107
|
-
# Returns an array with x, y and z dumped into its elements.
|
108
|
-
# v(1, 2, 3).to_a #=> [1.0, 2.0, 3.0]
|
109
|
-
def to_a
|
110
|
-
[@x, @y, @z]
|
111
|
-
end
|
112
|
-
|
113
|
-
# Add 2 Vectors together.
|
114
|
-
# v(1,1,1) + v(1,2,3) #=> v(2,3,4)
|
115
|
-
def +(*args)
|
116
|
-
vector = convert_args_to_vector(args)
|
117
|
-
Vector.new(
|
118
|
-
self.x + vector.x,
|
119
|
-
self.y + vector.y,
|
120
|
-
self.z + vector.z
|
121
|
-
)
|
122
|
-
end
|
123
|
-
|
124
|
-
# Subtract one Vector from another.
|
125
|
-
# v(1,2,3) - v(1,1,1) #=> v(0,1,2)
|
126
|
-
def -(args)
|
127
|
-
vector = convert_args_to_vector(args)
|
128
|
-
Vector.new(
|
129
|
-
self.x - vector.x,
|
130
|
-
self.y - vector.y,
|
131
|
-
self.z - vector.z
|
132
|
-
)
|
133
|
-
end
|
134
|
-
|
135
|
-
# Multiply all components of a vector by a scalar amount.
|
136
|
-
# v(1,2,3) * 3 #=> v(3,6,9)
|
137
|
-
def *(value)
|
138
|
-
result = []
|
139
|
-
each do |i|
|
140
|
-
result << i * value
|
141
|
-
end
|
142
|
-
result.to_v
|
143
|
-
end
|
144
|
-
|
145
|
-
# Divide all components of a vector by a scalar amount
|
146
|
-
# v(5,10,15) / 5 #=> v(1,2,3)
|
147
|
-
def /(value)
|
148
|
-
result = Array.new
|
149
|
-
self.each do |i|
|
150
|
-
result << i/value.to_f
|
151
|
-
end
|
152
|
-
result.to_v
|
153
|
-
end
|
154
|
-
|
155
|
-
# Returns this Vector but normalized to a length of 1.
|
156
|
-
# v(9, 0, 0).normalize #=> v(1,0,0)
|
157
|
-
def normalize
|
158
|
-
self * (1 / length)
|
159
|
-
end
|
160
|
-
alias_method :normalise, :normalize
|
161
|
-
|
162
|
-
# Same as #normalize but modifies the receiver in place.
|
163
|
-
def normalize!
|
164
|
-
@x, @y, @z = normalize.to_a
|
165
|
-
end
|
166
|
-
alias_method :normalise!, :normalize!
|
167
|
-
|
168
|
-
# Return the value specified by bracket notation. Integers, Symbols or Strings
|
169
|
-
# are accepted as keys.
|
170
|
-
#
|
171
|
-
# vector = v(1,2,3)
|
172
|
-
# vector[:x] #=> 1
|
173
|
-
# vector['y'] #=> 2
|
174
|
-
# vector[2] #=> 3
|
175
|
-
def [](index)
|
176
|
-
case
|
177
|
-
when index == 0 || index == :x || index == 'x'
|
178
|
-
@x
|
179
|
-
when index == 1 || index == :y || index == 'y'
|
180
|
-
@y
|
181
|
-
when index == 2 || index == :z || index == 'z'
|
182
|
-
@z
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
# Set the value specified by bracket notation. Accepts the same keys as the #[]
|
187
|
-
# method.
|
188
|
-
def []=(index, value)
|
189
|
-
case
|
190
|
-
when index == 0 || index == :x || index == 'x'
|
191
|
-
@x = value.to_f
|
192
|
-
when index == 1 || index == :y || index == 'y'
|
193
|
-
@y = value.to_f
|
194
|
-
when index == 2 || index == :z || index == 'z'
|
195
|
-
@z = value.to_f
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
# Set the value of the X component.
|
200
|
-
def x=(value)
|
201
|
-
@x = value.to_f
|
202
|
-
end
|
203
|
-
|
204
|
-
# Set the value of the Y component.
|
205
|
-
def y=(value)
|
206
|
-
@y = value.to_f
|
207
|
-
end
|
208
|
-
|
209
|
-
# Set the value of the Z component.
|
210
|
-
def z=(value)
|
211
|
-
@z = value.to_f
|
212
|
-
end
|
213
|
-
|
214
|
-
|
215
|
-
# Returns the length of this vector.
|
216
|
-
# v(0,0,7).length #=> 7
|
217
|
-
def length
|
218
|
-
Math.sqrt(x**2 + y**2 + z**2)
|
219
|
-
end
|
220
|
-
|
221
|
-
# Converts the vector into an easily identifiable form. Mostly used for debugging
|
222
|
-
# and console output.
|
223
|
-
# v(1,2,3).to_s #=> "#<Vector [1.0, 2.0, 3.0]>"
|
224
|
-
def to_s
|
225
|
-
"#<Vector [#@x, #@y, #@z]>"
|
226
|
-
end
|
227
|
-
|
228
|
-
# Equality test. This method will return true if all components of both vectors are
|
229
|
-
# indentical.
|
230
|
-
def ==(vector)
|
231
|
-
vector = vector.to_v if vector.is_a?(Symbol)
|
232
|
-
vector.kind_of?(Vector) &&
|
233
|
-
x == vector.x &&
|
234
|
-
y == vector.y &&
|
235
|
-
z == vector.z
|
236
|
-
end
|
237
|
-
|
238
|
-
# Create a unique identifier based on x, y and z.
|
239
|
-
def hash
|
240
|
-
return self.to_a.hash
|
241
|
-
end
|
242
|
-
|
243
|
-
# Equality test for hash indexes.
|
244
|
-
def eql?(other)
|
245
|
-
return self.to_a.eql?(other.to_a)
|
246
|
-
end
|
247
|
-
|
248
|
-
private
|
249
|
-
|
250
|
-
def convert_args_to_vector(*args)
|
251
|
-
args.flatten!
|
252
|
-
if(args.first.is_a?(Vector) || args.first.is_a?(Symbol))
|
253
|
-
args.first.to_v
|
254
|
-
else
|
255
|
-
args.to_v
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|