savio 0.1.0

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.
@@ -0,0 +1,55 @@
1
+ module Savio
2
+ class Scene
3
+ attr_accessor :elements
4
+ def initialize(file, color = 'black')
5
+ @file = file
6
+ @color = color
7
+ show()
8
+ end
9
+
10
+ def show()
11
+ @bg = Square.new(x: 0, y: 0, z: 999, size: Window.width+1, color: @color)
12
+ @elements = []
13
+ content = File.read(@file)
14
+ content = content.gsub('[', "").gsub(']', "").gsub('"',"").chomp.split(",")
15
+
16
+ (content.count-1).times do |i|
17
+ if (i % 2) == 0
18
+ classType = Object.const_get(content[i].gsub(" ",""))
19
+ hash = content[i+1].gsub(';', ',').gsub('"',"").chomp
20
+ pairs = hash.split(",").to_s.gsub('"',"").chomp
21
+ keypair = pairs.split("=>").to_s.gsub('"',"").chomp
22
+ new = keypair.gsub('{', "").gsub('}', "").gsub('[', "").gsub(']', "").gsub('"',"").gsub(" ","").chomp.split(",")
23
+ build = {}
24
+ (new.count-1).times do |j|
25
+ if (j % 2) == 0
26
+ case Savio.guessType(new[j+1].chomp)
27
+ when "int"
28
+ value = new[j+1].chomp.to_i
29
+ when "float"
30
+ value = new[j+1].chomp.to_f
31
+ when "str"
32
+ value = new[j+1].chomp.to_s
33
+ when "bool"
34
+ value = Savio.makeBool(new[j+1].chomp)
35
+ end
36
+ build[new[j].intern] = value
37
+ end
38
+ end
39
+ puts "SCENE: " + @file.to_s + build.to_s
40
+ @elements.push(classType.new(build))
41
+ end
42
+ end
43
+ @elements.each do |e|
44
+ e.z = 1000
45
+ end
46
+ end
47
+
48
+ def remove()
49
+ @bg.remove
50
+ @elements.each do |e|
51
+ e.kill()
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,150 @@
1
+ module Savio
2
+ class Slider
3
+ include IORenderable
4
+
5
+ attr_reader :length, :min, :max, :size, :value
6
+
7
+ @@sliders = []
8
+ def self.sliders
9
+ @@sliders
10
+ end
11
+
12
+ def initialize(args = {})
13
+ @@sliders.push(self)
14
+ super(args)
15
+
16
+ @length = args[:length] || 100
17
+ @min = args[:min] || 0
18
+ @max = args[:max] || 100
19
+
20
+ @value = args[:value] || rand(@min..@max)
21
+ @showValue = args[:showValue] || true
22
+
23
+ @labelColor = args[:labelColor] || '#F5F5F5'
24
+ @sliderColor = args[:sliderColor] || '#757575'
25
+ @knobColor = args[:knobColor] || '#5BB36A'
26
+
27
+ build()
28
+ end
29
+
30
+ def length=(length)
31
+ @length = length.clamp(1, Window.width-@x)
32
+ rebuild()
33
+ end
34
+ def showValue=(state)
35
+ @showValue = state
36
+ rebuild()
37
+ end
38
+ def labelColor=(c)
39
+ @labelColor = c
40
+ rebuild()
41
+ end
42
+ def sliderColor=(c)
43
+ @sliderColor = c
44
+ rebuild()
45
+ end
46
+ def knobColor=(c)
47
+ @knobColor = c
48
+ rebuild()
49
+ end
50
+ def min=(x)
51
+ @min = x
52
+ setValue(@value)
53
+ end
54
+ def max=(x)
55
+ @max = x
56
+ setValue(@value)
57
+ end
58
+
59
+ def moveKnob(x)
60
+ if x.between?(@x, @x+@length)
61
+ @knob.x = x
62
+
63
+ to_max = @max
64
+ to_min = @min
65
+ from_max = @x + @length
66
+ from_min = @x
67
+ pos = @knob.x
68
+ @value = (((to_max - to_min) * (pos - from_min)) / (from_max - from_min) + to_min)
69
+ if @showValue == true
70
+ @label.text = @value.round(2).to_s
71
+ end
72
+ end
73
+ end
74
+
75
+ def setValue(value)
76
+ if value.between?(@min, @max)
77
+ to_max = @x + @length
78
+ to_min = @x
79
+ from_max = @max.to_f
80
+ from_min = @min.to_f
81
+ pos = value
82
+ knobX = (((to_max - to_min) * (pos - from_min)) / (from_max - from_min) + to_min)
83
+ @value = value
84
+ if @showValue == true
85
+ @label.text = @value.round(2).to_s
86
+ end
87
+ @knob.x = knobX
88
+ else
89
+ setValue(@min)
90
+ end
91
+ end
92
+
93
+ def remove()
94
+ super()
95
+ @sliderLine.remove
96
+ @knob.remove
97
+ @label.remove
98
+ @nameLabel.remove
99
+ end
100
+
101
+ def add()
102
+ super()
103
+ @sliderLine.add
104
+ @knob.add
105
+ @label.add
106
+ @nameLabel.add
107
+ end
108
+
109
+ def build()
110
+ @shown = true
111
+
112
+ @sliderLine = Line.new(
113
+ x1: @x, y1: @y,
114
+ x2: @x+@length, y2: @y,
115
+ width: @size,
116
+ color: @sliderColor,
117
+ z: @z
118
+ )
119
+
120
+ @knob = Circle.new(
121
+ x: @x, y: @y,
122
+ radius: @size * 1.2,
123
+ color: @knobColor,
124
+ z: @z+1
125
+ )
126
+
127
+ @label = Text.new(
128
+ @value.to_s,
129
+ x: @x + @length + @size, y: @y - @size * 1.75,
130
+ size: @size * 2.5,
131
+ color: @labelColor,
132
+ z: @z+1
133
+ )
134
+
135
+ @nameLabel = Text.new(
136
+ @displayName.to_s,
137
+ x: @x, y: @y - @size * 3 - @size,
138
+ size: @size * 2.5,
139
+ color: @labelColor,
140
+ z: @z+2
141
+ )
142
+
143
+ setValue(@value)
144
+
145
+ if @showValue == false
146
+ @label.remove
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,36 @@
1
+ module Savio
2
+ def self.hsv2rgb(hue, saturation, value)
3
+
4
+ hue = hue.to_f
5
+ saturation = saturation.to_f
6
+ value = value.to_f
7
+
8
+ chroma = (value * saturation).to_f
9
+ hPrime = hue/60.0
10
+ x = (chroma * (1 - (hPrime % 2 - 1).abs)).to_f
11
+
12
+ if 0 <= hPrime && hPrime < 1
13
+ rgb = [chroma, x, 0]
14
+ elsif 1 <= hPrime && hPrime < 2
15
+ rgb = [x, chroma, 0]
16
+ elsif 2 <= hPrime && hPrime < 3
17
+ rgb = [0, chroma, x]
18
+ elsif 3 <= hPrime && hPrime < 4
19
+ rgb = [0, x, chroma]
20
+ elsif 4 <= hPrime && hPrime < 5
21
+ rgb = [x, 0, chroma]
22
+ elsif 5 <= hPrime && hPrime < 6
23
+ rgb = [chroma, 0, x]
24
+ else
25
+ rgb = [0,0,0]
26
+ end
27
+
28
+ match = (value - chroma).to_f
29
+
30
+ rgb[0] = (rgb[0] + match).to_f
31
+ rgb[1] = (rgb[1] + match).to_f
32
+ rgb[2] = (rgb[2] + match).to_f
33
+
34
+ return rgb
35
+ end
36
+ end
@@ -0,0 +1,232 @@
1
+ #Adding ability to sense dragging
2
+ on :mouse do |event|
3
+ if Savio.listening
4
+
5
+ if @dragging == nil
6
+ @dragging = {}
7
+ end
8
+ if event.type == :down
9
+ @dragging[event.button] = true
10
+ end
11
+ if event.type == :up
12
+ @dragging[event.button] = false
13
+ end
14
+
15
+ end
16
+ end
17
+
18
+ #Button Handler
19
+ on :mouse do |event|
20
+ if Savio.listening
21
+
22
+ if @dragging[:right] == false
23
+ Button.buttons.each do |button|
24
+ if button.draggingEnabled
25
+ button.endDrag()
26
+ end
27
+ end
28
+ end
29
+
30
+ if @dragging[:right] == true
31
+ Button.buttons.each do |button|
32
+
33
+ if button.draggingEnabled
34
+ if event.x.between?(button.x-button.size,button.x+button.size) && event.y.between?(button.y-button.size,button.y+button.size)
35
+ button.allowDrag = true
36
+ end
37
+ if button.allowDrag
38
+ button.drag(event.x, event.y)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ if @dragging[:left] == true
45
+ Button.buttons.each do |button|
46
+
47
+ if button.shown && button.enabled
48
+ if event.x.between?(button.x-button.size,button.x+button.size) && event.y.between?(button.y-button.size,button.y+button.size)
49
+ if button.buttonManager == nil
50
+ button.toggle
51
+ else
52
+ button.buttonManager.toggle(button)
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+ #Slider Handler
64
+ on :mouse do |event|
65
+ if Savio.listening
66
+
67
+ if @dragging[:right] == false
68
+ Slider.sliders.each do |slider|
69
+ if slider.draggingEnabled
70
+ slider.endDrag()
71
+ end
72
+ end
73
+ end
74
+
75
+ if @dragging[:right] == true
76
+ Slider.sliders.each do |slider|
77
+
78
+ if slider.draggingEnabled
79
+ if event.y.between?(slider.y-slider.size,slider.y+slider.size) && event.x.between?(slider.x,slider.x+slider.length)
80
+ slider.allowDrag = true
81
+ end
82
+ if slider.allowDrag
83
+ slider.drag(event.x, event.y)
84
+ end
85
+ end
86
+
87
+ end
88
+ end
89
+
90
+ if @dragging[:left] == true
91
+ Slider.sliders.each do |slider|
92
+
93
+ if slider.shown && slider.enabled
94
+ if event.y.between?(slider.y-slider.size,slider.y+slider.size)
95
+ slider.moveKnob(event.x)
96
+ end
97
+ end
98
+
99
+ end
100
+ end
101
+
102
+ end
103
+ end
104
+
105
+ #Inputbox Handler
106
+ on :mouse do |event|
107
+ if Savio.listening
108
+
109
+ if @dragging[:right] == false
110
+ InputBox.inputBoxs.each do |inputBox|
111
+ if inputBox.draggingEnabled
112
+ inputBox.endDrag()
113
+ end
114
+ end
115
+ end
116
+
117
+ if @dragging[:right] == true
118
+ InputBox.inputBoxs.each do |inputBox|
119
+
120
+ if inputBox.draggingEnabled
121
+ if event.y.between?(inputBox.y,inputBox.y+inputBox.height) && event.x.between?(inputBox.x,inputBox.x+inputBox.length)
122
+ inputBox.allowDrag = true
123
+ end
124
+ if inputBox.allowDrag
125
+ inputBox.drag(event.x, event.y)
126
+ end
127
+ end
128
+
129
+ end
130
+ end
131
+
132
+ if @dragging[:left] == true
133
+ InputBox.inputBoxs.each do |inputBox|
134
+
135
+ if inputBox.shown && inputBox.enabled
136
+ if event.y.between?(inputBox.y,inputBox.y+inputBox.height) && event.x.between?(inputBox.x,inputBox.x+inputBox.length)
137
+ inputBox.select
138
+ else
139
+ inputBox.deselect
140
+ end
141
+ end
142
+
143
+ end
144
+ end
145
+
146
+ end
147
+ end
148
+
149
+ on :key do |event|
150
+ if Savio.listening
151
+
152
+ InputBox.inputBoxs.each do |inputBox|
153
+ if inputBox.selected
154
+ if event.type == :down
155
+ if event.key == "left shift"
156
+ inputBox.shift = true
157
+ else
158
+ inputBox.addKey(event.key)
159
+ end
160
+ elsif event.type == :up && event.key == "left shift"
161
+ inputBox.shift = false
162
+ end
163
+ end
164
+ end
165
+
166
+ end
167
+ end
168
+
169
+ # #ColorPicker Handler
170
+ on :mouse do |event|
171
+ if Savio.listening
172
+
173
+ if @dragging[:right] == false
174
+ ColorSlider.colorSliders.each do |slider|
175
+ if slider.draggingEnabled
176
+ slider.endDrag()
177
+ end
178
+ end
179
+ end
180
+
181
+ if @dragging[:right] == true
182
+ ColorSlider.colorSliders.each do |slider|
183
+
184
+ if slider.draggingEnabled
185
+ distance = (event.x-slider.x.to_f) ** 2 + (event.y-slider.y.to_f) ** 2
186
+ distance = Math.sqrt(distance)
187
+ if distance <= slider.size.to_f
188
+ slider.allowDrag = true
189
+ end
190
+ if slider.allowDrag
191
+ slider.drag(event.x, event.y)
192
+ end
193
+ end
194
+
195
+ end
196
+ end
197
+
198
+ if @dragging[:left] == true
199
+ ColorSlider.colorSliders.each do |slider|
200
+ if slider.shown && slider.enabled
201
+
202
+ distance = (event.x-slider.x.to_f) ** 2 + (event.y-slider.y.to_f) ** 2
203
+ distance = Math.sqrt(distance)
204
+
205
+ if distance <= slider.size.to_f * 0.7
206
+ slider.showOptions
207
+ else
208
+ slider.hideOptions
209
+ end
210
+
211
+ if distance >= slider.size * 0.90 && distance <= slider.size * 1.15
212
+ if event.x - slider.x == 0
213
+ event.x += 0.01
214
+ end
215
+ angle = Math.atan((event.y.to_f - slider.y.to_f) / (event.x.to_f - slider.x.to_f)).to_f
216
+ angle = angle.to_f * 180.0/Math::PI
217
+
218
+ if (event.x.to_f - slider.x.to_f) < 0
219
+ angle += 180.0
220
+ end
221
+ if event.y.to_f - slider.y.to_f < 0 && (event.x.to_f - slider.x.to_f) > 0
222
+ angle += 360.0
223
+ end
224
+
225
+ slider.setValue(angle.to_f)
226
+ end
227
+ end
228
+ end
229
+ end
230
+
231
+ end
232
+ end