gosu_android 0.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/LICENSE +19 -0
- data/README.md +35 -0
- data/bin/gosu_android +11 -0
- data/examples/arkanoid.rb +105 -0
- data/examples/pong_activity.rb +99 -0
- data/examples/test-game.rb +114 -0
- data/lib/gosu.java.jar +0 -0
- data/lib/gosu_android.rb +1 -0
- data/lib/gosu_android/audio/audio.rb +159 -0
- data/lib/gosu_android/commands/base.rb +200 -0
- data/lib/gosu_android/description.rb +5 -0
- data/lib/gosu_android/graphics/bitmap.rb +12 -0
- data/lib/gosu_android/graphics/bitmapUtils.rb +51 -0
- data/lib/gosu_android/graphics/blockAllocator.rb +107 -0
- data/lib/gosu_android/graphics/color.rb +27 -0
- data/lib/gosu_android/graphics/common.rb +21 -0
- data/lib/gosu_android/graphics/drawOp.rb +6 -0
- data/lib/gosu_android/graphics/drawOpQueue.rb +39 -0
- data/lib/gosu_android/graphics/font.rb +61 -0
- data/lib/gosu_android/graphics/graphics.rb +227 -0
- data/lib/gosu_android/graphics/graphicsBase.rb +27 -0
- data/lib/gosu_android/graphics/image.rb +151 -0
- data/lib/gosu_android/graphics/imageData.rb +23 -0
- data/lib/gosu_android/graphics/largeImageData.rb +116 -0
- data/lib/gosu_android/graphics/renderState.rb +5 -0
- data/lib/gosu_android/graphics/texChunk.rb +68 -0
- data/lib/gosu_android/graphics/texture.rb +86 -0
- data/lib/gosu_android/input/buttons.rb +128 -0
- data/lib/gosu_android/input/input.rb +120 -0
- data/lib/gosu_android/main-window.rb +314 -0
- data/lib/gosu_android/math.rb +21 -0
- data/lib/gosu_android/physics/physicsManager.rb +57 -0
- data/lib/gosu_android/physics/physicsObject.rb +113 -0
- data/lib/gosu_android/requires.rb +40 -0
- data/lib/gosu_android/timing.rb +8 -0
- data/lib/gosu_android/version.rb +3 -0
- data/res/drawable-nodpi/ball.png +0 -0
- data/res/drawable-nodpi/bar.png +0 -0
- data/res/drawable-nodpi/bar_hor.png +0 -0
- data/res/drawable-nodpi/character_atlas8.png +0 -0
- data/res/drawable-nodpi/ship.png +0 -0
- data/res/drawable-nodpi/space.png +0 -0
- data/res/drawable-nodpi/star.png +0 -0
- data/res/raw/beep.wav +0 -0
- data/res/raw/chriss_onac_tempo_red.mp3 +0 -0
- metadata +127 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
module Gosu
|
2
|
+
#Contains information about the underlying OpenGL texture and the
|
3
|
+
#u/v space used for image data. Can be retrieved from some images
|
4
|
+
#to use them in OpenGL operations.
|
5
|
+
class GLTexInfo < Struct.new(:tex_name, :left, :right, :top, :bottom); end
|
6
|
+
|
7
|
+
#The ImageData class is an abstract base class for drawable images.
|
8
|
+
#Instances of classes derived by ImageData are usually returned by
|
9
|
+
#Graphics::createImage and usually only used to implement drawing
|
10
|
+
#primitives like Image, which then provide a more specialized and
|
11
|
+
#intuitive drawing interface.
|
12
|
+
class ImageData
|
13
|
+
def width; end
|
14
|
+
def height; end
|
15
|
+
|
16
|
+
def draw( x1, y1, c1, x2, y2, c2, x3, y3, c3, x4, y4, c4, z, mode);
|
17
|
+
end
|
18
|
+
|
19
|
+
def gl_tex_info; end
|
20
|
+
def to_bitmap; end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'gosu_android/graphics/imageData'
|
2
|
+
|
3
|
+
module Gosu
|
4
|
+
|
5
|
+
class LargeImageData < ImageData
|
6
|
+
def initilialize(graphics, source, part_width, part_height, border_flags)
|
7
|
+
@full_width = source.width()
|
8
|
+
@full_height = source.height()
|
9
|
+
@parts_x = (1.0 * source.width() / @part_width).ceil.truncate
|
10
|
+
@parts_y = (1.0 * source.height() / @part_height).ceil.truncate
|
11
|
+
@part_width = part_width
|
12
|
+
@part_height = part_height
|
13
|
+
@graphics = graphics
|
14
|
+
|
15
|
+
@parts = Array.new(@parts_x * @parts_y)
|
16
|
+
|
17
|
+
@parts_y.times do |y|
|
18
|
+
@parts_x.times do |x|
|
19
|
+
#The right-most parts don't necessarily have the full width.
|
20
|
+
src_width = @part_width
|
21
|
+
if (x == @parts_x - 1 and source.width() % @part_width != 0)
|
22
|
+
src_width = source.width() % @part_width
|
23
|
+
end
|
24
|
+
#Same for the parts on the bottom.
|
25
|
+
src_height = @part_height
|
26
|
+
if (y == @parts_y - 1 and source.height() % @part_height != 0)
|
27
|
+
src_height = source.height() % @part_height
|
28
|
+
end
|
29
|
+
localBorderFlags = BF_TILEABLE
|
30
|
+
if (x == 0)
|
31
|
+
localBorderFlags = (localBorderFlags & ~BF_TILEABLE_LEFT) | (borderFlags & BF_TILEABLE_LEFT)
|
32
|
+
end
|
33
|
+
if (x == @parts_x - 1)
|
34
|
+
localBorderFlags = (localBorderFlags & ~BF_TILEABLE_RIGHT) | (borderFlags & BF_TILEABLE_RIGHT)
|
35
|
+
end
|
36
|
+
if (y == 0)
|
37
|
+
localBorderFlags = (localBorderFlags & ~BF_TILEABLE_TOP) | (borderFlags & BF_TILEABLE_TOP)
|
38
|
+
end
|
39
|
+
if (y == @parts_y - 1)
|
40
|
+
localBorderFlags = (localBorderFlags & ~BF_TILEABLE_BOTTOM) | (borderFlags & BF_TILEABLE_BOTTOM)
|
41
|
+
end
|
42
|
+
|
43
|
+
@parts[y * @parts_x + x] = @graphics.create_image(source, x * @part_width, y * @part_height, src_width, src_height, localBorderFlags)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def width
|
49
|
+
@full_width
|
50
|
+
end
|
51
|
+
|
52
|
+
def height
|
53
|
+
@full_height
|
54
|
+
end
|
55
|
+
|
56
|
+
def ipl(a,b,ratio)
|
57
|
+
a+(b-a)*ratio
|
58
|
+
end
|
59
|
+
|
60
|
+
def draw( x1, y1, c1, x2, y2, c2, x3, y3, c3, x4, y4, c4, z, mode)
|
61
|
+
|
62
|
+
if Gosu::reorder_coordinates_if_necessary(x1, y1, x2, y2, x3, y3, c3, x4, y4, c4)
|
63
|
+
x3, y3, c3, x4, y4, c4 = x4, y4,c4, x3, y3, c3
|
64
|
+
end
|
65
|
+
|
66
|
+
c = Color::NONE
|
67
|
+
|
68
|
+
@parts_y.times do |py|
|
69
|
+
@parts_x.times do |px|
|
70
|
+
part = @parts[py * @parts_x + px];
|
71
|
+
|
72
|
+
rel_xl = (px.to_f * @part_width) / width
|
73
|
+
rel_xr = (px.to_f * @part_width + part.width) / width
|
74
|
+
rel_yt = (py.to_f * @part_height) / height
|
75
|
+
rel_yb = (py.to_f * @part_height + part.height) / height
|
76
|
+
|
77
|
+
abs_xtl = ipl(ipl(x1, x3, rel_yt), ipl(x2, x4, rel_yt), rel_xl)
|
78
|
+
abs_xtr = ipl(ipl(x1, x3, rel_yt), ipl(x2, x4, rel_yt), rel_xr)
|
79
|
+
abs_xbl = ipl(ipl(x1, x3, rel_yb), ipl(x2, x4, rel_yb), rel_xl)
|
80
|
+
abs_xbr = ipl(ipl(x1, x3, rel_yb), ipl(x2, x4, rel_yb), rel_xr)
|
81
|
+
|
82
|
+
abs_ytl = ipl(ipl(y1, y3, rel_yt), ipl(y2, y4, rel_yt), rel_xl)
|
83
|
+
abs_ytr = ipl(ipl(y1, y3, rel_yt), ipl(y2, y4, rel_yt), rel_xr)
|
84
|
+
abs_ybl = ipl(ipl(y1, y3, rel_yb), ipl(y2, y4, rel_yb), rel_xl)
|
85
|
+
abs_ybr = ipl(ipl(y1, y3, rel_yb), ipl(y2, y4, rel_yb), rel_xr)
|
86
|
+
|
87
|
+
part.draw(abs_xtl, abs_ytl, c, abs_xtr, abs_ytr, c,
|
88
|
+
abs_xbl, abs_ybl, c, abs_xbr, abs_ybr, c, z, mode)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
def gl_tex_info
|
95
|
+
0
|
96
|
+
end
|
97
|
+
|
98
|
+
def to_bitmap()
|
99
|
+
bitmap = Bitmap.new(width, height)
|
100
|
+
@parts_y.times do |y|
|
101
|
+
@parts_x.times do |x|
|
102
|
+
bitmap.insert(@parts[y * @parts_x + x].to_bitmap, x * @part_width, y * @part_height)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
bitmap
|
106
|
+
end
|
107
|
+
|
108
|
+
def insert(bitmap, at_x, at_y)
|
109
|
+
@parts_y.times do |y|
|
110
|
+
@parts_x.times do |x|
|
111
|
+
@parts[y * @parts_x + x].insert(bitmap, at_x - x* @part_width, at_y -y * part_height)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'gosu_android/graphics/imageData'
|
2
|
+
require 'gosu_android/graphics/common'
|
3
|
+
|
4
|
+
module Gosu
|
5
|
+
class TexChunk < ImageData
|
6
|
+
def initialize(graphics, queues, texture, x, y, w, h, padding)
|
7
|
+
#Define object destructor
|
8
|
+
ObjectSpace.define_finalizer(self,
|
9
|
+
self.class.method(:finalize).to_proc)
|
10
|
+
@graphics = graphics
|
11
|
+
@queues = queues
|
12
|
+
@texture = texture
|
13
|
+
@x = x
|
14
|
+
@y = y
|
15
|
+
@w = w
|
16
|
+
@h = h
|
17
|
+
@padding = padding
|
18
|
+
@info = GLTexInfo.new
|
19
|
+
@info.tex_name = @texture.tex_name
|
20
|
+
#Force float division
|
21
|
+
@info.left = @x.to_f / @texture.size
|
22
|
+
@info.top = @y.to_f / @texture.size
|
23
|
+
@info.right = (@x.to_f + @w) / @texture.size
|
24
|
+
@info.bottom = (@y.to_f + @h) / @texture.size
|
25
|
+
end
|
26
|
+
|
27
|
+
def TexChunk.finalize(id)
|
28
|
+
@texture.free(@x - @padding, @y - @padding)
|
29
|
+
end
|
30
|
+
|
31
|
+
def width
|
32
|
+
@w
|
33
|
+
end
|
34
|
+
|
35
|
+
def height
|
36
|
+
@h
|
37
|
+
end
|
38
|
+
|
39
|
+
def draw( x1, y1, c1, x2, y2, c2, x3, y3, c3, x4, y4, c4, z, mode)
|
40
|
+
op = @queues.op_pool.newDrawOp
|
41
|
+
op.render_state.tex_name = @info.tex_name
|
42
|
+
op.render_state.mode = mode
|
43
|
+
|
44
|
+
if Gosu::reorder_coordinates_if_necessary(x1, y1, x2, y2, x3, y3, c3, x4, y4, c4)
|
45
|
+
x3, y3, c3, x4, y4, c4 = x4, y4,c4, x3, y3, c3
|
46
|
+
end
|
47
|
+
op.vertices_or_block_index = 4
|
48
|
+
op.vertices[0].set(x1, y1, c1)
|
49
|
+
op.vertices[1].set(x2, y2, c2)
|
50
|
+
op.vertices[2].set(x3, y3, c3)
|
51
|
+
op.vertices[3].set(x4, y4, c4)
|
52
|
+
|
53
|
+
op.left = @info.left
|
54
|
+
op.top = @info.top
|
55
|
+
op.right = @info.right
|
56
|
+
op.bottom = @info.bottom
|
57
|
+
|
58
|
+
op.z = z
|
59
|
+
@queues.schedule_draw_op(op)
|
60
|
+
end
|
61
|
+
|
62
|
+
def glTexInfo
|
63
|
+
@info
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_bitmap; end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'gosu_android/graphics/blockAllocator'
|
2
|
+
require 'gosu_android/graphics/texChunk'
|
3
|
+
require 'gosu_android/requires'
|
4
|
+
|
5
|
+
module Gosu
|
6
|
+
class Texture
|
7
|
+
|
8
|
+
def initialize(size, gl)
|
9
|
+
#Set finalize
|
10
|
+
ObjectSpace.define_finalizer(self,
|
11
|
+
self.class.method(:finalize).to_proc)
|
12
|
+
@size = size
|
13
|
+
@allocator = BlockAllocator.new(@size, @size)
|
14
|
+
@num = 0
|
15
|
+
@gl = gl
|
16
|
+
@name = [0].to_java(:int)
|
17
|
+
@gl.glGenTextures(1, @name, 0)
|
18
|
+
if @name[0] == -1
|
19
|
+
raise "Couldn't create OpenGL texture"
|
20
|
+
end
|
21
|
+
@gl.glBindTexture(JavaImports::GL10::GL_TEXTURE_2D, @name[0])
|
22
|
+
|
23
|
+
@gl.glTexImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, JavaImports::GL10::GL_RGBA, @allocator.width,
|
24
|
+
@allocator.height, 0, JavaImports::GL10::GL_RGBA, JavaImports::GL10::GL_UNSIGNED_BYTE, nil)
|
25
|
+
=begin
|
26
|
+
#TODO Should create an empty texture to be filled later
|
27
|
+
pixel = [0]
|
28
|
+
pbb = JavaImports::ByteBuffer.allocateDirect(pixel.length*4)
|
29
|
+
pbb.order(JavaImports::ByteOrder.nativeOrder)
|
30
|
+
pixel_buffer = pbb.asIntBuffer
|
31
|
+
pixel_buffer.put(pixel.to_java(:int))
|
32
|
+
pixel_buffer.position(0)
|
33
|
+
JavaImports::GLUtils.texImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, 4, @allocator.width, @allocator.height, 0,
|
34
|
+
JavaImports::GL10::GL_RGBA, JavaImports::GL10::GL_UNSIGNED_BYTE, pixel_buffer)
|
35
|
+
|
36
|
+
@gl.glTexImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, 4, @allocator.width, @allocator.height, 0,
|
37
|
+
JavaImports::GL10::GL_RGBA, JavaImports::GL10::GL_UNSIGNED_BYTE, pixel_buffer)
|
38
|
+
|
39
|
+
@gl.glTexParameterf(JavaImports::GL10::GL_TEXTURE_2D,
|
40
|
+
JavaImports::GL10::GL_TEXTURE_MIN_FILTER, JavaImports::GL10::GL_LINEAR)
|
41
|
+
@gl.glTexParameteri(JavaImports::GL10::GL_TEXTURE_2D,
|
42
|
+
JavaImports::GL10::GL_TEXTURE_WRAP_S, JavaImports::GL10::GL_CLAMP_TO_EDGE)
|
43
|
+
@gl.glTexParameteri(JavaImports::GL10::GL_TEXTURE_2D,
|
44
|
+
JavaImports::GL10::GL_TEXTURE_WRAP_T, JavaImports::GL10::GL_CLAMP_TO_EDGE)
|
45
|
+
=end
|
46
|
+
@gl.glTexParameterf(JavaImports::GL10::GL_TEXTURE_2D, JavaImports::GL10::GL_TEXTURE_MIN_FILTER, JavaImports::GL10::GL_NEAREST)
|
47
|
+
@gl.glTexParameterf(JavaImports::GL10::GL_TEXTURE_2D, JavaImports::GL10::GL_TEXTURE_MAG_FILTER, JavaImports::GL10::GL_LINEAR)
|
48
|
+
end
|
49
|
+
|
50
|
+
def Texture.finalize(id)
|
51
|
+
@gl.glDeleteTextures(1, @name)
|
52
|
+
end
|
53
|
+
|
54
|
+
def tex_name
|
55
|
+
@name[0]
|
56
|
+
end
|
57
|
+
|
58
|
+
def size
|
59
|
+
@allocator.width
|
60
|
+
end
|
61
|
+
|
62
|
+
def try_alloc(graphics, queues, ptr, bmp, padding)
|
63
|
+
alloc_info = @allocator.alloc(bmp.width, bmp.height)
|
64
|
+
if (not alloc_info[0])
|
65
|
+
return nil
|
66
|
+
end
|
67
|
+
block = alloc_info[1]
|
68
|
+
result = TexChunk.new(graphics, queues, ptr, block.left + padding, block.top + padding,
|
69
|
+
block.width - 2 * padding, block.height - 2 * padding, padding)
|
70
|
+
|
71
|
+
@gl.glTexSubImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, block.left, block.top, block.width, block.height,
|
72
|
+
Color::GL_FORMAT, JavaImports::GL10::GL_UNSIGNED_BYTE, bmp.data_java)
|
73
|
+
#@gl.glBindTexture(JavaImports::GL10::GL_TEXTURE_2D, @name[0])
|
74
|
+
#JavaImports::GLUtils.texImage2D(JavaImports::GL10::GL_TEXTURE_2D, 0, bmp.to_open_gl, 0)
|
75
|
+
|
76
|
+
@num += 1
|
77
|
+
result
|
78
|
+
end
|
79
|
+
|
80
|
+
def free(x, y)
|
81
|
+
@allocator.free(x, y)
|
82
|
+
@num -= 1
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'gosu_android/requires'
|
2
|
+
|
3
|
+
|
4
|
+
module Gosu
|
5
|
+
Kb0 = JavaImports::KeyEvent::KEYCODE_0
|
6
|
+
Kb1 = JavaImports::KeyEvent::KEYCODE_1
|
7
|
+
Kb2 = JavaImports::KeyEvent::KEYCODE_2
|
8
|
+
Kb3 = JavaImports::KeyEvent::KEYCODE_3
|
9
|
+
Kb4 = JavaImports::KeyEvent::KEYCODE_4
|
10
|
+
Kb5 = JavaImports::KeyEvent::KEYCODE_5
|
11
|
+
Kb6 = JavaImports::KeyEvent::KEYCODE_6
|
12
|
+
Kb7 = JavaImports::KeyEvent::KEYCODE_7
|
13
|
+
Kb8 = JavaImports::KeyEvent::KEYCODE_8
|
14
|
+
Kb9 = JavaImports::KeyEvent::KEYCODE_9
|
15
|
+
KbA = JavaImports::KeyEvent::KEYCODE_A
|
16
|
+
KbB = JavaImports::KeyEvent::KEYCODE_B
|
17
|
+
KbC = JavaImports::KeyEvent::KEYCODE_C
|
18
|
+
KbD = JavaImports::KeyEvent::KEYCODE_D
|
19
|
+
KbE = JavaImports::KeyEvent::KEYCODE_E
|
20
|
+
KbF = JavaImports::KeyEvent::KEYCODE_F
|
21
|
+
KbG = JavaImports::KeyEvent::KEYCODE_G
|
22
|
+
KbH = JavaImports::KeyEvent::KEYCODE_H
|
23
|
+
KbI = JavaImports::KeyEvent::KEYCODE_I
|
24
|
+
KbJ = JavaImports::KeyEvent::KEYCODE_J
|
25
|
+
KbK = JavaImports::KeyEvent::KEYCODE_K
|
26
|
+
KbL = JavaImports::KeyEvent::KEYCODE_L
|
27
|
+
KbM = JavaImports::KeyEvent::KEYCODE_M
|
28
|
+
KbN = JavaImports::KeyEvent::KEYCODE_N
|
29
|
+
KbO = JavaImports::KeyEvent::KEYCODE_O
|
30
|
+
KbP = JavaImports::KeyEvent::KEYCODE_P
|
31
|
+
KbQ = JavaImports::KeyEvent::KEYCODE_Q
|
32
|
+
KbR = JavaImports::KeyEvent::KEYCODE_R
|
33
|
+
KbS = JavaImports::KeyEvent::KEYCODE_S
|
34
|
+
KbT = JavaImports::KeyEvent::KEYCODE_T
|
35
|
+
KbU = JavaImports::KeyEvent::KEYCODE_U
|
36
|
+
KbV = JavaImports::KeyEvent::KEYCODE_V
|
37
|
+
KbW = JavaImports::KeyEvent::KEYCODE_W
|
38
|
+
KbX = JavaImports::KeyEvent::KEYCODE_X
|
39
|
+
KbY = JavaImports::KeyEvent::KEYCODE_Y
|
40
|
+
KbZ = JavaImports::KeyEvent::KEYCODE_Z
|
41
|
+
KbBackspace = JavaImports::KeyEvent::KEYCODE_DEL
|
42
|
+
KbDelete = JavaImports::KeyEvent::KEYCODE_DEL
|
43
|
+
KbDown = JavaImports::KeyEvent::KEYCODE_DPAD_DOWN
|
44
|
+
# On Numpad
|
45
|
+
KbHome = JavaImports::KeyEvent::KEYCODE_HOME
|
46
|
+
KbLeft = JavaImports::KeyEvent::KEYCODE_DPAD_LEFT
|
47
|
+
KbLeftAlt = JavaImports::KeyEvent::KEYCODE_ALT_LEFT
|
48
|
+
KbLeftShift = JavaImports::KeyEvent::KEYCODE_SHIFT_LEFT
|
49
|
+
KbPageDown = JavaImports::KeyEvent::KEYCODE_PAGE_DOWN
|
50
|
+
KbPageUp = JavaImports::KeyEvent::KEYCODE_PAGE_UP
|
51
|
+
# Above the right shift key
|
52
|
+
KbReturn = JavaImports::KeyEvent::KEYCODE_ENTER
|
53
|
+
KbRight = JavaImports::KeyEvent::KEYCODE_DPAD_RIGHT
|
54
|
+
KbRightAlt = JavaImports::KeyEvent::KEYCODE_ALT_RIGHT
|
55
|
+
#KbRightControl = JavaImports::KeyEvent::KEYCODE_CTRL_RIGHT
|
56
|
+
KbRightShift = JavaImports::KeyEvent::KEYCODE_SHIFT_RIGHT
|
57
|
+
KbSpace = JavaImports::KeyEvent::KEYCODE_SPACE
|
58
|
+
KbTab = JavaImports::KeyEvent::KEYCODE_TAB
|
59
|
+
KbUp = JavaImports::KeyEvent::KEYCODE_DPAD_UP
|
60
|
+
#TODO Fix mouse buttons, Mouse access to motion event
|
61
|
+
#MsLeft = JavaImports::MotionEvent::BUTTON_PRIMARY
|
62
|
+
#MsMiddle = JavaImports::MotionEvent::BUTTON_TERTIARY
|
63
|
+
#MsRight = JavaImports::MotionEvent::BUTTON_SECONDARY
|
64
|
+
#TODO Axis wheel is not right
|
65
|
+
#MsWheelDown = JavaImports::MotionEvent::AXIS_WHEEL
|
66
|
+
#MsWheelUp = JavaImports::MotionEvent::AXIS_WHEEL
|
67
|
+
NoButton = 0xffffffff
|
68
|
+
#Not Supported GpDown, GpLeft, GpRight, GpUp
|
69
|
+
|
70
|
+
#Load supported buttons on android above 3.0.0
|
71
|
+
if android.os.Build::VERSION::SDK_INT >= 11
|
72
|
+
KbEnd = JavaImports::KeyEvent::KEYCODE_MOVE_END
|
73
|
+
# On Numpad
|
74
|
+
KbEnter = JavaImports::KeyEvent::KEYCODE_NUMPAD_ENTER
|
75
|
+
KbEscape = JavaImports::KeyEvent::KEYCODE_ESCAPE
|
76
|
+
KbF1 = JavaImports::KeyEvent::KEYCODE_F1
|
77
|
+
KbF10 = JavaImports::KeyEvent::KEYCODE_F10
|
78
|
+
KbF11 = JavaImports::KeyEvent::KEYCODE_F11
|
79
|
+
KbF12 = JavaImports::KeyEvent::KEYCODE_F12
|
80
|
+
KbF2 = JavaImports::KeyEvent::KEYCODE_F2
|
81
|
+
KbF3 = JavaImports::KeyEvent::KEYCODE_F3
|
82
|
+
KbF4 = JavaImports::KeyEvent::KEYCODE_F4
|
83
|
+
KbF5 = JavaImports::KeyEvent::KEYCODE_F5
|
84
|
+
KbF6 = JavaImports::KeyEvent::KEYCODE_F6
|
85
|
+
KbF7 = JavaImports::KeyEvent::KEYCODE_F7
|
86
|
+
KbF8 = JavaImports::KeyEvent::KEYCODE_F8
|
87
|
+
KbF9 = JavaImports::KeyEvent::KEYCODE_F9
|
88
|
+
KbInsert = JavaImports::KeyEvent::KEYCODE_INSERT
|
89
|
+
KbLeftControl = JavaImports::KeyEvent::KEYCODE_CTRL_LEFT
|
90
|
+
KbNumpad0 = JavaImports::KeyEvent::KEYCODE_NUMPAD_0
|
91
|
+
KbNumpad1 = JavaImports::KeyEvent::KEYCODE_NUMPAD_1
|
92
|
+
KbNumpad2 = JavaImports::KeyEvent::KEYCODE_NUMPAD_2
|
93
|
+
KbNumpad3 = JavaImports::KeyEvent::KEYCODE_NUMPAD_3
|
94
|
+
KbNumpad4 = JavaImports::KeyEvent::KEYCODE_NUMPAD_4
|
95
|
+
KbNumpad5 = JavaImports::KeyEvent::KEYCODE_NUMPAD_5
|
96
|
+
KbNumpad6 = JavaImports::KeyEvent::KEYCODE_NUMPAD_6
|
97
|
+
KbNumpad7 = JavaImports::KeyEvent::KEYCODE_NUMPAD_7
|
98
|
+
KbNumpad8 = JavaImports::KeyEvent::KEYCODE_NUMPAD_8
|
99
|
+
KbNumpad9 = JavaImports::KeyEvent::KEYCODE_NUMPAD_9
|
100
|
+
KbNumpadAdd = JavaImports::KeyEvent::KEYCODE_NUMPAD_ADD
|
101
|
+
KbNumpadDivide = JavaImports::KeyEvent::KEYCODE_NUMPAD_DIVIDE
|
102
|
+
KbNumpadMultiply = JavaImports::KeyEvent::KEYCODE_NUMPAD_MULTIPLY
|
103
|
+
KbNumpadSubtract = JavaImports::KeyEvent::KEYCODE_NUMPAD_SUBTRACT
|
104
|
+
# Above the right shift key
|
105
|
+
KbRightControl = JavaImports::KeyEvent::KEYCODE_CTRL_RIGHT
|
106
|
+
end
|
107
|
+
|
108
|
+
#Load supported buttons on android above 4.0.0
|
109
|
+
if android.os.Build::VERSION::SDK_INT >= 15
|
110
|
+
Game pad
|
111
|
+
GpButton0 = JavaImports::KeyEvent::KEYCODE_BUTTON_1
|
112
|
+
GpButton1 = JavaImports::KeyEvent::KEYCODE_BUTTON_2
|
113
|
+
GpButton10 = JavaImports::KeyEvent::KEYCODE_BUTTON_11
|
114
|
+
GpButton11 = JavaImports::KeyEvent::KEYCODE_BUTTON_12
|
115
|
+
GpButton12 = JavaImports::KeyEvent::KEYCODE_BUTTON_13
|
116
|
+
GpButton13 = JavaImports::KeyEvent::KEYCODE_BUTTON_14
|
117
|
+
GpButton14 = JavaImports::KeyEvent::KEYCODE_BUTTON_15
|
118
|
+
GpButton15 = JavaImports::KeyEvent::KEYCODE_BUTTON_16
|
119
|
+
GpButton2 = JavaImports::KeyEvent::KEYCODE_BUTTON_3
|
120
|
+
GpButton3 = JavaImports::KeyEvent::KEYCODE_BUTTON_4
|
121
|
+
GpButton4 = JavaImports::KeyEvent::KEYCODE_BUTTON_5
|
122
|
+
GpButton5 = JavaImports::KeyEvent::KEYCODE_BUTTON_6
|
123
|
+
GpButton6 = JavaImports::KeyEvent::KEYCODE_BUTTON_7
|
124
|
+
GpButton7 = JavaImports::KeyEvent::KEYCODE_BUTTON_8
|
125
|
+
GpButton8 = JavaImports::KeyEvent::KEYCODE_BUTTON_9
|
126
|
+
GpButton9 = JavaImports::KeyEvent::KEYCODE_BUTTON_10
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'gosu_android/input/buttons'
|
2
|
+
|
3
|
+
module Gosu
|
4
|
+
class Button
|
5
|
+
attr_reader :id
|
6
|
+
def initialize(*args)
|
7
|
+
case args.length
|
8
|
+
when 0
|
9
|
+
@id = NoButton
|
10
|
+
when 1
|
11
|
+
@id = args[0]
|
12
|
+
else
|
13
|
+
raise ArgumentError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Tests whether two Buttons identify the same physical button.
|
18
|
+
def == other
|
19
|
+
self.id == other.id
|
20
|
+
end
|
21
|
+
|
22
|
+
def > other
|
23
|
+
self.id > other.id
|
24
|
+
end
|
25
|
+
|
26
|
+
def < other
|
27
|
+
self.id < other.id
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Struct that saves information about a touch on the surface of a multi-
|
32
|
+
# touch device.
|
33
|
+
class Touch < Struct.new(:id, :x, :y); end
|
34
|
+
|
35
|
+
|
36
|
+
# Manages initialization and shutdown of the input system. Only one Input
|
37
|
+
# instance can exist per application.
|
38
|
+
class Input
|
39
|
+
|
40
|
+
def initialize(display, window)
|
41
|
+
@display = display
|
42
|
+
@window = window
|
43
|
+
@touch_event_list = []
|
44
|
+
@key_event_list = []
|
45
|
+
@id = 0
|
46
|
+
end
|
47
|
+
|
48
|
+
def feed_touch_event(event)
|
49
|
+
@touch_event_list.push event
|
50
|
+
end
|
51
|
+
|
52
|
+
def feed_key_event(keyCode, event)
|
53
|
+
@key_event_list.push [keyCode, event]
|
54
|
+
end
|
55
|
+
|
56
|
+
# Returns the character a button usually produces, or 0.
|
57
|
+
def id_to_char(btn); end
|
58
|
+
|
59
|
+
# Returns the button that has to be pressed to produce the
|
60
|
+
# given character, or noButton.
|
61
|
+
def char_to_id(ch); end
|
62
|
+
|
63
|
+
# Returns true if a button is currently pressed.
|
64
|
+
# Updated every tick.
|
65
|
+
def down(btn); end
|
66
|
+
|
67
|
+
# Returns the horizontal position of the mouse relative to the top
|
68
|
+
# left corner of the window given to Input's constructor.
|
69
|
+
def mouseX; end
|
70
|
+
|
71
|
+
# Returns true if a button is currently pressed.
|
72
|
+
# Updated every tick.
|
73
|
+
def mouseY; end
|
74
|
+
|
75
|
+
# Immediately moves the mouse as far towards the desired position
|
76
|
+
# as possible. x and y are relative to the window just as in the mouse
|
77
|
+
# position accessors.
|
78
|
+
def set_mouse_position(x, y); end
|
79
|
+
|
80
|
+
# Undocumented for the moment. Also applies to currentTouches().
|
81
|
+
def set_mouse_factors(factorX, factorY); end
|
82
|
+
|
83
|
+
# Currently known touches.
|
84
|
+
def currentTouches; end
|
85
|
+
|
86
|
+
# Accelerometer positions in all three dimensions (smoothened).
|
87
|
+
def accelerometerX; end
|
88
|
+
def accelerometerY; end
|
89
|
+
def accelerometerZ; end
|
90
|
+
|
91
|
+
# Collects new information about which buttons are pressed, where the
|
92
|
+
# mouse is and calls onButtonUp/onButtonDown, if assigned.
|
93
|
+
def update
|
94
|
+
@touch_event_list.each do |touch_event|
|
95
|
+
touch_event.getPointerCount.times do |index|
|
96
|
+
touch = Touch.new(touch_event. getPointerId(index), touch_event.getX(index), touch_event.getY(index))
|
97
|
+
case touch_event.getAction
|
98
|
+
when JavaImports::MotionEvent::ACTION_DOWN
|
99
|
+
@window.touch_began(touch)
|
100
|
+
when JavaImports::MotionEvent::ACTION_MOVE
|
101
|
+
@window.touch_moved(touch)
|
102
|
+
when JavaImports::MotionEvent::ACTION_UP
|
103
|
+
@window.touch_ended(touch)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
@touch_event_list = []
|
108
|
+
end
|
109
|
+
|
110
|
+
# Assignable events that are called by update. You can bind these to your own functions.
|
111
|
+
# If you use the Window class, it will assign forward these to its own methods.
|
112
|
+
def button_down; end
|
113
|
+
def button_up; end
|
114
|
+
|
115
|
+
# Returns the currently active TextInput instance, or 0.
|
116
|
+
def text_input; end
|
117
|
+
# Sets the currently active TextInput, or clears it (input = 0).
|
118
|
+
def set_text_input(input); end
|
119
|
+
end
|
120
|
+
end
|