cyberarm_engine 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28f56ac3d950bdf607b6218c44aa0e680e1cdadb004116c8da15592955a948a2
4
- data.tar.gz: b5f7e956196727056a6c32e67f37c09f56b5175c8ab85387e90eefdcc379a76d
3
+ metadata.gz: 1a107f38b291492d95d048693aec005c4dcf3dc73f601ea300ac952ede787bf2
4
+ data.tar.gz: 1b5a80bb6ba87d35ca5231be6b559020c404e34a48e2c7bda5770f3f83faad72
5
5
  SHA512:
6
- metadata.gz: 31ae41df145e56a7ef1b8587848bc67535cca23255efc73e971f71d41528776de99897324d955e2402f66bb5f7167df580e8434140cbd16827cf822433defe29
7
- data.tar.gz: 866cbdd36ed876356270bec679f08de4345ab340bc754a5bed7e4d00816a2ca27086434c7276f6dcb0226299da80a5964568629ee6aa3d0b14011c1ddf83876b
6
+ metadata.gz: 6f7f836d5b1471a9251735593c5a61e44bcbabe126ff1ef4c92a28b626a8395bfcc8201a6428587b981c30a212485e3d715a4658d28b5697ed84af5ce694e460
7
+ data.tar.gz: a75b1b1260d4e5d4a3ad762d29a39c8bb412d0c786c7368ad331f96400aa9970992573d22746b96fc3f7c177443850f0b4a9f5429295da6ed80c38d64b52e08e
@@ -15,10 +15,10 @@ module CyberarmEngine
15
15
  $window.last_frame_time/1000.0
16
16
  end
17
17
 
18
- def initialize(width = 800, height = 600, fullscreen = false, update_interval = 1000.0/60)
18
+ def initialize(width: 800, height: 600, fullscreen: false, update_interval: 1000.0/60, resizable: false)
19
19
  @show_cursor = false
20
20
 
21
- super(width, height, fullscreen, update_interval)
21
+ super(width, height, fullscreen: fullscreen, update_interval: update_interval, resizable: resizable)
22
22
  $window = self
23
23
  @last_frame_time = Gosu.milliseconds-1
24
24
  @current_frame_time = Gosu.milliseconds
@@ -1,6 +1,5 @@
1
1
  module CyberarmEngine
2
2
  class Vector
3
-
4
3
  def initialize(x = 0, y = 0, z = 0, weight = 0)
5
4
  @x, @y, @z, @weight = x, y, z, weight
6
5
  end
@@ -17,10 +16,6 @@ module CyberarmEngine
17
16
  def weight; @weight; end
18
17
  def weight=(n); @weight = n; end
19
18
 
20
- # def xy=(nx, ny); @x = nx; @y = ny; end
21
- # def xyz=(nx, ny, nz); @x = nx; @y = ny; @z = nz; end
22
- # def xyzw=(nx, ny, nz, nw); @x = nx; @y = ny; @z = nz; @weight = nw; end
23
-
24
19
  def ==(other)
25
20
  if other.is_a?(Numeric)
26
21
  @x == other &&
@@ -35,43 +30,85 @@ module CyberarmEngine
35
30
  end
36
31
  end
37
32
 
33
+ # Performs math operation, excluding @weight
34
+ def operator(function, other)
35
+ if other.is_a?(Numeric)
36
+ Vector.new(
37
+ @x.send(:"#{function}", other),
38
+ @y.send(:"#{function}", other),
39
+ @z.send(:"#{function}", other)
40
+ )
41
+ else
42
+ Vector.new(
43
+ @x.send(:"#{function}", other.x),
44
+ @y.send(:"#{function}", other.y),
45
+ @z.send(:"#{function}", other.z)
46
+ )
47
+ end
48
+ end
49
+
50
+ # Adds Vector and Numberic or Vector and Vector, excluding @weight
38
51
  def +(other)
39
- Vector.new(
40
- @x + other.x,
41
- @y + other.y,
42
- @z + other.z,
43
- @weight + other.weight
44
- )
52
+ operator("+", other)
45
53
  end
46
54
 
55
+ # Subtracts Vector and Numberic or Vector and Vector, excluding @weight
47
56
  def -(other)
48
- Vector.new(
49
- @x - other.x,
50
- @y - other.y,
51
- @z - other.z,
52
- @weight - other.weight
53
- )
57
+ operator("-", other)
54
58
  end
55
59
 
60
+ # Multiplies Vector and Numberic or Vector and Vector, excluding @weight
56
61
  def *(other)
57
- Vector.new(
58
- @x * other.x,
59
- @y * other.y,
60
- @z * other.z,
61
- @weight * other.weight
62
+ operator("*", other)
63
+ end
64
+
65
+ # Divides Vector and Numberic or Vector and Vector, excluding @weight
66
+ def /(other)
67
+ # Duplicated to protect from DivideByZero
68
+ if other.is_a?(Numeric)
69
+ Vector.new(
70
+ (@x == 0 ? 0 : @x / other),
71
+ (@y == 0 ? 0 : @y / other),
72
+ (@z == 0 ? 0 : @z / other)
62
73
  )
74
+ else
75
+ Vector.new(
76
+ (@x == 0 ? 0 : @x / other.x),
77
+ (@y == 0 ? 0 : @y / other.y),
78
+ (@z == 0 ? 0 : @z / other.z)
79
+ )
80
+ end
81
+ end
82
+
83
+ def dot(other)
84
+ product = 0
85
+
86
+ a = self.to_a
87
+ b = other.to_a
88
+
89
+ 3.times do |i|
90
+ product = product + (a[i] * b[i])
63
91
  end
64
92
 
65
- def /(other)
66
- # Endeavors to prevent division by zero
93
+ return product
94
+ end
95
+
96
+ def cross(other)
97
+ a = self.to_a
98
+ b = other.to_a
99
+
67
100
  Vector.new(
68
- @x == 0 || other.x == 0 ? 0 : @x / other.x,
69
- @y == 0 || other.y == 0 ? 0 : @y / other.y,
70
- @z == 0 || other.z == 0 ? 0 : @z / other.z,
71
- @weight == 0 || other.weight == 0 ? 0 : @weight / other.weight
101
+ b[2] * a[1] - b[1] * a[2],
102
+ b[0] * a[2] - b[2] * a[0],
103
+ b[1] * a[0] - b[0] * a[1]
72
104
  )
73
105
  end
74
106
 
107
+ # returns degrees
108
+ def angle(other)
109
+ Math.acos( self.normalized.dot(other.normalized) ) * 180 / Math::PI
110
+ end
111
+
75
112
  # returns magnitude of Vector, ignoring #weight
76
113
  def magnitude
77
114
  Math.sqrt((@x * @x) + (@y * @y) + (@z * @z))
@@ -82,8 +119,38 @@ module CyberarmEngine
82
119
  self / Vector.new(mag, mag, mag)
83
120
  end
84
121
 
122
+ def direction
123
+ # z is pitch
124
+ # y is yaw
125
+ # x is roll
126
+ _x = -Math.sin(@y.degrees_to_radians) * Math.cos(@z.degrees_to_radians)
127
+ _y = Math.sin(@z.degrees_to_radians)
128
+ _z = Math.cos(@y.degrees_to_radians) * Math.cos(@z.degrees_to_radians)
129
+
130
+ Vector.new(_x, _y, _z)
131
+ end
132
+
133
+ def inverse
134
+ Vector.new(1.0 / @x, 1.0 / @y, 1.0 / @z)
135
+ end
136
+
85
137
  def sum
86
- @x + @y + @z + @weight
138
+ @x + @y + @z
139
+ end
140
+
141
+ # 2D distance using X and Y
142
+ def distance(other)
143
+ Math.sqrt((@x-other.x)**2 + (@y-other.y)**2)
144
+ end
145
+
146
+ # 2D distance using X and Z
147
+ def gl_distance2d(other)
148
+ Math.sqrt((@x-other.x)**2 + (@z-other.z)**2)
149
+ end
150
+
151
+ # 3D distance using X, Y, and Z
152
+ def distance3d(other)
153
+ Math.sqrt((@x-other.x)**2 + (@y-other.y)**2 + (@z-other.z)**2)
87
154
  end
88
155
 
89
156
  def to_a
@@ -2,8 +2,8 @@ module CyberarmEngine
2
2
  class Text
3
3
  CACHE = {}
4
4
 
5
- attr_accessor :text, :x, :y, :z, :size, :factor_x, :factor_y, :color, :shadow, :shadow_size, :options
6
- attr_reader :textobject
5
+ attr_accessor :x, :y, :z, :size, :factor_x, :factor_y, :color, :shadow, :shadow_size, :options
6
+ attr_reader :text, :textobject
7
7
 
8
8
  def initialize(text, options={})
9
9
  @text = text || ""
@@ -62,37 +62,49 @@ module CyberarmEngine
62
62
  return font
63
63
  end
64
64
 
65
+ def text=(string)
66
+ @rendered_shadow = nil
67
+ @text = string
68
+ end
69
+
65
70
  def width
66
71
  textobject.text_width(@text)
67
72
  end
68
73
 
69
74
  def height
70
- @text.lines.count * textobject.height
75
+ (@text.lines.count) * textobject.height
71
76
  end
72
77
 
73
78
  def draw
74
79
  if @shadow && !ARGV.join.include?("--no-shadow")
75
- _color = Gosu::Color.rgba(@color.red, @color.green, @color.blue, @shadow_alpha) if @shadow_alpha <= @color.alpha
76
- _color = Gosu::Color.rgba(@color.red, @color.green, @color.blue, @color.alpha) unless @shadow_alpha <= @color.alpha
80
+ @shadow_alpha = 30 if @color.alpha > 30
81
+ @shadow_alpha = @color.alpha if @color.alpha <= 30
82
+ shadow_color = Gosu::Color.rgba(@color.red, @color.green, @color.blue, @shadow_alpha)
77
83
 
78
- @textobject.draw_markup(@text, @x-@shadow_size, @y, @z, @factor_x, @factor_y, _color)
79
- @textobject.draw_markup(@text, @x-@shadow_size, @y-@shadow_size, @z, @factor_x, @factor_y, _color)
84
+ _x = @shadow_size
85
+ _y = @shadow_size
80
86
 
81
- @textobject.draw_markup(@text, @x, @y-@shadow_size, @z, @factor_x, @factor_y, _color)
82
- @textobject.draw_markup(@text, @x+@shadow_size, @y-@shadow_size, @z, @factor_x, @factor_y, _color)
87
+ @rendered_shadow ||= Gosu.render((self.width+(shadow_size*2)).ceil, (self.height+(@shadow_size*2)).ceil) do
88
+ @textobject.draw_markup(@text, _x-@shadow_size, _y, @z)
89
+ @textobject.draw_markup(@text, _x-@shadow_size, _y-@shadow_size, @z)
83
90
 
84
- @textobject.draw_markup(@text, @x, @y+@shadow_size, @z, @factor_x, @factor_y, _color)
85
- @textobject.draw_markup(@text, @x-@shadow_size, @y+@shadow_size, @z, @factor_x, @factor_y, _color)
91
+ @textobject.draw_markup(@text, _x, _y-@shadow_size, @z, @factor_x)
92
+ @textobject.draw_markup(@text, _x+@shadow_size, _y-@shadow_size, @z)
86
93
 
87
- @textobject.draw_markup(@text, @x+@shadow_size, @y, @z, @factor_x, @factor_y, _color)
88
- @textobject.draw_markup(@text, @x+@shadow_size, @y+@shadow_size, @z, @factor_x, @factor_y, _color)
94
+ @textobject.draw_markup(@text, _x, _y+@shadow_size, @z)
95
+ @textobject.draw_markup(@text, _x-@shadow_size, _y+@shadow_size, @z)
96
+
97
+ @textobject.draw_markup(@text, _x+@shadow_size, _y, @z)
98
+ @textobject.draw_markup(@text, _x+@shadow_size, _y+@shadow_size, @z)
99
+ end
100
+ @rendered_shadow.draw(@x-@shadow_size, @y-@shadow_size, @z, @factor_x, @factor_y, shadow_color)
89
101
  end
90
102
 
91
103
  @textobject.draw_markup(@text, @x, @y, @z, @factor_x, @factor_y, @color)
92
104
  end
93
105
 
94
106
  def alpha=(n)
95
- @color = Gosu::Color.new(@color.red, @color.green, @color.blue, n)
107
+ @color = Gosu::Color.rgba(@color.red, @color.green, @color.blue, n)
96
108
  end
97
109
 
98
110
  def alpha
@@ -186,6 +186,22 @@ module CyberarmEngine
186
186
  @border_canvas.update
187
187
  end
188
188
 
189
+ def root
190
+ unless @root && @root.parent.nil?
191
+ @root = parent
192
+
193
+ loop do
194
+ if @root.parent.nil?
195
+ break
196
+ else
197
+ @root = @root.parent
198
+ end
199
+ end
200
+ end
201
+
202
+ @root
203
+ end
204
+
189
205
  def recalculate
190
206
  raise "#{self.class}#recalculate was not overridden!"
191
207
  end
@@ -193,5 +209,9 @@ module CyberarmEngine
193
209
  def value
194
210
  raise "#{self.class}#value was not overridden!"
195
211
  end
212
+
213
+ def value=(value)
214
+ raise "#{self.class}#value= was not overridden!"
215
+ end
196
216
  end
197
217
  end
@@ -30,5 +30,14 @@ module CyberarmEngine
30
30
  def value
31
31
  @text.text
32
32
  end
33
+
34
+ def value=(value)
35
+ @text.text = value
36
+
37
+ old_width, old_height = width, height
38
+ recalculate
39
+
40
+ root.recalculate if old_width != width || old_height != height
41
+ end
33
42
  end
34
43
  end
@@ -1,4 +1,4 @@
1
1
  module CyberarmEngine
2
2
  NAME = "InDev"
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cyberarm_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyberarm
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-31 00:00:00.000000000 Z
11
+ date: 2019-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu