raylib-bindings 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +22 -0
- data/LICENSE.txt +1 -1
- data/README.md +16 -5
- data/examples/template.rb +24 -22
- data/lib/config.rb +98 -0
- data/lib/libraylib.dll +0 -0
- data/lib/libraylib.dylib +0 -0
- data/lib/physac.dll +0 -0
- data/lib/physac.rb +157 -113
- data/lib/raygui.dll +0 -0
- data/lib/raygui.rb +439 -205
- data/lib/raylib.rb +26 -145
- data/lib/raylib_helper.rb +419 -0
- data/lib/raylib_main.rb +3697 -2003
- data/lib/raymath.rb +672 -351
- data/lib/rlgl.rb +1043 -638
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec140a3aeb14467dddc0851eb6dc9b26f1e189955eda32aede4cdb9068163d2a
|
4
|
+
data.tar.gz: 9edeefc3c423bb8436b9d0a3779c86abe584a0c719090a8819dd8489689079db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f46201e5a1c794a319ccae7008220e092837aa860040710d9ba41ff5836bf81c179d48ba72994cf863ce9dce393134d1218e237b76c4f414de6422ddd19bf19
|
7
|
+
data.tar.gz: 349f290348f0fe2ac8690dd2bf712a2d1a41f979f4c95e4ca5a1cf7d85dcdd278714688aa359112a845960549870d0deb4775ef88642c4e567b1999966c515ce
|
data/ChangeLog
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
2022-12-30 vaiorabbit <http://twitter.com/vaiorabbit>
|
2
|
+
|
3
|
+
* generator: Now generates binding code for config.h
|
4
|
+
|
5
|
+
2022-12-29 vaiorabbit <http://twitter.com/vaiorabbit>
|
6
|
+
|
7
|
+
* generator: Now generates enum descriptions
|
8
|
+
* Fixed several codes according to Rubocop warnings
|
9
|
+
* lib/raylib_helper.rb: Added several helper functions/classes
|
10
|
+
|
11
|
+
2022-12-25 vaiorabbit <http://twitter.com/vaiorabbit>
|
12
|
+
|
13
|
+
* Converted DrawModelEx into a wrapper function of rbDrawModelEx to avoid Matrix problem found in models_animation sample
|
14
|
+
* Attach functions with an explicit name - Ref.: https://www.rubydoc.info/github/ffi/ffi/FFI%2FLibrary:attach_function
|
15
|
+
* setup_xxx_symbols: name, retval and arguments of one function are now packed into one line
|
16
|
+
* generator: Now imports descriptions from original API schema
|
17
|
+
* Generated with the latest raylib ( https://github.com/raysan5/raylib/commit/03cc540d5f1df71bd7ad8118d0e11b492fa5cc18 )
|
18
|
+
|
19
|
+
2022-12-24 vaiorabbit <http://twitter.com/vaiorabbit>
|
20
|
+
|
21
|
+
* Experimental Linux (Chromebook) support
|
22
|
+
|
1
23
|
2022-12-10 vaiorabbit <http://twitter.com/vaiorabbit>
|
2
24
|
|
3
25
|
* Pulled latest raylib ( https://github.com/raysan5/raylib/commit/2c9d116a5ce835328dc3267313f1b34b2e7ad8c9 ) / and raygui ( https://github.com/raysan5/raygui/commit/64179558e425f6e05054d2a70eb12530e0fec103 )
|
data/LICENSE.txt
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
Ruby-raylib : Yet another raylib wrapper for Ruby
|
2
|
-
Copyright (c) 2021-
|
2
|
+
Copyright (c) 2021-2023 vaiorabbit <http://twitter.com/vaiorabbit>
|
3
3
|
|
4
4
|
This software is provided 'as-is', without any express or implied
|
5
5
|
warranty. In no event will the authors be held liable for any damages
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# Yet another raylib wrapper for Ruby #
|
4
4
|
|
5
5
|
* Created : 2021-10-17
|
6
|
-
* Last modified : 2022-12-
|
6
|
+
* Last modified : 2022-12-31
|
7
7
|
|
8
8
|
Provides Ruby bindings for raylib-related libraries including:
|
9
9
|
|
@@ -45,9 +45,9 @@ D:\> ruby template.rb
|
|
45
45
|
* Ruby interpreter
|
46
46
|
* Tested on:
|
47
47
|
* [macOS]
|
48
|
-
* ruby 3.
|
48
|
+
* ruby 3.2.0 (2022-12-25 revision a528908271) [arm64-darwin21]
|
49
49
|
* [Windows] https://rubyinstaller.org/downloads/ Ruby+Devkit
|
50
|
-
* ruby 3.
|
50
|
+
* ruby 3.2.0 (2022-12-25 revision a528908271) [x64-mingw-ucrt]
|
51
51
|
|
52
52
|
* If you need to build DLLs/shared libralies for your own runtime envrioenment (Linux, etc.):
|
53
53
|
* CMake https://cmake.org/download/
|
@@ -63,7 +63,7 @@ D:\> ruby template.rb
|
|
63
63
|
|
64
64
|
* [Windows] gcc
|
65
65
|
|
66
|
-
gcc (
|
66
|
+
gcc (Rev7, Built by MSYS2 project) 12.2.0
|
67
67
|
|
68
68
|
|
69
69
|
<details>
|
@@ -72,9 +72,11 @@ D:\> ruby template.rb
|
|
72
72
|
* Ruby interpreter
|
73
73
|
* Tested on:
|
74
74
|
* [macOS]
|
75
|
+
* ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]
|
75
76
|
* ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [arm64-darwin20]
|
76
77
|
* ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20]
|
77
78
|
* [Windows] https://rubyinstaller.org/downloads/ Ruby+Devkit
|
79
|
+
* ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]
|
78
80
|
* ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x64-mingw-ucrt]
|
79
81
|
* ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x64-mingw32]
|
80
82
|
|
@@ -96,9 +98,18 @@ D:\> ruby template.rb
|
|
96
98
|
* [Windows] gcc
|
97
99
|
|
98
100
|
gcc (Rev9, Built by MSYS2 project) 11.2.0
|
101
|
+
gcc (Rev10, Built by MSYS2 project) 11.2.0
|
99
102
|
|
100
103
|
</details>
|
101
104
|
|
105
|
+
## Project ##
|
106
|
+
|
107
|
+
See the project below to learn how to use this library:
|
108
|
+
|
109
|
+
* Whac-a-Mole! : Ruby raylib bindings demo
|
110
|
+
* <img src="https://raw.githubusercontent.com/vaiorabbit/raylib-bindings-whacamole/main/doc/screenshot_00.png" width="300"> <img src="https://raw.githubusercontent.com/vaiorabbit/raylib-bindings-whacamole/main/doc/screenshot_01.png" width="300">
|
111
|
+
* <https://github.com/vaiorabbit/raylib-bindings-whacamole>
|
112
|
+
|
102
113
|
## Limitation ##
|
103
114
|
|
104
115
|
* `SetTraceLogCallback` and `TraceLogCallback` are unusable since Ruby-FFI does not support `:varargs` parameter in callbacks (`Proc`, etc.)
|
@@ -121,7 +132,7 @@ Shared libraries in `lib` directory are built on top of these products and are a
|
|
121
132
|
All ruby codes here are available under the terms of the zlib/libpng License ( http://opensource.org/licenses/Zlib ).
|
122
133
|
|
123
134
|
Ruby-raylib : Yet another raylib wrapper for Ruby
|
124
|
-
Copyright (c) 2021-
|
135
|
+
Copyright (c) 2021-2023 vaiorabbit <http://twitter.com/vaiorabbit>
|
125
136
|
|
126
137
|
This software is provided 'as-is', without any express or implied
|
127
138
|
warranty. In no event will the authors be held liable for any damages
|
data/examples/template.rb
CHANGED
@@ -20,6 +20,8 @@ when /mswin|msys|mingw|cygwin/
|
|
20
20
|
Raylib.load_lib(shared_lib_path + 'libraylib.dll', raygui_libpath: shared_lib_path + 'raygui.dll', physac_libpath: shared_lib_path + 'physac.dll')
|
21
21
|
when /darwin/
|
22
22
|
Raylib.load_lib(shared_lib_path + 'libraylib.dylib', raygui_libpath: shared_lib_path + 'raygui.dylib', physac_libpath: shared_lib_path + 'physac.dylib')
|
23
|
+
when /linux/
|
24
|
+
Raylib.load_lib(shared_lib_path + 'libraylib.so', raygui_libpath: shared_lib_path + 'raygui.so', physac_libpath: shared_lib_path + 'physac.so')
|
23
25
|
else
|
24
26
|
raise RuntimeError, "Unknown OS: #{RUBY_PLATFORM}"
|
25
27
|
end
|
@@ -37,11 +39,11 @@ if __FILE__ == $PROGRAM_NAME
|
|
37
39
|
# Camera
|
38
40
|
camera = Camera.new
|
39
41
|
reset_camera = lambda {
|
40
|
-
camera
|
41
|
-
camera
|
42
|
-
camera
|
43
|
-
camera
|
44
|
-
camera
|
42
|
+
camera.position.set(0.0, 10.0, 10.0)
|
43
|
+
camera.target.set(0.0, 0.0, 0.0)
|
44
|
+
camera.up.set(0.0, 1.0, 0.0)
|
45
|
+
camera.fovy = 45.0
|
46
|
+
camera.projection = CAMERA_PERSPECTIVE
|
45
47
|
}
|
46
48
|
reset_camera.call
|
47
49
|
SetCameraMode(camera, CAMERA_FREE)
|
@@ -76,29 +78,29 @@ if __FILE__ == $PROGRAM_NAME
|
|
76
78
|
move[:z] += speed if IsKeyDown(KEY_DOWN)
|
77
79
|
move[:z] -= speed if IsKeyDown(KEY_UP)
|
78
80
|
|
79
|
-
to_camera = Vector3Normalize(Vector3.create(camera
|
81
|
+
to_camera = Vector3Normalize(Vector3.create(camera.position.x, 0, camera.position.z))
|
80
82
|
rotate_y = QuaternionFromVector3ToVector3(Vector3.create(0, 0, 1), to_camera)
|
81
83
|
move = Vector3RotateByQuaternion(move, rotate_y)
|
82
84
|
|
83
85
|
player_pos = Vector3Add(player_pos, move)
|
84
|
-
player_screen_pos = GetWorldToScreen(Vector3.create(player_pos
|
86
|
+
player_screen_pos = GetWorldToScreen(Vector3.create(player_pos.x, player_pos.y + 2.5, player_pos.z), camera)
|
85
87
|
|
86
88
|
# Check collision status
|
87
89
|
collision = false
|
88
90
|
|
89
|
-
player_bbox = BoundingBox.create(player_pos
|
90
|
-
player_pos
|
91
|
-
player_pos
|
92
|
-
player_pos
|
93
|
-
player_pos
|
94
|
-
player_pos
|
91
|
+
player_bbox = BoundingBox.create(player_pos.x - player_size.x/2,
|
92
|
+
player_pos.y - player_size.y/2,
|
93
|
+
player_pos.z - player_size.z/2,
|
94
|
+
player_pos.x + player_size.x/2,
|
95
|
+
player_pos.y + player_size.y/2,
|
96
|
+
player_pos.z + player_size.z/2)
|
95
97
|
|
96
|
-
obstacle_cube_bbox = BoundingBox.create(obstacle_cube_pos
|
97
|
-
obstacle_cube_pos
|
98
|
-
obstacle_cube_pos
|
99
|
-
obstacle_cube_pos
|
100
|
-
obstacle_cube_pos
|
101
|
-
obstacle_cube_pos
|
98
|
+
obstacle_cube_bbox = BoundingBox.create(obstacle_cube_pos.x - obstacle_cube_size.x/2,
|
99
|
+
obstacle_cube_pos.y - obstacle_cube_size.y/2,
|
100
|
+
obstacle_cube_pos.z - obstacle_cube_size.z/2,
|
101
|
+
obstacle_cube_pos.x + obstacle_cube_size.x/2,
|
102
|
+
obstacle_cube_pos.y + obstacle_cube_size.y/2,
|
103
|
+
obstacle_cube_pos.z + obstacle_cube_size.z/2)
|
102
104
|
|
103
105
|
# Check collisions player vs obstacle_cube
|
104
106
|
collision = true if CheckCollisionBoxes(player_bbox, obstacle_cube_bbox)
|
@@ -118,8 +120,8 @@ if __FILE__ == $PROGRAM_NAME
|
|
118
120
|
DrawCube(player_pos, 2.0, 2.0, 2.0, collision ? Fade(ruby_red, 0.25) : ruby_red)
|
119
121
|
DrawCubeWires(player_pos, 2.0, 2.0, 2.0, MAROON)
|
120
122
|
# Obstacle cube
|
121
|
-
DrawCube(obstacle_cube_pos, obstacle_cube_size
|
122
|
-
DrawCubeWires(obstacle_cube_pos, obstacle_cube_size
|
123
|
+
DrawCube(obstacle_cube_pos, obstacle_cube_size.x, obstacle_cube_size.y, obstacle_cube_size.z, GRAY)
|
124
|
+
DrawCubeWires(obstacle_cube_pos, obstacle_cube_size.x, obstacle_cube_size.y, obstacle_cube_size.z, DARKGRAY)
|
123
125
|
# Obstacle sphere
|
124
126
|
DrawSphere(obstacle_sphere_pos, obstacle_sphere_size, GRAY)
|
125
127
|
DrawSphereWires(obstacle_sphere_pos, obstacle_sphere_size, 16, 16, DARKGRAY)
|
@@ -129,7 +131,7 @@ if __FILE__ == $PROGRAM_NAME
|
|
129
131
|
|
130
132
|
## HUD
|
131
133
|
# Text over the red cube
|
132
|
-
DrawText("Player HP: 100 / 100", player_screen_pos
|
134
|
+
DrawText("Player HP: 100 / 100", player_screen_pos.x - MeasureText("Player HP: 100/100", 20)/2, player_screen_pos.y, 20, BLACK)
|
133
135
|
# Help message
|
134
136
|
DrawRectangle(10, screen_height - 100, 300, 80, Fade(MAROON, 0.25))
|
135
137
|
DrawRectangleLines(10, screen_height - 100, 300, 80, ruby_red)
|
data/lib/config.rb
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
# Yet another raylib wrapper for Ruby
|
2
|
+
#
|
3
|
+
# * https://github.com/vaiorabbit/raylib-bindings
|
4
|
+
#
|
5
|
+
# [NOTICE] Autogenerated. Do not edit.
|
6
|
+
|
7
|
+
require 'ffi'
|
8
|
+
|
9
|
+
module Raylib
|
10
|
+
extend FFI::Library
|
11
|
+
|
12
|
+
# Define/Macro
|
13
|
+
|
14
|
+
SUPPORT_MODULE_RSHAPES = 1
|
15
|
+
SUPPORT_MODULE_RTEXTURES = 1
|
16
|
+
SUPPORT_MODULE_RTEXT = 1 # WARNING: It requires SUPPORT_MODULE_RTEXTURES to load sprite font textures
|
17
|
+
SUPPORT_MODULE_RMODELS = 1
|
18
|
+
SUPPORT_MODULE_RAUDIO = 1
|
19
|
+
SUPPORT_CAMERA_SYSTEM = 1
|
20
|
+
SUPPORT_GESTURES_SYSTEM = 1
|
21
|
+
SUPPORT_MOUSE_GESTURES = 1
|
22
|
+
SUPPORT_SSH_KEYBOARD_RPI = 1
|
23
|
+
SUPPORT_WINMM_HIGHRES_TIMER = 1
|
24
|
+
SUPPORT_PARTIALBUSY_WAIT_LOOP = 1
|
25
|
+
SUPPORT_SCREEN_CAPTURE = 1
|
26
|
+
SUPPORT_GIF_RECORDING = 1
|
27
|
+
SUPPORT_COMPRESSION_API = 1
|
28
|
+
MAX_FILEPATH_CAPACITY = 8192 # Maximum file paths capacity
|
29
|
+
MAX_FILEPATH_LENGTH = 4096 # Maximum length for filepaths (Linux PATH_MAX default value)
|
30
|
+
MAX_KEYBOARD_KEYS = 512 # Maximum number of keyboard keys supported
|
31
|
+
MAX_MOUSE_BUTTONS = 8 # Maximum number of mouse buttons supported
|
32
|
+
MAX_GAMEPADS = 4 # Maximum number of gamepads supported
|
33
|
+
MAX_GAMEPAD_AXIS = 8 # Maximum number of axis supported (per gamepad)
|
34
|
+
MAX_GAMEPAD_BUTTONS = 32 # Maximum number of buttons supported (per gamepad)
|
35
|
+
MAX_TOUCH_POINTS = 8 # Maximum number of touch points supported
|
36
|
+
MAX_KEY_PRESSED_QUEUE = 16 # Maximum number of keys in the key input queue
|
37
|
+
MAX_CHAR_PRESSED_QUEUE = 16 # Maximum number of characters in the char input queue
|
38
|
+
MAX_DECOMPRESSION_SIZE = 64 # Max size allocated for decompression in MB
|
39
|
+
RL_DEFAULT_BATCH_BUFFERS = 1 # Default number of batch buffers (multi-buffering)
|
40
|
+
RL_DEFAULT_BATCH_DRAWCALLS = 256 # Default number of batch draw calls (by state changes: mode, texture)
|
41
|
+
RL_DEFAULT_BATCH_MAX_TEXTURE_UNITS = 4 # Maximum number of textures units that can be activated on batch drawing (SetShaderValueTexture())
|
42
|
+
RL_MAX_MATRIX_STACK_SIZE = 32 # Maximum size of internal Matrix stack
|
43
|
+
RL_MAX_SHADER_LOCATIONS = 32 # Maximum number of shader locations supported
|
44
|
+
RL_CULL_DISTANCE_NEAR = 0.01 # Default projection matrix near cull distance
|
45
|
+
RL_CULL_DISTANCE_FAR = 1000.0 # Default projection matrix far cull distance
|
46
|
+
RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION = "vertexPosition" # Binded by default to shader location: 0
|
47
|
+
RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD = "vertexTexCoord" # Binded by default to shader location: 1
|
48
|
+
RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL = "vertexNormal" # Binded by default to shader location: 2
|
49
|
+
RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR = "vertexColor" # Binded by default to shader location: 3
|
50
|
+
RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT = "vertexTangent" # Binded by default to shader location: 4
|
51
|
+
RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 = "vertexTexCoord2" # Binded by default to shader location: 5
|
52
|
+
RL_DEFAULT_SHADER_UNIFORM_NAME_MVP = "mvp" # model-view-projection matrix
|
53
|
+
RL_DEFAULT_SHADER_UNIFORM_NAME_VIEW = "matView" # view matrix
|
54
|
+
RL_DEFAULT_SHADER_UNIFORM_NAME_PROJECTION = "matProjection" # projection matrix
|
55
|
+
RL_DEFAULT_SHADER_UNIFORM_NAME_MODEL = "matModel" # model matrix
|
56
|
+
RL_DEFAULT_SHADER_UNIFORM_NAME_NORMAL = "matNormal" # normal matrix (transpose(inverse(matModelView))
|
57
|
+
RL_DEFAULT_SHADER_UNIFORM_NAME_COLOR = "colDiffuse" # color diffuse (base tint color, multiplied by texture color)
|
58
|
+
RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE0 = "texture0" # texture0 (texture slot active 0)
|
59
|
+
RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE1 = "texture1" # texture1 (texture slot active 1)
|
60
|
+
RL_DEFAULT_SHADER_SAMPLER2D_NAME_TEXTURE2 = "texture2" # texture2 (texture slot active 2)
|
61
|
+
SUPPORT_QUADS_DRAW_MODE = 1
|
62
|
+
SUPPORT_FILEFORMAT_PNG = 1
|
63
|
+
SUPPORT_FILEFORMAT_GIF = 1
|
64
|
+
SUPPORT_FILEFORMAT_QOI = 1
|
65
|
+
SUPPORT_FILEFORMAT_DDS = 1
|
66
|
+
SUPPORT_FILEFORMAT_HDR = 1
|
67
|
+
SUPPORT_IMAGE_EXPORT = 1
|
68
|
+
SUPPORT_IMAGE_GENERATION = 1
|
69
|
+
SUPPORT_IMAGE_MANIPULATION = 1
|
70
|
+
SUPPORT_DEFAULT_FONT = 1
|
71
|
+
SUPPORT_FILEFORMAT_FNT = 1
|
72
|
+
SUPPORT_FILEFORMAT_TTF = 1
|
73
|
+
SUPPORT_TEXT_MANIPULATION = 1
|
74
|
+
MAX_TEXT_BUFFER_LENGTH = 1024 # Size of internal static buffers used on some functions:
|
75
|
+
MAX_TEXTSPLIT_COUNT = 128 # Maximum number of substrings to split: TextSplit()
|
76
|
+
SUPPORT_FILEFORMAT_OBJ = 1
|
77
|
+
SUPPORT_FILEFORMAT_MTL = 1
|
78
|
+
SUPPORT_FILEFORMAT_IQM = 1
|
79
|
+
SUPPORT_FILEFORMAT_GLTF = 1
|
80
|
+
SUPPORT_FILEFORMAT_VOX = 1
|
81
|
+
SUPPORT_FILEFORMAT_M3D = 1
|
82
|
+
SUPPORT_MESH_GENERATION = 1
|
83
|
+
MAX_MATERIAL_MAPS = 12 # Maximum number of shader maps supported
|
84
|
+
MAX_MESH_VERTEX_BUFFERS = 7 # Maximum vertex buffers (VBO) per mesh
|
85
|
+
SUPPORT_FILEFORMAT_WAV = 1
|
86
|
+
SUPPORT_FILEFORMAT_OGG = 1
|
87
|
+
SUPPORT_FILEFORMAT_XM = 1
|
88
|
+
SUPPORT_FILEFORMAT_MOD = 1
|
89
|
+
SUPPORT_FILEFORMAT_MP3 = 1
|
90
|
+
AUDIO_DEVICE_FORMAT = "ma_format_f32" # Device output format (miniaudio: float-32bit)
|
91
|
+
AUDIO_DEVICE_CHANNELS = 2 # Device output channels: stereo
|
92
|
+
AUDIO_DEVICE_SAMPLE_RATE = 0 # Device sample rate (device default)
|
93
|
+
MAX_AUDIO_BUFFER_POOL_CHANNELS = 16 # Maximum number of audio pool channels
|
94
|
+
SUPPORT_STANDARD_FILEIO = 1
|
95
|
+
SUPPORT_TRACELOG = 1
|
96
|
+
MAX_TRACELOG_MSG_LENGTH = 128 # Max length of one trace-log message
|
97
|
+
|
98
|
+
end
|
data/lib/libraylib.dll
CHANGED
Binary file
|
data/lib/libraylib.dylib
CHANGED
Binary file
|
data/lib/physac.dll
CHANGED
Binary file
|
data/lib/physac.rb
CHANGED
@@ -2,18 +2,19 @@
|
|
2
2
|
#
|
3
3
|
# * https://github.com/vaiorabbit/raylib-bindings
|
4
4
|
#
|
5
|
-
# [NOTICE]
|
5
|
+
# [NOTICE] Autogenerated. Do not edit.
|
6
6
|
|
7
7
|
require 'ffi'
|
8
8
|
|
9
9
|
module Raylib
|
10
10
|
extend FFI::Library
|
11
|
+
|
11
12
|
# Define/Macro
|
12
13
|
|
13
|
-
PHYSAC_MAX_BODIES = 64
|
14
|
-
PHYSAC_MAX_MANIFOLDS = 4096
|
15
|
-
PHYSAC_MAX_VERTICES = 24
|
16
|
-
PHYSAC_DEFAULT_CIRCLE_VERTICES = 24
|
14
|
+
PHYSAC_MAX_BODIES = 64 # Maximum number of physic bodies supported
|
15
|
+
PHYSAC_MAX_MANIFOLDS = 4096 # Maximum number of physic bodies interactions (64x64)
|
16
|
+
PHYSAC_MAX_VERTICES = 24 # Maximum number of vertex for polygons shapes
|
17
|
+
PHYSAC_DEFAULT_CIRCLE_VERTICES = 24 # Default number of vertices for circle shapes
|
17
18
|
PHYSAC_COLLISION_ITERATIONS = 100
|
18
19
|
PHYSAC_PENETRATION_ALLOWANCE = 0.05
|
19
20
|
PHYSAC_PENETRATION_CORRECTION = 0.4
|
@@ -21,9 +22,11 @@ module Raylib
|
|
21
22
|
|
22
23
|
# Enum
|
23
24
|
|
25
|
+
# enum PhysicsShapeType
|
24
26
|
PHYSICS_CIRCLE = 0
|
25
27
|
PHYSICS_POLYGON = 1
|
26
28
|
|
29
|
+
|
27
30
|
# Typedef
|
28
31
|
|
29
32
|
typedef :int, :PhysicsShapeType
|
@@ -32,6 +35,7 @@ module Raylib
|
|
32
35
|
|
33
36
|
# Struct
|
34
37
|
|
38
|
+
# Matrix2x2 type (used for polygon shape rotation matrix)
|
35
39
|
class Matrix2x2 < FFI::Struct
|
36
40
|
layout(
|
37
41
|
:m00, :float,
|
@@ -43,136 +47,176 @@ module Raylib
|
|
43
47
|
|
44
48
|
class PhysicsVertexData < FFI::Struct
|
45
49
|
layout(
|
46
|
-
:vertexCount, :uint,
|
47
|
-
:positions, [Vector2, 24],
|
48
|
-
:normals, [Vector2, 24],
|
50
|
+
:vertexCount, :uint, # Vertex count (positions and normals)
|
51
|
+
:positions, [Vector2, 24], # Vertex positions vectors
|
52
|
+
:normals, [Vector2, 24], # Vertex normals vectors
|
49
53
|
)
|
50
54
|
end
|
51
55
|
|
52
56
|
class PhysicsShape < FFI::Struct
|
53
57
|
layout(
|
54
|
-
:type, :int,
|
55
|
-
:body, :pointer,
|
56
|
-
:vertexData, PhysicsVertexData,
|
57
|
-
:radius, :float,
|
58
|
-
:transform, Matrix2x2,
|
58
|
+
:type, :int, # Shape type (circle or polygon)
|
59
|
+
:body, :pointer, # Shape physics body data pointer
|
60
|
+
:vertexData, PhysicsVertexData, # Shape vertices data (used for polygon shapes)
|
61
|
+
:radius, :float, # Shape radius (used for circle shapes)
|
62
|
+
:transform, Matrix2x2, # Vertices transform matrix 2x2
|
59
63
|
)
|
60
64
|
end
|
61
65
|
|
62
66
|
class PhysicsBodyData < FFI::Struct
|
63
67
|
layout(
|
64
|
-
:id, :uint,
|
65
|
-
:enabled, :bool,
|
66
|
-
:position, Vector2,
|
67
|
-
:velocity, Vector2,
|
68
|
-
:force, Vector2,
|
69
|
-
:angularVelocity, :float,
|
70
|
-
:torque, :float,
|
71
|
-
:orient, :float,
|
72
|
-
:inertia, :float,
|
73
|
-
:inverseInertia, :float,
|
74
|
-
:mass, :float,
|
75
|
-
:inverseMass, :float,
|
76
|
-
:staticFriction, :float,
|
77
|
-
:dynamicFriction, :float,
|
78
|
-
:restitution, :float,
|
79
|
-
:useGravity, :bool,
|
80
|
-
:isGrounded, :bool,
|
81
|
-
:freezeOrient, :bool,
|
82
|
-
:shape, PhysicsShape,
|
68
|
+
:id, :uint, # Unique identifier
|
69
|
+
:enabled, :bool, # Enabled dynamics state (collisions are calculated anyway)
|
70
|
+
:position, Vector2, # Physics body shape pivot
|
71
|
+
:velocity, Vector2, # Current linear velocity applied to position
|
72
|
+
:force, Vector2, # Current linear force (reset to 0 every step)
|
73
|
+
:angularVelocity, :float, # Current angular velocity applied to orient
|
74
|
+
:torque, :float, # Current angular force (reset to 0 every step)
|
75
|
+
:orient, :float, # Rotation in radians
|
76
|
+
:inertia, :float, # Moment of inertia
|
77
|
+
:inverseInertia, :float, # Inverse value of inertia
|
78
|
+
:mass, :float, # Physics body mass
|
79
|
+
:inverseMass, :float, # Inverse value of mass
|
80
|
+
:staticFriction, :float, # Friction when the body has not movement (0 to 1)
|
81
|
+
:dynamicFriction, :float, # Friction when the body has movement (0 to 1)
|
82
|
+
:restitution, :float, # Restitution coefficient of the body (0 to 1)
|
83
|
+
:useGravity, :bool, # Apply gravity force to dynamics
|
84
|
+
:isGrounded, :bool, # Physics grounded on other body state
|
85
|
+
:freezeOrient, :bool, # Physics rotation constraint
|
86
|
+
:shape, PhysicsShape, # Physics body shape information (type, radius, vertices, transform)
|
83
87
|
)
|
84
88
|
end
|
85
89
|
|
86
90
|
class PhysicsManifoldData < FFI::Struct
|
87
91
|
layout(
|
88
|
-
:id, :uint,
|
89
|
-
:bodyA, :pointer,
|
90
|
-
:bodyB, :pointer,
|
91
|
-
:penetration, :float,
|
92
|
-
:normal, Vector2,
|
93
|
-
:contacts, [Vector2, 2],
|
94
|
-
:contactsCount, :uint,
|
95
|
-
:restitution, :float,
|
96
|
-
:dynamicFriction, :float,
|
97
|
-
:staticFriction, :float,
|
92
|
+
:id, :uint, # Unique identifier
|
93
|
+
:bodyA, :pointer, # Manifold first physics body reference
|
94
|
+
:bodyB, :pointer, # Manifold second physics body reference
|
95
|
+
:penetration, :float, # Depth of penetration from collision
|
96
|
+
:normal, Vector2, # Normal direction vector from 'a' to 'b'
|
97
|
+
:contacts, [Vector2, 2], # Points of contact during collision
|
98
|
+
:contactsCount, :uint, # Current collision number of contacts
|
99
|
+
:restitution, :float, # Mixed restitution during collision
|
100
|
+
:dynamicFriction, :float, # Mixed dynamic friction during collision
|
101
|
+
:staticFriction, :float, # Mixed static friction during collision
|
98
102
|
)
|
99
103
|
end
|
100
104
|
|
101
105
|
|
102
106
|
# Function
|
103
107
|
|
104
|
-
def self.setup_physac_symbols
|
105
|
-
|
106
|
-
|
107
|
-
:
|
108
|
-
|
109
|
-
:
|
110
|
-
|
111
|
-
:
|
112
|
-
|
113
|
-
:
|
114
|
-
|
115
|
-
:
|
116
|
-
|
117
|
-
:
|
118
|
-
|
119
|
-
:
|
120
|
-
|
121
|
-
:
|
122
|
-
|
123
|
-
:
|
124
|
-
|
108
|
+
def self.setup_physac_symbols
|
109
|
+
entries = [
|
110
|
+
|
111
|
+
# InitPhysics : Initializes physics system
|
112
|
+
# @return [void]
|
113
|
+
[:InitPhysics, :InitPhysics, [], :void],
|
114
|
+
|
115
|
+
# UpdatePhysics : Update physics system
|
116
|
+
# @return [void]
|
117
|
+
[:UpdatePhysics, :UpdatePhysics, [], :void],
|
118
|
+
|
119
|
+
# ResetPhysics : Reset physics system (global variables)
|
120
|
+
# @return [void]
|
121
|
+
[:ResetPhysics, :ResetPhysics, [], :void],
|
122
|
+
|
123
|
+
# ClosePhysics : Close physics system and unload used memory
|
124
|
+
# @return [void]
|
125
|
+
[:ClosePhysics, :ClosePhysics, [], :void],
|
126
|
+
|
127
|
+
# SetPhysicsTimeStep : Sets physics fixed time step in milliseconds. 1.666666 by default
|
128
|
+
# @param delta [double]
|
129
|
+
# @return [void]
|
130
|
+
[:SetPhysicsTimeStep, :SetPhysicsTimeStep, [:double], :void],
|
131
|
+
|
132
|
+
# SetPhysicsGravity : Sets physics global gravity force
|
133
|
+
# @param x [float]
|
134
|
+
# @param y [float]
|
135
|
+
# @return [void]
|
136
|
+
[:SetPhysicsGravity, :SetPhysicsGravity, [:float, :float], :void],
|
137
|
+
|
138
|
+
# CreatePhysicsBodyCircle : Creates a new circle physics body with generic parameters
|
139
|
+
# @param pos [Vector2]
|
140
|
+
# @param radius [float]
|
141
|
+
# @param density [float]
|
142
|
+
# @return [PhysicsBody]
|
143
|
+
[:CreatePhysicsBodyCircle, :CreatePhysicsBodyCircle, [Vector2.by_value, :float, :float], :pointer],
|
144
|
+
|
145
|
+
# CreatePhysicsBodyRectangle : Creates a new rectangle physics body with generic parameters
|
146
|
+
# @param pos [Vector2]
|
147
|
+
# @param width [float]
|
148
|
+
# @param height [float]
|
149
|
+
# @param density [float]
|
150
|
+
# @return [PhysicsBody]
|
151
|
+
[:CreatePhysicsBodyRectangle, :CreatePhysicsBodyRectangle, [Vector2.by_value, :float, :float, :float], :pointer],
|
152
|
+
|
153
|
+
# CreatePhysicsBodyPolygon : Creates a new polygon physics body with generic parameters
|
154
|
+
# @param pos [Vector2]
|
155
|
+
# @param radius [float]
|
156
|
+
# @param sides [int]
|
157
|
+
# @param density [float]
|
158
|
+
# @return [PhysicsBody]
|
159
|
+
[:CreatePhysicsBodyPolygon, :CreatePhysicsBodyPolygon, [Vector2.by_value, :float, :int, :float], :pointer],
|
160
|
+
|
161
|
+
# DestroyPhysicsBody : Destroy a physics body
|
162
|
+
# @param body [PhysicsBody]
|
163
|
+
# @return [void]
|
164
|
+
[:DestroyPhysicsBody, :DestroyPhysicsBody, [:pointer], :void],
|
165
|
+
|
166
|
+
# PhysicsAddForce : Adds a force to a physics body
|
167
|
+
# @param body [PhysicsBody]
|
168
|
+
# @param force [Vector2]
|
169
|
+
# @return [void]
|
170
|
+
[:PhysicsAddForce, :PhysicsAddForce, [:pointer, Vector2.by_value], :void],
|
171
|
+
|
172
|
+
# PhysicsAddTorque : Adds an angular force to a physics body
|
173
|
+
# @param body [PhysicsBody]
|
174
|
+
# @param amount [float]
|
175
|
+
# @return [void]
|
176
|
+
[:PhysicsAddTorque, :PhysicsAddTorque, [:pointer, :float], :void],
|
177
|
+
|
178
|
+
# PhysicsShatter : Shatters a polygon shape physics body to little physics bodies with explosion force
|
179
|
+
# @param body [PhysicsBody]
|
180
|
+
# @param position [Vector2]
|
181
|
+
# @param force [float]
|
182
|
+
# @return [void]
|
183
|
+
[:PhysicsShatter, :PhysicsShatter, [:pointer, Vector2.by_value, :float], :void],
|
184
|
+
|
185
|
+
# SetPhysicsBodyRotation : Sets physics body shape transform based on radians parameter
|
186
|
+
# @param body [PhysicsBody]
|
187
|
+
# @param radians [float]
|
188
|
+
# @return [void]
|
189
|
+
[:SetPhysicsBodyRotation, :SetPhysicsBodyRotation, [:pointer, :float], :void],
|
190
|
+
|
191
|
+
# GetPhysicsBody : Returns a physics body of the bodies pool at a specific index
|
192
|
+
# @param index [int]
|
193
|
+
# @return [PhysicsBody]
|
194
|
+
[:GetPhysicsBody, :GetPhysicsBody, [:int], :pointer],
|
195
|
+
|
196
|
+
# GetPhysicsBodiesCount : Returns the current amount of created physics bodies
|
197
|
+
# @return [int]
|
198
|
+
[:GetPhysicsBodiesCount, :GetPhysicsBodiesCount, [], :int],
|
199
|
+
|
200
|
+
# GetPhysicsShapeType : Returns the physics body shape type (PHYSICS_CIRCLE or PHYSICS_POLYGON)
|
201
|
+
# @param index [int]
|
202
|
+
# @return [int]
|
203
|
+
[:GetPhysicsShapeType, :GetPhysicsShapeType, [:int], :int],
|
204
|
+
|
205
|
+
# GetPhysicsShapeVerticesCount : Returns the amount of vertices of a physics body shape
|
206
|
+
# @param index [int]
|
207
|
+
# @return [int]
|
208
|
+
[:GetPhysicsShapeVerticesCount, :GetPhysicsShapeVerticesCount, [:int], :int],
|
209
|
+
|
210
|
+
# GetPhysicsShapeVertex : Returns transformed position of a body shape (body position + vertex transformed position)
|
211
|
+
# @param body [PhysicsBody]
|
212
|
+
# @param vertex [int]
|
213
|
+
# @return [Vector2]
|
214
|
+
[:GetPhysicsShapeVertex, :GetPhysicsShapeVertex, [:pointer, :int], Vector2.by_value],
|
125
215
|
]
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
:ClosePhysics => [],
|
131
|
-
:SetPhysicsTimeStep => [:double],
|
132
|
-
:SetPhysicsGravity => [:float, :float],
|
133
|
-
:CreatePhysicsBodyCircle => [Vector2.by_value, :float, :float],
|
134
|
-
:CreatePhysicsBodyRectangle => [Vector2.by_value, :float, :float, :float],
|
135
|
-
:CreatePhysicsBodyPolygon => [Vector2.by_value, :float, :int, :float],
|
136
|
-
:DestroyPhysicsBody => [:pointer],
|
137
|
-
:PhysicsAddForce => [:pointer, Vector2.by_value],
|
138
|
-
:PhysicsAddTorque => [:pointer, :float],
|
139
|
-
:PhysicsShatter => [:pointer, Vector2.by_value, :float],
|
140
|
-
:SetPhysicsBodyRotation => [:pointer, :float],
|
141
|
-
:GetPhysicsBody => [:int],
|
142
|
-
:GetPhysicsBodiesCount => [],
|
143
|
-
:GetPhysicsShapeType => [:int],
|
144
|
-
:GetPhysicsShapeVerticesCount => [:int],
|
145
|
-
:GetPhysicsShapeVertex => [:pointer, :int],
|
146
|
-
}
|
147
|
-
retvals = {
|
148
|
-
:InitPhysics => :void,
|
149
|
-
:UpdatePhysics => :void,
|
150
|
-
:ResetPhysics => :void,
|
151
|
-
:ClosePhysics => :void,
|
152
|
-
:SetPhysicsTimeStep => :void,
|
153
|
-
:SetPhysicsGravity => :void,
|
154
|
-
:CreatePhysicsBodyCircle => :pointer,
|
155
|
-
:CreatePhysicsBodyRectangle => :pointer,
|
156
|
-
:CreatePhysicsBodyPolygon => :pointer,
|
157
|
-
:DestroyPhysicsBody => :void,
|
158
|
-
:PhysicsAddForce => :void,
|
159
|
-
:PhysicsAddTorque => :void,
|
160
|
-
:PhysicsShatter => :void,
|
161
|
-
:SetPhysicsBodyRotation => :void,
|
162
|
-
:GetPhysicsBody => :pointer,
|
163
|
-
:GetPhysicsBodiesCount => :int,
|
164
|
-
:GetPhysicsShapeType => :int,
|
165
|
-
:GetPhysicsShapeVerticesCount => :int,
|
166
|
-
:GetPhysicsShapeVertex => Vector2.by_value,
|
167
|
-
}
|
168
|
-
symbols.each do |sym|
|
169
|
-
begin
|
170
|
-
attach_function sym, args[sym], retvals[sym]
|
171
|
-
rescue FFI::NotFoundError => error
|
172
|
-
$stderr.puts("[Warning] Failed to import #{sym} (#{error}).")
|
173
|
-
end
|
216
|
+
entries.each do |entry|
|
217
|
+
attach_function entry[0], entry[1], entry[2], entry[3]
|
218
|
+
rescue FFI::NotFoundError => e
|
219
|
+
warn "[Warning] Failed to import #{entry[0]} (#{e})."
|
174
220
|
end
|
175
221
|
end
|
176
|
-
|
177
222
|
end
|
178
|
-
|
data/lib/raygui.dll
CHANGED
Binary file
|