Compare commits

...

756 commits

Author SHA1 Message Date
1468af2636 chore: Update README with notice of the fork status and build tags 2025-06-22 20:27:39 -04:00
d63f1b19df
chore: Fix module path 2025-06-22 17:48:18 -04:00
45473d7240
feature: Add DRM leasing code 2025-06-22 17:41:05 -04:00
3df816e2bf
chore: Remove broken CI workflows 2025-06-22 17:40:19 -04:00
d707d9e51c
chore: Initial attempt to migrate workflows
Some checks failed
Build / test-rgfw (1.21.x, docker) (push) Has been cancelled
Build / test-purego (1.21.x, docker) (push) Has been cancelled
Build / test-examples (1.21.x, docker) (push) Has been cancelled
Build / test-sdl (1.21.x, docker) (push) Has been cancelled
Build / test (1.21.x, docker) (push) Has been cancelled
Build / test-drm (1.21.x, docker) (push) Has been cancelled
2025-06-21 13:32:42 -04:00
bc3da009ef
fix: Fixes image URL
Some checks are pending
Build / test-rgfw (1.21.x, windows-latest) (push) Waiting to run
Build / test-purego (1.21.x, ubuntu-latest) (push) Waiting to run
Build / test-examples (1.21.x, ubuntu-latest) (push) Waiting to run
Build / test (1.21.x, macos-latest) (push) Waiting to run
Build / test (1.21.x, ubuntu-latest) (push) Waiting to run
Build / test (1.21.x, windows-latest) (push) Waiting to run
Build / test-drm (1.21.x, ubuntu-latest) (push) Waiting to run
Build / test-sdl (1.21.x, ubuntu-latest) (push) Waiting to run
Build / test-rgfw (1.21.x, macos-latest) (push) Waiting to run
Build / test-rgfw (1.21.x, ubuntu-latest) (push) Waiting to run
2025-06-21 13:24:38 -04:00
Milan Nikolic
eddd038123
Update README.md 2025-06-17 21:43:46 +02:00
Milan Nikolic
6039070d78
Merge pull request #505 from JupiterRider/raygui_return_values
raygui: fix Spinner() return value and fix possible misuse of unsafe.Pointer
2025-06-17 19:41:27 +02:00
JupiterRider
9a87dd6d60 raygui: Spinner returns true if clicked #503 2025-06-17 17:48:13 +02:00
JupiterRider
7e9246c069 raygui/cstring.go: "fix" possible misuse of unsafe.Pointer 2025-06-17 17:47:09 +02:00
Milan Nikolic
5d704708c4
Update bunnymark, issue #480 2025-06-09 19:36:06 +02:00
Milan Nikolic
3327fcaf9f
Update C sources 2025-06-09 15:53:56 +02:00
Milan Nikolic
e08c4cd054
Remove rres 2025-06-09 15:53:08 +02:00
Milan Nikolic
fca3bf26c5
Merge pull request #500 from lloydlobo/lloydlobo/examples-vertex-displacement
[examples] Add shader example: `vertex_displacement`
2025-05-21 23:03:03 +02:00
Lloyd Lobo
1d42dc5846 docs(examples): remove screenshot and screen recording artifacts
- remove screenshot PNG
- remove screenrec GIF
2025-05-18 15:02:12 +05:30
Lloyd Lobo
0380afdf21 docs(examples): create vertex_displacement example 2025-05-18 11:44:24 +05:30
Milan Nikolic
e6017e5fc4
Merge pull request #497 from SunnyFuji/patch-1
Create main.go
2025-05-04 04:26:11 +02:00
Milan Nikolic
5ca0e770e3
Merge pull request #486 from mohsengreen1388/pbr-example
example: I can add physic base render to example
2025-05-04 04:25:48 +02:00
SunnyFuji
761bde1e61
Create main.go
I created a pong Game and would like to submit it to the examples catalogue. I have debugged it and the only external dependencies are this projects and fmt.
2025-04-19 14:35:50 -05:00
Milan Nikolic
a4292f0f04
Merge pull request #495 from thearturca/feat/unload-sound-alias
feat(raylib): adds UnloadSoundAlias function
2025-04-09 07:28:54 +02:00
thearturca
ce20f0c639 feat(raylib): adds UnloadSoundAlias function
docs(raudio): adds function name to UnloadSoundAlias comment
2025-03-31 10:59:58 +03:00
Milan Nikolic
b542022337
Merge pull request #493 from jroimartin/wave-ptr
Change `WaveFormat` and `WaveCrop` signatures to accept a pointer to `Wave`
2025-03-27 11:37:58 +01:00
Roi Martin
705f704ecf Change WaveFormat and WaveCrop signatures to accept a pointer to Wave
The raylib functions `WaveFormat` and `WaveCrop` accept a pointer to
`Wave` because the wave is updated in-place. However, the current Go
bindings pass a copy of the wave to the C functions, so it is not
updated. This commit changes the signatures of the Go API so they also
accept a pointer to `Wave`.
2025-03-27 09:12:54 +01:00
Milan Nikolic
db8e47f0e5
Merge pull request #489 from JupiterRider/missing_rlgl_constants
missing constants from RLGL added
2025-02-15 05:22:52 +01:00
JupiterRider
3fd9012394 missing constants from RLGL added (fixes #488) 2025-02-14 22:42:09 +01:00
Mohsen Baghri
960a135c15 example: I can add physic base render to example 2025-01-26 21:57:23 +03:30
Milan Nikolic
6dbba4f81a
Merge pull request #484 from geo-stark/master
Add GetClipboardImage for drm platform.
2025-01-09 18:28:33 +01:00
George Stark
e31988d117 Add GetClipboardImage for drm platform.
Signed-off-by: George Stark <stark.georgy@gmail.com>
2025-01-09 19:07:59 +03:00
Milan Nikolic
d58ffe1a3a
Merge pull request #479 from sugarvoid/master
Add return value to `LoadTextureDepth`
2024-12-28 13:07:19 +01:00
sugarvoid
ff0ecd0e76 Add return value in rlgl_purego.go 2024-12-28 05:23:49 -06:00
sugarvoid
8e035f761c Add return value to LoadTextureDepth 2024-12-27 07:59:46 -06:00
Milan Nikolic
453bad2769
Merge pull request #477 from JupiterRider/rgfw_rumble
rcore_desktop_rgfw.c SetGamepadVibration added
2024-12-17 19:56:05 +01:00
JupiterRider
2040136e38 rcore_desktop_rgfw.c SetGamepadVibration added 2024-12-17 19:42:54 +01:00
Milan Nikolic
edb2c107b3
Merge pull request #476 from Alireza-Ta/android_enhancement
Android Compilation Enhancement
2024-12-17 12:51:49 +01:00
Milan Nikolic
078d0bec34
Merge pull request #475 from JupiterRider/audiostream_processor
fix purego version of DetachAudioStreamProcessor and DetachAudioMixedProcessor
2024-12-17 12:51:40 +01:00
Alireza-Ta
5dad257e8d Update androidcompile.bat file with minor tweaks. 2024-12-17 14:54:04 +03:30
Alireza-Ta
8490a60f72 Add GetClipboardImage for android platform. 2024-12-17 11:09:31 +03:30
JupiterRider
5868292fd5 fix purego version of DetachAudioStreamProcessor and DetachAudioMixedProcessor #425 2024-12-15 18:19:57 +01:00
Milan Nikolic
7a899c5e3a
Merge pull request #474 from JupiterRider/model_animation
ModelAnimation improvements
2024-12-15 05:38:39 +01:00
JupiterRider
c301540ef5 gltf_loading example shows the name of the current animation now 2024-12-14 22:04:59 +01:00
JupiterRider
041142d30c update another ModelAnimation example 2024-12-14 21:57:46 +01:00
JupiterRider
46524a8c46 Update examples for #466 2024-12-14 21:47:37 +01:00
JupiterRider
533c35110b ModelAnimation.GetName() added 2024-12-14 21:26:58 +01:00
JupiterRider
dce94f509d ModelAnimation.GetFramePose() added #466 2024-12-14 21:15:08 +01:00
JupiterRider
98ce816ab8 ModelAnimation.GetBones() added #466 2024-12-14 20:19:05 +01:00
Milan Nikolic
a9ad86d501
Update wayland headers 2024-12-07 12:43:08 +01:00
Milan Nikolic
659b0700ba
Add support for vendor 2024-12-07 11:37:19 +01:00
Milan Nikolic
3b89a24e68
Update README.md 2024-12-03 10:19:12 +01:00
Milan Nikolic
28ef2a891c
Update README.md 2024-12-03 09:25:44 +01:00
Milan Nikolic
b6bb8ec528
Export Wave data, issue #402 2024-12-03 09:17:34 +01:00
Milan Nikolic
ea071de5c2
Add support for SDL3 2024-12-03 09:06:39 +01:00
Milan Nikolic
5df9325f63
Add wayland build tag, issue #404 2024-12-03 08:00:59 +01:00
Milan Nikolic
aef24a2104
Update README.md 2024-12-03 07:15:50 +01:00
Milan Nikolic
c4ef7b53e9
Merge pull request #470 from Hultan/draw_cube_texture
New example: models/draw_cube_textured
2024-12-03 07:13:53 +01:00
Milan Nikolic
b6d58c5ba6
Merge pull request #469 from Hultan/yaw_pitch_roll
New example: models/yaw_pitch_roll
2024-12-03 07:13:38 +01:00
Milan Nikolic
db948137ee
Merge pull request #468 from Hultan/rlgl_solar_system
Models/rlgl_solar_system example
2024-12-03 07:13:24 +01:00
Milan Nikolic
04c9cea61b
Update modules 2024-12-02 11:59:55 +01:00
Milan Nikolic
8b5f8fe6bb
Update modules, issue #473 2024-12-02 11:54:24 +01:00
Milan Nikolic
a7ac43847a
Update modules 2024-12-02 11:45:37 +01:00
Milan Nikolic
4c05c52a4b
Update modules 2024-12-02 11:42:54 +01:00
Milan Nikolic
5d50abe7c6
Merge pull request #472 from JupiterRider/raylib_55
WIP: Update to raylib 5.5
2024-12-02 11:36:52 +01:00
JupiterRider
5ed790526c use android_run() 2024-11-29 19:45:51 +01:00
JupiterRider
c3489ebef8 fix "warning: 'ALIGN' macro redefined" on MacOS (same as 5943b16bad) 2024-11-29 19:28:34 +01:00
JupiterRider
4c9f2e5dd7 rlgl: rlSetUniform, rlSetUniformMatrix and rlSetUniformMatrices added 2024-11-29 18:43:53 +01:00
JupiterRider
574299012d rlgl: update rlLoadFramebuffer 2024-11-29 18:15:42 +01:00
JupiterRider
de01649968 rlgl: rlColorMask added 2024-11-29 18:01:24 +01:00
JupiterRider
e5537960f0 rlgl: rlBlitFramebuffer and rlBindFramebuffer added 2024-11-29 17:56:43 +01:00
JupiterRider
f10c42c14e rlgl: rlGetActiveFramebuffer added 2024-11-29 17:46:31 +01:00
JupiterRider
5d9fdd5313 rlgl: rlSetClipPlanes, rlGetCullDistanceNear and rlGetCullDistanceFar added 2024-11-29 17:42:27 +01:00
JupiterRider
692079f471 fix drm build (see 8a207901da) 2024-11-24 17:07:33 +01:00
JupiterRider
d054bd9043 LoadImageAnim functions: frames is a pointer, not a slice 2024-11-24 16:44:22 +01:00
JupiterRider
ffc0ab4fc6 fix GetScreenToWorldRay* cgo functions 2024-11-24 16:29:48 +01:00
JupiterRider
9e7c7db0ec fix "cannot use v (variable of type *Image) as Image value in return statement" 2024-11-24 16:29:09 +01:00
JupiterRider
aee70123d7 Additional ShaderUniformDataType constants + description added 2024-11-24 16:20:45 +01:00
JupiterRider
ccc9ef8662 rlgl: VertexBuffer has new field + descriptions added 2024-11-24 16:11:50 +01:00
JupiterRider
b922049f3b IsAudioStreamReady has been renamed 2024-11-24 16:02:37 +01:00
JupiterRider
24323485a0 IsMusicReady has been renamed 2024-11-24 16:00:10 +01:00
JupiterRider
0c2506a3cd WaveCrop parameters renamed 2024-11-24 15:58:13 +01:00
JupiterRider
3282ea28f2 IsSoundReady has been renamed 2024-11-24 15:54:51 +01:00
JupiterRider
f3553fea29 IsWaveReady has been renamed 2024-11-24 15:53:01 +01:00
JupiterRider
b09e22b6ad UpdateModelAnimationBones function added 2024-11-24 15:49:58 +01:00
JupiterRider
493260d376 IsMaterialReady has been renamed 2024-11-24 15:45:49 +01:00
JupiterRider
c9a7c5c130 DrawModelPoints() and DrawModelPointsEx() added 2024-11-24 15:43:30 +01:00
JupiterRider
22bfaf1652 DrawBillboard: size is scale 2024-11-24 15:35:41 +01:00
JupiterRider
47bd3b9420 IsModelReady has been renamed 2024-11-24 15:24:23 +01:00
JupiterRider
1d2d8d9350 IsFontReady has been renamed 2024-11-24 15:21:12 +01:00
JupiterRider
9d16da4548 ColorLerp function added 2024-11-24 15:00:38 +01:00
JupiterRider
090dbf62ef ColorToInt() comment updated 2024-11-24 14:49:41 +01:00
JupiterRider
36259e95a7 IsRenderTextureReady 2024-11-24 14:47:02 +01:00
JupiterRider
8d97c05afb IsRenderTextureReady has been renamed 2024-11-24 14:46:58 +01:00
JupiterRider
dbf9ed2bff IsTextureReady has been renamed 2024-11-24 14:44:41 +01:00
JupiterRider
d81d956c18 ImageDrawTriangle*-functions added 2024-11-24 14:41:13 +01:00
JupiterRider
07d2a6efde ImageDrawLineEx function added 2024-11-24 12:45:32 +01:00
JupiterRider
19bdd59547 ImageKernelConvolution function added 2024-11-24 12:39:13 +01:00
JupiterRider
bf03596ee4 ImageFromChannel function added 2024-11-24 12:28:19 +01:00
JupiterRider
23f1ab19b7 Update LoadImageAnim to match purego signature 2024-11-24 12:20:06 +01:00
JupiterRider
4da4ec54eb LoadImageAnimFromMemory function added 2024-11-24 12:17:59 +01:00
JupiterRider
77b59b8ebe GetMouseRay redirects to GetScreenToWorldRay 2024-11-23 21:48:43 +01:00
JupiterRider
873552f31a IsImageReady() is now IsImageValid() 2024-11-23 21:43:16 +01:00
JupiterRider
05860b8650 LoadImageSvg() has been removed 2024-11-23 21:40:07 +01:00
JupiterRider
cb6615f05b CheckCollisionCircleLine() added 2024-11-23 21:36:45 +01:00
JupiterRider
24c48cde91 DrawRectangleRoundedLinesEx function added (fixes #435) 2024-11-23 21:24:30 +01:00
JupiterRider
c364e5b3f5 Update DrawRectangleRoundedLines() (fixes #435) 2024-11-23 21:15:30 +01:00
JupiterRider
1b93816b90 DrawRectangleGradient*-functions parameter names modified 2024-11-23 21:09:13 +01:00
JupiterRider
1ad4e58c4f DrawRectangleGradient*-functions parameter names modified 2024-11-23 21:08:40 +01:00
JupiterRider
0f95293831 DrawCircleGradient() parameter names updated 2024-11-23 21:00:13 +01:00
JupiterRider
ff18bb497b GetShapesTexture() and GetShapesTextureRectangle() added 2024-11-23 20:56:02 +01:00
JupiterRider
972563ca1f SetGamepadVibration() added 2024-11-23 20:41:25 +01:00
JupiterRider
7275646a1d GetScreenToWorldRay() and GetScreenToWorldRayEx() added 2024-11-23 20:31:22 +01:00
JupiterRider
52954882a0 IsShaderReady() is now IsShaderValid() 2024-11-23 20:04:40 +01:00
JupiterRider
886e44de9c GetClipboardImage() added 2024-11-23 19:59:37 +01:00
JupiterRider
31abcc5ee4 GetCurrentMonitor() description fixed 2024-11-23 19:32:44 +01:00
JupiterRider
13942ea31b CubemapLayoutPanorama has been removed 2024-11-23 19:29:32 +01:00
JupiterRider
76be48cc11 Gamepad Buttons description fixed 2024-11-23 19:25:22 +01:00
JupiterRider
d7cae48c5a Value of KeyMenu has been changed 2024-11-23 19:22:25 +01:00
JupiterRider
7faf6e22e7 VrDeviceInfo.VScreenCenter field has been removed 2024-11-23 19:21:17 +01:00
JupiterRider
15e71af9da Mesh type has new fields 2024-11-23 19:19:11 +01:00
JupiterRider
11a0342061 update purego required dll version 2024-11-23 17:57:27 +01:00
JupiterRider
a0882a5b81 external c-sources updated 2024-11-23 17:27:55 +01:00
JupiterRider
2ad5a4babf remove svg sources (svg support has been moved to raylib-extras) 2024-11-23 17:25:20 +01:00
JupiterRider
724c790ff7 glfw sources updated 2024-11-23 17:21:57 +01:00
JupiterRider
fc50e055c0 platforms c-source files updated 2024-11-23 17:07:41 +01:00
JupiterRider
614ed9f942 utils.c updated 2024-11-23 17:05:01 +01:00
JupiterRider
e184faa15c rtextures.c updated 2024-11-23 17:04:44 +01:00
JupiterRider
c59907eea6 rtext.c updated 2024-11-23 16:59:00 +01:00
JupiterRider
4738b1467e rshapes.c updated 2024-11-23 16:57:42 +01:00
JupiterRider
37fd299f2a rmodels.c updated 2024-11-23 16:56:45 +01:00
JupiterRider
466f3e0804 rlgl.h updated 2024-11-23 16:53:25 +01:00
JupiterRider
3af3eea92a rgestures.h updated 2024-11-23 16:51:29 +01:00
JupiterRider
69cf3d30a4 rcore.c updated 2024-11-23 16:51:10 +01:00
JupiterRider
3e01b50698 update rcamera.h (has been rewritten in go as well) 2024-11-23 16:48:40 +01:00
JupiterRider
f293ef1482 raymath.h updated (not really required, because it has been rewritten in go) 2024-11-23 16:46:28 +01:00
JupiterRider
3b4a7104e2 raylib.h updated 2024-11-23 16:44:48 +01:00
JupiterRider
b1792a31d9 raudio.c updated 2024-11-23 16:43:26 +01:00
JupiterRider
c77be99ddc config.h updated 2024-11-23 16:38:51 +01:00
Per Hultqvist
8d54e15dc2 New example: models/draw_cube_textured 2024-11-18 14:18:05 +01:00
Per Hultqvist
bc9182ac34 New example: models/yaw_pitch_roll 2024-11-18 13:22:01 +01:00
Per Hultqvist
af2e6d755e New example: models/rlgl_solar_system 2024-11-18 12:41:48 +01:00
Per Hultqvist
5b33862cc1 Example fixed models/rlgl_solar_system 2024-11-18 12:19:33 +01:00
Milan Nikolic
01864c04b8
Merge pull request #467 from Hultan/obj_loading
Example fixed models/obj_loading
2024-11-17 16:30:00 +01:00
Milan Nikolic
b6c8a8e892
Merge pull request #465 from Hultan/m3d_loading
New example models/m3d_loading
2024-11-17 16:29:50 +01:00
Per Hultqvist
5eb8d9ded7 Example fixed models/obj_loading 2024-11-17 15:56:12 +01:00
Per Hultqvist
9782760778 New example models/m3d_loading 2024-11-16 18:23:44 +01:00
Milan Nikolic
f465c30447
Merge pull request #462 from Hultan/mesh_generation
Added a custom mesh to the example models/mesh_generation
2024-11-14 20:02:48 +01:00
Per Hultqvist
acf83f1ff9 New example models/mesh_picking 2024-11-11 18:42:02 +01:00
Per Hultqvist
e9aa553ec6 New example models/mesh_picking 2024-11-11 18:39:56 +01:00
Per Hultqvist
0ce1777bf3 New example models/mesh_picking 2024-11-11 16:46:28 +01:00
Milan Nikolic
60446bce15
Merge pull request #463 from Hultan/mesh_picking
New example models/mesh_picking
2024-11-11 15:44:50 +01:00
Milan Nikolic
4983e462e3
Merge pull request #461 from Hultan/billboard
Fixed example that differed : models/billboard
2024-11-11 15:43:21 +01:00
Milan Nikolic
bb09313fb5
Merge pull request #460 from Hultan/animation
Fixed example that differed : models/animations
2024-11-11 15:43:08 +01:00
Milan Nikolic
441f7fa504
Merge pull request #459 from Hultan/codepoints_loading
New example: text/codepoints_loading
2024-11-11 15:42:50 +01:00
Milan Nikolic
4b3433a06d
Merge pull request #458 from Hultan/draw_3d
New example: text/draw_3d
2024-11-11 15:42:28 +01:00
Per Hultqvist
de1c5d32ef New example models/mesh_picking 2024-11-11 15:02:05 +01:00
Per Hultqvist
0e82ab3a0d Added a custom mesh to the example models/mesh_generation 2024-11-11 08:53:10 +01:00
Per Hultqvist
6de5b09c62 Small path fix 2024-11-10 18:24:52 +01:00
Per Hultqvist
1073c97df9 Small path fix 2024-11-10 18:23:26 +01:00
Per Hultqvist
cac9dee8dd Fixed example that differed : models/billboard 2024-11-10 18:20:24 +01:00
Per Hultqvist
3f8ab9718f Fixed example that differed : models/animations 2024-11-10 18:05:33 +01:00
Per Hultqvist
7e465e47e2 New example (small change): text/codepoints_loading 2024-11-10 16:17:45 +01:00
Per Hultqvist
9108b3b7b0 New example: text/codepoints_loading 2024-11-10 16:06:52 +01:00
Per Hultqvist
a1df2e388e New example: text/draw_3d 2024-11-10 14:02:00 +01:00
Milan Nikolic
5e9516b94f
Merge pull request #456 from skullbulb/skybox-example
Added [models] example - skybox loading and drawing
2024-11-09 21:33:06 +01:00
skullbulb
382cbda3de Added [models] example - skybox loading and drawing 2024-11-09 19:34:09 +00:00
Milan Nikolic
553871567e
Merge pull request #455 from Hultan/unicode
New example: text/unicode
2024-11-08 14:55:34 +01:00
Milan Nikolic
ac16a0b3b6
Merge pull request #451 from Hultan/rectangle_bounds
New example: rectangle_bounds
2024-11-08 14:55:20 +01:00
Milan Nikolic
7a92d50d28
Merge pull request #452 from JupiterRider/DrawTextCodepoint
DrawTextCodepoint(s) functions added to cgo version
2024-11-08 14:53:46 +01:00
Per Hultqvist
afc255d0ca New example: text/unicode - small fix 2024-11-07 19:59:39 +01:00
Per Hultqvist
52946ea71d New example: text/unicode 2024-11-07 19:55:42 +01:00
JupiterRider
e171bb3751 DrawTextCodepoint(s) functions added to cgo version 2024-11-05 17:33:03 +01:00
Per Hultqvist
b7ac6957d3 New example: rectangle_bounds 2024-11-04 14:02:36 +01:00
Milan Nikolic
5100377cde
Merge pull request #449 from Hultan/input_box
New example: input_box
2024-11-03 18:12:47 +01:00
Milan Nikolic
3158dca464
Merge pull request #448 from JupiterRider/GenImageFontAtlas
GenImageFontAtlas added, font example added, LoadFontData function improved
2024-11-03 18:11:32 +01:00
Per Hultqvist
44e76696cc New example: input_box 2024-11-03 17:04:02 +01:00
JupiterRider
8c4ce9e206 remove trailing whitespace and carriage return in License file 2024-11-03 15:40:48 +01:00
JupiterRider
549dbcf4d8 SDF-font loading example added 2024-11-03 15:38:02 +01:00
JupiterRider
735af12e7f update LoadFontData: codePoints can now be nil, codepointCount defaults to 95 (like C raylib does) 2024-11-03 15:36:07 +01:00
JupiterRider
893dfa5f85 GenImageFontAtlas function added to cgo version as well 2024-11-03 15:13:14 +01:00
JupiterRider
8ea76a8e09 golang.org/x/exp is not in your go.mod file 2024-11-03 12:29:12 +01:00
Milan Nikolic
ab0d3a3fb2
Merge pull request #445 from Hultan/font_loading
New example: font_loading
2024-10-31 15:17:16 +01:00
Milan Nikolic
87d0d7185f
Merge pull request #444 from Hultan/font_filter
New example: font_filters
2024-10-31 15:17:06 +01:00
Per Hultqvist
c3e8a0f84a New example: font_loading 2024-10-31 13:34:37 +01:00
Per Hultqvist
8d78eefeee New example: font_filters 2024-10-31 13:06:59 +01:00
Milan Nikolic
8a6b23b2ed
Merge pull request #442 from Hultan/draw_ring
New example: Shapes/Draw_ring
2024-10-28 09:11:01 +01:00
Milan Nikolic
f8147233ca
Merge pull request #443 from Hultan/draw_circle_sector
New example: Shapes/draw_circle_sector
2024-10-28 09:10:44 +01:00
Per Hultqvist
1f7ddfca09 New example : shapes/draw_circle_sector 2024-10-24 17:21:11 +02:00
Per Hultqvist
bd66c8b623 New example : shapes/draw_ring 2024-10-24 17:15:30 +02:00
Hultan
6807b5cc47
Merge branch 'gen2brain:master' into master 2024-10-24 10:25:44 +02:00
Milan Nikolic
f2ab1b0c35
Merge pull request #438 from anasrar/master
feat(raymath): `MatrixDecompose`
2024-10-24 08:05:13 +02:00
Milan Nikolic
20a76b285d
Merge pull request #441 from JupiterRider/SetBlendMode
#437 take rl.BlendMode instead of int32
2024-10-24 07:58:50 +02:00
Milan Nikolic
d4e03b2d75
Merge pull request #440 from JupiterRider/DrawCircleLinesV
#436 DrawCircleLinesV to cgo-version added
2024-10-24 07:58:35 +02:00
Milan Nikolic
bb20d2da3e
Merge pull request #439 from JupiterRider/automationEvents
#431 AutomationEventList.GetEvents method added
2024-10-24 07:58:18 +02:00
JupiterRider
badf94c433 #437 take rl.BlendMode instead of int32 2024-10-23 21:36:14 +02:00
JupiterRider
5c0fc5c528 #436 DrawCircleLinesV to cgo-version added 2024-10-23 21:26:52 +02:00
JupiterRider
5268babfe0 #431 AutomationEventList.GetEvents method added 2024-10-23 20:48:36 +02:00
anasrar
f9b5993843
refactor(raymath): parameter typo 2024-10-23 01:44:47 +13:00
anasrar
da901b89c1
feat(raymath): MatrixDecompose 2024-10-23 01:10:52 +13:00
Per Hultqvist
d6c07f1bbf New example : core/vr_simulator 2024-10-19 18:08:02 +02:00
Milan Nikolic
b7833eeae8
Merge pull request #432 from Hultan/master
New example : Core/storage_values
2024-10-19 17:09:00 +02:00
Hultan
ec8840cdae
Merge branch 'gen2brain:master' into master 2024-10-19 16:28:15 +02:00
Per Hultqvist
f84ecd5b63 New example : core/storage_values 2024-10-19 16:27:24 +02:00
Milan Nikolic
0975c91121
Merge pull request #430 from Hultan/master
Small change in examples/texture/draw_tile
2024-10-19 11:21:48 +02:00
Hultan
077c9b9f63
Merge branch 'gen2brain:master' into master 2024-10-19 09:56:05 +02:00
Per Hultqvist
eb60c30db1 Textures/draw_tiled : Changed to the correct texture filter 2024-10-19 09:55:40 +02:00
Milan Nikolic
220865147a
Merge pull request #429 from JupiterRider/vr
vr functions added
2024-10-19 06:46:16 +02:00
JupiterRider
e9d222595d #428 BeginVrStereoMode and EndVrStereoMode purgo body added 2024-10-18 17:47:52 +02:00
JupiterRider
1eacaf732c #428 cgo vr functions added 2024-10-18 17:45:15 +02:00
Milan Nikolic
42a2d9159c
Merge pull request #423 from Hultan/master
3 more examples under texture
2024-10-17 18:35:16 +02:00
Per Hultqvist
8f5a54a530 Revert "New example : Textures/sprite_anim"
This reverts commit cf5c9f8b9a.
2024-10-17 16:35:11 +02:00
Per Hultqvist
3c0d4bcab6 New example : Textures/draw_tiled 2024-10-17 14:58:47 +02:00
Per Hultqvist
535ef37449 Merge remote-tracking branch 'origin/master' 2024-10-17 13:00:46 +02:00
Milan Nikolic
5c8466e15f
Merge pull request #422 from Hultan/master
Two new audio examples
2024-10-17 12:58:27 +02:00
Per Hultqvist
f1236640f9 New example : Textures/sprite_button 2024-10-17 12:44:25 +02:00
Per Hultqvist
cf5c9f8b9a New example : Textures/sprite_anim 2024-10-17 12:25:19 +02:00
Per Hultqvist
274a0b5854 New example : Textures/npatch_drawing 2024-10-17 11:54:12 +02:00
Per Hultqvist
a9a0a28119 New example : Audio/mixed processor 2024-10-17 11:04:50 +02:00
Per Hultqvist
5bed8af6d4 New example : Audio/sound_multi 2024-10-17 08:12:14 +02:00
Milan Nikolic
81eae2921a
Merge pull request #421 from Hultan/master
6 new raylib/core examples
2024-10-16 17:52:42 +02:00
Per Hultqvist
0a5dd6e49b Merge remote-tracking branch 'origin/master' 2024-10-16 16:07:19 +02:00
Per Hultqvist
d7bd66f339 New example : Window flags 2024-10-16 15:41:18 +02:00
Per Hultqvist
1ff1eefdf1 New example : Window letterbox 2024-10-16 14:52:18 +02:00
Per Hultqvist
c2b8b9ee3a New example : Custom Frame Control 2024-10-15 17:09:11 +02:00
Per Hultqvist
10a7b71ee0 New example : Custom Logging 2024-10-15 16:10:41 +02:00
Per Hultqvist
4e4f18a37c New example : Window should close 2024-10-15 15:19:15 +02:00
Per Hultqvist
afe70ad4c8 New example : 2d camera platform 2024-10-15 15:18:58 +02:00
Milan Nikolic
bf5ef18350
Merge pull request #420 from Hultan/master
Synced 3d camera splitscreen with raylib.com
2024-10-14 18:39:42 +02:00
Per Hultqvist
a33e6f490b Merge remote-tracking branch 'origin/master' 2024-10-14 18:18:11 +02:00
Per Hultqvist
5bf50a5c5b Synced up another raylib-go example with raylib:s example 2024-10-14 18:17:15 +02:00
Milan Nikolic
3039b26796
Merge pull request #419 from Hultan/master
Removed erroneous instructions
2024-10-14 17:30:18 +02:00
Per Hultqvist
e43e388549 Removed erroneous instructions 2024-10-14 17:15:36 +02:00
Milan Nikolic
f4adffe016
Merge pull request #418 from Hultan/master
3d camera first person example updated
2024-10-14 15:10:46 +02:00
Per Hultqvist
54b89f5a68 3d camera first person example updated to match https://www.raylib.com/examples/core/loader.html?name=core_3d_camera_first_person 2024-10-14 12:11:58 +02:00
Milan Nikolic
c66f9e2942
Merge pull request #415 from agrigoryan/feature/audio-mixed-processor
bindings for attaching/detaching mixed audio processor
2024-09-30 09:56:31 +02:00
agrigoryan
c2c8150de9 bindings for attaching/detaching mixed audio processor 2024-09-30 01:44:08 -04:00
Milan Nikolic
6bc3d79c96
Merge pull request #414 from imprity/NewImageFromImage-fix
Fix NewImageFromImage color converting
2024-09-16 07:06:33 +02:00
imprity
2053879bfb Fix NewImageFromImage color converting
Old version of NewImageFromImage converted colors incorrectly.
This commit fixes the issue.
2024-09-15 09:54:51 +09:00
Milan Nikolic
123ec7ae6b
Merge pull request #411 from JupiterRider/ColorFromNormalized-Fix
purego fix for ColorFromNormalized
2024-09-05 19:09:17 +02:00
JupiterRider
6c2499adff purego fix for ColorFromNormalized: Vector4 has to be passed as pointer (not by value) 2024-09-05 19:00:35 +02:00
Milan Nikolic
b4d0c52dc9
Merge pull request #406 from Aurora2500/mousebutton_newtype
[rcore] Added MouseButton newtype
2024-08-26 13:35:53 +02:00
Milan Nikolic
287f319ecb
Merge pull request #409 from JupiterRider/shaderfix
Some fixes for purego-version
2024-08-26 13:34:25 +02:00
JupiterRider
26bdccfe6f allow passing nil to LoadShader for purego as well (#172) 2024-08-21 22:54:05 +02:00
JupiterRider
d374f90b45 shader has to be passed as pointer 2024-08-21 22:49:35 +02:00
Aurora
a30a52c553 changed raylib_purego.go to use the new type 2024-08-13 12:27:47 +01:00
Aurora
afca9ac4b5 Added MouseButton newtype 2024-08-12 22:52:35 +01:00
Milan Nikolic
8861ee437d
Merge pull request #403 from elMuso/master
Android example: Added windows.bat and updated Readme
2024-08-07 13:16:36 +02:00
Arold
64b25f38d9 Android example: Added windows.bat and updated Readme 2024-08-06 22:53:40 -04:00
Milan Nikolic
62016ee92f
Merge pull request #396 from Palessan/palessan/raylib-go-sprite-gif-animations
Adding gif and sprite animation examples.
2024-06-28 14:51:41 +02:00
Palessan
ded439d849 rectangle will be renamed to textures_sprite_anim part 2/2
(using git mv to preserve git history)
2024-06-28 15:27:21 +03:00
Palessan
49d7e62303 rectangle will be renamed to textures_sprite_anim part 1/2 2024-06-28 15:18:23 +03:00
Palessan
6c3961f894 better to use the using existing method by passing the required []color.RGBA instead of the unsafe.Pointer 2024-06-28 15:11:11 +03:00
Palessan
f529bc2897 Adding gif and sprite animation examples.
-Added new UpdateTextureUnsafe method to support it.
2024-06-28 12:50:30 +03:00
Milan Nikolic
a997a44fb9
Support Windows 7, issue #392 2024-05-24 09:43:10 +02:00
Milan Nikolic
b7c9eeec1b
Merge pull request #391 from JupiterRider/GuiLoadIcons
[raygui] LoadIcons-, DrawIcon-function and example added
2024-05-22 22:09:53 +02:00
JupiterRider
d86638ae10 [raygui] LoadIcons-, DrawIcon-function and example added 2024-05-22 18:51:38 +02:00
Milan Nikolic
6c4349fd5c
Test purego 2024-05-22 17:12:50 +02:00
Milan Nikolic
b1a49c28b6
Merge pull request #384 from rocktavious/add-mul-matrix
Expose MultMatrix
2024-05-22 17:04:37 +02:00
Kyle
4a4f1ef82e
Remove purego implementation 2024-05-22 09:55:19 -05:00
Milan Nikolic
7430a4e0ef
Merge pull request #390 from JupiterRider/multmatrixf
MultMatrix for purego added
2024-05-22 16:30:10 +02:00
JupiterRider
9fe64ac4bd Fix MatrixToFloat 2024-05-22 16:23:31 +02:00
JupiterRider
86d08a7b86 MultMatrix for purego added 2024-05-22 15:37:00 +02:00
Kyle
426bcb3529
Fix typo 2024-05-22 07:12:22 -05:00
Kyle
b56bfca1e8
Update rlgl_purego.go correctly 2024-05-21 15:31:37 -05:00
Milan Nikolic
5314a4a209
Merge pull request #389 from JupiterRider/master
[raygui] don't trim leading and trailing white spaces (fix #351)
2024-05-18 18:08:52 +02:00
JupiterRider
a158bd444e [raygui] don't trim leading and trailing white spaces (fix #351) 2024-05-18 17:56:40 +02:00
Milan Nikolic
2915c1c582
Merge pull request #388 from JupiterRider/master
[raygui] use nil for empty strings
2024-05-16 21:26:30 +02:00
JupiterRider
7c239d1050 [raygui] use nil for empty strings; fixes #386 2024-05-16 20:41:28 +02:00
JupiterRider
c212c33886 [raygui] empty string will cause the draw of a title-bar, but nil doesn't 2024-05-16 19:05:18 +02:00
Milan Nikolic
e824a9b663
Merge pull request #387 from JupiterRider/master
TraceLog and TraceLogCallback fixes
2024-05-15 05:52:41 +02:00
JupiterRider
4c0391d217 comment fixed 2024-05-14 23:22:31 +02:00
JupiterRider
fa7e76c6a6 implement va_list for tracelog callbacks in purego 2024-05-14 23:17:31 +02:00
JupiterRider
6fd7907d31 Use fmt.Sprintf for TraceLog to match with cgo 2024-05-14 23:09:47 +02:00
JupiterRider
ac27873749 MAX_TRACELOG_BUFFER_SIZE is 256 since raylib 4.5 2024-05-14 22:49:48 +02:00
Kyle
49242a59c9
Update rlgl_purego.go 2024-05-13 07:15:11 -05:00
Kyle Rockman
da79f1d8b6 fix function to actually work 2024-05-11 19:38:23 -05:00
Kyle
032352a5ba
Update rlgl_cgo.go 2024-05-11 19:16:35 -05:00
Milan Nikolic
f68049cf26
Update darwin flags 2024-05-09 17:21:52 +02:00
Milan Nikolic
4b3ab504c8
Update RGFW 2024-05-09 17:21:05 +02:00
Milan Nikolic
9b53342ac0
Fix Android internal storage, issue #365 2024-05-09 08:27:51 +02:00
Milan Nikolic
c09c9462b4
Update README.md 2024-05-08 19:14:57 +02:00
Milan Nikolic
28722bb71f
Merge pull request #383 from zbednarke/raw-audio-example
Improve raw audio example
2024-05-08 14:26:20 +02:00
Milan Nikolic
48e419d11f
Update actions 2024-05-08 11:36:02 +02:00
Milan Nikolic
21775d2dee
Silence warnings 2024-05-08 11:26:39 +02:00
Milan Nikolic
451c14ce9f
Comment redefinitions 2024-05-08 11:25:08 +02:00
Milan Nikolic
64a63d5914
Update actions 2024-05-08 11:20:15 +02:00
Milan Nikolic
45279d6d25
Silence warnings 2024-05-08 11:19:01 +02:00
Milan Nikolic
6031600b18
Test RGFW 2024-05-08 11:09:31 +02:00
Milan Nikolic
7c4c1eed60
Update dependencies 2024-05-08 10:54:48 +02:00
Milan Nikolic
54ab84ca0c
Update README.md 2024-05-08 10:51:01 +02:00
Milan Nikolic
8a207901da
Fix DRM build 2024-05-08 10:50:08 +02:00
Milan Nikolic
6fa153fa53
Update dependencies 2024-05-08 10:31:41 +02:00
Milan Nikolic
7810550d63
Add RGFW backend 2024-05-08 10:30:05 +02:00
zbednarke
266797ff04 sine graphic 2024-05-07 20:42:31 -07:00
zbednarke
74d0b22ad1 lower sample rate 2024-05-07 20:38:52 -07:00
zbednarke
1a0035bfed make buffer bigger 2024-05-07 20:36:38 -07:00
zbednarke
a7fccc35a1 lower n samples per update to be on safe side 2024-05-07 20:20:12 -07:00
Zachary Bednarke
db4aa35b12 rename variables 2024-05-07 19:54:07 -07:00
Zachary Bednarke
65392e706d rename f t frequency 2024-05-07 19:51:43 -07:00
Zachary Bednarke
95c2f5679a pretty it up 2024-05-07 19:43:43 -07:00
Zachary Bednarke
18035cee69 first in fork 2024-05-07 19:37:13 -07:00
Milan Nikolic
1868520849
Update C sources 2024-05-07 21:54:39 +02:00
Milan Nikolic
2a66186c7d
Merge pull request #381 from ajsosa/borderless
Expose ToggleBorderlessWindowed() to golang.
2024-05-07 11:00:38 +02:00
Milan Nikolic
0b93fbfb6f
Merge pull request #382 from JFAexe/cgo-waittime
Add missing WaitTime
2024-05-07 11:00:21 +02:00
JFAexe
19429cd00d Add missing WaitTime 2024-05-05 10:21:22 +03:00
ajsosa
1c9f65903d
Expose ToggleBorderlessWindowed() to golang. 2024-04-28 18:30:46 -05:00
Milan Nikolic
f406ea403b
Merge pull request #379 from gabriel-marques/master
Added custom frame control functions to rcore.go
2024-04-24 19:27:46 +02:00
Gabriel Da Silva Marques
4523bcd71d Added custom frame control functions to rcore.go
Added SwapScreenBuffer() and PollInputEvents into rcore.go with corresponding comments
To use them it's necessary to build with CGO_CFLAGS="-DSUPPORT_CUSTOM_FRAME_CONTROL=1"
Also added more info in the raylib_purego.go file for theses two functions in order to inform that the dll must be recompiled
2024-04-24 18:10:35 +02:00
Milan Nikolic
278df68f40
Merge pull request #377 from JupiterRider/fix-return-values
Don't use struct return values
2024-04-21 21:10:56 +02:00
JupiterRider
8545220e18
Don't use struct return values
This fixes https://github.com/gen2brain/raylib-go/issues/376
2024-04-21 20:27:15 +02:00
Milan Nikolic
9548fadb54
Merge pull request #375 from alessandrojcm/master
feat: add DrawTextPro
2024-04-18 17:02:28 +02:00
Alessandro Cuppari
e717485867 fix: args should be pointers 2024-04-18 13:59:55 +01:00
Alessandro Cuppari
39b56ef013 feat: add DrawTextPro 2024-04-16 21:55:35 +01:00
Milan Nikolic
53f26d8a08
Merge pull request #371 from jdbann/fix-scroll-panel-view
Fix ScrollPanel view binding
2024-04-08 15:05:34 +02:00
John Bannister
0b4f8b1cc0 Fix ScrollPanel view binding
The values on the view parameter of ScrollPanel() should be updated with
the values set by the C method.
2024-04-07 14:12:03 +01:00
Milan Nikolic
c3665eb9ab
Add x11 build tag 2024-02-27 12:46:48 +01:00
Milan Nikolic
00f5f785e6
Update android example 2024-02-27 07:54:10 +01:00
Milan Nikolic
069b39e688
Fix android build 2024-02-27 07:48:19 +01:00
Milan Nikolic
468523fda4
Update README.md 2024-02-26 09:45:57 +01:00
Milan Nikolic
3889376dd3
Update actions 2024-02-26 09:38:46 +01:00
Milan Nikolic
cc776abd3b
Update actions 2024-02-26 09:35:31 +01:00
Milan Nikolic
caf96ad1c0
Update cgo 2024-02-26 09:29:23 +01:00
Milan Nikolic
83c4beb421
Add wayland files 2024-02-26 09:26:41 +01:00
Milan Nikolic
5abcc8b79c
Update wayland script 2024-02-26 09:26:12 +01:00
Milan Nikolic
8596a5db72
Rename wayland functions 2024-02-26 09:25:40 +01:00
Milan Nikolic
ce43cc1f10
Remove deps 2024-02-26 09:24:04 +01:00
Milan Nikolic
9a0e172ca7
Update GLFW 2024-02-26 09:23:08 +01:00
Milan Nikolic
0b7f0bb776
Merge pull request #352 from uprun/only-changes-2024-02-24
added LoadFontExByRunesNumber
2024-02-25 13:24:01 +01:00
Oleksandr Kryvonos
a870a09894 variadic parameter for runesNumber in LoadFontEx 2024-02-25 12:18:39 +01:00
Oleksandr Kryvonos
a490f10c86 copied only changes 2024-02-24 20:39:33 +01:00
Milan Nikolic
83d871a38f
Merge pull request #348 from unklnik/master
Update README.md
2024-01-25 12:10:08 +01:00
unkl nik
a5d0d71e50 Update README.md 2024-01-25 12:55:45 +02:00
Milan Nikolic
0e9c277161
Merge pull request #345 from shellfu/Issue-343
Add Compute Shader and SSBO Functions to raylib-go in `rlgl_purego.go`
2024-01-23 19:00:55 +01:00
ShellFu
74450e33c1
Merge pull request #1 from JupiterRider/Issue-343
Fixed  types and typos
2024-01-23 10:32:55 -07:00
JupiterRider
3bc33ec8b7 Update rlgl_cgo.go 2024-01-23 17:58:33 +01:00
JupiterRider
2a08e83ca4 Fix typo and data-types 2024-01-23 17:56:50 +01:00
Daniel 'ShellFu' Kendrick
0b58bcbe1b Add Compute Shader and SSBO Functions to raylib-go in rlgl_purego.go
This commit introduces functions related to compute shaders and
Shader Buffer Storage Objects (SSBOs) in raylib-go. It adds
bindings for loading, dispatching, and managing compute shaders
and SSBOs, aligning raylib-go more closely with the raylib C
library's capabilities. Specifically, the functions added are
`LoadComputeShaderProgram`, `ComputeShaderDispatch`, `LoadShaderBuffer`,
`UnloadShaderBuffer`, `UpdateShaderBuffer`, `BindShaderBuffer`,
`ReadShaderBuffer`, and `CopyShaderBuffer`. These additions enhance
raylib-go's utility for more advanced GPU operations.
2024-01-22 16:19:55 -07:00
Milan Nikolic
5cc3226b35
Merge pull request #344 from shellfu/Issue-343
Add Compute Shader and SSBO Functions to raylib-go
2024-01-22 14:23:02 +01:00
Daniel 'ShellFu' Kendrick
5c31cc3104 Add Compute Shader and SSBO Functions to raylib-go
This commit introduces functions related to compute shaders and
Shader Buffer Storage Objects (SSBOs) in raylib-go. It adds
bindings for loading, dispatching, and managing compute shaders
and SSBOs, aligning raylib-go more closely with the raylib C
library's capabilities. Specifically, the functions added are
`LoadComputeShaderProgram`, `ComputeShaderDispatch`, `LoadShaderBuffer`,
`UnloadShaderBuffer`, `UpdateShaderBuffer`, `BindShaderBuffer`,
`ReadShaderBuffer`, and `CopyShaderBuffer`. These additions enhance
raylib-go's utility for more advanced GPU operations.
2024-01-21 11:08:17 -07:00
Milan Nikolic
49aab27a9b
Merge pull request #342 from shellfu/Issue-341
Align raylib-go ExportImage with C Library Behavior
2024-01-16 13:05:07 +01:00
Daniel 'ShellFu' Kendrick
1f80c1e4c2 Removed test per maintainer instruction, added back in ImageFromImage and LoadTextureCubemap 2024-01-15 13:20:45 -07:00
Daniel 'ShellFu' Kendrick
509ad7da5c Align raylib-go ExportImage with C Library Behavior
The original raylib C library's ExportImage function returns a boolean to
indicate the success or failure of the export operation. This behavior was
missing in the raylib-go implementation, which provided no return value,
thereby limiting error handling capabilities.

This commit updates the ExportImage function in raylib-go to return a boolean
or an error, aligning it with its C counterpart and enabling idiomatic Go
error handling. The change includes updates to the function and tests to
reflect the new return type. This enhancement increases robustness and clarity
in error handling for Go developers using raylib-go.

The test suite has been updated and run to ensure the correct functioning of
the modified ExportImage function, with results confirming the expected
behavior in both successful and unsuccessful scenarios.

- Daniel "ShellFu" Kendrick
2024-01-15 12:20:40 -07:00
Milan Nikolic
483e94e4d9
Merge pull request #339 from pierrec/master
add ImageFromImage()
2024-01-10 11:28:18 +01:00
Pierre Curto
b63c9257c5 add ImageFromImage() 2024-01-10 10:22:54 +01:00
Milan Nikolic
b32467e017
Merge pull request #337 from JupiterRider/master
physics.GetBodies: return only non nil (active) bodies
2024-01-09 17:17:35 +01:00
JupiterRider
381d68b2a3 physics.GetBodies: return only non nil (active) bodies 2024-01-09 16:54:02 +01:00
Milan Nikolic
17ce081452
Merge pull request #332 from Gamerfiend/master
feat: update rtextures.go to have the func LoadTextureCubemap.
2023-12-30 16:04:16 +01:00
Snowminx
48241c48d2
fix: update purego signature to match 2023-12-29 20:42:43 -08:00
Snowminx
9553e2fd26
Merge branch 'gen2brain:master' into master 2023-12-29 20:40:08 -08:00
Milan Nikolic
6f8b5ec246
Merge pull request #334 from JupiterRider/master
Change signature of LoadFontFromMemory in raylib/rtext.go
2023-12-29 14:48:53 +01:00
JupiterRider
6656db4829 Change signature of LoadFontFromMemory in raylib/rtext.go to match with purego version 2023-12-28 16:06:40 +01:00
Snowminx
5c6d0848aa
Merge branch 'gen2brain:master' into master 2023-12-24 19:22:17 -08:00
Snowminx
1cee1d0534
fix: pass by value to c function 2023-12-24 19:21:57 -08:00
Snowminx
656b4a4a8d
fix: update to convert params to cgo 2023-12-24 18:36:56 -08:00
Milan Nikolic
6c3c38896e
Merge pull request #330 from Fluffy-Bean/master
Fix Grid mouseCell not updaing value
2023-12-25 03:18:19 +01:00
Milan Nikolic
ac28b4b4f1
Merge pull request #329 from CollCaz/master
Updated link to physac.h
2023-12-25 03:18:11 +01:00
Milan Nikolic
03d38e920f
Merge pull request #325 from jpgleeson/add-triangle-3d-binding
Add binding for DrawTriangle3D to rmodels.go
2023-12-25 03:18:02 +01:00
Snowminx
4bb9631420
feat: update rtextures.go to have the func LoadTextureCubemap. 2023-12-24 12:40:03 -08:00
Michał
cf285a20a1
Fix mouseCell pointer not updaing value 2023-12-19 14:38:36 +00:00
Yassen Tombokti
69512c77d6
Merge pull request #1 from CollCaz/CollCaz-patch-1
Updated the link to physac.h to point to the correct location.
2023-12-18 22:03:41 +00:00
Yassen Tombokti
2bee857547
Update README.md 2023-12-18 21:59:40 +00:00
jack gleeson
19dc46f86c Add binding for DrawTriangle3D to rmodels.go 2023-12-06 19:51:46 -08:00
Milan Nikolic
48309e2407
Merge pull request #322 from swazzles/master
Add flag for borderless windowed mode
2023-11-23 18:44:46 +01:00
Milan Nikolic
7ef92adf08
Merge pull request #321 from JupiterRider/master
Update purego
2023-11-23 18:39:35 +01:00
swazzles
34ea0cc7f5 Add flag for borderless windowed mode 2023-11-23 22:51:51 +11:00
JupiterRider
a5d2760b16 Remove obsolete comment 2023-11-22 19:06:35 +01:00
JupiterRider
f537de6ed9 go mod tidy 2023-11-22 16:29:10 +01:00
JupiterRider
f239fe2f67 Updat purego to 192c5e846faa64025fb8a6a94532c7a77fbd8dce 2023-11-22 16:26:21 +01:00
Milan Nikolic
a9659ea9c9
Merge pull request #318 from JupiterRider/master
Purego rlgl implemented
2023-11-18 19:18:07 +01:00
JupiterRider
db3e0be60e go mod tidy examples 2023-11-18 19:06:12 +01:00
JupiterRider
43d0a14b92
Merge branch 'master' into master 2023-11-18 18:56:48 +01:00
JupiterRider
2be56088ed Update modules 2023-11-18 18:50:49 +01:00
JupiterRider
fdd3d616da Update purego 2023-11-18 18:41:43 +01:00
JupiterRider
79286ba625 Make rlgl types public and add missung functions 2023-11-18 18:27:35 +01:00
JupiterRider
251b88bcb4 Purego rlgl implemented 2023-11-18 15:11:00 +01:00
Milan Nikolic
fed470e445
Update modules 2023-11-18 14:12:54 +01:00
Milan Nikolic
a1c890e8cb
Update C sources 2023-11-18 13:56:50 +01:00
Milan Nikolic
7637a03441
Update README.md 2023-11-17 08:09:16 +01:00
Milan Nikolic
c4b65589c7
Update README.md 2023-11-16 17:42:19 +01:00
Milan Nikolic
f09d79e85e
Merge pull request #315 from dusk125/v2-divide-by-0
Fix potential divide by 0 in vector2
2023-11-16 17:40:50 +01:00
Milan Nikolic
8c380e0735
Merge pull request #308 from JupiterRider/master
First approach for purego
2023-11-16 17:39:04 +01:00
Allen Ray
a70feefe17 Fix potential divide by 0 in vector2 2023-11-16 11:21:15 -05:00
JupiterRider
90f0980286 Remove comments. Change build tag. 2023-11-16 17:14:20 +01:00
JupiterRider
0e067872f8 Remove file/io functions. Make purego and CGO API match. 2023-11-16 17:05:29 +01:00
JupiterRider
3219556f38 Change functions to match with raylib-go (cgo version) 2023-11-16 14:35:55 +01:00
JupiterRider
81be9a803b Update README.md 2023-11-16 13:22:48 +01:00
JupiterRider
072413410f Update README.md 2023-11-16 13:18:54 +01:00
JupiterRider
efaf005350 implement version check 2023-11-16 13:06:56 +01:00
Milan Nikolic
5c837b68a5
Merge pull request #314 from unklnik/master
Add more examples
2023-11-15 22:30:08 +01:00
JupiterRider
c535f250e9
Fix typo in README.md 2023-11-15 22:22:37 +01:00
JupiterRider
7959c31cff
Update README.md 2023-11-15 22:19:56 +01:00
unkl nik
1c9c6cec66
Merge branch 'gen2brain:master' into master 2023-11-15 22:45:12 +02:00
unkl nik
1500124ca1 add more examples 2023-11-15 22:44:54 +02:00
JupiterRider
a013367ef2 Final purego functions implemented 2023-11-15 21:38:29 +01:00
JupiterRider
c290701005 More functions 2023-11-15 17:04:22 +01:00
JupiterRider
0421884b62 Typo fixed 2023-11-14 21:33:43 +01:00
JupiterRider
4bb11a7b06 More functions implemented 2023-11-14 21:31:29 +01:00
JupiterRider
b010adb6a2 More functions implemented 2023-11-14 20:44:44 +01:00
JupiterRider
c5cba9a408 Resolve merge conflicts -.- 2023-11-14 17:29:31 +01:00
Milan Nikolic
45c6718b99
Move TraceLogCallbackFun, add Vr structs 2023-11-12 22:15:19 +01:00
Milan Nikolic
f3383deda8
Merge pull request #312 from unklnik/master
Add more core examples
2023-11-12 21:23:20 +01:00
unkl nik
032749cff8 Merge branch 'master' of https://github.com/unklnik/raylib-go 2023-11-12 22:12:30 +02:00
unkl nik
34665bd091 add core examples 2023-11-12 22:12:17 +02:00
Milan Nikolic
6eb8c8c1f6
Update rcore 2023-11-12 20:43:27 +01:00
Milan Nikolic
1a9e976d4c
Move audio callback 2023-11-12 17:54:56 +01:00
Milan Nikolic
3d34b7e25a
Move audio structs 2023-11-12 17:51:38 +01:00
Milan Nikolic
61a393d4ce
Lint 2023-11-12 17:21:56 +01:00
Milan Nikolic
cca4bb4659
Use TraceLog instead of printf 2023-11-12 16:10:50 +01:00
Milan Nikolic
5a62d0591a
Update rcamera 2023-11-12 15:50:26 +01:00
Milan Nikolic
f7a84b3d10
Update raymath 2023-11-12 15:48:46 +01:00
Milan Nikolic
4e92726a47
Update raygui, issue #262 2023-11-12 15:44:49 +01:00
Milan Nikolic
f492eb5f2b
Update rres 2023-11-12 12:21:11 +01:00
Milan Nikolic
3c5dec7f24
Update C sources 2023-11-12 11:58:48 +01:00
Milan Nikolic
0d91e92a2f
Update example 2023-11-12 11:46:29 +01:00
Milan Nikolic
48115fd903
Update rlgl 2023-11-12 11:36:46 +01:00
Milan Nikolic
8e9d04aaec
Add math functions 2023-11-12 10:58:33 +01:00
Milan Nikolic
2142971835
Add math functions 2023-11-12 10:44:46 +01:00
Milan Nikolic
44e78ec5d1
Merge pull request #310 from rocktavious/kr/vector_rotate
Add method to rotate vector by quaternion
2023-11-11 22:55:54 +01:00
Milan Nikolic
a79a9b93b5
Merge pull request #311 from rocktavious/kr/quat_eular
Add Quaternion Euler methods
2023-11-11 22:55:46 +01:00
Kyle Rockman
2045c22530 Add Quaternion Euler methods 2023-11-11 12:58:54 -06:00
Kyle Rockman
94a602d292 Add method to rotate vector by quaternion 2023-11-11 12:41:47 -06:00
Milan Nikolic
a4ea6d49d9
Add Automation functions 2023-11-10 12:09:15 +01:00
Milan Nikolic
c61ef10346
Update examples 2023-11-10 10:57:07 +01:00
Milan Nikolic
5830da3d87
Add Spline functions 2023-11-10 09:57:03 +01:00
Milan Nikolic
61e85d2e51
Re-add functions 2023-11-10 08:59:49 +01:00
Milan Nikolic
e5c1864fd8
Reimplement camera in Go 2023-11-10 08:27:42 +01:00
Milan Nikolic
6f02771b52
Add some math functions 2023-11-10 08:26:46 +01:00
Milan Nikolic
93855022d7
Update definitions 2023-11-10 08:26:22 +01:00
Milan Nikolic
d0612c27b2
Update C sources 2023-11-09 14:32:33 +01:00
Milan Nikolic
07d1374c41
Add Automation structs 2023-11-09 12:07:41 +01:00
Milan Nikolic
0ed826cfa9
Update README.md 2023-11-09 11:01:27 +01:00
Milan Nikolic
85f651a3cd
Update README.md 2023-11-09 10:27:23 +01:00
Milan Nikolic
3c61a95ab0
Update cgo 2023-11-09 09:44:48 +01:00
Milan Nikolic
3274fb58ea
Add new math functions 2023-11-09 09:22:41 +01:00
Milan Nikolic
f953e65a3a
Move functions 2023-11-09 08:55:58 +01:00
Milan Nikolic
9f257fc589
Add SetAudioStreamCallback, issue #279 2023-11-09 00:45:46 +01:00
Milan Nikolic
b09590165d
Merge pull request #307 from Peternj42/Fix-for-UploadMesh
Fix for UnloadMesh per issue #303
2023-11-08 23:36:23 +01:00
Peter Johnson
5f92cb5067 Fix for UnloadMesh per issue #303 2023-11-08 13:53:20 -08:00
Peter Johnson
f8a694c149 Fix for UnloadMesh per issue #303 2023-11-08 13:33:57 -08:00
Peter Johnson
4c850b2472 Fix for UnloadMesh per issue #303 2023-11-08 13:28:48 -08:00
Milan Nikolic
d08f80c4b8
Update README.md 2023-11-08 22:24:21 +01:00
Peter Johnson
b2b81aefc9 Revert "Add binding for UploadMesh()"
This reverts commit bffb8baffd6d90dc29aaec33d35c75a2122ee967.
2023-11-08 13:20:41 -08:00
Milan Nikolic
94e162104c
Move functions 2023-11-08 21:44:41 +01:00
Milan Nikolic
22e56137c1
Add UpdateMeshBuffer 2023-11-08 21:14:00 +01:00
Milan Nikolic
d269b291f2
Add LoadTextureDepth 2023-11-08 21:00:58 +01:00
Milan Nikolic
8cadac2fbc
Add new text functions 2023-11-08 20:46:40 +01:00
Milan Nikolic
f75cc39078
Add new text functions 2023-11-08 20:16:56 +01:00
Milan Nikolic
635c63d7cc
Add new shapes functions 2023-11-08 19:34:50 +01:00
Milan Nikolic
3f31944caf
Enable SVG 2023-11-08 19:09:33 +01:00
Milan Nikolic
42fa435e0f
Add new textures functions 2023-11-08 19:08:52 +01:00
Milan Nikolic
c869c2069e
Update Android instructions 2023-11-07 14:58:44 +01:00
Milan Nikolic
5731069262
Add Name field to ModelAnimation 2023-11-07 14:43:17 +01:00
Milan Nikolic
4da19689d8
Add es3 build tag 2023-11-07 14:39:26 +01:00
Milan Nikolic
040d87fb79
Use unsafe Slice/SliceData 2023-11-07 14:25:51 +01:00
Milan Nikolic
e3d8d6dd12
Rename angle to es2 2023-11-07 14:06:19 +01:00
Milan Nikolic
c0b171213e
Add new core and audio functions 2023-11-07 13:56:05 +01:00
Milan Nikolic
1ffd9fb3ca
Merge pull request #305 from rocktavious/kr/fix-custom-mesh
Bugfix for UploadMesh and UnloadMesh based on #303
2023-11-07 13:00:46 +01:00
Milan Nikolic
a26d249d55
Update actions 2023-11-07 12:59:35 +01:00
Kyle Rockman
d03a809e9d Bugfix for UploadMesh and UnloadMesh based on #303 2023-11-07 05:15:15 -06:00
Milan Nikolic
a8f73b764b
Merge pull request #304 from unklnik/master
Easings Examples Added
2023-11-07 08:04:53 +01:00
unkl nik
3692bf3772
Merge branch 'gen2brain:master' into master 2023-11-06 22:04:23 +02:00
unkl nik
52ec197c4c easings examples added 2023-11-06 22:04:04 +02:00
Milan Nikolic
20ca90bb33
Merge pull request #302 from unklnik/master
add more shapes examples
2023-11-06 14:24:46 +01:00
unkl nik
64b853abaa Merge branch 'master' of https://github.com/unklnik/raylib-go 2023-11-06 06:52:34 +02:00
unkl nik
6597a94265 removed example 2023-11-06 06:52:27 +02:00
unkl nik
52699c0e87
Merge branch 'gen2brain:master' into master 2023-11-05 23:24:40 +02:00
unkl nik
1300701806 add more shapes examples 2023-11-05 23:24:20 +02:00
Milan Nikolic
30493ab2ab
Merge pull request #300 from JupiterRider/master
Update cgo_linux_sdl.go
2023-11-05 20:26:21 +01:00
JupiterRider
d3b09cb124
Update cgo_linux_sdl.go 2023-11-05 20:15:48 +01:00
Milan Nikolic
1e13bd47a6
Update Android instructions 2023-11-04 16:36:37 +01:00
Milan Nikolic
a01d6ec490
Fix Android build 2023-11-04 16:32:46 +01:00
Milan Nikolic
3120f5fb08
Update Android instructions, issue #235 2023-11-04 14:48:26 +01:00
Milan Nikolic
e8ff82b394
Fix Android build 2023-11-04 14:47:09 +01:00
Milan Nikolic
4ad2d2748d
Test Wayland build 2023-11-04 13:56:34 +01:00
Milan Nikolic
211d960bdd
Test DRM build 2023-11-04 13:48:29 +01:00
Milan Nikolic
51b429b408
Test SDL build 2023-11-04 13:41:07 +01:00
Milan Nikolic
6180532752
Fix flags for SDL backend 2023-11-04 13:39:59 +01:00
Milan Nikolic
7196155b6c
Silence warning 2023-11-04 13:30:57 +01:00
Milan Nikolic
48e1caae0a
Silence warning 2023-11-04 13:28:52 +01:00
Milan Nikolic
d8e3cf78fd
Silence warning 2023-11-04 13:21:07 +01:00
Milan Nikolic
3360650d39
Silence warning 2023-11-04 13:18:36 +01:00
Milan Nikolic
5943b16bad
Silence warning 2023-11-04 13:16:24 +01:00
Milan Nikolic
516d1378a4
Remove RPI 2023-11-04 13:10:05 +01:00
Milan Nikolic
af9daf8452
Add SDL backend 2023-11-04 13:08:38 +01:00
Milan Nikolic
15fba7e9ac
Update C sources 2023-11-04 13:06:19 +01:00
Milan Nikolic
443f35cfac
Merge pull request #298 from unklnik/master
add model examples
2023-11-04 11:22:11 +01:00
unkl nik
94df411e86
Merge branch 'gen2brain:master' into master 2023-10-30 22:07:16 +02:00
unkl nik
75001379dc add models examples 2023-10-30 22:06:52 +02:00
Milan Nikolic
0e306ce58c
Merge pull request #297 from unklnik/master
Adding more model & shader examples
2023-10-29 17:49:46 +01:00
unkl nik
2e1cd4fca0 add more models examples 2023-10-27 22:06:20 +02:00
unkl nik
aa476e0a1c
Merge branch 'gen2brain:master' into master 2023-10-25 21:54:19 +02:00
unkl nik
35682b2387 add more model & shader examples 2023-10-25 21:53:53 +02:00
Milan Nikolic
3f961a273f
Test gui examples 2023-10-22 01:16:20 +02:00
Milan Nikolic
2d673bb5f4
Merge pull request #294 from unklnik/master
add more texture & shader examples
2023-10-21 22:36:13 +02:00
unkl nik
32413f57ee
Merge branch 'gen2brain:master' into master 2023-10-21 22:23:52 +02:00
unkl nik
f121c0e386 add more texture & shader examples 2023-10-21 22:23:22 +02:00
Milan Nikolic
3167545b2b
Merge pull request #293 from dusk125/add-Unloadimagecolors
Add UnloadImageColors
2023-10-21 19:21:16 +02:00
Allen Ray
fac9477f84 Add UnloadImageColors 2023-10-21 12:15:35 -04:00
Milan Nikolic
02654bd48c
Merge pull request #292 from nellfs/fix-fruit-spawn
Fixing snake example fruit spawning
2023-10-21 10:45:36 +02:00
Milan Nikolic
0b40830c49
Merge pull request #291 from unklnik/master
add more textures examples
2023-10-21 10:36:00 +02:00
nellfs
a272669c53 Fixing snake example fruit spawn 2023-10-20 22:31:51 -03:00
unkl nik
0dda56d08d add more textures examples 2023-10-20 22:01:45 +02:00
Milan Nikolic
10c61020bc
Merge pull request #290 from JupiterRider/master
Getters for Model type added
2023-10-17 21:18:53 +02:00
JupiterRider
cbdedc5843
Merge branch 'gen2brain:master' into master 2023-10-17 20:59:11 +02:00
Milan Nikolic
f7f928dba6
Merge pull request #289 from unklnik/master
Added more Core & Shader examples
2023-10-17 20:20:54 +02:00
JupiterRider
a6238d7cd6 Getters for Model type added 2023-10-17 20:16:43 +02:00
unkl nik
6f0f7a0d03
Merge branch 'gen2brain:master' into master 2023-10-17 19:46:34 +02:00
unkl nik
3e96c7e9df add more Core examples 2023-10-17 19:46:08 +02:00
Milan Nikolic
429cdff4ee
Merge pull request #288 from JupiterRider/master
"KeyNull" added
2023-10-17 15:52:26 +02:00
JupiterRider
e9649c4ced "KeyNull" added 2023-10-17 15:35:18 +02:00
Milan Nikolic
fa2a4d6247
Merge pull request #286 from patrickReiis/master
fix: rand.Seed is deprecated
2023-10-16 11:41:08 +02:00
P. Reis
2e003fe385 fix: rand.Seed is deprecated, change to New(NewSource(seed)) 2023-10-15 19:43:40 -03:00
unkl nik
4847c62547 Merge branch 'master' of https://github.com/unklnik/raylib-go 2023-10-15 20:02:38 +02:00
unkl nik
4b88d9867b Add Color Mix Example 2023-10-15 20:02:24 +02:00
Milan Nikolic
e9da61431c
Merge pull request #285 from unklnik/master
Updated Light.go - reflect.SliceHeader Deprecated
2023-10-10 17:51:30 +02:00
unkl nik
e7668cd4cb Sprite Explosion Example 2023-10-10 17:34:38 +02:00
unkl nik
a163aa486d port new texture example
Port of the original example at this link https://www.raylib.com/examples/textures/textures_sprite_explosion.html to Go
2023-10-06 14:38:30 +02:00
unkl nik
da52debc9b Failing due to RayGui import not sure why
The example works however something to do with the RayGui import is causing it to fail, deleting.
2023-10-04 17:31:15 +02:00
unklnik
bbc8e558a5 shapes examples 2023-10-04 17:10:01 +02:00
unklnik
d3497d36da updated light.go added basic lighting example 2023-09-30 21:01:10 +02:00
Milan Nikolic
dc25841510
Merge pull request #284 from unklnik/master
More examples
2023-09-28 20:13:14 +02:00
unklnik
d97aa6e3f6 porting new examples to Go from raylib.com/examples.html 2023-09-28 20:00:13 +02:00
unklnik
ba70e484d0 Merge branch 'master' of https://github.com/unklnik/raylib-go 2023-09-28 19:20:04 +02:00
unklnik
d1ff37fc1c porting new examples to Go from https://www.raylib.com/examples.html 2023-09-28 19:18:53 +02:00
Milan Nikolic
60733cd63d
Merge pull request #282 from unklnik/master
Adding Raymarching Shaders Example
2023-09-26 18:29:06 +02:00
unklnik
3b62f9f7a4 Add existing file 2023-09-26 17:56:09 +02:00
Milan Nikolic
f770ca0981
Merge pull request #278 from MurilloBrand/master
Fixing TextBox issue and adding Trim to other inputs
2023-08-26 18:00:40 +02:00
Murillo Brandão
b80e660c8d
Fixing file with gofmt 2023-08-26 12:45:54 -03:00
Milan Nikolic
211002595f
Merge pull request #277 from wintermute-cell/master
bugfix: change raygui.SetStyle and raygui.GetStyle to use int64 for the value
2023-08-26 17:22:24 +02:00
Murillo Brandão
a99e6eea97
Fixing TextBox issue and adding Trim to other inputs 2023-08-26 11:31:43 -03:00
wintermute
305603f289 bugfix: change raygui.SetStyle and raygui.GetStyle to use int64 for the value 2023-08-20 23:53:08 +02:00
Milan Nikolic
30cfef01da
Merge pull request #268 from glitchland/master
Fix texture2d as it is deprecated name
2023-08-18 20:47:03 +02:00
Milan Nikolic
7de2ce59aa
Merge pull request #276 from worldwalker2000/fix_set_trace_log_level_name
rename SetTraceLog to SetTraceLogLevel
2023-08-18 19:59:21 +02:00
worldwalker2000
caa2f70fd5 updated comments 2023-08-18 10:03:04 -07:00
worldwalker2000
d90e3e4de5 rename SetTraceLog to SetTraceLogLevel 2023-08-17 22:50:58 -07:00
Milan Nikolic
1083eace20
Merge pull request #273 from nomad-software/add-drawbillboardpro
Added DrawBillboardPro function.
2023-07-19 23:10:22 +02:00
Gary Willoughby
a72c780123 Added DrawBillboardPro function. 2023-07-19 19:42:02 +01:00
glitch
06cc150dff fix deprecated texture loading function name in glsl 2023-06-30 18:37:46 -06:00
glitch
57adf66c58 fix deprecated texture loading function name in glsl 2023-06-30 18:32:59 -06:00
Milan Nikolic
9def9b04c9
Update Wayland 2023-06-21 13:11:37 +02:00
Milan Nikolic
ebac46345c
Update Wayland 2023-06-21 13:05:08 +02:00
Milan Nikolic
3ca5eae18e
Update modules 2023-06-21 11:36:35 +02:00
Milan Nikolic
a6644da243
Do not link GL when ANGLE is used 2023-06-21 11:19:43 +02:00
Milan Nikolic
048c1b598c
Merge pull request #264 from JupiterRider/master
Redesign of rres
2023-06-06 11:46:59 +02:00
JupiterRider
95469afaa3
Update README.md 2023-06-04 12:25:19 +02:00
JupiterRider
81ea8a7ab0 Add go functions for rres-raylib.h 2023-06-04 12:15:07 +02:00
JupiterRider
349288d189 Add more functions 2023-06-04 11:24:25 +02:00
JupiterRider
fb93c7c94b rres rewrite (update sources, create go-types, add some functions) 2023-06-02 21:31:11 +02:00
Milan Nikolic
d84e4cc82f
Merge pull request #259 from JupiterRider/master
Add more new functions (4.5.0 Update)
2023-05-11 19:06:20 +02:00
JupiterRider
bb7c8b3f3b Add more new functions 2023-05-11 16:36:48 +02:00
Milan Nikolic
3fb1258932
Merge pull request #258 from JupiterRider/master
Add new functions (4.5.0 Update)
2023-05-09 23:22:00 +02:00
JupiterRider
896586af0d Add new functions 2023-05-09 20:15:53 +02:00
Milan Nikolic
0fdd3be307
Merge pull request #256 from JupiterRider/master
Update examples
2023-04-13 21:24:25 +02:00
JupiterRider
68a3acee9d Cleanup go.sum 2023-04-13 21:10:33 +02:00
JupiterRider
363905fef0 Update examples 2023-04-13 20:48:50 +02:00
Milan Nikolic
a62b332ffc
Update raygui copy 2023-04-13 19:22:35 +02:00
Milan Nikolic
32e2cc26d6
Update C sources for Android and noaudio 2023-04-13 19:08:55 +02:00
Milan Nikolic
0677b256f1
Merge pull request #255 from JupiterRider/master
Update to v4.5
2023-04-13 19:06:15 +02:00
JupiterRider
7116f4cf05 Re-enable BMP and JPG support, add OpenGL ES 2.0 for desktop platforms, update README.md 2023-04-13 18:46:45 +02:00
JupiterRider
70e5708243 UpdateCameraPro function added in raylib/rcamera.go 2023-04-09 11:16:17 +02:00
JupiterRider
9e86471b2f Remove deprecaded functions, fix build errors/warnings 2023-04-07 21:22:05 +02:00
JupiterRider
e0ea1245da Multichannel audio support dropped (see raylib commit 1b873b028f18486d31bb5c75f6b04a4de4c8d9fa) 2023-04-07 20:28:59 +02:00
JupiterRider
781c207678 Update C sources 2023-04-07 20:23:18 +02:00
Milan Nikolic
22ca1484d1
Merge pull request #252 from JupiterRider/master
Getter and setter for font added
2023-04-04 10:18:41 +02:00
JupiterRider
8a6cf52891 Comment updated 2023-03-25 12:37:13 +01:00
JupiterRider
c3738608cf Getter and setter for font added 2023-03-25 12:27:33 +01:00
Milan Nikolic
61db589fe8
Update modules 2023-03-07 13:27:09 +01:00
Milan Nikolic
94b60f81ec
Update modules 2023-03-07 13:26:16 +01:00
Milan Nikolic
60f06875ad
Update modules 2023-03-07 12:50:54 +01:00
Milan Nikolic
f0edd24743
Update modules 2023-03-07 12:41:42 +01:00
Milan Nikolic
42e75c98a8
Update modules 2023-03-07 12:24:35 +01:00
Milan Nikolic
5dcd22c1f8
Update actions 2023-03-07 12:18:32 +01:00
Milan Nikolic
b681b7890d
Update actions 2023-03-07 12:11:26 +01:00
Milan Nikolic
999d3286f8
Update actions 2023-03-07 12:08:56 +01:00
Milan Nikolic
4c00ef823f
Update modules 2023-03-07 12:00:33 +01:00
Milan Nikolic
cffbfcd371
Update modules 2023-03-07 11:37:55 +01:00
Milan Nikolic
44036d2916
Update modules 2023-02-21 13:49:41 +01:00
Milan Nikolic
0c9d5a435c
Update modules 2023-02-13 09:13:31 +01:00
Milan Nikolic
62ed2c3798
Add copy of raylib.h for raygui, issue #245 2023-02-13 09:09:48 +01:00
Milan Nikolic
dc8c9e1041
Update modules 2023-02-13 08:52:20 +01:00
Milan Nikolic
8447b37c50
Add SRCDIR, issue #245 2023-02-13 08:48:19 +01:00
Milan Nikolic
e394da6f51
Merge pull request #244 from JupiterRider/master
Update examples/go.mod physics/go.mod raygui/go.mod
2023-02-11 20:15:43 +01:00
JupiterRider
f3d7d84178 gofmt -s -w -l . 2023-02-11 16:34:47 +01:00
JupiterRider
2243b93c92 Update examples/go.mod physics/go.mod raygui/go.mod 2023-02-11 16:26:09 +01:00
Milan Nikolic
963c891c4e
Merge pull request #242 from JupiterRider/2023-01_31_b
UploadMesh(mesh *Mesh, dynamic bool) added
2023-01-31 17:28:22 +01:00
JupiterRider
c6f3e4ca72
Update comment at UploadMesh 2023-01-31 17:03:29 +01:00
Milan Nikolic
2048fcd32b
Merge pull request #241 from JupiterRider/master
Update rcore.go
2023-01-31 16:59:52 +01:00
JupiterRider
ef890fad63
UploadMesh(mesh *Mesh, dynamic bool) added 2023-01-31 16:51:12 +01:00
JupiterRider
f5232412d3
Update rcore.go 2023-01-28 14:37:09 +01:00
Milan Nikolic
8344ddbee9
Merge pull request #237 from JupiterRider/master
Mouse Cursor Enum added
2023-01-19 17:34:14 +01:00
JupiterRider
3bfe7ba043
Mouse Cursor Enum added 2023-01-19 17:05:51 +01:00
Peter Johnson
417130bd8e Add binding for UploadMesh 2022-12-15 00:00:48 -08:00
Peter Johnson
eefc9f5ff6 Add binding for UploadMesh 2022-12-14 23:12:21 -08:00
Peter Johnson
453c17ad66 Add binding for UploadMesh() 2022-12-14 23:09:58 -08:00
Milan Nikolic
d6b1dea578
Update actions 2022-12-04 13:31:37 +01:00
Milan Nikolic
411ec2259a
Build examples, issue #223 2022-12-04 13:25:50 +01:00
Milan Nikolic
317e9eea6a
Update examples 2022-12-04 13:20:26 +01:00
Milan Nikolic
ab3ade6210
Update modules 2022-12-04 12:58:11 +01:00
Milan Nikolic
3b16dbe504
Update UpdateAudioStream 2022-12-02 14:42:49 +01:00
Milan Nikolic
d5843a09b1
Update raygui, silence warnings 2022-12-02 14:08:54 +01:00
Milan Nikolic
73355baab9
Update rlgl 2022-12-02 13:37:58 +01:00
Milan Nikolic
23cae4c96c
Merge pull request #231 from Konstantin8105/example
add example
2022-11-27 20:32:18 +01:00
Milan Nikolic
129deee5be
Fmt 2022-11-27 20:28:31 +01:00
Milan Nikolic
f41e8d7d51
Update rlgl 2022-11-27 20:21:15 +01:00
Konstantin8105
2d87920eb0 add example 2022-11-27 21:56:11 +03:00
Milan Nikolic
95269734e2
Remove Makefile 2022-11-27 17:50:24 +01:00
Milan Nikolic
89845f559c
Merge pull request #226 from Konstantin8105/workflow
golang: verification
2022-11-27 17:46:44 +01:00
Milan Nikolic
18ffd04b2a
Update README.md, closes #229 2022-11-26 21:59:55 +01:00
Milan Nikolic
c0329135d1
Add missing image, issue #222 2022-11-26 21:34:27 +01:00
Milan Nikolic
96a81e0b26
Merge pull request #228 from Konstantin8105/guiREADME
raygui: fix README pictures
2022-11-26 19:20:30 +01:00
Milan Nikolic
820f25f1bc
Merge pull request #225 from Konstantin8105/rlgl
Rlgl
2022-11-26 19:19:00 +01:00
Konstantin8105
e80fa26123 fix 2022-11-26 21:14:53 +03:00
Konstantin8105
38350af2b6 raygui: fix README pictures 2022-11-26 21:11:54 +03:00
Konstantin8105
3a6db7b9f2 fix 2022-11-26 21:07:47 +03:00
Konstantin8105
174a597b39 fix by golint 2022-11-26 21:02:24 +03:00
Konstantin8105
5b3c524e0a staticcheck fix 2022-11-26 20:54:05 +03:00
Konstantin8105
4ec5712bd3 golang: verification 2022-11-26 20:47:04 +03:00
Milan Nikolic
e07371070a
Merge pull request #221 from Konstantin8105/master
Gui binding:3.5
2022-11-26 18:27:20 +01:00
Konstantin8105
26f7983161 add example 2022-11-26 20:17:52 +03:00
Konstantin8105
3f325631df add implementation 2022-11-26 20:02:10 +03:00
Konstantin8105
48e175c3b5 add pictures in README 2022-11-25 14:28:20 +03:00
Konstantin8105
f04dd7a5e2 add pictures 2022-11-25 14:11:05 +03:00
Konstantin8105
25edfb6ffb fix example basic_controls 2022-11-25 14:10:49 +03:00
Konstantin8105
2119963a25 add support C.**char 2022-11-25 12:50:46 +03:00
Konstantin8105
cb0b92e73a fix: add icons, nil C pointers 2022-11-25 12:50:20 +03:00
Konstantin8105
50a10489d6 added TabBar 2022-11-25 12:11:16 +03:00
Konstantin8105
ba9f648f51 add ListViewEx 2022-11-25 12:08:02 +03:00
Konstantin8105
a23ccfed32 add CheckBox 2022-11-25 11:56:26 +03:00
Konstantin8105
12b7af908c add TextBoxMulti 2022-11-25 11:53:20 +03:00
Konstantin8105
ded0c796c3 example:button: remove replace 2022-11-25 11:48:34 +03:00
Konstantin8105
0a50d1fd06 add TextInputBox 2022-11-25 11:27:20 +03:00
Konstantin8105
0e3a73deef raygui3_5: use acrual raylib module 2022-11-25 10:32:46 +03:00
Konstantin8105
0009968cad relocation raygui.h 2022-11-25 10:29:38 +03:00
Konstantin8105
54703e6475 fix TextBox 2022-11-24 10:05:28 +03:00
Konstantin8105
6a00c75904 add picture 2022-11-23 20:30:22 +03:00
Konstantin8105
a205b50f79 add few widgets 2022-11-23 20:28:23 +03:00
Konstantin8105
1f4e0d34c5 refactoring todos 2022-11-23 18:50:25 +03:00
Konstantin8105
2f6776b30e step 2022-11-23 15:44:50 +03:00
Konstantin8105
37f9870e66 renaming 2022-11-23 15:43:57 +03:00
Konstantin8105
ca6c886e87 add example 2022-11-23 15:36:06 +03:00
Konstantin8105
326d649f3d step 2022-11-23 15:19:43 +03:00
Konstantin8105
ff8baa4ce7 examples 2022-11-23 12:41:26 +03:00
Konstantin8105
f19f61b778 step 2022-11-23 12:35:50 +03:00
Konstantin8105
7a467d5aae gui folder 2022-11-23 12:26:13 +03:00
Konstantin8105
fe6d2c0ed3 step 2022-11-22 18:50:35 +03:00
Konstantin8105
0bec81c656 step 2022-11-22 18:43:41 +03:00
Konstantin8105
b87c8653e5 step 2022-11-22 18:41:59 +03:00
Konstantin8105
2f5d911417 step 2022-11-22 18:39:52 +03:00
Konstantin8105
05e7c1f5e7 step 2022-11-22 18:29:01 +03:00
Konstantin8105
6e21bd54ae step 2022-11-22 18:24:03 +03:00
Konstantin8105
a7d8b702ef step 2022-11-22 18:21:43 +03:00
Konstantin8105
096a3a00b2 step 2022-11-22 18:19:33 +03:00
Konstantin8105
e8a384ed13 step 2022-11-22 18:14:43 +03:00
Konstantin8105
7dde1dd513 step 2022-11-22 18:10:24 +03:00
Konstantin8105
806e6560f2 gui: step 2022-11-22 18:08:31 +03:00
Milan Nikolic
ce3c8e83dd
Merge pull request #218 from JupiterRider/homedir-fix
Typo in  rl.HomeDir()
2022-11-17 14:00:19 +01:00
Milan Nikolic
d9a8297a00
Merge pull request #216 from JupiterRider/master
Update cgo_freebsd.go
2022-11-17 14:00:03 +01:00
Milan Nikolic
e3088b12b3
Merge pull request #219 from JupiterRider/openbsd-support
OpenBSD support added
2022-11-17 13:59:42 +01:00
JupiterRider
2f1e12e84e
OpenBSD support added 2022-11-12 17:32:00 +01:00
JupiterRider
cbbf9e3539
Update utils.go 2022-11-12 15:38:08 +01:00
JupiterRider
33c901dbc5
Update cgo_freebsd.go 2022-11-12 13:51:53 +01:00
Milan Nikolic
93f4babf10
Merge pull request #208 from JupiterRider/master
Cleanup utils - especially logging
2022-11-11 15:45:26 +01:00
Milan Nikolic
461d2f4862
Merge pull request #215 from JupiterRider/freebsd-support
Adding FreeBSD support
2022-11-11 15:44:55 +01:00
JupiterRider
2904dbeb86
Typo fixed in cgo_freebsd.go 2022-11-11 14:01:12 +01:00
JupiterRider
ab99ef2990
FreeBSD support added 2022-11-11 13:48:35 +01:00
Milan Nikolic
3f14ff470c
Merge pull request #213 from ChrisPHP/add-ex-cylinder-bindings
Adds DrawCylinderEx and DrawCylinderWiresEx bindings
2022-11-05 15:39:54 +01:00
Milan Nikolic
f4ab5911b4
Merge pull request #211 from KidawaGH/master
Fixed GetFPS return type
2022-11-05 15:39:36 +01:00
ChrisPHP
cc37594632 Added necessary comments 2022-11-04 22:04:54 +00:00
ChrisPHP
a661bc65b2 Spelling mistakes 2022-11-04 21:18:26 +00:00
ChrisPHP
c5afb3b941 Added bindings for DrawCylinderWiresEx and DrawCylinderEx. 2022-11-04 20:59:26 +00:00
KidawaGH
d8d13e238d
Fixed GetFPS return type
GetFPS function now returns an int32 to mirror C version of raylib (https://github.com/raysan5/raylib/blob/master/src/rcore.c)
2022-11-03 23:19:31 +01:00
Milan Nikolic
892ce4892c
Merge pull request #210 from alessandrojcm/master
Added ImageDrawLine and ImageDrawLineV functions to rtexture.go
2022-10-31 16:27:36 +01:00
Alessandro Cuppari
971b452217 Fixed signature of ImageDrawLineV 2022-10-31 14:19:58 +00:00
Alessandro Cuppari
4ff5b2cdc8 Added ImageDrawLine and ImageDrawLineV 2022-10-31 14:07:32 +00:00
JupiterRider
e33a1830c9
Update utils_android.go 2022-10-25 22:09:18 +02:00
JupiterRider
460dab9501
Update utils_android.go 2022-10-25 22:02:35 +02:00
JupiterRider
bd025d2b1e
Create utils_android.go 2022-10-25 22:02:00 +02:00
JupiterRider
76f1c56135
Update utils.go 2022-10-25 21:58:31 +02:00
JupiterRider
c1f48ea0ac
Update utils.go 2022-10-25 21:33:08 +02:00
JupiterRider
37fe6619d4
Update platform_android.go 2022-10-25 21:31:12 +02:00
JupiterRider
010d4eb10f
Update utils.go 2022-10-25 20:34:23 +02:00
JupiterRider
ef4e71cff7
Update raylib.go 2022-10-25 20:29:53 +02:00
JupiterRider
3c6fcf8bce
Update utils.go 2022-10-25 20:26:32 +02:00
JupiterRider
3f3fdc5c6f
Update utils.go 2022-10-25 20:25:29 +02:00
JupiterRider
9e579dc762
Delete utils_windows.go 2022-10-25 20:24:54 +02:00
JupiterRider
b3ec30afeb
Delete utils_android.c 2022-10-25 20:24:33 +02:00
JupiterRider
91e8bc7a5a
Delete utils_android.go 2022-10-25 20:24:15 +02:00
Milan Nikolic
dfbb5ab754
Fix logging, issue #203 2022-10-23 14:56:34 +02:00
Milan Nikolic
faa881fe83
Add new functions 2022-10-23 14:50:15 +02:00
Milan Nikolic
ba0df12858
Update CGO for GLFW 2022-10-23 14:22:50 +02:00
Milan Nikolic
1b0affeed0
Update C sources 2022-10-23 14:21:08 +02:00
Milan Nikolic
a460a0fc06
Merge pull request #200 from iszla/fixLogging
Fix bitmasking for logging
2022-09-22 10:19:30 +02:00
Karl Hesselgren
69fb70441e Fix bitmasking for logging in windows and android implementations 2022-09-22 10:12:34 +02:00
Milan Nikolic
d733c5fb89
Merge pull request #202 from ScienceMarc/fixed-colornormalize
fixed ColorNormalize
2022-09-22 09:41:11 +02:00
Marc Lavergne
bcec0e0e0f fixed ColorNormalize 2022-09-22 00:16:49 -05:00
Karl Hesselgren
67b7cdfc1f Fix bitmasking for logging 2022-09-20 21:31:08 +02:00
Milan Nikolic
25ea53bfbb
Fix warning on Wayland 2022-08-29 14:47:29 +02:00
Milan Nikolic
0a5691486b
Update README.md 2022-08-27 18:58:20 +02:00
Milan Nikolic
8e21086fe1
Update examples 2022-08-27 18:42:04 +02:00
Milan Nikolic
6e090424c5
Change LoadFontEx to accept []rune, fixes #136 2022-08-27 17:37:54 +02:00
Milan Nikolic
f59ebefc8a
Format 2022-08-27 17:07:56 +02:00
Milan Nikolic
ab0b2293fd
Remove header 2022-08-27 16:53:24 +02:00
Milan Nikolic
cf628212a1
Add new functions 2022-08-27 16:51:14 +02:00
Milan Nikolic
70200c3151
Update Go sources 2022-08-27 16:09:36 +02:00
Milan Nikolic
b126ec93ee
Update dependencies 2022-08-27 16:01:12 +02:00
Milan Nikolic
b83dec57b5
Update C sources 2022-08-27 16:00:43 +02:00
Milan Nikolic
dd222de786
Remove appveyor 2022-08-27 15:58:40 +02:00
Milan Nikolic
98220fa4f1
Merge pull request #190 from Alireza-Ta/fix-type-conversion
fixed GetTime return type.
2022-08-05 14:40:27 +02:00
Alireza_T
3893e9cf63
fixed GetTime return type. 2022-08-05 16:58:25 +04:30
Milan Nikolic
2ba84634ed
Merge pull request #185 from Holmqvist1990/master
Add `MatrixRotateXYZ`
2022-07-02 17:37:20 +02:00
Holmqvist1990
cdb9bd006d added MatrixRotateXYZ 2022-07-02 17:22:46 +02:00
Milan Nikolic
25dea46fc2
Merge pull request #181 from jotoh98/master
fixed QuaternionNormalize
2022-06-02 01:43:31 +02:00
jotoh98
3af420ddc4 fixed QuaternionNormalize 2022-06-01 11:55:52 +02:00
Milan Nikolic
99078f2467
Merge pull request #178 from JupiterRider/master
Update Vector2Angle in raymath.go (again)
2022-05-20 22:54:54 +02:00
JupiterRider
af1ee70318
Update raymath.go 2022-05-20 17:00:03 +02:00
Milan Nikolic
3fda1cc8e9
Merge pull request #176 from JupiterRider/JupiterRider-patch-1
Fix for  #42
2022-05-20 10:53:59 +02:00
JupiterRider
477fc1f683
Fix for #42 2022-05-20 09:43:31 +02:00
Milan Nikolic
3232434224
Fix warning -Wdll-attribute-on-redeclaration 2022-04-16 14:15:06 +02:00
Milan Nikolic
efabb001d2
Enable bmp and jpg fileformat, issue #173 2022-03-24 20:20:15 +01:00
Milan Nikolic
4789e2ce21
Update examples 2022-03-24 17:00:38 +01:00
Milan Nikolic
c878e5c98a
Fix physics 2022-03-24 00:05:50 +01:00
Milan Nikolic
ffcaa81e5d
Silence warning, fixes #166 2022-03-23 14:14:48 +01:00
Milan Nikolic
7b9bbbba96
Add DrawTextureTiled, fixes #170 2022-03-23 14:09:10 +01:00
Milan Nikolic
b144285481
Allow passing nil to LoadShader, issue #172 2022-03-23 14:03:16 +01:00
Milan Nikolic
e4777d30ee
Update flags, fixes #165 2022-01-16 19:14:43 +01:00
Milan Nikolic
f98e6e2e57
Add animation functions, issue #156 2022-01-16 11:13:25 +01:00
Milan Nikolic
91296a7d50
Update flags, fixes #163 2022-01-16 11:06:08 +01:00
Milan Nikolic
feee92d046
Merge pull request #162 from mwr0007/master
Add models_first_person_maze example from Raylib base repo
2022-01-04 19:59:17 +01:00
Michael Redman
dc93b8ae04 rremove prefix from example directory 2022-01-04 12:54:53 -06:00
Michael Redman
ea4030de8c add models_first_person_maze example from raylib 2022-01-04 12:39:27 -06:00
Milan Nikolic
2f072dc2d2
Merge pull request #161 from koteyur/patch-1
Physics: fix wrong max float
2022-01-04 08:13:25 +01:00
Yury Kotov
2b5dfe3719 Physics: fix wrong max float
fltMax constant seems to have incorrect value '3.402823466 + 38' instead of '3.402823466e+38'.
But anyway, it makes more sense to use corresponding constant from math lib.
2022-01-04 01:30:48 +01:00
Milan Nikolic
96b53871d5
Merge pull request #159 from Agathon1/master
Added missing functions
2021-12-30 21:31:33 +01:00
Agathon
f40cb8d091
Added missing functions
`DrawLineBezierQuad`
`DrawLineBezierCubic`
`DrawLineStrip`
`DrawPolyLinesEx`
2021-12-30 22:00:37 +02:00
Milan Nikolic
29ba3cc508
Use color.RGBA, fixes 144 2021-11-14 12:16:02 +01:00
Milan Nikolic
ca8ab655a8
Update modules 2021-11-13 17:07:48 +01:00
Milan Nikolic
914ca1ffdc
Add new functions 2021-11-11 18:34:45 +01:00
Milan Nikolic
ec25c4ec9e
Add GRAPHICS_API_OPENGL_43 2021-11-11 18:00:12 +01:00
Milan Nikolic
8ec7b8522a
Add new functions 2021-11-11 17:46:15 +01:00
Milan Nikolic
bef397e0ae
Remove travis 2021-11-11 17:37:12 +01:00
Milan Nikolic
c553dc301c
Update README.md 2021-11-11 17:36:08 +01:00
Milan Nikolic
92fadd0e96
Update action 2021-11-11 17:30:41 +01:00
Milan Nikolic
dda13779be
gofmt 2021-11-11 17:03:15 +01:00
Milan Nikolic
3e1b83e017
Update action 2021-11-11 16:48:53 +01:00
Milan Nikolic
175f8a6130
Add actions 2021-11-11 16:44:27 +01:00
Milan Nikolic
7b91ce25fb
Update examples 2021-11-11 16:36:32 +01:00
Milan Nikolic
2013bc4628
Update/add Go functions 2021-11-11 16:34:15 +01:00
Milan Nikolic
607adace28
Update C sources 2021-11-11 16:30:47 +01:00
Milan Nikolic
aabc97d1c2
Merge pull request #149 from fivemoreminix/master
Add 7 ImageDraw* functions
2021-09-06 18:06:57 +02:00
Luke Wilson
574f3ebf35 Meant C.ImageDrawCircleV not C.ImageDrawCircle in return 2021-09-05 20:06:03 -05:00
Luke Wilson
3f7580afaa Add 7 ImageDraw* functions
Added: ImageClearBackground, ImageDrawPixel, ImageDrawPixelV, ImageDrawCircle, ImageDrawCircleV, ImageDrawRectangleV, ImageDrawRectangleRec.
2021-09-05 19:42:34 -05:00
Milan Nikolic
6acb55e3e6
Merge pull request #148 from xzebra/add-getcharpressed
add GetCharPressed
2021-09-05 18:16:06 +02:00
xzebra
0d93bf5aa4
add GetCharPressed 2021-09-05 18:41:27 +03:00
Milan Nikolic
1ca7b58c82
Update modules 2021-07-19 11:41:09 +02:00
Milan Nikolic
ccae99cbf6
Add support for Go modules, issue #141 2021-07-14 16:51:35 +02:00
Milan Nikolic
8ff192f923
Fix flags 2021-06-23 12:53:41 +02:00
Milan Nikolic
a8ac357c83
Merge pull request #140 from Jack-Ji/master
Add new api and example
2021-06-22 16:35:42 +02:00
jackji
698c972d9f remove LocationPointType and MaterialMapType, remain using const values 2021-06-22 22:10:29 +08:00
jackji
15ed58856b Add api and example for mesh drawing. 2021-06-22 21:37:46 +08:00
515 changed files with 206196 additions and 78929 deletions

View file

@ -1,23 +0,0 @@
version: "{build}"
clone_depth: 1
clone_folder: c:\gopath\src\github.com\gen2brain\raylib-go
environment:
GOPATH: c:\gopath
MSYS_PATH: c:\msys64
CGO_ENABLED: 1
CGO_CFLAGS: -g -O2 -Ic:\msys64\mingw32\include
GOARCH: 386
CC: i686-w64-mingw32-gcc
install:
- echo %GOPATH%
- echo %MSYS_PATH%
- set PATH=%GOPATH%\bin;c:\go\bin;%MSYS_PATH%\usr\bin;%MSYS_PATH%\mingw32\bin;%PATH%
- go version
- go env
build_script:
- bash -lc "cd /c/gopath/src/github.com/gen2brain/raylib-go && go get -t ./... && make"

3
.gitignore vendored
View file

@ -2,6 +2,3 @@
.idea
.vsc
.vs
# Ignore go.sum when go.mod is added.
go.sum

View file

@ -1,17 +0,0 @@
language: go
os:
- linux
#- osx
go:
- 1.9.x
before_install:
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
sudo apt-get update -y;
sudo apt-get install libxi-dev libxinerama-dev libxcursor-dev libxrandr-dev libgl1-mesa-dev -y;
fi
install:
- go get -t ./...

View file

@ -1,11 +0,0 @@
PACKAGES= raylib raygui easings physics rres
GO?= go
all: packages
packages:
@for pkg in ${PACKAGES}; do \
echo "Building package github.com/gen2brain/raylib-go/$$pkg..."; \
${GO} build github.com/gen2brain/raylib-go/$$pkg || exit 1; \
done

106
README.md
View file

@ -1,78 +1,92 @@
![logo](https://goo.gl/XlIcXz)
![logo](https://git.terah.dev/UnrealXR/raylib-go/raw/branch/master/assets/raylib-go_256x256.png)
## raylib-go
[![TravisCI Build Status](https://travis-ci.org/gen2brain/raylib-go.svg?branch=master)](https://travis-ci.org/gen2brain/raylib-go)
[![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/qv2iggrqtgl7xhr0?svg=true)](https://ci.appveyor.com/project/gen2brain/raylib-go)
[![GoDoc](https://godoc.org/github.com/gen2brain/raylib-go/raylib?status.svg)](https://godoc.org/github.com/gen2brain/raylib-go/raylib)
[![Go Report Card](https://goreportcard.com/badge/github.com/gen2brain/raylib-go)](https://goreportcard.com/report/github.com/gen2brain/raylib-go)
[![Examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://github.com/gen2brain/raylib-go/tree/master/examples)
[![Build Status](https://git.terah.dev/UnrealXR/raylib-go/actions/workflows/build.yml/badge.svg)](https://git.terah.dev/UnrealXR/raylib-go/actions)
[![GoDoc](https://godoc.org/git.terah.dev/UnrealXR/raylib-go/raylib?status.svg)](https://godoc.org/git.terah.dev/UnrealXR/raylib-go/raylib)
[![Go Report Card](https://goreportcard.com/badge/git.terah.dev/UnrealXR/raylib-go/raylib)](https://goreportcard.com/report/git.terah.dev/UnrealXR/raylib-go/raylib)
[![Examples](https://img.shields.io/badge/learn%20by-examples-0077b3.svg?style=flat-square)](https://git.terah.dev/UnrealXR/raylib-go/src/branch/master/examples)
Golang bindings for [raylib](http://www.raylib.com/), a simple and easy-to-use library to enjoy videogames programming.
This is a fork of [gen2brain's `raylib-go` bindings](https://github.com/gen2brain/raylib-go) to add [DRM leasing](https://wayland.app/protocols/drm-lease-v1) support.
raylib C source code is included and compiled together with bindings. Note that the first build can take a few minutes.
It is also possible to use raylib-go without cgo (Windows only; see requirements below).
### Requirements
##### Ubuntu
###### X11
apt-get install libgl1-mesa-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev
###### Wayland
apt-get install libgl1-mesa-dev libwayland-dev libxkbcommon-dev
apt-get install libgl1-mesa-dev libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev libwayland-dev libxkbcommon-dev
##### Fedora
###### X11
dnf install mesa-libGL-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel
###### Wayland
dnf install mesa-libGL-devel wayland-devel libxkbcommon-devel
dnf install mesa-libGL-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel wayland-devel libxkbcommon-devel
##### macOS
On macOS you need Xcode or Command Line Tools for Xcode.
On macOS, you need Xcode or Command Line Tools for Xcode (if you have `brew` installed, you already have this).
##### Windows
###### cgo
On Windows you need C compiler, like [Mingw-w64](https://mingw-w64.org) or [TDM-GCC](http://tdm-gcc.tdragon.net/).
You can also build binary in [MSYS2](https://msys2.github.io/) shell.
To remove console window, build with `-ldflags "-H=windowsgui"`.
###### purego (without cgo, i.e. CGO_ENABLED=0)
Download the raylib.dll from the assets on the [releases page](https://github.com/raysan5/raylib/releases). It is contained in the `raylib-*_win64_msvc*.zip`.
Put the raylib.dll into the root folder of your project or copy it into `C:\Windows\System32` for a system-wide installation.
It is also possible to build the DLL yourself. You can find more info at [raylib's wiki](https://github.com/raysan5/raylib/wiki/Working-on-Windows).
##### Android
[Android example](https://github.com/gen2brain/raylib-go/tree/master/examples/others/android/example).
[Android example](https://git.terah.dev/UnrealXR/raylib-go/tree/master/examples/others/android/example).
##### Raspberry Pi
##### Wasm
For web bindings, refer to [Raylib-Go-Wasm](https://github.com/BrownNPC/Raylib-Go-Wasm); it should be largely compatible with this repository.
[RPi example](https://github.com/gen2brain/raylib-go/tree/master/examples/others/rpi/basic_window).
### Installation
go get -v -u github.com/gen2brain/raylib-go/raylib
go get -v -u git.terah.dev/UnrealXR/raylib-go/raylib
### Build tags
* `drm` - build for Linux native mode, including Raspberry Pi 4 and other devices (PLATFORM_DRM)
* `rpi` - build for Raspberry Pi platform (PLATFORM_RPI)
* `wayland` - build against Wayland libraries
* `drm` - build for Linux native [DRM](https://en.wikipedia.org/wiki/Direct_Rendering_Manager) mode, including Raspberry Pi 4 and other devices (PLATFORM_DRM)
* `drm_disable_input` - disables keyboard input capabilities for the DRM backend. Requires the `drm` build tag as a prerequisite
* `drm_leasing` - enables Wayland DRM leasing capabilties. Requires the `drm` build tag as a prerequisite
* `sdl` - build for [SDL](https://github.com/libsdl-org/SDL) backend (PLATFORM_DESKTOP_SDL)
* `sdl3` - build for [SDL3](https://github.com/libsdl-org/SDL) backend (PLATFORM_DESKTOP_SDL3)
* `rgfw` - build for [RGFW](https://github.com/ColleagueRiley/RGFW) backend (PLATFORM_DESKTOP_RGFW)
* `noaudio` - disables audio functions
* `opengl43` - uses OpenGL 4.3 backend
* `opengl21` - uses OpenGL 2.1 backend (default is 3.3 on desktop)
* `opengl11` - uses OpenGL 1.1 backend (pseudo OpenGL 1.1 style)
* `es2` - uses OpenGL ES 2.0 backend (can be used to link against [Google's ANGLE](https://github.com/google/angle))
* `es3` - experimental support for OpenGL ES 3.0
* `x11` - force X11 compatibility mode on Wayland (PLATFORM_DESKTOP/GLFW)
* `wayland` - force Wayland only mode (PLATFORM_DESKTOP/GLFW)
### Documentation
Documentation on [GoDoc](https://godoc.org/github.com/gen2brain/raylib-go/raylib). Also check raylib [cheatsheet](http://www.raylib.com/cheatsheet/cheatsheet.html).
Documentation on [GoDoc](https://godoc.org/git.terah.dev/UnrealXR/raylib-go/raylib). Also check raylib [cheatsheet](http://www.raylib.com/cheatsheet/cheatsheet.html). If you have problems or need assistance there is an active community in the #raylib-go channel of the [Raylib Discord Server](https://discord.gg/raylib) that can help.
### Example
```go
package main
import "github.com/gen2brain/raylib-go/raylib"
import rl "git.terah.dev/UnrealXR/raylib-go/raylib"
func main() {
rl.InitWindow(800, 450, "raylib [core] example - basic window")
defer rl.CloseWindow()
rl.SetTargetFPS(60)
@ -80,19 +94,41 @@ func main() {
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText("Congrats! You created your first window!", 190, 200, 20, rl.LightGray)
rl.EndDrawing()
}
rl.CloseWindow()
}
```
Check more [examples](https://github.com/gen2brain/raylib-go/tree/master/examples) organized by raylib modules.
Check more [examples](https://git.terah.dev/UnrealXR/raylib-go/tree/master/examples) organized by raylib modules.
### Cross-compile (Linux)
To cross-compile for Windows install [MinGW](https://www.mingw-w64.org/) toolchain.
```
$ CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc GOOS=windows GOARCH=amd64 go build -ldflags "-s -w"
$ file basic_window.exe
basic_window.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows, 11 sections
$ CGO_ENABLED=1 CC=i686-w64-mingw32-gcc GOOS=windows GOARCH=386 go build -ldflags "-s -w"
$ file basic_window.exe
basic_window.exe: PE32 executable (console) Intel 80386 (stripped to external PDB), for MS Windows, 9 sections
```
To cross-compile for macOS install [OSXCross](https://github.com/tpoechtrager/osxcross) toolchain.
```
$ CGO_ENABLED=1 CC=x86_64-apple-darwin21.1-clang GOOS=darwin GOARCH=amd64 go build -ldflags "-linkmode external -s -w '-extldflags=-mmacosx-version-min=10.15'"
$ file basic_window
basic_window: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL>
$ CGO_ENABLED=1 CC=aarch64-apple-darwin21.1-clang GOOS=darwin GOARCH=arm64 go build -ldflags "-linkmode external -s -w '-extldflags=-mmacosx-version-min=12.0.0'"
$ file basic_window
basic_window: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|PIE>
```
### License
raylib-go is licensed under an unmodified zlib/libpng license. View [LICENSE](https://github.com/gen2brain/raylib-go/blob/master/LICENSE).
raylib-go is licensed under an unmodified zlib/libpng license. View [LICENSE](https://git.terah.dev/UnrealXR/raylib-go/blob/master/LICENSE).

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -1,7 +1,7 @@
## easings [![GoDoc](https://godoc.org/github.com/gen2brain/raylib-go/easings?status.svg)](https://godoc.org/github.com/gen2brain/raylib-go/easings)
## easings [![GoDoc](https://godoc.org/git.terah.dev/UnrealXR/raylib-go/easings?status.svg)](https://godoc.org/git.terah.dev/UnrealXR/raylib-go/easings)
Useful easing functions for values animation.
A port of Robert Penner's [easing equations](http://robertpenner.com/easing/).
![screenshot](https://goo.gl/crzRrH)
![Demo](../examples/easings/easings/easings.gif)

3
easings/go.mod Normal file
View file

@ -0,0 +1,3 @@
module git.terah.dev/UnrealXR/raylib-go/easings
go 1.21

View file

@ -1,66 +0,0 @@
package main
import (
"fmt"
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
// Initialization
//--------------------------------------------------------------------------------------
screenWidth := int32(800)
screenHeight := int32(450)
rl.InitWindow(screenWidth, screenHeight, "raylib [audio] example - Multichannel sound playing")
rl.InitAudioDevice() // Initialize audio device
fxWav := rl.LoadSound("sound.wav") // Load WAV audio file
fxOgg := rl.LoadSound("target.ogg") // Load OGG audio file
rl.SetSoundVolume(fxWav, 0.2)
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
if rl.IsKeyPressed(rl.KeyEnter) {
rl.PlaySoundMulti(fxWav)
} // Play a new wav sound instance
if rl.IsKeyPressed(rl.KeySpace) {
rl.PlaySoundMulti(fxOgg)
} // Play a new ogg sound instance
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText("MULTICHANNEL SOUND PLAYING", 20, 20, 20, rl.Gray)
rl.DrawText("Press SPACE to play new ogg instance!", 200, 120, 20, rl.LightGray)
rl.DrawText("Press ENTER to play new wav instance!", 200, 180, 20, rl.LightGray)
rl.DrawText(fmt.Sprintf("CONCURRENT SOUNDS PLAYING: %02d", rl.GetSoundsPlaying()), 220, 280, 20, rl.Red)
rl.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.StopSoundMulti() // We must stop the buffer pool before unloading
rl.UnloadSound(fxWav) // Unload sound data
rl.UnloadSound(fxOgg) // Unload sound data
rl.CloseAudioDevice() // Close audio device
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,155 @@
/*******************************************************************************************
*
* raylib [audio] example - Mixed audio processing
*
* Example originally created with raylib 4.2, last time updated with raylib 4.2
*
* Example contributed by hkc (@hatkidchan) and reviewed by Ramon Santamaria (@raysan5)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2023 hkc (@hatkidchan)
*
********************************************************************************************/
package main
import (
"fmt"
"math"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
var exponent float32 = 1.0 // Audio exponentiation value
var averageVolume [400]float32 // Average volume history
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [audio] example - processing mixed output")
rl.InitAudioDevice() // Initialize audio device
rl.AttachAudioMixedProcessor(ProcessAudio)
music := rl.LoadMusicStream("country.mp3")
sound := rl.LoadSound("coin.wav")
rl.PlayMusicStream(music)
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
rl.UpdateMusicStream(music) // Update music buffer with new stream data
// Modify processing variables
if rl.IsKeyPressed(rl.KeyLeft) {
exponent -= 0.05
}
if rl.IsKeyPressed(rl.KeyRight) {
exponent += 0.05
}
if rl.IsKeyPressed(rl.KeyDown) {
exponent -= 0.25
}
if rl.IsKeyPressed(rl.KeyUp) {
exponent += 0.25
}
// Make sure that exponent stays between 0.5 and 3
exponent = clamp(exponent, 0.5, 3)
if rl.IsKeyPressed(rl.KeySpace) {
rl.PlaySound(sound)
}
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, rl.LightGray)
rl.DrawText(fmt.Sprintf("EXPONENT = %.2f", exponent), 215, 180, 20, rl.LightGray)
rl.DrawRectangle(199, 199, 402, 34, rl.LightGray)
for i := int32(0); i < 400; i++ {
rl.DrawLine(201+i, 232-int32(averageVolume[i]*32), 201+i, 232, rl.Maroon)
}
rl.DrawRectangleLines(199, 199, 402, 34, rl.Gray)
rl.DrawText("PRESS SPACE TO PLAY OTHER SOUND", 200, 250, 20, rl.LightGray)
rl.DrawText("USE LEFT AND RIGHT ARROWS TO ALTER DISTORTION", 140, 280, 20, rl.LightGray)
rl.EndDrawing()
}
// De-Initialization
rl.UnloadMusicStream(music) // Unload music stream buffers from RAM
rl.DetachAudioMixedProcessor(ProcessAudio) // Disconnect audio processor
rl.CloseAudioDevice() // Close audio device (music streaming is automatically stopped)
rl.CloseWindow() // Close window and OpenGL context
}
// ProcessAudio is the audio processing function
func ProcessAudio(buffer []float32, frames int) {
var average float32 // Temporary average volume
maxFrame := frames / 2
// Each frame has 2 samples (left and right),
// so we should loop `frames / 2` times
for frame := 0; frame < maxFrame; frame++ {
left := &buffer[frame*2+0] // Left channel
right := &buffer[frame*2+1] // Right channel
// Modify left and right channel samples with exponent
*left = pow(abs(*left), exponent) * sgn(*left)
*right = pow(abs(*right), exponent) * sgn(*right)
// Accumulating average volume
average += abs(*left) / float32(maxFrame)
average += abs(*right) / float32(maxFrame)
}
// Shift average volume history buffer to the left
for i := 0; i < 399; i++ {
averageVolume[i] = averageVolume[i+1]
}
// Add the new average value
averageVolume[399] = average
}
// Helper functions to make the code shorter
// (using less type conversions)
// (Golang: Please make the `math` package generic! This is ridiculous :-)
func abs(value float32) float32 {
return float32(math.Abs(float64(value)))
}
func pow(value, exponent float32) float32 {
return float32(math.Pow(float64(value), float64(exponent)))
}
func sgn(value float32) float32 {
if value < 0 {
return -1
} else if value > 0 {
return 1
}
return 0
}
func clamp(value, min, max float32) float32 {
if value < min {
return min
}
if value > max {
return max
}
return value
}

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
const maxCircles = 64

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
rl.InitWindow(800, 450, "raylib [audio] example - music playing (streaming)")
rl.InitAudioDevice()

View file

@ -1,71 +1,69 @@
package main
import (
"fmt"
"math"
"time"
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
maxSamples = 22050
maxSamplesPerUpdate = 4096
nSamples = 44000 * 10
sampleRate = 6000
bufferSize = nSamples
frequency = 440
targetFPS = 240
)
func main() {
rl.InitWindow(800, 450, "raylib [audio] example - raw audio streaming")
position := rl.NewVector2(0, 0)
rl.SetAudioStreamBufferSizeDefault(bufferSize)
rl.InitAudioDevice()
// Init raw audio stream (sample rate: 22050, sample size: 32bit-float, channels: 1-mono)
stream := rl.InitAudioStream(22050, 32, 1)
// Init raw audio stream (sample rate: <nSamples>, sample size: 32bit-float, channels: 1-mono)
stream := rl.LoadAudioStream(nSamples, 32, 1)
//// Fill audio stream with some samples (sine wave)
data := make([]float32, maxSamples)
//// Create sine wave to play
data := make([]float32, nSamples)
for i := 0; i < maxSamples; i++ {
data[i] = float32(math.Sin(float64((2*rl.Pi*float32(i))/2) * rl.Deg2rad))
for i := 0; i < nSamples; i++ {
t := float32(i) / float32(nSamples)
data[i] = float32(math.Sin(float64((2 * rl.Pi * frequency * t))))
}
// NOTE: The generated MAX_SAMPLES do not fit to close a perfect loop
// for that reason, there is a clip everytime audio stream is looped
// NOTE: The buffer can only be updated when it has been processed. Time between buffer processing and next load and causes clipping
rl.PlayAudioStream(stream)
totalSamples := int32(maxSamples)
samplesLeft := int32(totalSamples)
position := rl.NewVector2(0, 0)
rl.SetTargetFPS(30)
startTime := time.Now()
rl.SetTargetFPS(targetFPS)
for !rl.WindowShouldClose() {
// Refill audio stream if required
// Refill audio stream if buffer is processed
if rl.IsAudioStreamProcessed(stream) {
numSamples := int32(0)
if samplesLeft >= maxSamplesPerUpdate {
numSamples = maxSamplesPerUpdate
elapsedTime := time.Since(startTime).Seconds()
currentSampleIndex := int(math.Mod(elapsedTime*float64(sampleRate), float64(nSamples)))
nextSampleIndex := currentSampleIndex + bufferSize
if nextSampleIndex > nSamples {
nextSampleIndex = bufferSize - (nSamples - currentSampleIndex)
rl.UpdateAudioStream(stream, append(data[currentSampleIndex:], data[:nextSampleIndex]...))
} else {
numSamples = samplesLeft
}
rl.UpdateAudioStream(stream, data[totalSamples-samplesLeft:], numSamples)
samplesLeft -= numSamples
// Reset samples feeding (loop audio)
if samplesLeft <= 0 {
samplesLeft = totalSamples
rl.UpdateAudioStream(stream, data[currentSampleIndex:nextSampleIndex])
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText("SINE WAVE SHOULD BE PLAYING!", 240, 140, 20, rl.LightGray)
rl.DrawText(fmt.Sprintf("%d Hz SINE WAVE SHOULD BE PLAYING!", frequency), 200, 140, 20, rl.LightGray)
// NOTE: Draw a part of the sine wave (only screen width)
for i := 0; i < int(rl.GetScreenWidth()); i++ {
position.X = float32(i)
position.Y = 250 + 50*data[i]
position.Y = 250 + 10*data[i*nSamples/int(20*rl.GetScreenWidth())]
rl.DrawPixelV(position, rl.Red)
}
@ -73,7 +71,7 @@ func main() {
rl.EndDrawing()
}
rl.CloseAudioStream(stream) // Close raw audio stream and delete buffers from RAM
rl.UnloadAudioStream(stream) // Close raw audio stream and delete buffers from RAM
rl.CloseAudioDevice() // Close audio device (music streaming is automatically stopped)

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {

View file

@ -0,0 +1,65 @@
/*******************************************************************************************
*
* raylib [audio] example - Playing sound multiple times
*
* Example originally created with raylib 4.6
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2023 Jeffery Myers (@JeffM2501)
*
********************************************************************************************/
package main
import rl "git.terah.dev/UnrealXR/raylib-go/raylib"
const (
screenWidth = 800
screenHeight = 450
maxSounds = 10
)
var soundArray [maxSounds]rl.Sound
var currentSound int32
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [audio] example - playing sound multiple times")
// Initialize audio device
rl.InitAudioDevice()
// Load WAV audio file into the first slot as the 'source' sound
// this sound owns the sample data
soundArray[0] = rl.LoadSound("sound.wav")
for i := 1; i < maxSounds; i++ {
// Load an alias of the sound into slots 1-9.
// These do not own the sound data, but can be played
soundArray[i] = rl.LoadSoundAlias(soundArray[0])
}
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
for !rl.WindowShouldClose() { // Detect window close button or ESC key
if rl.IsKeyPressed(rl.KeySpace) {
rl.PlaySound(soundArray[currentSound]) // play the next open sound slot
currentSound++ // increment the sound slot
if currentSound >= maxSounds { // if the sound slot is out of bounds, go back to 0
currentSound = 0
}
// Note: a better way would be to look at the list for the first sound that is not playing and use that slot
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText("Press SPACE to PLAY a WAV sound!", 200, 180, 20, rl.LightGray)
rl.EndDrawing()
}
rl.UnloadSound(soundArray[0]) // Unload source sound data
rl.CloseAudioDevice() // Close audio device
rl.CloseWindow() // Close window and OpenGL context
}

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
var (

View file

@ -0,0 +1,101 @@
package main
/*******************************************************************************************
*
* raylib [core] example - 2d camera mouse zoom
*
* Example originally created with raylib 4.2, last time updated with raylib 4.2
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2022 Jeffery Myers (@JeffM2501)
*
********************************************************************************************/
// ------------------------------------------------------------------------------------
// Program main entry point
// ------------------------------------------------------------------------------------
func main() {
// Initialization
//--------------------------------------------------------------------------------------
const (
screenWidth = 800
screenHeight = 450
)
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera mouse zoom")
var camera rl.Camera2D
camera.Zoom = 1.0
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
// Translate based on mouse right click
if rl.IsMouseButtonDown(rl.MouseRightButton) {
delta := rl.GetMouseDelta()
delta = rl.Vector2Scale(delta, -1.0/camera.Zoom)
camera.Target = rl.Vector2Add(camera.Target, delta)
}
// Zoom based on mouse wheel
wheel := rl.GetMouseWheelMove()
if wheel != 0 {
// Get the world point that is under the mouse
mouseWorldPos := rl.GetScreenToWorld2D(rl.GetMousePosition(), camera)
// Set the offset to where the mouse is
camera.Offset = rl.GetMousePosition()
// Set the target to match, so that the camera maps the world space point
// under the cursor to the screen space point under the cursor at any zoom
camera.Target = mouseWorldPos
// Zoom increment
const zoomIncrement float32 = 0.125
camera.Zoom += (wheel * zoomIncrement)
if camera.Zoom < zoomIncrement {
camera.Zoom = zoomIncrement
}
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
rl.BeginMode2D(camera)
// Draw the 3d grid, rotated 90 degrees and centered around 0,0
// just so we have something in the XY plane
rl.PushMatrix()
rl.Translatef(0, 25*50, 0)
rl.Rotatef(90, 1, 0, 0)
rl.DrawGrid(100, 50)
rl.PopMatrix()
// Draw a reference circle
rl.DrawCircle(100, 100, 50, rl.Yellow)
rl.EndMode2D()
rl.DrawText("Mouse right button drag to move, mouse wheel to zoom", 10, 10, 20, rl.White)
rl.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}

View file

@ -0,0 +1,261 @@
package main
import rl "git.terah.dev/UnrealXR/raylib-go/raylib"
const (
screenWidth = 800
screenHeight = 450
gravity = 400
playerJumpSpeed = 350.0
playerHORSpeed = 200.0
)
type Player struct {
position rl.Vector2
speed float32
canJump bool
}
type EnvironmentItem struct {
rect rl.Rectangle
blocking bool
color rl.Color
}
type cameraUpdater func(*rl.Camera2D, *Player, []EnvironmentItem, float32)
// These 3 variables are used only for camera 4,
// but they need to be declared on module level
// for camera 4 to work (static in C)
var eveningOut = false
var evenOutSpeed float32 = 700
var evenOutTarget float32 = 0
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera platformer")
player := Player{
position: rl.NewVector2(400, 280),
speed: 0,
canJump: false,
}
envItems := []EnvironmentItem{
{rect: rl.Rectangle{Width: 1000, Height: 400}, blocking: false, color: rl.LightGray},
{rect: rl.Rectangle{Y: 400, Width: 1000, Height: 200}, blocking: true, color: rl.Gray},
{rect: rl.Rectangle{X: 300, Y: 200, Width: 400, Height: 10}, blocking: true, color: rl.Gray},
{rect: rl.Rectangle{X: 250, Y: 300, Width: 100, Height: 10}, blocking: true, color: rl.Gray},
{rect: rl.Rectangle{X: 650, Y: 300, Width: 100, Height: 10}, blocking: true, color: rl.Gray},
}
camera := rl.Camera2D{
Offset: rl.Vector2{X: screenWidth / 2, Y: screenHeight / 2},
Target: player.position,
Rotation: 0,
Zoom: 1,
}
cameraUpdaters := []cameraUpdater{
updateCameraCenter,
updateCameraCenterInsideMap,
updateCameraCenterSmoothFollow,
updateCameraEvenOutOnLanding,
updateCameraPlayerBoundsPush,
}
cameraDescriptions := []string{
"1. Follow player center",
"2. Follow player center, but clamp to map edges",
"3. Follow player center; smoothed",
"4. Follow player center horizontally; update player center vertically after landing",
"5. Player push camera on getting too close to screen edge",
}
cameraOption := 0
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
deltaTime := rl.GetFrameTime()
updatePlayer(&player, envItems, deltaTime)
camera.Zoom += rl.GetMouseWheelMove() * 0.05
camera.Zoom = clamp(camera.Zoom, 0.25, 3)
if rl.IsKeyPressed(rl.KeyC) {
cameraOption = (cameraOption + 1) % len(cameraUpdaters)
}
// Call update camera function by its pointer
cameraUpdaters[cameraOption](&camera, &player, envItems, deltaTime)
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode2D(camera)
for _, item := range envItems {
rl.DrawRectangleRec(item.rect, item.color)
}
playerRect := rl.Rectangle{
X: player.position.X - 20,
Y: player.position.Y - 40,
Width: 40,
Height: 40,
}
rl.DrawRectangleRec(playerRect, rl.Red)
rl.DrawCircleV(player.position, 5, rl.Gold)
rl.EndMode2D()
rl.DrawText("Controls:", 20, 20, 10, rl.Black)
rl.DrawText(" - Right/Left to move", 40, 40, 10, rl.DarkGray)
rl.DrawText(" - Space to jump", 40, 60, 10, rl.DarkGray)
rl.DrawText(" - Mouse Wheel to Zoom in-out, R to reset zoom", 40, 80, 10, rl.DarkGray)
rl.DrawText(" - C to change camera mode", 20, 100, 10, rl.Black)
rl.DrawText("Current Camera Mode:", 20, 120, 10, rl.DarkGray)
rl.DrawText(cameraDescriptions[cameraOption], 40, 140, 10, rl.DarkGray)
rl.EndDrawing()
}
rl.CloseWindow()
}
func updatePlayer(player *Player, envItems []EnvironmentItem, delta float32) {
if rl.IsKeyDown(rl.KeyLeft) {
player.position.X -= playerHORSpeed * delta
}
if rl.IsKeyDown(rl.KeyRight) {
player.position.X += playerHORSpeed * delta
}
if rl.IsKeyDown(rl.KeySpace) && player.canJump {
player.speed = -playerJumpSpeed
player.canJump = false
}
hitObstacle := false
for _, item := range envItems {
if item.blocking &&
item.rect.X <= player.position.X && item.rect.X+item.rect.Width >= player.position.X &&
item.rect.Y >= player.position.Y && item.rect.Y <= player.position.Y+player.speed*delta {
hitObstacle = true
player.speed = 0
player.position.Y = item.rect.Y
break
}
}
if !hitObstacle {
player.position.Y += player.speed * delta
player.speed += gravity * delta
player.canJump = false
} else {
player.canJump = true
}
}
func updateCameraCenter(camera *rl.Camera2D, player *Player, _ []EnvironmentItem, _ float32) {
camera.Offset = rl.Vector2{X: screenWidth / 2, Y: screenHeight / 2}
camera.Target = player.position
}
func updateCameraCenterInsideMap(camera *rl.Camera2D, player *Player, envItems []EnvironmentItem, _ float32) {
camera.Offset = rl.Vector2{X: screenWidth / 2, Y: screenHeight / 2}
camera.Target = player.position
var minX, minY, maxX, maxY float32 = 1000, 1000, -1000, -10000
for _, item := range envItems {
minX = min(item.rect.X, minX)
maxX = max(item.rect.X+item.rect.Width, maxX)
minY = min(item.rect.Y, minY)
maxY = max(item.rect.Y+item.rect.Height, maxY)
}
maxV := rl.GetWorldToScreen2D(rl.Vector2{X: maxX, Y: maxY}, *camera)
minV := rl.GetWorldToScreen2D(rl.Vector2{X: minX, Y: minY}, *camera)
if maxV.X < screenWidth {
camera.Offset.X = screenWidth - (maxV.X - screenWidth/2)
}
if maxV.Y < screenHeight {
camera.Offset.Y = screenHeight - (maxV.Y - screenHeight/2)
}
if minV.X > 0 {
camera.Offset.X = screenWidth/2 - minV.X
}
if minV.Y > 0 {
camera.Offset.Y = screenHeight/2 - minV.Y
}
}
func updateCameraCenterSmoothFollow(camera *rl.Camera2D, player *Player, _ []EnvironmentItem, delta float32) {
var minSpeed, minEffectLength, fractionSpeed float32 = 30.0, 10.0, 0.8
camera.Offset = rl.Vector2{X: screenWidth / 2, Y: screenHeight / 2}
diff := rl.Vector2Subtract(player.position, camera.Target)
length := rl.Vector2Length(diff)
if length > minEffectLength {
speed := max(fractionSpeed*length, minSpeed)
camera.Target = rl.Vector2Add(camera.Target, rl.Vector2Scale(diff, speed*delta/length))
}
}
func updateCameraEvenOutOnLanding(camera *rl.Camera2D, player *Player, _ []EnvironmentItem, delta float32) {
camera.Offset = rl.Vector2{X: screenWidth / 2, Y: screenHeight / 2}
camera.Target.X = player.position.X
if eveningOut {
if evenOutTarget > camera.Target.Y {
camera.Target.Y += evenOutSpeed * delta
if camera.Target.Y > evenOutTarget {
camera.Target.Y = evenOutTarget
eveningOut = false
}
} else {
camera.Target.Y -= evenOutSpeed * delta
if camera.Target.Y < evenOutTarget {
camera.Target.Y = evenOutTarget
eveningOut = false
}
}
} else {
if player.canJump && player.speed == 0 && player.position.Y != camera.Target.Y {
eveningOut = true
evenOutTarget = player.position.Y
}
}
}
func updateCameraPlayerBoundsPush(camera *rl.Camera2D, player *Player, _ []EnvironmentItem, _ float32) {
bbox := rl.Vector2{X: 0.2, Y: 0.2}
bboxWorldMin := rl.GetScreenToWorld2D(rl.Vector2{X: (1 - bbox.X) * 0.5 * screenWidth, Y: (1 - bbox.Y) * 0.5 * screenHeight}, *camera)
bboxWorldMax := rl.GetScreenToWorld2D(rl.Vector2{X: (1 + bbox.X) * 0.5 * screenWidth, Y: (1 + bbox.Y) * 0.5 * screenHeight}, *camera)
camera.Offset = rl.Vector2{X: (1 - bbox.X) * 0.5 * screenWidth, Y: (1 - bbox.Y) * 0.5 * screenHeight}
if player.position.X < bboxWorldMin.X {
camera.Target.X = player.position.X
}
if player.position.Y < bboxWorldMin.Y {
camera.Target.Y = player.position.Y
}
if player.position.X > bboxWorldMax.X {
camera.Target.X = bboxWorldMin.X + (player.position.X - bboxWorldMax.X)
}
if player.position.Y > bboxWorldMax.Y {
camera.Target.Y = bboxWorldMin.Y + (player.position.Y - bboxWorldMax.Y)
}
}
func clamp(zoom float32, min float32, max float32) float32 {
if zoom < min {
return min
}
if zoom > max {
return max
}
return zoom
}

View file

@ -0,0 +1,128 @@
package main
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
var (
screenW = int32(800)
screenH = int32(440)
playerSize = float32(40)
cam1, cam2 rl.Camera2D
)
func main() {
rl.InitWindow(screenW, screenH, "raylib [core] example - 2d camera split screen")
player1 := rl.NewRectangle(200, 200, playerSize, playerSize)
player2 := rl.NewRectangle(250, 200, playerSize, playerSize)
cam1.Target = rl.NewVector2(player1.X, player1.Y)
cam1.Offset = rl.NewVector2(200, 200)
cam1.Rotation = 0
cam1.Zoom = 1
cam2 = cam1
cam2.Target = rl.NewVector2(player2.X, player2.Y)
screenCam1 := rl.LoadRenderTexture(screenW/2, screenH)
screenCam2 := rl.LoadRenderTexture(screenW/2, screenH)
splitScreenRec := rl.NewRectangle(0, 0, float32(screenCam1.Texture.Width), -float32(screenCam1.Texture.Height))
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
if rl.IsKeyDown(rl.KeyS) {
player1.Y += 3
} else if rl.IsKeyDown(rl.KeyW) {
player1.Y -= 3
}
if rl.IsKeyDown(rl.KeyD) {
player1.X += 3
} else if rl.IsKeyDown(rl.KeyA) {
player1.X -= 3
}
if rl.IsKeyDown(rl.KeyUp) {
player2.Y -= 3
} else if rl.IsKeyDown(rl.KeyDown) {
player2.Y += 3
}
if rl.IsKeyDown(rl.KeyRight) {
player2.X += 3
} else if rl.IsKeyDown(rl.KeyLeft) {
player2.X -= 3
}
cam1.Target = rl.NewVector2(player1.X, player1.Y)
cam2.Target = rl.NewVector2(player2.X, player2.Y)
rl.BeginTextureMode(screenCam1)
rl.ClearBackground(rl.RayWhite)
rl.BeginMode2D(cam1)
for i := 0; i < int(screenW/int32(playerSize))+1; i++ {
rl.DrawLineV(rl.NewVector2(playerSize*float32(i), 0), rl.NewVector2(playerSize*float32(i), float32(screenH)), rl.LightGray)
}
for i := 0; i < int(screenH/int32(playerSize))+1; i++ {
rl.DrawLineV(rl.NewVector2(0, playerSize*float32(i)), rl.NewVector2(float32(screenW), playerSize*float32(i)), rl.LightGray)
}
for i := 0; i < int(screenW/int32(playerSize)); i++ {
for j := 0; j < int(screenH/int32(playerSize)); j++ {
rl.DrawText("["+fmt.Sprint(i)+","+fmt.Sprint(j)+"]", 10+int32(playerSize*float32(i)), 15+int32(playerSize*float32(j)), 10, rl.LightGray)
}
}
rl.DrawRectangleRec(player1, rl.Red)
rl.DrawRectangleRec(player2, rl.Blue)
rl.EndMode2D()
rl.DrawRectangle(0, 0, screenW/2, 30, rl.Fade(rl.RayWhite, 0.6))
rl.DrawText("PLAYER 1 WASD KEYS", 10, 10, 10, rl.Maroon)
rl.EndTextureMode()
rl.BeginTextureMode(screenCam2)
rl.ClearBackground(rl.RayWhite)
rl.BeginMode2D(cam2)
for i := 0; i < int(screenW/int32(playerSize))+1; i++ {
rl.DrawLineV(rl.NewVector2(playerSize*float32(i), 0), rl.NewVector2(playerSize*float32(i), float32(screenH)), rl.LightGray)
}
for i := 0; i < int(screenH/int32(playerSize))+1; i++ {
rl.DrawLineV(rl.NewVector2(0, playerSize*float32(i)), rl.NewVector2(float32(screenW), playerSize*float32(i)), rl.LightGray)
}
for i := 0; i < int(screenW/int32(playerSize)); i++ {
for j := 0; j < int(screenH/int32(playerSize)); j++ {
rl.DrawText("["+fmt.Sprint(i)+","+fmt.Sprint(j)+"]", 10+int32(playerSize*float32(i)), 15+int32(playerSize*float32(j)), 10, rl.LightGray)
}
}
rl.DrawRectangleRec(player1, rl.Red)
rl.DrawRectangleRec(player2, rl.Blue)
rl.EndMode2D()
rl.DrawRectangle(0, 0, screenW/2, 30, rl.Fade(rl.RayWhite, 0.6))
rl.DrawText("PLAYER 2 ARROW KEYS", 10, 10, 10, rl.Maroon)
rl.EndTextureMode()
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
rl.DrawTextureRec(screenCam1.Texture, splitScreenRec, rl.NewVector2(0, 0), rl.White)
rl.DrawTextureRec(screenCam2.Texture, splitScreenRec, rl.NewVector2(float32(screenW/2), 0), rl.White)
rl.DrawRectangle((screenW/2)-2, 0, 4, screenH, rl.LightGray)
rl.EndDrawing()
}
rl.UnloadRenderTexture(screenCam1)
rl.UnloadRenderTexture(screenCam2)
rl.CloseWindow()
}

View file

@ -3,7 +3,7 @@ package main
import (
"os"
rl "github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const colorCount = 23
@ -139,7 +139,7 @@ func main() {
}
if btnSaveMouseHover && rl.IsMouseButtonReleased(rl.MouseLeftButton) || rl.IsKeyPressed(rl.KeyS) {
image := rl.GetTextureData(target.Texture)
image := rl.LoadImageFromTexture(target.Texture)
rl.ImageFlipVertical(*&image)
rl.ExportImage(*image, "export.png")
rl.UnloadImage(image)
@ -214,4 +214,3 @@ func main() {
os.Exit(0)
}

View file

@ -1,22 +1,43 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
maxColumns = 20
maxColumns = 20
screenWidth = 800
screenHeight = 450
False = 0
True = 1
)
func main() {
rl.InitWindow(800, 450, "raylib [core] example - 3d camera first person")
var camModes = map[rl.CameraMode]string{
rl.CameraFree: "FREE",
rl.CameraOrbital: "ORBITAL",
rl.CameraFirstPerson: "FIRST PERSON",
rl.CameraThirdPerson: "THIRD PERSON",
}
var camProjections = map[rl.CameraProjection]string{
rl.CameraPerspective: "PERSPECTIVE",
rl.CameraOrthographic: "ORTHOGRAPHIC",
}
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person")
// Define the camera to look into our 3d world (position, target, up vector)
camera := rl.Camera3D{}
camera.Position = rl.NewVector3(4.0, 2.0, 4.0)
camera.Target = rl.NewVector3(0.0, 1.8, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 60.0
camera.Projection = rl.CameraPerspective
camera.Position = rl.NewVector3(0.0, 2.0, 4.0) // Camera position
camera.Target = rl.NewVector3(0.0, 2.0, 0.0) // Camera looking at point
camera.Up = rl.NewVector3(0.0, 1.0, 0.0) // Camera up vector (rotation towards target)
camera.Fovy = 60.0 // Camera field-of-view Y
camera.Projection = rl.CameraPerspective // Camera projection type
cameraMode := rl.CameraFirstPerson
// Generates some random columns
heights := make([]float32, maxColumns)
@ -24,17 +45,81 @@ func main() {
colors := make([]rl.Color, maxColumns)
for i := 0; i < maxColumns; i++ {
heights[i] = float32(rl.GetRandomValue(1, 12))
positions[i] = rl.NewVector3(float32(rl.GetRandomValue(-15, 15)), heights[i]/2, float32(rl.GetRandomValue(-15, 15)))
colors[i] = rl.NewColor(uint8(rl.GetRandomValue(20, 255)), uint8(rl.GetRandomValue(10, 55)), 30, 255)
heights[i] = rndF(1, 12)
positions[i] = rl.NewVector3(rndF(-15, 15), heights[i]/2, rndF(-15, 15))
colors[i] = rl.NewColor(rndU(20, 255), rndU(10, 55), 30, 255)
}
rl.SetCameraMode(camera, rl.CameraFirstPerson) // Set a first person camera mode
rl.DisableCursor() // Limit cursor to relative movement inside the window
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
rl.SetTargetFPS(60)
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Switch camera mode
if rl.IsKeyPressed(rl.KeyOne) {
cameraMode = rl.CameraFree
camera.Up = rl.NewVector3(0.0, 1.0, 0.0) // Reset roll
}
if rl.IsKeyPressed(rl.KeyTwo) {
cameraMode = rl.CameraFirstPerson
camera.Up = rl.NewVector3(0.0, 1.0, 0.0) // Reset roll
}
if rl.IsKeyPressed(rl.KeyThree) {
cameraMode = rl.CameraThirdPerson
camera.Up = rl.NewVector3(0.0, 1.0, 0.0) // Reset roll
}
if rl.IsKeyPressed(rl.KeyFour) {
cameraMode = rl.CameraOrbital
camera.Up = rl.NewVector3(0.0, 1.0, 0.0) // Reset roll
}
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera) // Update camera
// Switch camera projection
if rl.IsKeyPressed(rl.KeyP) {
cameraMode = rl.CameraThirdPerson
if camera.Projection == rl.CameraPerspective {
// Create isometric view
// Note: The target distance is related to the render distance in the orthographic projection
camera.Position = rl.NewVector3(0.0, 2.0, -100.0)
camera.Target = rl.NewVector3(0.0, 2.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Projection = rl.CameraOrthographic
camera.Fovy = 20.0 // near plane width in CAMERA_ORTHOGRAPHIC
rl.CameraYaw(&camera, -135*rl.Deg2rad, True)
rl.CameraPitch(&camera, -45*rl.Deg2rad, True, True, False)
} else if camera.Projection == rl.CameraOrthographic {
// Reset to default view
camera.Position = rl.NewVector3(0.0, 2.0, 10.0)
camera.Target = rl.NewVector3(0.0, 2.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Projection = rl.CameraPerspective
camera.Fovy = 60.0
}
}
// Update camera computes movement internally depending on the camera mode.
// Some default standard keyboard/mouse inputs are hardcoded to simplify use.
// For advance camera controls, it's recommended to compute camera movement manually.
rl.UpdateCamera(&camera, cameraMode) // Update camera
/*
// Camera PRO usage example (EXPERIMENTAL)
// This new camera function allows custom movement/rotation values to be directly provided
// as input parameters, with this approach, rcamera module is internally independent of raylib inputs
UpdateCameraPro(&camera,
(Vector3){
(IsKeyDown(KEY_W) || IsKeyDown(KEY_UP))*0.1f - // Move forward-backward
(IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN))*0.1f,
(IsKeyDown(KEY_D) || IsKeyDown(KEY_RIGHT))*0.1f - // Move right-left
(IsKeyDown(KEY_A) || IsKeyDown(KEY_LEFT))*0.1f,
0.0f // Move up-down
},
(Vector3){
GetMouseDelta().x*0.05f, // Rotation: yaw
GetMouseDelta().y*0.05f, // Rotation: pitch
0.0f // Rotation: roll
},
GetMouseWheelMove()*2.0f); // Move to target (zoom)
*/
rl.BeginDrawing()
@ -53,17 +138,57 @@ func main() {
rl.DrawCubeWires(positions[i], 2.0, heights[i], 2.0, rl.Maroon)
}
// Draw player cube
if cameraMode == rl.CameraThirdPerson {
rl.DrawCube(camera.Target, 0.5, 0.5, 0.5, rl.Purple)
rl.DrawCubeWires(camera.Target, 0.5, 0.5, 0.5, rl.DarkPurple)
}
rl.EndMode3D()
rl.DrawRectangle(10, 10, 220, 70, rl.Fade(rl.SkyBlue, 0.5))
rl.DrawRectangleLines(10, 10, 220, 70, rl.Blue)
// Draw info boxes
rl.DrawRectangle(5, 5, 330, 100, rl.Fade(rl.SkyBlue, 0.5))
rl.DrawRectangleLines(5, 5, 330, 100, rl.Blue)
rl.DrawText("First person camera default controls:", 20, 20, 10, rl.Black)
rl.DrawText("- Move with keys: W, A, S, D", 40, 40, 10, rl.DarkGray)
rl.DrawText("- Mouse move to look around", 40, 60, 10, rl.DarkGray)
rl.DrawText("Camera controls:", 15, 15, 10, rl.Black)
rl.DrawText("- Move keys: W, A, S, D, Space, Left-Ctrl", 15, 30, 10, rl.Black)
rl.DrawText("- Look around: arrow keys or mouse", 15, 45, 10, rl.Black)
rl.DrawText("- Camera mode keys: 1,2,3,4", 15, 60, 10, rl.Black)
rl.DrawText("- Zoom keys: num-plus, num-minus or mouse scroll", 15, 75, 10, rl.Black)
rl.DrawText("- Camera projection key: P", 15, 90, 10, rl.Black)
rl.DrawRectangle(600, 5, 195, 100, rl.Fade(rl.SkyBlue, 0.5))
rl.DrawRectangleLines(600, 5, 195, 100, rl.Blue)
rl.DrawText("Camera status:", 610, 15, 10, rl.Black)
rl.DrawText(s2T("Mode:", camModes[cameraMode]), 610, 30, 10, rl.Black)
rl.DrawText(s2T("Projection:", camProjections[camera.Projection]), 610, 45, 10, rl.Black)
rl.DrawText(s2T("Position:", v2T(camera.Position)), 610, 60, 10, rl.Black)
rl.DrawText(s2T("Target:", v2T(camera.Target)), 610, 75, 10, rl.Black)
rl.DrawText(s2T("Up:", v2T(camera.Up)), 610, 90, 10, rl.Black)
rl.EndDrawing()
}
rl.CloseWindow()
}
// rndU generates a random uint8 value between min and max
func rndU(min, max int32) uint8 {
return uint8(rl.GetRandomValue(min, max))
}
// rndF generates a random float32 value between min and max
func rndF(min, max int32) float32 {
return float32(rl.GetRandomValue(min, max))
}
// s2t generates a Status item string from a name and value
func s2T(name, value string) string {
return fmt.Sprintf(" - %s %s", name, value)
}
// v2T generates a string from a rl.Vector3
func v2T(v rl.Vector3) string {
return fmt.Sprintf("%6.3f, %6.3f, %6.3f", v.X, v.Y, v.Z)
}

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -16,12 +16,10 @@ func main() {
cubePosition := rl.NewVector3(0.0, 0.0, 0.0)
rl.SetCameraMode(camera, rl.CameraFree) // Set a free camera mode
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera) // Update camera
rl.UpdateCamera(&camera, rl.CameraFree) // Update camera with free camera mode
if rl.IsKeyDown(rl.KeyZ) {
camera.Target = rl.NewVector3(0.0, 0.0, 0.0)
@ -46,8 +44,6 @@ func main() {
rl.DrawText("Free camera default controls:", 20, 20, 10, rl.Black)
rl.DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, rl.DarkGray)
rl.DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, rl.DarkGray)
rl.DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, rl.DarkGray)
rl.DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom", 40, 100, 10, rl.DarkGray)
rl.DrawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, rl.DarkGray)
rl.EndDrawing()

View file

@ -0,0 +1,127 @@
package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
var (
screenW = int32(800)
screenH = int32(450)
cam1, cam2 rl.Camera3D
)
func main() {
rl.InitWindow(screenW, screenH, "raylib [core] example - 3d camera split screen")
// Setup player 1 camera and screen
cam1.Fovy = 45
cam1.Up.Y = 1
cam1.Target.Y = 1
cam1.Position.Z = -3
cam1.Position.Y = 1
// Setup player two camera and screen
cam2.Fovy = 45
cam2.Up.Y = 1
cam2.Target.Y = 3
cam2.Position.X = -3
cam2.Position.Y = 3
screenCam1 := rl.LoadRenderTexture(screenW/2, screenH)
screenCam2 := rl.LoadRenderTexture(screenW/2, screenH)
splitScreenRec := rl.NewRectangle(0, 0, float32(screenCam1.Texture.Width), -float32(screenCam1.Texture.Height))
count := float32(5)
spacing := float32(4)
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
// If anyone moves this frame, how far will they move based on the time
// since the last frame this moves things at 10 world units per second,
// regardless of the actual FPS
frameOffset := 10 * rl.GetFrameTime()
// Move Player1 forward and backwards (no turning)
if rl.IsKeyDown(rl.KeyW) {
cam1.Position.Z += frameOffset
cam1.Target.Z += frameOffset
} else if rl.IsKeyDown(rl.KeyS) {
cam1.Position.Z -= frameOffset
cam1.Target.Z -= frameOffset
}
// Move Player2 forward and backwards (no turning)
if rl.IsKeyDown(rl.KeyUp) {
cam2.Position.X += frameOffset
cam2.Target.X += frameOffset
} else if rl.IsKeyDown(rl.KeyDown) {
cam2.Position.X -= frameOffset
cam2.Target.X -= frameOffset
}
// Draw Player1 view to the render texture
rl.BeginTextureMode(screenCam1)
rl.ClearBackground(rl.SkyBlue)
rl.BeginMode3D(cam1)
rl.DrawPlane(rl.Vector3Zero(), rl.NewVector2(50, 50), rl.Beige)
for x := -count * spacing; x <= count*spacing; x += spacing {
for z := -count * spacing; z <= count*spacing; z += spacing {
rl.DrawCube(rl.NewVector3(x-0.5, 1.5, z), 1, 1, 1, rl.Lime)
rl.DrawCube(rl.NewVector3(x-0.5, 0.5, z), 0.25, 1, 0.25, rl.Brown)
}
}
rl.DrawCube(cam1.Position, 1, 1, 1, rl.Red)
rl.DrawCube(cam2.Position, 1, 1, 1, rl.Blue)
rl.EndMode3D()
rl.DrawRectangle(0, 0, screenW/2, 40, rl.Fade(rl.RayWhite, 0.8))
rl.DrawText("PLAYER1: W/S to move", 10, 10, 20, rl.Maroon)
rl.EndTextureMode()
// Draw Player2 view to the render texture
rl.BeginTextureMode(screenCam2)
rl.ClearBackground(rl.SkyBlue)
rl.BeginMode3D(cam2)
rl.DrawPlane(rl.Vector3Zero(), rl.NewVector2(50, 50), rl.Beige)
for x := -count * spacing; x <= count*spacing; x += spacing {
for z := -count * spacing; z <= count*spacing; z += spacing {
rl.DrawCube(rl.NewVector3(x, 1.5, z), 1, 1, 1, rl.Lime)
rl.DrawCube(rl.NewVector3(x, 0.5, z), 0.25, 1, 0.25, rl.Brown)
}
}
rl.DrawCube(cam1.Position, 1, 1, 1, rl.Red)
rl.DrawCube(cam2.Position, 1, 1, 1, rl.Blue)
rl.EndMode3D()
rl.DrawRectangle(0, 0, screenW/2, 40, rl.Fade(rl.RayWhite, 0.8))
rl.DrawText("PLAYER2: UP/DOWN to move", 10, 10, 20, rl.Maroon)
rl.EndTextureMode()
// Draw both views render textures to the screen side by side
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
rl.DrawTextureRec(screenCam1.Texture, splitScreenRec, rl.NewVector2(0, 0), rl.White)
rl.DrawTextureRec(screenCam2.Texture, splitScreenRec, rl.NewVector2(float32(screenW/2), 0), rl.White)
rl.DrawRectangle((screenW/2)-2, 0, 4, screenH, rl.LightGray)
rl.EndDrawing()
}
rl.UnloadRenderTexture(screenCam1)
rl.UnloadRenderTexture(screenCam2)
rl.CloseWindow()
}

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -21,23 +21,24 @@ func main() {
cubeSize := rl.NewVector3(2.0, 2.0, 2.0)
var ray rl.Ray
collision := false
rl.SetCameraMode(camera, rl.CameraFree) // Set a free camera mode
var collision rl.RayCollision
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera) // Update camera
rl.UpdateCamera(&camera, rl.CameraFree) // Update camera with free camera mode
if rl.IsMouseButtonPressed(rl.MouseLeftButton) {
ray = rl.GetMouseRay(rl.GetMousePosition(), camera)
if !collision.Hit {
ray = rl.GetMouseRay(rl.GetMousePosition(), camera)
// Check collision between ray and box
min := rl.NewVector3(cubePosition.X-cubeSize.X/2, cubePosition.Y-cubeSize.Y/2, cubePosition.Z-cubeSize.Z/2)
max := rl.NewVector3(cubePosition.X+cubeSize.X/2, cubePosition.Y+cubeSize.Y/2, cubePosition.Z+cubeSize.Z/2)
collision = rl.CheckCollisionRayBox(ray, rl.NewBoundingBox(min, max))
// Check collision between ray and box
min := rl.NewVector3(cubePosition.X-cubeSize.X/2, cubePosition.Y-cubeSize.Y/2, cubePosition.Z-cubeSize.Z/2)
max := rl.NewVector3(cubePosition.X+cubeSize.X/2, cubePosition.Y+cubeSize.Y/2, cubePosition.Z+cubeSize.Z/2)
collision = rl.GetRayCollisionBox(ray, rl.NewBoundingBox(min, max))
} else {
collision.Hit = false
}
}
rl.BeginDrawing()
@ -46,7 +47,7 @@ func main() {
rl.BeginMode3D(camera)
if collision {
if collision.Hit {
rl.DrawCube(cubePosition, cubeSize.X, cubeSize.Y, cubeSize.Z, rl.Red)
rl.DrawCubeWires(cubePosition, cubeSize.X, cubeSize.Y, cubeSize.Z, rl.Maroon)
@ -64,7 +65,7 @@ func main() {
rl.DrawText("Try selecting the box with mouse!", 240, 10, 20, rl.DarkGray)
if collision {
if collision.Hit {
rl.DrawText("BOX SELECTED", (screenWidth-rl.MeasureText("BOX SELECTED", 30))/2, int32(float32(screenHeight)*0.1), 30, rl.Green)
}

View file

@ -1,6 +1,6 @@
package main
import "github.com/gen2brain/raylib-go/raylib"
import "git.terah.dev/UnrealXR/raylib-go/raylib"
func main() {
rl.SetConfigFlags(rl.FlagVsyncHint)

View file

@ -0,0 +1,106 @@
package main
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const screenW = int32(1280)
const screenH = int32(720)
type gameScreen int
const (
LOGO = iota
TITLE
GAMEPLAY
ENDING
)
func main() {
rl.InitWindow(screenW, screenH, "raylib [core] example - basic screen manager")
var currentScreen gameScreen
currentScreen = LOGO
frames := 0
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
switch currentScreen {
case LOGO:
frames++
if frames > 240 {
currentScreen = TITLE
}
case TITLE:
if rl.IsKeyPressed(rl.KeyEnter) {
currentScreen = GAMEPLAY
}
case GAMEPLAY:
if rl.IsKeyPressed(rl.KeyEnter) {
currentScreen = ENDING
}
case ENDING:
if rl.IsKeyPressed(rl.KeyEnter) {
currentScreen = LOGO
frames = 0
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
rec := rl.NewRectangle(0, 0, float32(screenW), float32(screenH))
switch currentScreen {
case LOGO:
txt := "YOUR LOGO GOES HERE"
txtlen := rl.MeasureText(txt, 50)
rl.DrawText(txt, screenW/2-txtlen/2-3, screenH/2-50+3, 50, rl.Magenta)
rl.DrawText(txt, screenW/2-txtlen/2-1, screenH/2-50+1, 50, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2-50, 50, rl.White)
txt = "this message disappears in " + fmt.Sprint(240-frames) + " frames"
txtlen = rl.MeasureText(txt, 30)
rl.DrawText(txt, screenW/2-txtlen/2-3, screenH/2+3, 30, rl.Magenta)
rl.DrawText(txt, screenW/2-txtlen/2-1, screenH/2+1, 30, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2, 30, rl.White)
case TITLE:
rl.DrawRectangleRec(rec, rl.DarkGreen)
txt := "AN AMAZING TITLE GOES HERE"
txtlen := rl.MeasureText(txt, 50)
rl.DrawText(txt, screenW/2-txtlen/2-2, screenH/2-50+2, 50, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2-50, 50, rl.White)
txt = "press enter to move to next screen"
txtlen = rl.MeasureText(txt, 30)
rl.DrawText(txt, screenW/2-txtlen/2-2, screenH/2+2, 30, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2, 30, rl.White)
case GAMEPLAY:
rl.DrawRectangleRec(rec, rl.DarkPurple)
txt := "FUN GAMEPLAY GOES HERE"
txtlen := rl.MeasureText(txt, 50)
rl.DrawText(txt, screenW/2-txtlen/2-2, screenH/2-50+2, 50, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2-50, 50, rl.White)
txt = "press enter to move to next screen"
txtlen = rl.MeasureText(txt, 30)
rl.DrawText(txt, screenW/2-txtlen/2-2, screenH/2+2, 30, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2, 30, rl.White)
case ENDING:
rl.DrawRectangleRec(rec, rl.DarkBlue)
txt := "A DRAMATIC ENDING GOES HERE"
txtlen := rl.MeasureText(txt, 50)
rl.DrawText(txt, screenW/2-txtlen/2-2, screenH/2-50+2, 50, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2-50, 50, rl.White)
txt = "press enter to move to next screen"
txtlen = rl.MeasureText(txt, 30)
rl.DrawText(txt, screenW/2-txtlen/2-2, screenH/2+2, 30, rl.Black)
rl.DrawText(txt, screenW/2-txtlen/2, screenH/2, 30, rl.White)
}
rl.EndDrawing()
}
rl.CloseWindow()
}

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
rl.InitWindow(800, 450, "raylib [core] example - color selection (collision detection)")

View file

@ -0,0 +1,144 @@
package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
/*******************************************************************************************
*
* raylib [core] example - split screen
*
* Example originally created with raylib 3.7, last time updated with raylib 4.0
*
* Example contributed by Jeffery Myers (@JeffM2501) and reviewed by Ramon Santamaria (@raysan5)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2021-2022 Jeffery Myers (@JeffM2501)
*
********************************************************************************************/
var cameraPlayer1 rl.Camera
var cameraPlayer2 rl.Camera
// Scene drawing
func DrawScene() {
count := float32(5.0)
spacing := float32(4.0)
// Grid of cube trees on a plane to make a "world"
rl.DrawPlane(rl.Vector3{0, 0, 0}, rl.Vector2{50, 50}, rl.Beige) // Simple world plane
for x := -float32(count * spacing); x <= count*spacing; x += spacing {
for z := -float32(count * spacing); z <= count*spacing; z += spacing {
rl.DrawCube(rl.Vector3{x, 1.5, z}, 1, 1, 1, rl.Lime)
rl.DrawCube(rl.Vector3{x, 0.5, z}, 0.25, 1, 0.25, rl.Brown)
}
}
// Draw a cube at each player's position
rl.DrawCube(cameraPlayer1.Position, 1, 1, 1, rl.Red)
rl.DrawCube(cameraPlayer2.Position, 1, 1, 1, rl.Blue)
}
// ------------------------------------------------------------------------------------
// Program main entry point
// ------------------------------------------------------------------------------------
func main() {
// Initialization
//--------------------------------------------------------------------------------------
const (
screenWidth = 800
screenHeight = 450
)
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - split screen")
// Setup player 1 camera and screen
cameraPlayer1.Fovy = 45.0
cameraPlayer1.Up.Y = 1.0
cameraPlayer1.Target.Y = 1.0
cameraPlayer1.Position.Z = -3.0
cameraPlayer1.Position.Y = 1.0
screenPlayer1 := rl.LoadRenderTexture(screenWidth/2, screenHeight)
// Setup player two camera and screen
cameraPlayer2.Fovy = 45.0
cameraPlayer2.Up.Y = 1.0
cameraPlayer2.Target.Y = 3.0
cameraPlayer2.Position.X = -3.0
cameraPlayer2.Position.Y = 3.0
screenPlayer2 := rl.LoadRenderTexture(screenWidth/2, screenHeight)
// Build a flipped rectangle the size of the split view to use for drawing later
splitScreenRect := rl.Rectangle{0.0, 0.0, float32(screenPlayer1.Texture.Width), float32(-screenPlayer1.Texture.Height)}
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
// If anyone moves this frame, how far will they move based on the time since the last frame
// this moves thigns at 10 world units per second, regardless of the actual FPS
offsetThisFrame := 10.0 * rl.GetFrameTime()
// Move Player1 forward and backwards (no turning)
if rl.IsKeyDown(rl.KeyW) {
cameraPlayer1.Position.Z += offsetThisFrame
cameraPlayer1.Target.Z += offsetThisFrame
} else if rl.IsKeyDown(rl.KeyS) {
cameraPlayer1.Position.Z -= offsetThisFrame
cameraPlayer1.Target.Z -= offsetThisFrame
}
// Move Player2 forward and backwards (no turning)
if rl.IsKeyDown(rl.KeyUp) {
cameraPlayer2.Position.X += offsetThisFrame
cameraPlayer2.Target.X += offsetThisFrame
} else if rl.IsKeyDown(rl.KeyDown) {
cameraPlayer2.Position.X -= offsetThisFrame
cameraPlayer2.Target.X -= offsetThisFrame
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
// Draw Player1 view to the render texture
rl.BeginTextureMode(screenPlayer1)
rl.ClearBackground(rl.SkyBlue)
rl.BeginMode3D(cameraPlayer1)
DrawScene()
rl.EndMode3D()
rl.DrawText("PLAYER1 W/S to move", 10, 10, 20, rl.Red)
rl.EndTextureMode()
// Draw Player2 view to the render texture
rl.BeginTextureMode(screenPlayer2)
rl.ClearBackground(rl.SkyBlue)
rl.BeginMode3D(cameraPlayer2)
DrawScene()
rl.EndMode3D()
rl.DrawText("PLAYER2 UP/DOWN to move", 10, 10, 20, rl.Blue)
rl.EndTextureMode()
// Draw both views render textures to the screen side by side
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
rl.DrawTextureRec(screenPlayer1.Texture, splitScreenRect, rl.Vector2{0, 0}, rl.White)
rl.DrawTextureRec(screenPlayer2.Texture, splitScreenRect, rl.Vector2{screenWidth / 2.0, 0}, rl.White)
rl.EndDrawing()
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.UnloadRenderTexture(screenPlayer1) // Unload render texture
rl.UnloadRenderTexture(screenPlayer2) // Unload render texture
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}

View file

@ -0,0 +1,131 @@
package main
/*******************************************************************************************
*
* raylib [core] example - custom frame control
*
* NOTE: WARNING: This is an example for advanced users willing to have full control over
* the frame processes. By default, EndDrawing() calls the following processes:
* 1. Draw remaining batch data: rlDrawRenderBatchActive()
* 2. SwapScreenBuffer()
* 3. Frame time control: WaitTime()
* 4. PollInputEvents()
*
* To avoid steps 2, 3 and 4, flag SUPPORT_CUSTOM_FRAME_CONTROL can be enabled in
* config.h (it requires recompiling raylib). This way those steps are up to the user.
*
* Note that enabling this flag invalidates some functions:
* - GetFrameTime()
* - SetTargetFPS()
* - GetFPS()
*
* Example originally created with raylib 4.0, last time updated with raylib 4.0
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2021-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - Custom Frame Control")
previousTime := rl.GetTime()
currentTime := 0.0
updateDrawTime := 0.0
waitTime := 0.0
deltaTime := 0.0
timeCounter := 0.0
position := 0.0
pause := false
targetFPS := 60
for !rl.WindowShouldClose() {
rl.PollInputEvents() // Poll input events (SUPPORT_CUSTOM_FRAME_CONTROL)
if rl.IsKeyPressed(rl.KeySpace) {
pause = !pause
}
if rl.IsKeyPressed(rl.KeyUp) {
targetFPS += 20
} else if rl.IsKeyPressed(rl.KeyDown) {
targetFPS -= 20
}
if targetFPS < 0 {
targetFPS = 0
}
if !pause {
position += 200 * deltaTime // We move at 200 pixels per second
if position >= float64(rl.GetScreenWidth()) {
position = 0
}
timeCounter += deltaTime // We count time (seconds)
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
for i := 0; i < rl.GetScreenWidth()/200; i++ {
rl.DrawRectangle(200*int32(i), 0, 1, int32(rl.GetScreenHeight()), rl.SkyBlue)
}
rl.DrawCircle(int32(position), int32(rl.GetScreenHeight()/2-25), 50, rl.Red)
msg := fmt.Sprintf("%03.0f ms", timeCounter*1000)
rl.DrawText(msg, int32(position-40), int32(rl.GetScreenHeight()/2-100), 20, rl.Maroon)
msg = fmt.Sprintf("PosX: %03.0f", position)
rl.DrawText(msg, int32(position-50), int32(rl.GetScreenHeight()/2+40), 20, rl.Black)
msg = "Circle is moving at a constant 200 pixels/sec,\nindependently of the frame rate."
rl.DrawText(msg, 10, 10, 20, rl.DarkGray)
msg = "PRESS SPACE to PAUSE MOVEMENT"
rl.DrawText(msg, 10, int32(rl.GetScreenHeight()-60), 20, rl.Gray)
msg = "PRESS UP | DOWN to CHANGE TARGET FPS"
rl.DrawText(msg, 10, int32(rl.GetScreenHeight()-30), 20, rl.Gray)
msg = fmt.Sprintf("TARGET FPS: %d", targetFPS)
rl.DrawText(msg, int32(rl.GetScreenWidth()-220), 10, 20, rl.Lime)
msg = fmt.Sprintf("CURRENT FPS: %d", int(1/deltaTime))
rl.DrawText(msg, int32(rl.GetScreenWidth()-220), 40, 20, rl.Lime)
rl.EndDrawing()
// NOTE: In case raylib is configured to SUPPORT_CUSTOM_FRAME_CONTROL,
// Events polling, screen buffer swap and frame time control must be managed by the user
rl.SwapScreenBuffer() // We want a fixed frame rate
currentTime = rl.GetTime()
updateDrawTime = currentTime - previousTime
if targetFPS > 0 { // We want a fixed frame rate
waitTime = (1 / float64(targetFPS)) - updateDrawTime
if waitTime > 0 {
rl.WaitTime(waitTime)
currentTime = rl.GetTime()
deltaTime = currentTime - previousTime
}
} else {
deltaTime = updateDrawTime
}
previousTime = currentTime
}
rl.CloseWindow()
}

View file

@ -0,0 +1,49 @@
package main
import (
"fmt"
"time"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
func main() {
// Set custom logger
rl.SetTraceLogCallback(customLog)
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - Custom Logging")
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText("Check the console output to see the custom logger in action!", 60, 200, 20, rl.LightGray)
rl.EndDrawing()
}
rl.CloseWindow()
}
// Custom logging function
func customLog(msgType int, text string) {
now := time.Now()
switch rl.TraceLogLevel(msgType) {
case rl.LogInfo:
fmt.Println("[INFO] : ", now, text)
case rl.LogError:
fmt.Println("[ERROR] : ", now, text)
case rl.LogWarning:
fmt.Println("[WARNING] : ", now, text)
case rl.LogDebug:
fmt.Println("[DEBUG] : ", now, text)
default:
fmt.Println("[UNKNOWN] : ", now, text)
}
}

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
screenWidth := int32(800)
screenHeight := int32(450)
@ -12,12 +8,13 @@ func main() {
rl.SetTargetFPS(60)
count := int32(0)
var count int
var droppedFiles []string
for !rl.WindowShouldClose() {
if rl.IsFileDropped() {
droppedFiles = rl.GetDroppedFiles(&count)
droppedFiles = rl.LoadDroppedFiles()
count = len(droppedFiles)
}
rl.BeginDrawing()
@ -28,7 +25,7 @@ func main() {
} else {
rl.DrawText("Dropped files:", 100, 40, 20, rl.DarkGray)
for i := int32(0); i < count; i++ {
for i := 0; i < count; i++ {
if i%2 == 0 {
rl.DrawRectangle(0, int32(85+40*i), screenWidth, 40, rl.Fade(rl.LightGray, 0.5))
} else {
@ -44,7 +41,7 @@ func main() {
rl.EndDrawing()
}
rl.ClearDroppedFiles()
rl.UnloadDroppedFiles()
rl.CloseWindow()
}

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
var (
maxGestureStrings int = 20
)

View file

@ -3,7 +3,7 @@ package main
import (
"fmt"
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
@ -21,163 +21,165 @@ func main() {
rl.SetTargetFPS(60)
var gamepad int32 = 0 // which gamepad to display
for !rl.WindowShouldClose() {
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
if rl.IsGamepadAvailable(rl.GamepadPlayer1) {
rl.DrawText(fmt.Sprintf("GP1: %s", rl.GetGamepadName(rl.GamepadPlayer1)), 10, 10, 10, rl.Black)
if rl.IsGamepadAvailable(gamepad) {
rl.DrawText(fmt.Sprintf("GP1: %s", rl.GetGamepadName(gamepad)), 10, 10, 10, rl.Black)
if rl.IsGamepadName(rl.GamepadPlayer1, xbox360NameID) {
if rl.GetGamepadName(gamepad) == xbox360NameID {
rl.DrawTexture(texXboxPad, 0, 0, rl.DarkGray)
// Draw buttons: xbox home
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonHome) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonMiddle) {
rl.DrawCircle(394, 89, 19, rl.Red)
}
// Draw buttons: basic
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonStart) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonMiddleRight) {
rl.DrawCircle(436, 150, 9, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonSelect) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonMiddleLeft) {
rl.DrawCircle(352, 150, 9, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonX) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceLeft) {
rl.DrawCircle(501, 151, 15, rl.Blue)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonA) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceDown) {
rl.DrawCircle(536, 187, 15, rl.Lime)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonB) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceRight) {
rl.DrawCircle(572, 151, 15, rl.Maroon)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonY) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceUp) {
rl.DrawCircle(536, 115, 15, rl.Gold)
}
// Draw buttons: d-pad
rl.DrawRectangle(317, 202, 19, 71, rl.Black)
rl.DrawRectangle(293, 228, 69, 19, rl.Black)
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonUp) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceUp) {
rl.DrawRectangle(317, 202, 19, 26, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonDown) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceDown) {
rl.DrawRectangle(317, 202+45, 19, 26, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonLeft) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceLeft) {
rl.DrawRectangle(292, 228, 25, 19, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonRight) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceRight) {
rl.DrawRectangle(292+44, 228, 26, 19, rl.Red)
}
// Draw buttons: left-right back
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonLb) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftTrigger1) {
rl.DrawCircle(259, 61, 20, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadXboxButtonRb) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightTrigger1) {
rl.DrawCircle(536, 61, 20, rl.Red)
}
// Draw axis: left joystick
rl.DrawCircle(259, 152, 39, rl.Black)
rl.DrawCircle(259, 152, 34, rl.LightGray)
rl.DrawCircle(int32(259+(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadXboxAxisLeftX)*20)),
int32(152-(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadXboxAxisLeftY)*20)), 25, rl.Black)
rl.DrawCircle(int32(259+(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisLeftX)*20)),
int32(152-(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisLeftY)*20)), 25, rl.Black)
// Draw axis: right joystick
rl.DrawCircle(461, 237, 38, rl.Black)
rl.DrawCircle(461, 237, 33, rl.LightGray)
rl.DrawCircle(int32(461+(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadXboxAxisRightX)*20)),
int32(237-(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadXboxAxisRightY)*20)), 25, rl.Black)
rl.DrawCircle(int32(461+(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisRightX)*20)),
int32(237-(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisRightY)*20)), 25, rl.Black)
// Draw axis: left-right triggers
rl.DrawRectangle(170, 30, 15, 70, rl.Gray)
rl.DrawRectangle(604, 30, 15, 70, rl.Gray)
rl.DrawRectangle(170, 30, 15, int32(((1.0+rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadXboxAxisLt))/2.0)*70), rl.Red)
rl.DrawRectangle(604, 30, 15, int32(((1.0+rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadXboxAxisRt))/2.0)*70), rl.Red)
rl.DrawRectangle(170, 30, 15, int32(((1.0+rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisLeftTrigger))/2.0)*70), rl.Red)
rl.DrawRectangle(604, 30, 15, int32(((1.0+rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisRightTrigger))/2.0)*70), rl.Red)
} else if rl.IsGamepadName(rl.GamepadPlayer1, ps3NameID) {
} else if rl.GetGamepadName(gamepad) == ps3NameID {
rl.DrawTexture(texPs3Pad, 0, 0, rl.DarkGray)
// Draw buttons: ps
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonPs) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonMiddle) {
rl.DrawCircle(396, 222, 13, rl.Red)
}
// Draw buttons: basic
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonSelect) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonMiddleLeft) {
rl.DrawRectangle(328, 170, 32, 13, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonStart) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonMiddleRight) {
rl.DrawTriangle(rl.NewVector2(436, 168), rl.NewVector2(436, 185), rl.NewVector2(464, 177), rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonTriangle) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceUp) {
rl.DrawCircle(557, 144, 13, rl.Lime)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonCircle) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceRight) {
rl.DrawCircle(586, 173, 13, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonCross) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceDown) {
rl.DrawCircle(557, 203, 13, rl.Violet)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonSquare) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightFaceLeft) {
rl.DrawCircle(527, 173, 13, rl.Pink)
}
// Draw buttons: d-pad
rl.DrawRectangle(225, 132, 24, 84, rl.Black)
rl.DrawRectangle(195, 161, 84, 25, rl.Black)
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonUp) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceUp) {
rl.DrawRectangle(225, 132, 24, 29, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonDown) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceDown) {
rl.DrawRectangle(225, 132+54, 24, 30, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonLeft) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceLeft) {
rl.DrawRectangle(195, 161, 30, 25, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonRight) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftFaceRight) {
rl.DrawRectangle(195+54, 161, 30, 25, rl.Red)
}
// Draw buttons: left-right back buttons
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonL1) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonLeftTrigger1) {
rl.DrawCircle(239, 82, 20, rl.Red)
}
if rl.IsGamepadButtonDown(rl.GamepadPlayer1, rl.GamepadPs3ButtonR1) {
if rl.IsGamepadButtonDown(gamepad, rl.GamepadButtonRightTrigger1) {
rl.DrawCircle(557, 82, 20, rl.Red)
}
// Draw axis: left joystick
rl.DrawCircle(319, 255, 35, rl.Black)
rl.DrawCircle(319, 255, 31, rl.LightGray)
rl.DrawCircle(int32(319+(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadPs3AxisLeftX)*20)),
int32(255+(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadPs3AxisLeftY)*20)), 25, rl.Black)
rl.DrawCircle(int32(319+(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisLeftX)*20)),
int32(255+(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisLeftY)*20)), 25, rl.Black)
// Draw axis: right joystick
rl.DrawCircle(475, 255, 35, rl.Black)
rl.DrawCircle(475, 255, 31, rl.LightGray)
rl.DrawCircle(int32(475+(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadPs3AxisRightX)*20)),
int32(255+(rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadPs3AxisRightY)*20)), 25, rl.Black)
rl.DrawCircle(int32(475+(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisRightX)*20)),
int32(255+(rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisRightY)*20)), 25, rl.Black)
// Draw axis: left-right triggers
rl.DrawRectangle(169, 48, 15, 70, rl.Gray)
rl.DrawRectangle(611, 48, 15, 70, rl.Gray)
rl.DrawRectangle(169, 48, 15, int32(((1.0-rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadPs3AxisL2))/2.0)*70), rl.Red)
rl.DrawRectangle(611, 48, 15, int32(((1.0-rl.GetGamepadAxisMovement(rl.GamepadPlayer1, rl.GamepadPs3AxisR2))/2.0)*70), rl.Red)
rl.DrawRectangle(169, 48, 15, int32(((1.0-rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisLeftTrigger))/2.0)*70), rl.Red)
rl.DrawRectangle(611, 48, 15, int32(((1.0-rl.GetGamepadAxisMovement(gamepad, rl.GamepadAxisRightTrigger))/2.0)*70), rl.Red)
} else {
rl.DrawText("- GENERIC GAMEPAD -", 280, 180, 20, rl.Gray)
// TODO: Draw generic gamepad
}
rl.DrawText(fmt.Sprintf("DETECTED AXIS [%d]:", rl.GetGamepadAxisCount(rl.GamepadPlayer1)), 10, 50, 10, rl.Maroon)
rl.DrawText(fmt.Sprintf("DETECTED AXIS [%d]:", rl.GetGamepadAxisCount(gamepad)), 10, 50, 10, rl.Maroon)
for i := int32(0); i < rl.GetGamepadAxisCount(rl.GamepadPlayer1); i++ {
rl.DrawText(fmt.Sprintf("AXIS %d: %.02f", i, rl.GetGamepadAxisMovement(rl.GamepadPlayer1, i)), 20, 70+20*i, 10, rl.DarkGray)
for i := int32(0); i < rl.GetGamepadAxisCount(gamepad); i++ {
rl.DrawText(fmt.Sprintf("AXIS %d: %.02f", i, rl.GetGamepadAxisMovement(gamepad, i)), 20, 70+20*i, 10, rl.DarkGray)
}
if rl.GetGamepadButtonPressed() != -1 {

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
screenWidth := int32(800)
screenHeight := int32(450)

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {

View file

@ -3,7 +3,7 @@ package main
import (
"fmt"
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -18,7 +18,7 @@ func main() {
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
boxPositionY -= rl.GetMouseWheelMove() * scrollSpeed
boxPositionY -= int32(rl.GetMouseWheelMove()) * scrollSpeed
rl.BeginDrawing()

View file

@ -3,13 +3,13 @@ package main
import (
"fmt"
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
rl.InitWindow(800, 450, "raylib [core] example - generate random values")
framesCounter := 0 // Variable used to count frames
framesCounter := 0 // Variable used to count frames
randValue := rl.GetRandomValue(-8, 5) // Get a random integer number between -8 and 5 (both included)
rl.SetTargetFPS(60)

View file

@ -0,0 +1,52 @@
package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
var (
screenW = int32(800)
screenH = int32(450)
)
func main() {
rl.InitWindow(screenW, screenH, "raylib [core] example - scissor test")
scissorArea := rl.NewRectangle(0, 0, 300, 300)
scissorMode := true
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
if rl.IsKeyPressed(rl.KeyS) {
scissorMode = !scissorMode
}
scissorArea.X = float32(rl.GetMouseX())
scissorArea.Y = float32(rl.GetMouseY())
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
if scissorMode {
rl.BeginScissorMode(scissorArea.ToInt32().X, scissorArea.ToInt32().Y, scissorArea.ToInt32().Width, scissorArea.ToInt32().Height)
}
rl.DrawRectangle(0, 0, screenW, screenH, rl.Red)
rl.DrawText("MOVE MOUSE TO REVEAL TEXT", 190, 200, 20, rl.Black)
if scissorMode {
rl.EndScissorMode()
}
rl.DrawRectangleLinesEx(scissorArea, 1, rl.Black)
rl.DrawText("S KEY TO TOGGLE MODE", 10, 10, 20, rl.Black)
rl.EndDrawing()
}
rl.CloseWindow()
}

View file

@ -0,0 +1,85 @@
package main
import (
"fmt"
"math"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const screenW = int32(1280)
const screenH = int32(720)
const virtualScreenW = screenW / 5
const virtualScreenH = screenH / 5
const virtualRatio = float32(screenW) / float32(virtualScreenW)
func main() {
rl.InitWindow(screenW, screenH, "raylib [core] example - smooth pixel-perfect camera")
worldSpaceCam := rl.Camera2D{}
worldSpaceCam.Zoom = 1
screenSpaceCam := rl.Camera2D{}
screenSpaceCam.Zoom = 1
target := rl.LoadRenderTexture(virtualScreenW, virtualScreenH)
rec1 := rl.NewRectangle(120, 60, 80, 40)
rec2 := rl.NewRectangle(130, 70, 90, 30)
rec3 := rl.NewRectangle(140, 80, 65, 45)
sourceRec := rl.NewRectangle(0, 0, float32(target.Texture.Width), -float32(target.Texture.Height))
destRec := rl.NewRectangle(-virtualRatio, -virtualRatio, float32(screenW)+(virtualRatio*2), float32(screenH)+(virtualRatio*2))
origin := rl.NewVector2(0, 0)
rotation, camX, camY := float32(0), float32(0), float32(0)
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rotation += 60 * rl.GetFrameTime()
camX = float32(math.Sin(rl.GetTime()) * 50)
camY = float32(math.Cos(rl.GetTime()) * 30)
screenSpaceCam.Target = rl.NewVector2(camX, camY)
worldSpaceCam.Target.X = screenSpaceCam.Target.X
screenSpaceCam.Target.X -= worldSpaceCam.Target.X
screenSpaceCam.Target.X *= virtualRatio
worldSpaceCam.Target.Y = screenSpaceCam.Target.Y
screenSpaceCam.Target.Y -= worldSpaceCam.Target.Y
screenSpaceCam.Target.Y *= virtualRatio
rl.BeginTextureMode(target)
rl.ClearBackground(rl.RayWhite)
rl.BeginMode2D(worldSpaceCam)
rl.DrawRectanglePro(rec1, origin, rotation, rl.Black)
rl.DrawRectanglePro(rec2, origin, -rotation, rl.Red)
rl.DrawRectanglePro(rec3, origin, rotation+45, rl.Blue)
rl.EndMode2D()
rl.EndTextureMode()
rl.BeginDrawing()
rl.ClearBackground(rl.Red)
rl.BeginMode2D(screenSpaceCam)
rl.DrawTexturePro(target.Texture, sourceRec, destRec, origin, 0, rl.White)
rl.EndMode2D()
rl.DrawText("screen res "+fmt.Sprint(screenW)+"x"+fmt.Sprint(screenH), 10, 10, 20, rl.Black)
rl.DrawText("world res "+fmt.Sprint(virtualScreenW)+"x"+fmt.Sprint(virtualScreenH), 10, 30, 20, rl.Black)
rl.DrawFPS(screenW-100, 10)
rl.EndDrawing()
}
rl.UnloadRenderTexture(target)
rl.CloseWindow()
}

View file

@ -1,45 +1,64 @@
/*******************************************************************************************
*
* raylib [core] example - Storage save/load values
*
* Example originally created with raylib 1.4, last time updated with raylib 4.2
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2015-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
package main
import (
"encoding/binary"
"fmt"
"os"
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
storageScore = 0
storageHiscore = 1
screenWidth = 800
screenHeight = 450
storageDataFile = "storage.data"
// NOTE: Storage positions must start with 0, directly related to file memory layout
storagePositionScore = 0
storagePositionHiscore = 1
)
func main() {
rl.InitWindow(800, 450, "raylib [core] example - storage save/load values")
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - storage save/load values")
score := int32(0)
hiscore := int32(0)
var score int32
var hiscore int32
var framesCounter int32
framesCounter := 0
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
if rl.IsKeyPressed(rl.KeyR) {
score = rl.GetRandomValue(1000, 2000)
hiscore = rl.GetRandomValue(2000, 4000)
}
if rl.IsKeyPressed(rl.KeyEnter) {
rl.SaveStorageValue(storageScore, score)
rl.SaveStorageValue(storageHiscore, hiscore)
_ = SaveStorageValue(storagePositionScore, score)
_ = SaveStorageValue(storagePositionHiscore, hiscore)
} else if rl.IsKeyPressed(rl.KeySpace) {
// NOTE: If requested position could not be found, value 0 is returned
score = rl.LoadStorageValue(storageScore)
hiscore = rl.LoadStorageValue(storageHiscore)
score, _ = LoadStorageValue(storagePositionScore)
hiscore, _ = LoadStorageValue(storagePositionHiscore)
}
framesCounter++
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText(fmt.Sprintf("SCORE: %d", score), 280, 130, 40, rl.Maroon)
@ -54,5 +73,55 @@ func main() {
rl.EndDrawing()
}
rl.CloseWindow()
// De-Initialization
rl.CloseWindow() // Close window and OpenGL context
}
// SaveStorageValue saves an integer value to storage file (to defined position)
// NOTE: Storage positions is directly related to file memory layout (4 bytes each integer)
func SaveStorageValue(position uint32, value int32) error {
// Load the file data
fileData, err := os.ReadFile(storageDataFile)
if err != nil && !os.IsNotExist(err) {
return fmt.Errorf("failed to load file: %v", err)
}
dataSize := len(fileData)
requiredSize := int((position + 1) * 4) // Each int32 is 4 bytes
newFileData := make([]byte, requiredSize)
// Copy existing file data to newFileData
if dataSize > 0 {
copy(newFileData, fileData)
}
// Update the value at the specified position
binary.LittleEndian.PutUint32(newFileData[position*4:], uint32(value))
// Save the updated data back to the file
err = os.WriteFile(storageDataFile, newFileData, 0644)
if err != nil {
return fmt.Errorf("failed to save file: %v", err)
}
return nil
}
// LoadStorageValue loads an integer value from storage file (from defined position)
// NOTE: If requested position could not be found, value 0 is returned
func LoadStorageValue(position uint32) (int32, error) {
// Load the file data
fileData, err := os.ReadFile(storageDataFile)
if err != nil {
return 0, fmt.Errorf("failed to load file: %v", err)
}
dataSize := len(fileData)
if dataSize < int((position+1)*4) {
return 0, fmt.Errorf("position out of bounds")
}
// Read the value at the specified position
value := int32(binary.LittleEndian.Uint32(fileData[position*4:]))
return value, nil
}

View file

@ -0,0 +1,52 @@
#version 100
precision mediump float;
// Input vertex attributes (from vertex shader)
varying vec2 fragTexCoord;
varying vec4 fragColor;
// Input uniform values
uniform sampler2D texture0;
uniform vec4 colDiffuse;
// NOTE: Add here your custom variables
uniform vec2 leftLensCenter;
uniform vec2 rightLensCenter;
uniform vec2 leftScreenCenter;
uniform vec2 rightScreenCenter;
uniform vec2 scale;
uniform vec2 scaleIn;
uniform vec4 deviceWarpParam;
uniform vec4 chromaAbParam;
void main()
{
// Compute lens distortion
vec2 lensCenter = fragTexCoord.x < 0.5? leftLensCenter : rightLensCenter;
vec2 screenCenter = fragTexCoord.x < 0.5? leftScreenCenter : rightScreenCenter;
vec2 theta = (fragTexCoord - lensCenter)*scaleIn;
float rSq = theta.x*theta.x + theta.y*theta.y;
vec2 theta1 = theta*(deviceWarpParam.x + deviceWarpParam.y*rSq + deviceWarpParam.z*rSq*rSq + deviceWarpParam.w*rSq*rSq*rSq);
vec2 thetaBlue = theta1*(chromaAbParam.z + chromaAbParam.w*rSq);
vec2 tcBlue = lensCenter + scale*thetaBlue;
if (any(bvec2(clamp(tcBlue, screenCenter - vec2(0.25, 0.5), screenCenter + vec2(0.25, 0.5)) - tcBlue)))
{
// Set black fragment for everything outside the lens border
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
else
{
// Compute color chroma aberration
float blue = texture2D(texture0, tcBlue).b;
vec2 tcGreen = lensCenter + scale*theta1;
float green = texture2D(texture0, tcGreen).g;
vec2 thetaRed = theta1*(chromaAbParam.x + chromaAbParam.y*rSq);
vec2 tcRed = lensCenter + scale*thetaRed;
float red = texture2D(texture0, tcRed).r;
gl_FragColor = vec4(red, green, blue, 1.0);
}
}

View file

@ -0,0 +1,53 @@
#version 330
// Input vertex attributes (from vertex shader)
in vec2 fragTexCoord;
in vec4 fragColor;
// Input uniform values
uniform sampler2D texture0;
uniform vec4 colDiffuse;
// Output fragment color
out vec4 finalColor;
// NOTE: Add here your custom variables
uniform vec2 leftLensCenter = vec2(0.288, 0.5);
uniform vec2 rightLensCenter = vec2(0.712, 0.5);
uniform vec2 leftScreenCenter = vec2(0.25, 0.5);
uniform vec2 rightScreenCenter = vec2(0.75, 0.5);
uniform vec2 scale = vec2(0.25, 0.45);
uniform vec2 scaleIn = vec2(4, 2.2222);
uniform vec4 deviceWarpParam = vec4(1, 0.22, 0.24, 0);
uniform vec4 chromaAbParam = vec4(0.996, -0.004, 1.014, 0.0);
void main()
{
// Compute lens distortion
vec2 lensCenter = fragTexCoord.x < 0.5? leftLensCenter : rightLensCenter;
vec2 screenCenter = fragTexCoord.x < 0.5? leftScreenCenter : rightScreenCenter;
vec2 theta = (fragTexCoord - lensCenter)*scaleIn;
float rSq = theta.x*theta.x + theta.y*theta.y;
vec2 theta1 = theta*(deviceWarpParam.x + deviceWarpParam.y*rSq + deviceWarpParam.z*rSq*rSq + deviceWarpParam.w*rSq*rSq*rSq);
vec2 thetaBlue = theta1*(chromaAbParam.z + chromaAbParam.w*rSq);
vec2 tcBlue = lensCenter + scale*thetaBlue;
if (any(bvec2(clamp(tcBlue, screenCenter - vec2(0.25, 0.5), screenCenter + vec2(0.25, 0.5)) - tcBlue)))
{
// Set black fragment for everything outside the lens border
finalColor = vec4(0.0, 0.0, 0.0, 1.0);
}
else
{
// Compute color chroma aberration
float blue = texture(texture0, tcBlue).b;
vec2 tcGreen = lensCenter + scale*theta1;
float green = texture(texture0, tcGreen).g;
vec2 thetaRed = theta1*(chromaAbParam.x + chromaAbParam.y*rSq);
vec2 tcRed = lensCenter + scale*thetaRed;
float red = texture(texture0, tcRed).r;
finalColor = vec4(red, green, blue, 1.0);
}
}

View file

@ -0,0 +1,137 @@
/*******************************************************************************************
*
* raylib [core] example - VR Simulator (Oculus Rift CV1 parameters)
*
* Example originally created with raylib 2.5, last time updated with raylib 4.0
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2017-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
package main
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
glslVersion = 330 // Desktop
// glslVersion = 100 // Android, web
)
func main() {
// NOTE: screenWidth/screenHeight should match VR device aspect ratio
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - vr simulator")
// VR device parameters definition
device := rl.VrDeviceInfo{
// Oculus Rift CV1 parameters for simulator
HResolution: 2160, // Horizontal resolution in pixels
VResolution: 1200, // Vertical resolution in pixels
HScreenSize: 0.133793, // Horizontal size in meters
VScreenSize: 0.0669, // Vertical size in meters
EyeToScreenDistance: 0.041, // Distance between eye and display in meters
LensSeparationDistance: 0.07, // Lens separation distance in meters
InterpupillaryDistance: 0.07, // IPD (distance between pupils) in meters
// NOTE: CV1 uses fresnel-hybrid-asymmetric lenses with specific compute shaders
// Following parameters are just an approximation to CV1 distortion stereo rendering
// Lens distortion constant parameters
LensDistortionValues: [4]float32{1.0, 0.22, 0.24, 0.0},
// Chromatic aberration correction parameters
ChromaAbCorrection: [4]float32{0.996, -0.004, 1.014, 0.0},
}
// Load VR stereo config for VR device parameters (Oculus Rift CV1 parameters)
config := rl.LoadVrStereoConfig(device)
// Distortion shader (uses device lens distortion and chroma)
fileName := fmt.Sprintf("distortion%d.fs", glslVersion)
distortion := rl.LoadShader("", fileName)
// Update distortion shader with lens and distortion-scale parameters
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "leftLensCenter"),
config.LeftLensCenter[:], rl.ShaderUniformVec2)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "rightLensCenter"),
config.RightLensCenter[:], rl.ShaderUniformVec2)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "leftScreenCenter"),
config.LeftScreenCenter[:], rl.ShaderUniformVec2)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "rightScreenCenter"),
config.RightScreenCenter[:], rl.ShaderUniformVec2)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "scale"),
config.Scale[:], rl.ShaderUniformVec2)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "scaleIn"),
config.ScaleIn[:], rl.ShaderUniformVec2)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "deviceWarpParam"),
device.LensDistortionValues[:], rl.ShaderUniformVec4)
rl.SetShaderValue(distortion, rl.GetShaderLocation(distortion, "chromaAbParam"),
device.ChromaAbCorrection[:], rl.ShaderUniformVec4)
// Initialize frame buffer for stereo rendering
// NOTE: Screen size should match HMD aspect ratio
target := rl.LoadRenderTexture(device.HResolution, device.VResolution)
// The target's height is flipped (in the source Rectangle), due to OpenGL reasons
sourceRec := rl.Rectangle{Width: float32(target.Texture.Width), Height: float32(-target.Texture.Height)}
destRec := rl.Rectangle{Width: float32(rl.GetScreenWidth()), Height: float32(rl.GetScreenHeight())}
// Define the camera to look into our 3d world
camera := rl.Camera{
Position: rl.Vector3{X: 5, Y: 2, Z: 5},
Target: rl.Vector3{Y: 2},
Up: rl.Vector3{Y: 1},
Fovy: 60.0,
Projection: rl.CameraPerspective,
}
cubePosition := rl.Vector3{}
rl.DisableCursor() // Limit cursor to relative movement inside the window
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
rl.UpdateCamera(&camera, rl.CameraFirstPerson)
// Draw texture
rl.BeginTextureMode(target)
rl.ClearBackground(rl.RayWhite)
rl.BeginVrStereoMode(config)
rl.BeginMode3D(camera)
rl.DrawCube(cubePosition, 2.0, 2.0, 2.0, rl.Red)
rl.DrawCubeWires(cubePosition, 2.0, 2.0, 2.0, rl.Maroon)
rl.DrawGrid(40, 1.0)
rl.EndMode3D()
rl.EndVrStereoMode()
rl.EndTextureMode()
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginShaderMode(distortion)
rl.DrawTexturePro(target.Texture, sourceRec, destRec, rl.Vector2{}, 0.0, rl.White)
rl.EndShaderMode()
rl.DrawFPS(10, 10)
rl.EndDrawing()
}
// De-Initialization
rl.UnloadVrStereoConfig(config) // Unload stereo config
rl.UnloadRenderTexture(target) // Unload stereo render fbo
rl.UnloadShader(distortion) // Unload distortion shader
rl.CloseWindow() // Close window and OpenGL context
}

View file

@ -0,0 +1,260 @@
/*******************************************************************************************
*
* raylib [core] example - window flags
*
* Example originally created with raylib 3.5, last time updated with raylib 3.5
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2020-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
package main
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
// Possible window flags
/*
FLAG_VSYNC_HINT
FLAG_FULLSCREEN_MODE -> not working properly -> wrong scaling!
FLAG_WINDOW_RESIZABLE
FLAG_WINDOW_UNDECORATED
FLAG_WINDOW_TRANSPARENT
FLAG_WINDOW_HIDDEN
FLAG_WINDOW_MINIMIZED -> Not supported on window creation
FLAG_WINDOW_MAXIMIZED -> Not supported on window creation
FLAG_WINDOW_UNFOCUSED
FLAG_WINDOW_TOPMOST
FLAG_WINDOW_HIGHDPI -> errors after minimize-resize, fb size is recalculated
FLAG_WINDOW_ALWAYS_RUN
FLAG_MSAA_4X_HINT
*/
func main() {
// Set configuration flags for window creation
//SetConfigFlags(FLAG_VSYNC_HINT | FLAG_MSAA_4X_HINT | FLAG_WINDOW_HIGHDPI);
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - Window Flags")
ballPosition := rl.Vector2{X: float32(rl.GetScreenWidth()) / 2.0, Y: float32(rl.GetScreenHeight()) / 2.0}
ballSpeed := rl.Vector2{X: 5.0, Y: 4.0}
ballRadius := float32(20.0)
framesCounter := 0
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
for !rl.WindowShouldClose() { // Detect window close button or ESC key
if rl.IsKeyPressed(rl.KeyF) {
rl.ToggleFullscreen() // modifies window size when scaling!
}
if rl.IsKeyPressed(rl.KeyR) {
if rl.IsWindowState(rl.FlagWindowResizable) {
rl.ClearWindowState(rl.FlagWindowResizable)
} else {
rl.SetWindowState(rl.FlagWindowResizable)
}
}
if rl.IsKeyPressed(rl.KeyD) {
if rl.IsWindowState(rl.FlagWindowUndecorated) {
rl.ClearWindowState(rl.FlagWindowUndecorated)
} else {
rl.SetWindowState(rl.FlagWindowUndecorated)
}
}
if rl.IsKeyPressed(rl.KeyH) {
if !rl.IsWindowState(rl.FlagWindowHidden) {
rl.SetWindowState(rl.FlagWindowHidden)
}
framesCounter = 0
}
if rl.IsWindowState(rl.FlagWindowHidden) {
framesCounter++
if framesCounter >= 240 {
rl.ClearWindowState(rl.FlagWindowHidden) // Show window after 3 seconds
}
}
if rl.IsKeyPressed(rl.KeyN) {
if !rl.IsWindowState(rl.FlagWindowMinimized) {
rl.MinimizeWindow()
}
framesCounter = 0
}
if rl.IsWindowState(rl.FlagWindowMinimized) {
framesCounter++
if framesCounter >= 240 {
rl.RestoreWindow() // Restore window after 3 seconds
}
}
if rl.IsKeyPressed(rl.KeyM) {
// NOTE: Requires FLAG_WINDOW_RESIZABLE enabled!
if rl.IsWindowState(rl.FlagWindowMaximized) {
rl.RestoreWindow()
} else {
rl.MaximizeWindow()
}
}
if rl.IsKeyPressed(rl.KeyU) {
if rl.IsWindowState(rl.FlagWindowUnfocused) {
rl.ClearWindowState(rl.FlagWindowUnfocused)
} else {
rl.SetWindowState(rl.FlagWindowUnfocused)
}
}
if rl.IsKeyPressed(rl.KeyT) {
if rl.IsWindowState(rl.FlagWindowTopmost) {
rl.ClearWindowState(rl.FlagWindowTopmost)
} else {
rl.SetWindowState(rl.FlagWindowTopmost)
}
}
if rl.IsKeyPressed(rl.KeyA) {
if rl.IsWindowState(rl.FlagWindowAlwaysRun) {
rl.ClearWindowState(rl.FlagWindowAlwaysRun)
} else {
rl.SetWindowState(rl.FlagWindowAlwaysRun)
}
}
if rl.IsKeyPressed(rl.KeyV) {
if rl.IsWindowState(rl.FlagVsyncHint) {
rl.ClearWindowState(rl.FlagVsyncHint)
} else {
rl.SetWindowState(rl.FlagVsyncHint)
}
}
// Bouncing ball logic
ballPosition.X += ballSpeed.X
ballPosition.Y += ballSpeed.Y
if (ballPosition.X >= (float32(rl.GetScreenWidth()) - ballRadius)) || (ballPosition.X <= ballRadius) {
ballSpeed.X *= -1.0
}
if (ballPosition.Y >= (float32(rl.GetScreenHeight()) - ballRadius)) || (ballPosition.Y <= ballRadius) {
ballSpeed.Y *= -1.0
}
rl.BeginDrawing()
if rl.IsWindowState(rl.FlagWindowTransparent) {
rl.ClearBackground(rl.Blank)
} else {
rl.ClearBackground(rl.White)
}
rl.DrawCircleV(ballPosition, ballRadius, rl.Maroon)
rl.DrawRectangleLinesEx(
rl.Rectangle{
Width: float32(rl.GetScreenWidth()),
Height: float32(rl.GetScreenHeight()),
},
4, rl.White,
)
rl.DrawCircleV(rl.GetMousePosition(), 10, rl.DarkBlue)
rl.DrawFPS(10, 10)
rl.DrawText(
fmt.Sprintf("Screen Size: [%d, %d]", rl.GetScreenWidth(), rl.GetScreenHeight()),
10,
40,
10,
rl.Green,
)
// Draw window state info
rl.DrawText("Following flags can be set after window creation:", 10, 60, 10, rl.Gray)
if rl.IsWindowState(rl.FlagFullscreenMode) {
rl.DrawText("[F] FLAG_FULLSCREEN_MODE: on", 10, 80, 10, rl.Lime)
} else {
rl.DrawText("[F] FLAG_FULLSCREEN_MODE: off", 10, 80, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowResizable) {
rl.DrawText("[R] FLAG_WINDOW_RESIZABLE: on", 10, 100, 10, rl.Lime)
} else {
rl.DrawText("[R] FLAG_WINDOW_RESIZABLE: off", 10, 100, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowUndecorated) {
rl.DrawText("[D] FLAG_WINDOW_UNDECORATED: on", 10, 120, 10, rl.Lime)
} else {
rl.DrawText("[D] FLAG_WINDOW_UNDECORATED: off", 10, 120, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowHidden) {
rl.DrawText("[H] FLAG_WINDOW_HIDDEN: on", 10, 140, 10, rl.Lime)
} else {
rl.DrawText("[H] FLAG_WINDOW_HIDDEN: off", 10, 140, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowMinimized) {
rl.DrawText("[N] FLAG_WINDOW_MINIMIZED: on", 10, 160, 10, rl.Lime)
} else {
rl.DrawText("[N] FLAG_WINDOW_MINIMIZED: off", 10, 160, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowMaximized) {
rl.DrawText("[M] FLAG_WINDOW_MAXIMIZED: on", 10, 180, 10, rl.Lime)
} else {
rl.DrawText("[M] FLAG_WINDOW_MAXIMIZED: off", 10, 180, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowUnfocused) {
rl.DrawText("[G] FLAG_WINDOW_UNFOCUSED: on", 10, 200, 10, rl.Lime)
} else {
rl.DrawText("[U] FLAG_WINDOW_UNFOCUSED: off", 10, 200, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowTopmost) {
rl.DrawText("[T] FLAG_WINDOW_TOPMOST: on", 10, 220, 10, rl.Lime)
} else {
rl.DrawText("[T] FLAG_WINDOW_TOPMOST: off", 10, 220, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowAlwaysRun) {
rl.DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: on", 10, 240, 10, rl.Lime)
} else {
rl.DrawText("[A] FLAG_WINDOW_ALWAYS_RUN: off", 10, 240, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagVsyncHint) {
rl.DrawText("[V] FLAG_VSYNC_HINT: on", 10, 260, 10,
rl.Lime)
} else {
rl.DrawText("[V] FLAG_VSYNC_HINT: off", 10, 260, 10, rl.Maroon)
}
rl.DrawText("Following flags can only be set before window creation:", 10, 300, 10, rl.Gray)
if rl.IsWindowState(rl.FlagWindowHighdpi) {
rl.DrawText("FLAG_WINDOW_HIGHDPI: on", 10, 320, 10, rl.Lime)
} else {
rl.DrawText("FLAG_WINDOW_HIGHDPI: off", 10, 320, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagWindowTransparent) {
rl.DrawText("FLAG_WINDOW_TRANSPARENT: on", 10, 340, 10, rl.Lime)
} else {
rl.DrawText("FLAG_WINDOW_TRANSPARENT: off", 10, 340, 10, rl.Maroon)
}
if rl.IsWindowState(rl.FlagMsaa4xHint) {
rl.DrawText("FLAG_MSAA_4X_HINT: on", 10, 360, 10, rl.Lime)
} else {
rl.DrawText("FLAG_MSAA_4X_HINT: off", 10, 360, 10, rl.Maroon)
}
rl.EndDrawing()
}
rl.CloseWindow()
}

View file

@ -0,0 +1,115 @@
package main
import (
"fmt"
"image/color"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
func main() {
// Enable config flags for resizable window and vertical synchro
rl.SetConfigFlags(rl.FlagWindowResizable | rl.FlagVsyncHint)
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - Window Scale Letterbox")
rl.SetWindowMinSize(320, 240)
gameScreenWidth, gameScreenHeight := int32(640), int32(480)
// Render texture initialization, used to hold the rendering result so we can easily resize it
target := rl.LoadRenderTexture(gameScreenWidth, gameScreenHeight)
rl.SetTextureFilter(target.Texture, rl.FilterBilinear) // Texture scale filter to use
colors := getRandomColors()
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Compute required frame buffer scaling
scale := min(float32(rl.GetScreenWidth())/float32(gameScreenWidth),
float32(rl.GetScreenHeight())/float32(gameScreenHeight))
if rl.IsKeyPressed(rl.KeySpace) {
// Recalculate random colors for the bars
colors = getRandomColors()
}
// Update virtual mouse (clamped mouse value behind game screen)
mouse := rl.GetMousePosition()
virtualMouse := rl.Vector2{
X: (mouse.X - (float32(rl.GetScreenWidth())-(float32(gameScreenWidth)*scale))*0.5) / scale,
Y: (mouse.Y - (float32(rl.GetScreenHeight())-(float32(gameScreenHeight)*scale))*0.5) / scale,
}
virtualMouse = rl.Vector2Clamp(
virtualMouse,
rl.Vector2{},
rl.Vector2{X: float32(gameScreenWidth), Y: float32(gameScreenHeight)},
)
// Apply the same transformation as the virtual mouse to the real mouse (i.e. to work with raygui)
//rl.SetMouseOffset(
// int(-(float32(rl.GetScreenWidth())-(float32(gameScreenWidth)*scale))*0.5),
// int(-(float32(rl.GetScreenHeight())-(float32(gameScreenHeight)*scale))*0.5),
//)
//rl.SetMouseScale(1/scale, 1/scale)
// Draw everything in the render texture, note this will not be rendered on screen, yet
rl.BeginTextureMode(target)
rl.ClearBackground(rl.White)
for i := int32(0); i < 10; i++ {
rl.DrawRectangle(0, (gameScreenHeight/10)*i, gameScreenWidth, gameScreenHeight/10, colors[i])
}
text := "If executed inside a window,\nyou can resize the window,\nand see the screen scaling!"
rl.DrawText(text, 10, 25, 20, rl.White)
text = fmt.Sprintf("Default Mouse: [%.0f , %.0f]", mouse.X, mouse.Y)
rl.DrawText(text, 350, 25, 20, rl.Green)
text = fmt.Sprintf("Virtual Mouse: [%.0f , %.0f]", virtualMouse.X, virtualMouse.Y)
rl.DrawText(text, 350, 55, 20, rl.Yellow)
rl.EndTextureMode()
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
// Draw render texture to screen, properly scaled
rl.DrawTexturePro(
target.Texture,
rl.Rectangle{Width: float32(target.Texture.Width), Height: float32(-target.Texture.Height)},
rl.Rectangle{
X: (float32(rl.GetScreenWidth()) - float32(gameScreenWidth)*scale) * 0.5,
Y: (float32(rl.GetScreenHeight()) - float32(gameScreenHeight)*scale) * 0.5,
Width: float32(gameScreenWidth) * scale,
Height: float32(gameScreenHeight) * scale,
},
rl.Vector2{X: 0, Y: 0}, 0, rl.White,
)
rl.EndDrawing()
}
rl.UnloadRenderTexture(target)
rl.CloseWindow() // Close window and OpenGL context
}
func getRandomColors() []color.RGBA {
var colors []color.RGBA
for i := 0; i < 10; i++ {
randomColor := color.RGBA{
R: rndUint8(100, 250),
G: rndUint8(50, 150),
B: rndUint8(10, 100),
A: 255,
}
colors = append(colors, randomColor)
}
return colors
}
func rndUint8(min, max int32) uint8 {
return uint8(rl.GetRandomValue(min, max))
}

View file

@ -0,0 +1,47 @@
package main
import rl "git.terah.dev/UnrealXR/raylib-go/raylib"
const (
screenWidth = 850
screenHeight = 480
)
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - window should close")
rl.SetExitKey(rl.KeyNull) // Disable KEY_ESCAPE to close window, X-button still works
exitWindowRequested := false // Flag to request window to exit
exitWindow := false // Flag to set window to exit
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
for !exitWindow {
if rl.WindowShouldClose() || rl.IsMouseButtonPressed(rl.KeyEscape) {
exitWindowRequested = true
}
if exitWindowRequested {
if rl.IsKeyPressed(rl.KeyY) {
exitWindow = true
} else if rl.IsKeyPressed(rl.KeyN) {
exitWindowRequested = false
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
if exitWindowRequested {
rl.DrawRectangle(0, 100, screenWidth, 200, rl.Black)
rl.DrawText("Are you sure you want to exit the program? [Y/N]", 40, 180, 30, rl.White)
} else {
rl.DrawText("Try to close the window to get confirmation message!", 120, 200, 20, rl.LightGray)
}
rl.EndDrawing()
}
rl.CloseWindow() // Close window and OpenGL context
}

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -14,17 +14,15 @@ func main() {
camera.Position = rl.NewVector3(10.0, 10.0, 10.0) // Camera position
camera.Target = rl.NewVector3(0.0, 0.0, 0.0) // Camera looking at point
camera.Up = rl.NewVector3(0.0, 1.0, 0.0) // Camera up vector (rotation towards target)
camera.Fovy = 45.0 // Camera field-of-view Y
camera.Fovy = 45.0 // Camera field-of-view Y
cubePosition := rl.NewVector3(0.0, 0.0, 0.0)
cubeScreenPosition := rl.Vector2{}
rl.SetCameraMode(camera, rl.CameraFree) // Set a free camera mode
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera) // Update camera
rl.UpdateCamera(&camera, rl.CameraFree) // Update camera with free camera mode
// Calculate cube screen space position (with a little offset to be in top)
cubeScreenPosition = rl.GetWorldToScreen(rl.NewVector3(cubePosition.X, cubePosition.Y+2.5, cubePosition.Z), camera)

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

View file

@ -1,9 +1,11 @@
package main
import (
"github.com/gen2brain/raylib-go/easings"
"github.com/gen2brain/raylib-go/raygui"
"github.com/gen2brain/raylib-go/raylib"
"strings"
"git.terah.dev/UnrealXR/raylib-go/easings"
"git.terah.dev/UnrealXR/raylib-go/raygui"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -21,8 +23,8 @@ func main() {
ballPosition := rl.NewVector2(startPositionX, float32(screenHeight)/2)
comboActive := 0
comboLastActive := 0
comboActive := int32(0)
comboLastActive := int32(0)
easingTypes := []string{"SineIn", "SineOut", "SineInOut", "BounceIn", "BounceOut", "BounceInOut", "BackIn", "BackOut", "BackInOut"}
ease := easingTypes[comboActive]
@ -75,7 +77,7 @@ func main() {
rl.ClearBackground(rl.RayWhite)
raygui.Label(rl.NewRectangle(20, 20, 200, 20), "Easing Type:")
comboActive = raygui.ComboBox(rl.NewRectangle(20, 40, 200, 20), easingTypes, comboActive)
comboActive = raygui.ComboBox(rl.NewRectangle(20, 40, 200, 20), strings.Join(easingTypes, ";"), comboActive)
raygui.Label(rl.NewRectangle(20, 80, 200, 20), "Press R to reset")

View file

@ -1,277 +1,277 @@
package main
/*******************************************************************************************
*
* raylib - sample game: arkanoid
*
* Sample game Marc Palau and Ramon Santamaria
*
* This game has been created using raylib v1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
*
* Ported to raylib-go by Nehpe (@nehpe), July 2019
*
********************************************************************************************/
import (
"math"
rl "github.com/gen2brain/raylib-go/raylib"
)
const (
PLAYER_MAX_LIFE = 5
LINES_OF_BRICKS = 5
BRICKS_PER_LINE = 20
)
type Player struct {
position rl.Vector2
size rl.Vector2
life int
}
type Ball struct {
position rl.Vector2
speed rl.Vector2
radius float32
active bool
}
type Brick struct {
position rl.Vector2
active bool
}
const (
screenWidth = 800
screenHeight = 450
)
type Game struct {
gameOver bool
pause bool
player Player
ball Ball
brick [LINES_OF_BRICKS][BRICKS_PER_LINE]Brick
brickSize rl.Vector2
}
func main() {
rl.InitWindow(screenWidth, screenHeight, "sample game: arkanoid")
// Init game
game := NewGame()
game.gameOver = true
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
game.Update()
game.Draw()
}
rl.CloseWindow()
}
// For android
func init() {
rl.SetCallbackFunc(main)
}
// NewGame - Create a new game instance
func NewGame() (g Game) {
g.Init()
return
}
// Init - initialize game
func (g *Game) Init() {
g.brickSize = rl.Vector2{float32(rl.GetScreenWidth() / BRICKS_PER_LINE), 40}
// Initialize player
g.player.position = rl.Vector2{float32(screenWidth / 2), float32(screenHeight * 7 / 8)}
g.player.size = rl.Vector2{float32(screenWidth / 10), 20}
g.player.life = PLAYER_MAX_LIFE
// Initialize ball
g.ball.position = rl.Vector2{float32(screenWidth / 2), float32(screenHeight*7/8 - 30)}
g.ball.speed = rl.Vector2{0, 0}
g.ball.radius = 7
g.ball.active = false
initialDownPosition := int(50)
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
g.brick[i][j].position = rl.Vector2{float32(j)*g.brickSize.X + g.brickSize.X/2, float32(i)*g.brickSize.Y + float32(initialDownPosition)}
g.brick[i][j].active = true
}
}
}
// Update - update game state
func (g *Game) Update() {
if !g.gameOver {
if rl.IsKeyPressed(rl.KeyP) {
g.pause = !g.pause
}
if !g.pause {
if rl.IsKeyDown(rl.KeyLeft) || rl.IsKeyDown(rl.KeyA) {
g.player.position.X -= 5
}
if (g.player.position.X - g.player.size.X/2) <= 0 {
g.player.position.X = g.player.size.X / 2
}
if rl.IsKeyDown(rl.KeyRight) || rl.IsKeyDown(rl.KeyD) {
g.player.position.X += 5
}
if (g.player.position.X + g.player.size.X/2) >= screenWidth {
g.player.position.X = screenWidth - g.player.size.X/2
}
if !g.ball.active {
if rl.IsKeyPressed(rl.KeySpace) {
g.ball.active = true
g.ball.speed = rl.Vector2{0, -5}
}
}
if g.ball.active {
g.ball.position.X += g.ball.speed.X
g.ball.position.Y += g.ball.speed.Y
} else {
g.ball.position = rl.Vector2{g.player.position.X, screenHeight*7/8 - 30}
}
// Collision logic: ball vs walls
if ((g.ball.position.X + g.ball.radius) >= screenWidth) || ((g.ball.position.X - g.ball.radius) <= 0) {
g.ball.speed.X *= -1
}
if (g.ball.position.Y - g.ball.radius) <= 0 {
g.ball.speed.Y *= -1
}
if (g.ball.position.Y + g.ball.radius) >= screenHeight {
g.ball.speed = rl.Vector2{0, 0}
g.ball.active = false
g.player.life--
}
if (rl.CheckCollisionCircleRec(g.ball.position, g.ball.radius,
rl.Rectangle{g.player.position.X - g.player.size.X/2, g.player.position.Y - g.player.size.Y/2, g.player.size.X, g.player.size.Y})) {
if g.ball.speed.Y > 0 {
g.ball.speed.Y *= -1
g.ball.speed.X = (g.ball.position.X - g.player.position.X) / (g.player.size.X / 2) * 5
}
}
// Collision logic: ball vs bricks
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
if g.brick[i][j].active {
if ((g.ball.position.Y - g.ball.radius) <= (g.brick[i][j].position.Y + g.brickSize.Y/2)) &&
((g.ball.position.Y - g.ball.radius) > (g.brick[i][j].position.Y + g.brickSize.Y/2 + g.ball.speed.Y)) &&
((float32(math.Abs(float64(g.ball.position.X - g.brick[i][j].position.X)))) < (g.brickSize.X/2 + g.ball.radius*2/3)) &&
(g.ball.speed.Y < 0) {
// Hit below
g.brick[i][j].active = false
g.ball.speed.Y *= -1
} else if ((g.ball.position.Y + g.ball.radius) >= (g.brick[i][j].position.Y - g.brickSize.Y/2)) &&
((g.ball.position.Y + g.ball.radius) < (g.brick[i][j].position.Y - g.brickSize.Y/2 + g.ball.speed.Y)) &&
((float32(math.Abs(float64(g.ball.position.X - g.brick[i][j].position.X)))) < (g.brickSize.X/2 + g.ball.radius*2/3)) &&
(g.ball.speed.Y > 0) {
// Hit above
g.brick[i][j].active = false
g.ball.speed.Y *= -1
} else if ((g.ball.position.X + g.ball.radius) >= (g.brick[i][j].position.X - g.brickSize.X/2)) &&
((g.ball.position.X + g.ball.radius) < (g.brick[i][j].position.X - g.brickSize.X/2 + g.ball.speed.X)) &&
((float32(math.Abs(float64(g.ball.position.Y - g.brick[i][j].position.Y)))) < (g.brickSize.Y/2 + g.ball.radius*2/3)) &&
(g.ball.speed.X > 0) {
// Hit left
g.brick[i][j].active = false
g.ball.speed.X *= -1
} else if ((g.ball.position.X - g.ball.radius) <= (g.brick[i][j].position.X + g.brickSize.X/2)) &&
((g.ball.position.X - g.ball.radius) > (g.brick[i][j].position.X + g.brickSize.X/2 + g.ball.speed.X)) &&
((float32(math.Abs(float64(g.ball.position.Y - g.brick[i][j].position.Y)))) < (g.brickSize.Y/2 + g.ball.radius*2/3)) &&
(g.ball.speed.X < 0) {
// Hit right
g.brick[i][j].active = false
g.ball.speed.X *= -1
}
}
}
}
}
// Game over logic
if g.player.life <= 0 {
g.gameOver = true
} else {
g.gameOver = true
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
if g.brick[i][j].active {
g.gameOver = false
}
}
}
}
} else {
if rl.IsKeyPressed(rl.KeyEnter) {
g.Init()
g.gameOver = false
}
}
}
// Draw - draw game
func (g *Game) Draw() {
rl.BeginDrawing()
rl.ClearBackground(rl.White)
if !g.gameOver {
// Draw player bar
rl.DrawRectangle(int32(g.player.position.X-g.player.size.X/2), int32(g.player.position.Y-g.player.size.Y/2), int32(g.player.size.X), int32(g.player.size.Y), rl.Black)
// Draw player lives
for i := 0; i < g.player.life; i++ {
rl.DrawRectangle(int32(20+40*i), screenHeight-30, 35, 10, rl.LightGray)
}
// Draw Ball
rl.DrawCircleV(g.ball.position, g.ball.radius, rl.Maroon)
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
if g.brick[i][j].active {
if (i+j)%2 == 0 {
rl.DrawRectangle(int32(g.brick[i][j].position.X-g.brickSize.X/2), int32(g.brick[i][j].position.Y-g.brickSize.Y/2), int32(g.brickSize.X), int32(g.brickSize.Y), rl.Gray)
} else {
rl.DrawRectangle(int32(g.brick[i][j].position.X-g.brickSize.X/2), int32(g.brick[i][j].position.Y-g.brickSize.Y/2), int32(g.brickSize.X), int32(g.brickSize.Y), rl.DarkGray)
}
}
}
}
if g.pause {
rl.DrawText("GAME PAUSED", screenWidth/2-rl.MeasureText("GAME PAUSED", 40)/2, screenHeight/2+screenHeight/4-40, 40, rl.Gray)
}
} else {
str := "PRESS [ENTER] TO PLAY AGAIN"
x := int(rl.GetScreenWidth()/2) - int(rl.MeasureText(str, 20)/2)
y := rl.GetScreenHeight()/2 - 50
rl.DrawText(str, int32(x), int32(y), 20, rl.Gray)
}
rl.EndDrawing()
}
package main
/*******************************************************************************************
*
* raylib - sample game: arkanoid
*
* Sample game Marc Palau and Ramon Santamaria
*
* This game has been created using raylib v1.3 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
*
* Ported to raylib-go by Nehpe (@nehpe), July 2019
*
********************************************************************************************/
import (
"math"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
PLAYER_MAX_LIFE = 5
LINES_OF_BRICKS = 5
BRICKS_PER_LINE = 20
)
type Player struct {
position rl.Vector2
size rl.Vector2
life int
}
type Ball struct {
position rl.Vector2
speed rl.Vector2
radius float32
active bool
}
type Brick struct {
position rl.Vector2
active bool
}
const (
screenWidth = 800
screenHeight = 450
)
type Game struct {
gameOver bool
pause bool
player Player
ball Ball
brick [LINES_OF_BRICKS][BRICKS_PER_LINE]Brick
brickSize rl.Vector2
}
func main() {
rl.InitWindow(screenWidth, screenHeight, "sample game: arkanoid")
// Init game
game := NewGame()
game.gameOver = true
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
game.Update()
game.Draw()
}
rl.CloseWindow()
}
// For android
func init() {
rl.SetCallbackFunc(main)
}
// NewGame - Create a new game instance
func NewGame() (g Game) {
g.Init()
return
}
// Init - initialize game
func (g *Game) Init() {
g.brickSize = rl.Vector2{float32(rl.GetScreenWidth() / BRICKS_PER_LINE), 40}
// Initialize player
g.player.position = rl.Vector2{float32(screenWidth / 2), float32(screenHeight * 7 / 8)}
g.player.size = rl.Vector2{float32(screenWidth / 10), 20}
g.player.life = PLAYER_MAX_LIFE
// Initialize ball
g.ball.position = rl.Vector2{float32(screenWidth / 2), float32(screenHeight*7/8 - 30)}
g.ball.speed = rl.Vector2{0, 0}
g.ball.radius = 7
g.ball.active = false
initialDownPosition := int(50)
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
g.brick[i][j].position = rl.Vector2{float32(j)*g.brickSize.X + g.brickSize.X/2, float32(i)*g.brickSize.Y + float32(initialDownPosition)}
g.brick[i][j].active = true
}
}
}
// Update - update game state
func (g *Game) Update() {
if !g.gameOver {
if rl.IsKeyPressed(rl.KeyP) {
g.pause = !g.pause
}
if !g.pause {
if rl.IsKeyDown(rl.KeyLeft) || rl.IsKeyDown(rl.KeyA) {
g.player.position.X -= 5
}
if (g.player.position.X - g.player.size.X/2) <= 0 {
g.player.position.X = g.player.size.X / 2
}
if rl.IsKeyDown(rl.KeyRight) || rl.IsKeyDown(rl.KeyD) {
g.player.position.X += 5
}
if (g.player.position.X + g.player.size.X/2) >= screenWidth {
g.player.position.X = screenWidth - g.player.size.X/2
}
if !g.ball.active {
if rl.IsKeyPressed(rl.KeySpace) {
g.ball.active = true
g.ball.speed = rl.Vector2{0, -5}
}
}
if g.ball.active {
g.ball.position.X += g.ball.speed.X
g.ball.position.Y += g.ball.speed.Y
} else {
g.ball.position = rl.Vector2{g.player.position.X, screenHeight*7/8 - 30}
}
// Collision logic: ball vs walls
if ((g.ball.position.X + g.ball.radius) >= screenWidth) || ((g.ball.position.X - g.ball.radius) <= 0) {
g.ball.speed.X *= -1
}
if (g.ball.position.Y - g.ball.radius) <= 0 {
g.ball.speed.Y *= -1
}
if (g.ball.position.Y + g.ball.radius) >= screenHeight {
g.ball.speed = rl.Vector2{0, 0}
g.ball.active = false
g.player.life--
}
if (rl.CheckCollisionCircleRec(g.ball.position, g.ball.radius,
rl.Rectangle{g.player.position.X - g.player.size.X/2, g.player.position.Y - g.player.size.Y/2, g.player.size.X, g.player.size.Y})) {
if g.ball.speed.Y > 0 {
g.ball.speed.Y *= -1
g.ball.speed.X = (g.ball.position.X - g.player.position.X) / (g.player.size.X / 2) * 5
}
}
// Collision logic: ball vs bricks
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
if g.brick[i][j].active {
if ((g.ball.position.Y - g.ball.radius) <= (g.brick[i][j].position.Y + g.brickSize.Y/2)) &&
((g.ball.position.Y - g.ball.radius) > (g.brick[i][j].position.Y + g.brickSize.Y/2 + g.ball.speed.Y)) &&
((float32(math.Abs(float64(g.ball.position.X - g.brick[i][j].position.X)))) < (g.brickSize.X/2 + g.ball.radius*2/3)) &&
(g.ball.speed.Y < 0) {
// Hit below
g.brick[i][j].active = false
g.ball.speed.Y *= -1
} else if ((g.ball.position.Y + g.ball.radius) >= (g.brick[i][j].position.Y - g.brickSize.Y/2)) &&
((g.ball.position.Y + g.ball.radius) < (g.brick[i][j].position.Y - g.brickSize.Y/2 + g.ball.speed.Y)) &&
((float32(math.Abs(float64(g.ball.position.X - g.brick[i][j].position.X)))) < (g.brickSize.X/2 + g.ball.radius*2/3)) &&
(g.ball.speed.Y > 0) {
// Hit above
g.brick[i][j].active = false
g.ball.speed.Y *= -1
} else if ((g.ball.position.X + g.ball.radius) >= (g.brick[i][j].position.X - g.brickSize.X/2)) &&
((g.ball.position.X + g.ball.radius) < (g.brick[i][j].position.X - g.brickSize.X/2 + g.ball.speed.X)) &&
((float32(math.Abs(float64(g.ball.position.Y - g.brick[i][j].position.Y)))) < (g.brickSize.Y/2 + g.ball.radius*2/3)) &&
(g.ball.speed.X > 0) {
// Hit left
g.brick[i][j].active = false
g.ball.speed.X *= -1
} else if ((g.ball.position.X - g.ball.radius) <= (g.brick[i][j].position.X + g.brickSize.X/2)) &&
((g.ball.position.X - g.ball.radius) > (g.brick[i][j].position.X + g.brickSize.X/2 + g.ball.speed.X)) &&
((float32(math.Abs(float64(g.ball.position.Y - g.brick[i][j].position.Y)))) < (g.brickSize.Y/2 + g.ball.radius*2/3)) &&
(g.ball.speed.X < 0) {
// Hit right
g.brick[i][j].active = false
g.ball.speed.X *= -1
}
}
}
}
}
// Game over logic
if g.player.life <= 0 {
g.gameOver = true
} else {
g.gameOver = true
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
if g.brick[i][j].active {
g.gameOver = false
}
}
}
}
} else {
if rl.IsKeyPressed(rl.KeyEnter) {
g.Init()
g.gameOver = false
}
}
}
// Draw - draw game
func (g *Game) Draw() {
rl.BeginDrawing()
rl.ClearBackground(rl.White)
if !g.gameOver {
// Draw player bar
rl.DrawRectangle(int32(g.player.position.X-g.player.size.X/2), int32(g.player.position.Y-g.player.size.Y/2), int32(g.player.size.X), int32(g.player.size.Y), rl.Black)
// Draw player lives
for i := 0; i < g.player.life; i++ {
rl.DrawRectangle(int32(20+40*i), screenHeight-30, 35, 10, rl.LightGray)
}
// Draw Ball
rl.DrawCircleV(g.ball.position, g.ball.radius, rl.Maroon)
for i := 0; i < LINES_OF_BRICKS; i++ {
for j := 0; j < BRICKS_PER_LINE; j++ {
if g.brick[i][j].active {
if (i+j)%2 == 0 {
rl.DrawRectangle(int32(g.brick[i][j].position.X-g.brickSize.X/2), int32(g.brick[i][j].position.Y-g.brickSize.Y/2), int32(g.brickSize.X), int32(g.brickSize.Y), rl.Gray)
} else {
rl.DrawRectangle(int32(g.brick[i][j].position.X-g.brickSize.X/2), int32(g.brick[i][j].position.Y-g.brickSize.Y/2), int32(g.brickSize.X), int32(g.brickSize.Y), rl.DarkGray)
}
}
}
}
if g.pause {
rl.DrawText("GAME PAUSED", screenWidth/2-rl.MeasureText("GAME PAUSED", 40)/2, screenHeight/2+screenHeight/4-40, 40, rl.Gray)
}
} else {
str := "PRESS [ENTER] TO PLAY AGAIN"
x := int(rl.GetScreenWidth()/2) - int(rl.MeasureText(str, 20)/2)
y := rl.GetScreenHeight()/2 - 50
rl.DrawText(str, int32(x), int32(y), 20, rl.Gray)
}
rl.EndDrawing()
}

View file

@ -4,8 +4,6 @@ import (
"fmt"
"os"
"runtime"
"github.com/gen2brain/raylib-go/raylib"
)
const (

View file

@ -4,7 +4,7 @@ import (
"math/rand"
"time"
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
@ -32,7 +32,7 @@ type Game struct {
}
func main() {
rand.Seed(time.Now().UnixNano())
rand.New(rand.NewSource(time.Now().UnixNano()))
game := Game{}
game.Init(false)

174
examples/games/pong/main.go Normal file
View file

@ -0,0 +1,174 @@
package main
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
// Game settings
const (
screenWidth = 800
screenHeight = 600
)
// Paddle struct
type Paddle struct {
Pos rl.Vector2
Width float32
Height float32
Speed float32
}
// Ball struct
type Ball struct {
Pos rl.Vector2
Speed rl.Vector2
Radius float32
}
// Game struct
type Game struct {
paddle1 Paddle
paddle2 Paddle
ball Ball
player1Score int
player2Score int
}
// Check for collision between ball and paddle, and determine side
func CheckCollisionSide(ball Ball, paddle Paddle) string {
closestX := rl.Clamp(ball.Pos.X, paddle.Pos.X, paddle.Pos.X+paddle.Width)
closestY := rl.Clamp(ball.Pos.Y, paddle.Pos.Y, paddle.Pos.Y+paddle.Height)
dx := ball.Pos.X - closestX
dy := ball.Pos.Y - closestY
distanceSq := dx*dx + dy*dy
radiusSq := ball.Radius * ball.Radius
if distanceSq <= radiusSq {
// Determine where it hit
if closestX == paddle.Pos.X || closestX == paddle.Pos.X+paddle.Width {
return "side"
}
if closestY == paddle.Pos.Y || closestY == paddle.Pos.Y+paddle.Height {
return "topbottom"
}
return "side" // fallback
}
return "none"
}
// Initialize the game state
func (g *Game) Init() {
g.paddle1 = Paddle{
Pos: rl.NewVector2(30, float32(screenHeight/2-50)),
Width: 10,
Height: 100,
Speed: 5,
}
g.paddle2 = Paddle{
Pos: rl.NewVector2(float32(screenWidth-40), float32(screenHeight/2-50)),
Width: 10,
Height: 100,
Speed: 5,
}
g.ball = Ball{
Pos: rl.NewVector2(float32(screenWidth/2), float32(screenHeight/2)),
Speed: rl.NewVector2(5, 4),
Radius: 10,
}
g.player1Score = 0
g.player2Score = 0
}
// Game update logic
func (g *Game) Update() {
// Player 1 - W/S
if rl.IsKeyDown(rl.KeyW) && g.paddle1.Pos.Y > 0 {
g.paddle1.Pos.Y -= g.paddle1.Speed
}
if rl.IsKeyDown(rl.KeyS) && g.paddle1.Pos.Y < screenHeight-g.paddle1.Height {
g.paddle1.Pos.Y += g.paddle1.Speed
}
// Player 2 - Up/Down
if rl.IsKeyDown(rl.KeyUp) && g.paddle2.Pos.Y > 0 {
g.paddle2.Pos.Y -= g.paddle2.Speed
}
if rl.IsKeyDown(rl.KeyDown) && g.paddle2.Pos.Y < screenHeight-g.paddle2.Height {
g.paddle2.Pos.Y += g.paddle2.Speed
}
// Ball movement
g.ball.Pos.X += g.ball.Speed.X
g.ball.Pos.Y += g.ball.Speed.Y
// Ball bounce off top/bottom walls
if g.ball.Pos.Y <= g.ball.Radius || g.ball.Pos.Y >= float32(screenHeight)-g.ball.Radius {
g.ball.Speed.Y *= -1
}
// Ball collisions with paddle sides only
if CheckCollisionSide(g.ball, g.paddle1) == "side" {
g.ball.Speed.X *= -1
// Reposition ball outside paddle1
g.ball.Pos.X = g.paddle1.Pos.X + g.paddle1.Width + g.ball.Radius
}
if CheckCollisionSide(g.ball, g.paddle2) == "side" {
g.ball.Speed.X *= -1
// Reposition ball outside paddle2
g.ball.Pos.X = g.paddle2.Pos.X - g.ball.Radius
}
// Scoring
if g.ball.Pos.X < 0 {
g.player2Score++
g.ball.Pos = rl.NewVector2(float32(screenWidth/2), float32(screenHeight/2))
g.ball.Speed.X *= -1
}
if g.ball.Pos.X > float32(screenWidth) {
g.player1Score++
g.ball.Pos = rl.NewVector2(float32(screenWidth/2), float32(screenHeight/2))
g.ball.Speed.X *= -1
}
}
// Draw game elements
func (g *Game) Draw() {
// Draw paddles
rl.DrawRectangleV(g.paddle1.Pos, rl.NewVector2(g.paddle1.Width, g.paddle1.Height), rl.Black)
rl.DrawRectangleV(g.paddle2.Pos, rl.NewVector2(g.paddle2.Width, g.paddle2.Height), rl.Black)
// Draw ball
rl.DrawCircleV(g.ball.Pos, g.ball.Radius, rl.Black)
// Draw scores
rl.DrawText(fmt.Sprintf("Player 1 : %d", g.player1Score), 20, 20, 20, rl.DarkGray)
rl.DrawText(fmt.Sprintf("Player 2 : %d", g.player2Score), screenWidth-140, 20, 20, rl.DarkGray)
}
func main() {
rl.InitWindow(screenWidth, screenHeight, "Pong in Go!")
rl.SetTargetFPS(60)
var game Game
game.Init()
for !rl.WindowShouldClose() {
game.Update()
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
game.Draw()
rl.EndDrawing()
}
rl.CloseWindow()
}

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
const (
snakeLength = 256
squareSize = 31
@ -160,15 +156,15 @@ func (g *Game) Update() {
if !g.Fruit.Active {
g.Fruit.Active = true
g.Fruit.Position = rl.NewVector2(
float32(rl.GetRandomValue(0, (g.ScreenWidth/squareSize)-1)*squareSize+int32(g.Offset.X)/2),
float32(rl.GetRandomValue(0, (g.ScreenHeight/squareSize)-1)*squareSize+int32(g.Offset.Y)/2),
float32(rl.GetRandomValue(0, (g.ScreenWidth/squareSize)-1)*squareSize)+(g.Offset.X)/2,
float32(rl.GetRandomValue(0, (g.ScreenHeight/squareSize)-1)*squareSize)+(g.Offset.Y)/2,
)
for i := 0; i < g.CounterTail; i++ {
for (g.Fruit.Position.X == g.Snake[i].Position.X) && (g.Fruit.Position.Y == g.Snake[i].Position.Y) {
g.Fruit.Position = rl.NewVector2(
float32(rl.GetRandomValue(0, (g.ScreenWidth/squareSize)-1)*squareSize),
float32(rl.GetRandomValue(0, (g.ScreenHeight/squareSize)-1)*squareSize),
float32(rl.GetRandomValue(0, (g.ScreenWidth/squareSize)-1)*squareSize)+g.Offset.X/2,
float32(rl.GetRandomValue(0, (g.ScreenHeight/squareSize)-1)*squareSize)+g.Offset.Y/2,
)
i = 0
}

26
examples/go.mod Normal file
View file

@ -0,0 +1,26 @@
module examples
go 1.21
replace git.terah.dev/UnrealXR/raylib-go/raylib => ../raylib
replace git.terah.dev/UnrealXR/raylib-go/raygui => ../raygui
replace git.terah.dev/UnrealXR/raylib-go/easings => ../easings
replace git.terah.dev/UnrealXR/raylib-go/physics => ../physics
require (
git.terah.dev/UnrealXR/raylib-go/easings v0.0.0-00010101000000-000000000000
git.terah.dev/UnrealXR/raylib-go/physics v0.0.0-00010101000000-000000000000
git.terah.dev/UnrealXR/raylib-go/raygui v0.0.0-00010101000000-000000000000
git.terah.dev/UnrealXR/raylib-go/raylib v0.0.0-20241202103652-5d50abe7c65b
github.com/jakecoffman/cp v1.2.1
github.com/neguse/go-box2d-lite v0.0.0-20170921151050-5d8ed9b7272b
)
require (
github.com/ebitengine/purego v0.8.1 // indirect
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
golang.org/x/sys v0.27.0 // indirect
)

10
examples/go.sum Normal file
View file

@ -0,0 +1,10 @@
github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/jakecoffman/cp v1.2.1 h1:zkhc2Gpo9l4NLUZfeG3j33+3bQD7MkqPa+n5PdX+5mI=
github.com/jakecoffman/cp v1.2.1/go.mod h1:JjY/Fp6d8E1CHnu74gWNnU0+b9VzEdUVPoJxg2PsTQg=
github.com/neguse/go-box2d-lite v0.0.0-20170921151050-5d8ed9b7272b h1:+67TGbwfgeB5o03Rx+ZBW44zAQ+wUujcwdRA0p9CbJI=
github.com/neguse/go-box2d-lite v0.0.0-20170921151050-5d8ed9b7272b/go.mod h1:kvKwD9codtns5mvpA53V3vLnqFb/Ahcu8zgkGM0SIbI=
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

View file

@ -1,92 +0,0 @@
package main
import (
"fmt"
"github.com/gen2brain/raylib-go/raygui"
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
screenWidth := int32(800)
screenHeight := int32(450)
rl.SetConfigFlags(rl.FlagVsyncHint)
rl.InitWindow(screenWidth, screenHeight, "raylib [gui] example - basic controls")
buttonToggle := true
buttonClicked := false
checkboxChecked := false
spinnerValue := 5
sliderValue := float32(10)
sliderBarValue := float32(70)
progressValue := float32(0.5)
comboActive := 0
comboLastActive := 0
toggleActive := 0
toggleText := []string{"Item 1", "Item 2", "Item 3"}
comboText := []string{"default_light", "default_dark", "hello_kitty", "monokai", "obsidian", "solarized_light", "solarized", "zahnrad"}
var inputText string
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
if buttonClicked {
progressValue += 0.1
if progressValue >= 1.1 {
progressValue = 0.0
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.Beige)
raygui.Label(rl.NewRectangle(50, 50, 80, 20), "Label")
buttonClicked = raygui.Button(rl.NewRectangle(50, 70, 80, 40), "Button")
raygui.Label(rl.NewRectangle(70, 140, 20, 20), "Checkbox")
checkboxChecked = raygui.CheckBox(rl.NewRectangle(50, 140, 20, 20), checkboxChecked)
raygui.Label(rl.NewRectangle(50, 190, 200, 20), "ProgressBar")
raygui.ProgressBar(rl.NewRectangle(50, 210, 200, 20), progressValue)
raygui.Label(rl.NewRectangle(200+50+5, 210, 20, 20), fmt.Sprintf("%.1f", progressValue))
raygui.Label(rl.NewRectangle(50, 260, 200, 20), "Slider")
sliderValue = raygui.Slider(rl.NewRectangle(50, 280, 200, 20), sliderValue, 0, 100)
raygui.Label(rl.NewRectangle(200+50+5, 280, 20, 20), fmt.Sprintf("%.0f", sliderValue))
buttonToggle = raygui.ToggleButton(rl.NewRectangle(50, 350, 100, 40), "ToggleButton", buttonToggle)
raygui.Label(rl.NewRectangle(500, 50, 200, 20), "ToggleGroup")
toggleActive = raygui.ToggleGroup(rl.NewRectangle(500, 70, 60, 30), toggleText, toggleActive)
raygui.Label(rl.NewRectangle(500, 120, 200, 20), "SliderBar")
sliderBarValue = raygui.SliderBar(rl.NewRectangle(500, 140, 200, 20), sliderBarValue, 0, 100)
raygui.Label(rl.NewRectangle(500+200+5, 140, 20, 20), fmt.Sprintf("%.0f", sliderBarValue))
raygui.Label(rl.NewRectangle(500, 190, 200, 20), "Spinner")
spinnerValue = raygui.Spinner(rl.NewRectangle(500, 210, 200, 20), spinnerValue, 0, 100)
raygui.Label(rl.NewRectangle(500, 260, 200, 20), "ComboBox")
comboActive = raygui.ComboBox(rl.NewRectangle(500, 280, 200, 20), comboText, comboActive)
if comboLastActive != comboActive {
raygui.LoadGuiStyle(fmt.Sprintf("styles/%s.style", comboText[comboActive]))
comboLastActive = comboActive
}
raygui.Label(rl.NewRectangle(500, 330, 200, 20), "TextBox")
inputText = raygui.TextBox(rl.NewRectangle(500, 350, 200, 20), inputText)
rl.EndDrawing()
}
rl.CloseWindow()
}

View file

@ -1,99 +0,0 @@
GLOBAL_BASE_COLOR 0xf5f5f5ff
GLOBAL_BORDER_COLOR 0xf5f5f5ff
GLOBAL_TEXT_COLOR 0xf5f5f5ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0x293235ff
LINES_COLOR 0x90abb5ff
LABEL_BORDER_WIDTH 0x0
LABEL_TEXT_COLOR 0x90acb4ff
LABEL_TEXT_PADDING 0x0
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x0
BUTTON_DEFAULT_BORDER_COLOR 0x3e4a4fff
BUTTON_DEFAULT_INSIDE_COLOR 0x344041ff
BUTTON_DEFAULT_TEXT_COLOR 0x90acb4ff
BUTTON_HOVER_BORDER_COLOR 0x47595fff
BUTTON_HOVER_INSIDE_COLOR 0x334f59ff
BUTTON_HOVER_TEXT_COLOR 0x90acb4ff
BUTTON_PRESSED_BORDER_COLOR 0x5f9aa4ff
BUTTON_PRESSED_INSIDE_COLOR 0x334f59ff
BUTTON_PRESSED_TEXT_COLOR 0x5f9aa8ff
TOGGLE_TEXT_PADDING 0x20
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x3e4b4dff
TOGGLE_DEFAULT_INSIDE_COLOR 0x344041ff
TOGGLE_DEFAULT_TEXT_COLOR 0x828282ff
TOGGLE_HOVER_BORDER_COLOR 0x47595fff
TOGGLE_HOVER_INSIDE_COLOR 0x334f59ff
TOGGLE_HOVER_TEXT_COLOR 0x828282ff
TOGGLE_PRESSED_BORDER_COLOR 0x5f9aa8ff
TOGGLE_PRESSED_INSIDE_COLOR 0x334f59ff
TOGGLE_PRESSED_TEXT_COLOR 0x5f9aa8ff
TOGGLE_ACTIVE_BORDER_COLOR 0x92c763ff
TOGGLE_ACTIVE_INSIDE_COLOR 0x334f59ff
TOGGLE_ACTIVE_TEXT_COLOR 0x92c763ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x0
SLIDER_BORDER_COLOR 0x828282ff
SLIDER_INSIDE_COLOR 0x3e4b4dff
SLIDER_DEFAULT_COLOR 0x92c763ff
SLIDER_HOVER_COLOR 0xc3e0a9ff
SLIDER_ACTIVE_COLOR 0xffffffff
SLIDERBAR_BORDER_COLOR 0x828282ff
SLIDERBAR_INSIDE_COLOR 0x344041ff
SLIDERBAR_DEFAULT_COLOR 0x92c763ff
SLIDERBAR_HOVER_COLOR 0xc3e0a9ff
SLIDERBAR_ACTIVE_COLOR 0xffffffff
SLIDERBAR_ZERO_LINE_COLOR 0x828282ff
PROGRESSBAR_BORDER_COLOR 0x828282ff
PROGRESSBAR_INSIDE_COLOR 0x3e4b4dff
PROGRESSBAR_PROGRESS_COLOR 0x92c763ff
PROGRESSBAR_BORDER_WIDTH 0x1
SPINNER_LABEL_BORDER_COLOR 0x3e4b4dff
SPINNER_LABEL_INSIDE_COLOR 0x344041ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x3e4b4dff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0x344041ff
SPINNER_DEFAULT_SYMBOL_COLOR 0x5f9aa8ff
SPINNER_DEFAULT_TEXT_COLOR 0x5f9aa8ff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0x47595fff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0x334f59ff
SPINNER_HOVER_SYMBOL_COLOR 0x5f9aa8ff
SPINNER_HOVER_TEXT_COLOR 0x5f9aa8ff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x92c763ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0x334f59ff
SPINNER_PRESSED_SYMBOL_COLOR 0x92c763ff
SPINNER_PRESSED_TEXT_COLOR 0x92c763ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x30
COMBOBOX_BUTTON_HEIGHT 0x20
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x3e4b4dff
COMBOBOX_DEFAULT_INSIDE_COLOR 0x344041ff
COMBOBOX_DEFAULT_TEXT_COLOR 0x5f9aa8ff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0x5f9aa8ff
COMBOBOX_HOVER_BORDER_COLOR 0x47595fff
COMBOBOX_HOVER_INSIDE_COLOR 0x334f59ff
COMBOBOX_HOVER_TEXT_COLOR 0x5f9aa8ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0x5f9aa8ff
COMBOBOX_PRESSED_BORDER_COLOR 0x5f9aa8ff
COMBOBOX_PRESSED_INSIDE_COLOR 0x334f59ff
COMBOBOX_PRESSED_TEXT_COLOR 0x5f9aa8ff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x92c763ff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0x334f59ff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0x92c763ff
CHECKBOX_DEFAULT_BORDER_COLOR 0x47595fff
CHECKBOX_DEFAULT_INSIDE_COLOR 0x344041ff
CHECKBOX_HOVER_BORDER_COLOR 0x47595fff
CHECKBOX_HOVER_INSIDE_COLOR 0x334f59ff
CHECKBOX_CLICK_BORDER_COLOR 0x5f9aa8ff
CHECKBOX_CLICK_INSIDE_COLOR 0x334f59ff
CHECKBOX_STATUS_ACTIVE_COLOR 0x92c763ff
CHECKBOX_INSIDE_WIDTH 0x2
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x47595fff
TEXTBOX_INSIDE_COLOR 0x828282ff
TEXTBOX_TEXT_COLOR 0xff
TEXTBOX_LINE_COLOR 0xff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,99 +0,0 @@
GLOBAL_BASE_COLOR 0xf5f5f5ff
GLOBAL_BORDER_COLOR 0xf5f5f5ff
GLOBAL_TEXT_COLOR 0xf5f5f5ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0xf5f5f5ff
LINES_COLOR 0x90abb5ff
LABEL_BORDER_WIDTH 0x1
LABEL_TEXT_COLOR 0x4d4d4dff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x828282ff
BUTTON_DEFAULT_INSIDE_COLOR 0xc8c8c8ff
BUTTON_DEFAULT_TEXT_COLOR 0x4d4d4dff
BUTTON_HOVER_BORDER_COLOR 0xc8c8c8ff
BUTTON_HOVER_INSIDE_COLOR 0xffffffff
BUTTON_HOVER_TEXT_COLOR 0x868686ff
BUTTON_PRESSED_BORDER_COLOR 0x7bb0d6ff
BUTTON_PRESSED_INSIDE_COLOR 0xbcecffff
BUTTON_PRESSED_TEXT_COLOR 0x5f9aa7ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x828282ff
TOGGLE_DEFAULT_INSIDE_COLOR 0xc8c8c8ff
TOGGLE_DEFAULT_TEXT_COLOR 0x828282ff
TOGGLE_HOVER_BORDER_COLOR 0xc8c8c8ff
TOGGLE_HOVER_INSIDE_COLOR 0xffffffff
TOGGLE_HOVER_TEXT_COLOR 0x828282ff
TOGGLE_PRESSED_BORDER_COLOR 0xbdd7eaff
TOGGLE_PRESSED_INSIDE_COLOR 0xddf5ffff
TOGGLE_PRESSED_TEXT_COLOR 0xafccd3ff
TOGGLE_ACTIVE_BORDER_COLOR 0x7bb0d6ff
TOGGLE_ACTIVE_INSIDE_COLOR 0xbcecffff
TOGGLE_ACTIVE_TEXT_COLOR 0x5f9aa7ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x1
SLIDER_BORDER_COLOR 0x828282ff
SLIDER_INSIDE_COLOR 0xc8c8c8ff
SLIDER_DEFAULT_COLOR 0xbcecffff
SLIDER_HOVER_COLOR 0xffffffff
SLIDER_ACTIVE_COLOR 0xddf5ffff
SLIDERBAR_BORDER_COLOR 0x828282ff
SLIDERBAR_INSIDE_COLOR 0xc8c8c8ff
SLIDERBAR_DEFAULT_COLOR 0xbcecffff
SLIDERBAR_HOVER_COLOR 0xffffffff
SLIDERBAR_ACTIVE_COLOR 0xddf5ffff
SLIDERBAR_ZERO_LINE_COLOR 0x828282ff
PROGRESSBAR_BORDER_COLOR 0x828282ff
PROGRESSBAR_INSIDE_COLOR 0xc8c8c8ff
PROGRESSBAR_PROGRESS_COLOR 0xbcecffff
PROGRESSBAR_BORDER_WIDTH 0x2
SPINNER_LABEL_BORDER_COLOR 0x828282ff
SPINNER_LABEL_INSIDE_COLOR 0xc8c8c8ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x828282ff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0xc8c8c8ff
SPINNER_DEFAULT_SYMBOL_COLOR 0xff
SPINNER_DEFAULT_TEXT_COLOR 0xff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0xc8c8c8ff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0xffffffff
SPINNER_HOVER_SYMBOL_COLOR 0xff
SPINNER_HOVER_TEXT_COLOR 0xff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x7bb0d6ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0xbcecffff
SPINNER_PRESSED_SYMBOL_COLOR 0x5f9aa7ff
SPINNER_PRESSED_TEXT_COLOR 0xff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x14
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x828282ff
COMBOBOX_DEFAULT_INSIDE_COLOR 0xc8c8c8ff
COMBOBOX_DEFAULT_TEXT_COLOR 0x828282ff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0x828282ff
COMBOBOX_HOVER_BORDER_COLOR 0xc8c8c8ff
COMBOBOX_HOVER_INSIDE_COLOR 0xffffffff
COMBOBOX_HOVER_TEXT_COLOR 0x828282ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0x828282ff
COMBOBOX_PRESSED_BORDER_COLOR 0x7bb0d6ff
COMBOBOX_PRESSED_INSIDE_COLOR 0xbcecffff
COMBOBOX_PRESSED_TEXT_COLOR 0x5f9aa7ff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x78acff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0x66e7ffff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0x78acff
CHECKBOX_DEFAULT_BORDER_COLOR 0x828282ff
CHECKBOX_DEFAULT_INSIDE_COLOR 0xffffffff
CHECKBOX_HOVER_BORDER_COLOR 0xc8c8c8ff
CHECKBOX_HOVER_INSIDE_COLOR 0xffffffff
CHECKBOX_CLICK_BORDER_COLOR 0x66e7ffff
CHECKBOX_CLICK_INSIDE_COLOR 0xddf5ffff
CHECKBOX_STATUS_ACTIVE_COLOR 0xbcecffff
CHECKBOX_INSIDE_WIDTH 0x1
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x828282ff
TEXTBOX_INSIDE_COLOR 0xf5f5f5ff
TEXTBOX_TEXT_COLOR 0xff
TEXTBOX_LINE_COLOR 0xff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,98 +0,0 @@
GLOBAL_BASE_COLOR 0xff80c1ff
GLOBAL_BORDER_COLOR 0xf5f5f5ff
GLOBAL_TEXT_COLOR 0x650065ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0xffd4eaff
LABEL_BORDER_WIDTH 0x1
LABEL_TEXT_COLOR 0x650065ff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x828282ff
BUTTON_DEFAULT_INSIDE_COLOR 0xffc6e3ff
BUTTON_DEFAULT_TEXT_COLOR 0x650065ff
BUTTON_HOVER_BORDER_COLOR 0xc8c8c8ff
BUTTON_HOVER_INSIDE_COLOR 0xffc6e3ff
BUTTON_HOVER_TEXT_COLOR 0x761c76ff
BUTTON_PRESSED_BORDER_COLOR 0x7bb0d6ff
BUTTON_PRESSED_INSIDE_COLOR 0xffb8dcff
BUTTON_PRESSED_TEXT_COLOR 0xa971a9ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x828282ff
TOGGLE_DEFAULT_INSIDE_COLOR 0xffc6e3ff
TOGGLE_DEFAULT_TEXT_COLOR 0x650065ff
TOGGLE_HOVER_BORDER_COLOR 0xc8c8c8ff
TOGGLE_HOVER_INSIDE_COLOR 0xffc6e3ff
TOGGLE_HOVER_TEXT_COLOR 0x761c76ff
TOGGLE_PRESSED_BORDER_COLOR 0xbdd7eaff
TOGGLE_PRESSED_INSIDE_COLOR 0xffb8dcff
TOGGLE_PRESSED_TEXT_COLOR 0xa971a9ff
TOGGLE_ACTIVE_BORDER_COLOR 0x7bb0d6ff
TOGGLE_ACTIVE_INSIDE_COLOR 0xff8ec7ff
TOGGLE_ACTIVE_TEXT_COLOR 0xa971a9ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x1
SLIDER_BORDER_COLOR 0x828282ff
SLIDER_INSIDE_COLOR 0xffc6e3ff
SLIDER_DEFAULT_COLOR 0xffaad5ff
SLIDER_HOVER_COLOR 0xff9cceff
SLIDER_ACTIVE_COLOR 0xff80c1ff
SLIDERBAR_BORDER_COLOR 0x828282ff
SLIDERBAR_INSIDE_COLOR 0xffc6e3ff
SLIDERBAR_DEFAULT_COLOR 0xffaad5ff
SLIDERBAR_HOVER_COLOR 0xff9cceff
SLIDERBAR_ACTIVE_COLOR 0xff80c1ff
SLIDERBAR_ZERO_LINE_COLOR 0xff8ec7ff
PROGRESSBAR_BORDER_COLOR 0x828282ff
PROGRESSBAR_INSIDE_COLOR 0xffc6e3ff
PROGRESSBAR_PROGRESS_COLOR 0xffaad5ff
PROGRESSBAR_BORDER_WIDTH 0x2
SPINNER_LABEL_BORDER_COLOR 0x828282ff
SPINNER_LABEL_INSIDE_COLOR 0xffc6e3ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x828282ff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0xffc6e3ff
SPINNER_DEFAULT_SYMBOL_COLOR 0x650065ff
SPINNER_DEFAULT_TEXT_COLOR 0x650065ff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0xc8c8c8ff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0xffc6e3ff
SPINNER_HOVER_SYMBOL_COLOR 0x761c76ff
SPINNER_HOVER_TEXT_COLOR 0x761c76ff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x7bb0d6ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0xffb8dcff
SPINNER_PRESSED_SYMBOL_COLOR 0xa971a9ff
SPINNER_PRESSED_TEXT_COLOR 0xa971a9ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x1e
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x828282ff
COMBOBOX_DEFAULT_INSIDE_COLOR 0xffc6e3ff
COMBOBOX_DEFAULT_TEXT_COLOR 0x650065ff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0x650065ff
COMBOBOX_HOVER_BORDER_COLOR 0xc8c8c8ff
COMBOBOX_HOVER_INSIDE_COLOR 0xffc6e3ff
COMBOBOX_HOVER_TEXT_COLOR 0x761c76ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0x761c76ff
COMBOBOX_PRESSED_BORDER_COLOR 0x7bb0d6ff
COMBOBOX_PRESSED_INSIDE_COLOR 0xff8ec7ff
COMBOBOX_PRESSED_TEXT_COLOR 0xba8dbaff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x78acff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0xff8ec7ff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0xba8dbaff
CHECKBOX_DEFAULT_BORDER_COLOR 0x828282ff
CHECKBOX_DEFAULT_INSIDE_COLOR 0xffc6e3ff
CHECKBOX_HOVER_BORDER_COLOR 0xc8c8c8ff
CHECKBOX_HOVER_INSIDE_COLOR 0xffffffff
CHECKBOX_CLICK_BORDER_COLOR 0x66e7ffff
CHECKBOX_CLICK_INSIDE_COLOR 0xffaad5ff
CHECKBOX_STATUS_ACTIVE_COLOR 0xff8ec7ff
CHECKBOX_INSIDE_WIDTH 0x4
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x828282ff
TEXTBOX_INSIDE_COLOR 0xffc6e3ff
TEXTBOX_TEXT_COLOR 0x650065ff
TEXTBOX_LINE_COLOR 0x985598ff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,98 +0,0 @@
GLOBAL_BASE_COLOR 0x262921ff
GLOBAL_BORDER_COLOR 0x102ff
GLOBAL_TEXT_COLOR 0xf8f8f1ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0xb6b7b5ff
LABEL_BORDER_WIDTH 0x1
LABEL_TEXT_COLOR 0xf8f8f1ff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x38393aff
BUTTON_DEFAULT_INSIDE_COLOR 0x9e9f9cff
BUTTON_DEFAULT_TEXT_COLOR 0xf8f8f1ff
BUTTON_HOVER_BORDER_COLOR 0x1c1d1eff
BUTTON_HOVER_INSIDE_COLOR 0x9e9f9cff
BUTTON_HOVER_TEXT_COLOR 0xf8f8f2ff
BUTTON_PRESSED_BORDER_COLOR 0x102ff
BUTTON_PRESSED_INSIDE_COLOR 0x868883ff
BUTTON_PRESSED_TEXT_COLOR 0xfbfbf7ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x38393aff
TOGGLE_DEFAULT_INSIDE_COLOR 0x9e9f9cff
TOGGLE_DEFAULT_TEXT_COLOR 0xf8f8f1ff
TOGGLE_HOVER_BORDER_COLOR 0x1c1d1eff
TOGGLE_HOVER_INSIDE_COLOR 0x9e9f9cff
TOGGLE_HOVER_TEXT_COLOR 0xf8f8f2ff
TOGGLE_PRESSED_BORDER_COLOR 0x102ff
TOGGLE_PRESSED_INSIDE_COLOR 0x868883ff
TOGGLE_PRESSED_TEXT_COLOR 0xfbfbf7ff
TOGGLE_ACTIVE_BORDER_COLOR 0x102ff
TOGGLE_ACTIVE_INSIDE_COLOR 0x3e4039ff
TOGGLE_ACTIVE_TEXT_COLOR 0xfbfbf7ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x1
SLIDER_BORDER_COLOR 0x38393aff
SLIDER_INSIDE_COLOR 0x9e9f9cff
SLIDER_DEFAULT_COLOR 0x6e706bff
SLIDER_HOVER_COLOR 0x565852ff
SLIDER_ACTIVE_COLOR 0x262921ff
SLIDERBAR_BORDER_COLOR 0x38393aff
SLIDERBAR_INSIDE_COLOR 0x9e9f9cff
SLIDERBAR_DEFAULT_COLOR 0x6e706bff
SLIDERBAR_HOVER_COLOR 0x565852ff
SLIDERBAR_ACTIVE_COLOR 0x262921ff
SLIDERBAR_ZERO_LINE_COLOR 0x3e4039ff
PROGRESSBAR_BORDER_COLOR 0x38393aff
PROGRESSBAR_INSIDE_COLOR 0x9e9f9cff
PROGRESSBAR_PROGRESS_COLOR 0x6e706bff
PROGRESSBAR_BORDER_WIDTH 0x2
SPINNER_LABEL_BORDER_COLOR 0x38393aff
SPINNER_LABEL_INSIDE_COLOR 0x9e9f9cff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x38393aff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0x9e9f9cff
SPINNER_DEFAULT_SYMBOL_COLOR 0xf8f8f1ff
SPINNER_DEFAULT_TEXT_COLOR 0xf8f8f1ff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0x1c1d1eff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0x9e9f9cff
SPINNER_HOVER_SYMBOL_COLOR 0xf8f8f2ff
SPINNER_HOVER_TEXT_COLOR 0xf8f8f2ff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x102ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0x868883ff
SPINNER_PRESSED_SYMBOL_COLOR 0xfbfbf7ff
SPINNER_PRESSED_TEXT_COLOR 0xfbfbf7ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x1e
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x38393aff
COMBOBOX_DEFAULT_INSIDE_COLOR 0x9e9f9cff
COMBOBOX_DEFAULT_TEXT_COLOR 0xf8f8f1ff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0xf8f8f1ff
COMBOBOX_HOVER_BORDER_COLOR 0x1c1d1eff
COMBOBOX_HOVER_INSIDE_COLOR 0x9e9f9cff
COMBOBOX_HOVER_TEXT_COLOR 0xf8f8f2ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0xf8f8f2ff
COMBOBOX_PRESSED_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_INSIDE_COLOR 0x3e4039ff
COMBOBOX_PRESSED_TEXT_COLOR 0xfbfbf8ff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0x3e4039ff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0xfbfbf8ff
CHECKBOX_DEFAULT_BORDER_COLOR 0x38393aff
CHECKBOX_DEFAULT_INSIDE_COLOR 0x9e9f9cff
CHECKBOX_HOVER_BORDER_COLOR 0x1c1d1eff
CHECKBOX_HOVER_INSIDE_COLOR 0xffffffff
CHECKBOX_CLICK_BORDER_COLOR 0x102ff
CHECKBOX_CLICK_INSIDE_COLOR 0x6e706bff
CHECKBOX_STATUS_ACTIVE_COLOR 0x3e4039ff
CHECKBOX_INSIDE_WIDTH 0x4
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x38393aff
TEXTBOX_INSIDE_COLOR 0x9e9f9cff
TEXTBOX_TEXT_COLOR 0xf8f8f1ff
TEXTBOX_LINE_COLOR 0xfafaf5ff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,98 +0,0 @@
GLOBAL_BASE_COLOR 0x293034ff
GLOBAL_BORDER_COLOR 0x102ff
GLOBAL_TEXT_COLOR 0xa8e2aeff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0xb7babbff
LABEL_BORDER_WIDTH 0x1
LABEL_TEXT_COLOR 0xa8e2aeff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x38393aff
BUTTON_DEFAULT_INSIDE_COLOR 0x9fa3a4ff
BUTTON_DEFAULT_TEXT_COLOR 0xa8e2aeff
BUTTON_HOVER_BORDER_COLOR 0x1c1d1eff
BUTTON_HOVER_INSIDE_COLOR 0x9fa3a4ff
BUTTON_HOVER_TEXT_COLOR 0xb1e5b7ff
BUTTON_PRESSED_BORDER_COLOR 0x102ff
BUTTON_PRESSED_INSIDE_COLOR 0x888c8eff
BUTTON_PRESSED_TEXT_COLOR 0xceeed2ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x38393aff
TOGGLE_DEFAULT_INSIDE_COLOR 0x9fa3a4ff
TOGGLE_DEFAULT_TEXT_COLOR 0xa8e2aeff
TOGGLE_HOVER_BORDER_COLOR 0x1c1d1eff
TOGGLE_HOVER_INSIDE_COLOR 0x9fa3a4ff
TOGGLE_HOVER_TEXT_COLOR 0xb1e5b7ff
TOGGLE_PRESSED_BORDER_COLOR 0x102ff
TOGGLE_PRESSED_INSIDE_COLOR 0x888c8eff
TOGGLE_PRESSED_TEXT_COLOR 0xceeed2ff
TOGGLE_ACTIVE_BORDER_COLOR 0x102ff
TOGGLE_ACTIVE_INSIDE_COLOR 0x40474aff
TOGGLE_ACTIVE_TEXT_COLOR 0xceeed2ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x1
SLIDER_BORDER_COLOR 0x38393aff
SLIDER_INSIDE_COLOR 0x9fa3a4ff
SLIDER_DEFAULT_COLOR 0x707577ff
SLIDER_HOVER_COLOR 0x585e61ff
SLIDER_ACTIVE_COLOR 0x293034ff
SLIDERBAR_BORDER_COLOR 0x38393aff
SLIDERBAR_INSIDE_COLOR 0x9fa3a4ff
SLIDERBAR_DEFAULT_COLOR 0x707577ff
SLIDERBAR_HOVER_COLOR 0x585e61ff
SLIDERBAR_ACTIVE_COLOR 0x293034ff
SLIDERBAR_ZERO_LINE_COLOR 0x40474aff
PROGRESSBAR_BORDER_COLOR 0x38393aff
PROGRESSBAR_INSIDE_COLOR 0x9fa3a4ff
PROGRESSBAR_PROGRESS_COLOR 0x707577ff
PROGRESSBAR_BORDER_WIDTH 0x2
SPINNER_LABEL_BORDER_COLOR 0x38393aff
SPINNER_LABEL_INSIDE_COLOR 0x9fa3a4ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x38393aff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0x9fa3a4ff
SPINNER_DEFAULT_SYMBOL_COLOR 0xa8e2aeff
SPINNER_DEFAULT_TEXT_COLOR 0xa8e2aeff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0x1c1d1eff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0x9fa3a4ff
SPINNER_HOVER_SYMBOL_COLOR 0xb1e5b7ff
SPINNER_HOVER_TEXT_COLOR 0xb1e5b7ff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x102ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0x888c8eff
SPINNER_PRESSED_SYMBOL_COLOR 0xceeed2ff
SPINNER_PRESSED_TEXT_COLOR 0xceeed2ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x1e
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x38393aff
COMBOBOX_DEFAULT_INSIDE_COLOR 0x9fa3a4ff
COMBOBOX_DEFAULT_TEXT_COLOR 0xa8e2aeff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0xa8e2aeff
COMBOBOX_HOVER_BORDER_COLOR 0x1c1d1eff
COMBOBOX_HOVER_INSIDE_COLOR 0x9fa3a4ff
COMBOBOX_HOVER_TEXT_COLOR 0xb1e5b7ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0xb1e5b7ff
COMBOBOX_PRESSED_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_INSIDE_COLOR 0x40474aff
COMBOBOX_PRESSED_TEXT_COLOR 0xd8f2dbff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0x40474aff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0xd8f2dbff
CHECKBOX_DEFAULT_BORDER_COLOR 0x38393aff
CHECKBOX_DEFAULT_INSIDE_COLOR 0x9fa3a4ff
CHECKBOX_HOVER_BORDER_COLOR 0x1c1d1eff
CHECKBOX_HOVER_INSIDE_COLOR 0xffffffff
CHECKBOX_CLICK_BORDER_COLOR 0x102ff
CHECKBOX_CLICK_INSIDE_COLOR 0x707577ff
CHECKBOX_STATUS_ACTIVE_COLOR 0x40474aff
CHECKBOX_INSIDE_WIDTH 0x4
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x38393aff
TEXTBOX_INSIDE_COLOR 0x9fa3a4ff
TEXTBOX_TEXT_COLOR 0xa8e2aeff
TEXTBOX_LINE_COLOR 0xc5ebc9ff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,98 +0,0 @@
GLOBAL_BASE_COLOR 0x2b36ff
GLOBAL_BORDER_COLOR 0x102ff
GLOBAL_TEXT_COLOR 0xf8f8f1ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0xaab8bcff
LABEL_BORDER_WIDTH 0x1
LABEL_TEXT_COLOR 0xf8f8f1ff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x38393aff
BUTTON_DEFAULT_INSIDE_COLOR 0x8da0a5ff
BUTTON_DEFAULT_TEXT_COLOR 0xf8f8f1ff
BUTTON_HOVER_BORDER_COLOR 0x1c1d1eff
BUTTON_HOVER_INSIDE_COLOR 0x8da0a5ff
BUTTON_HOVER_TEXT_COLOR 0xf8f8f2ff
BUTTON_PRESSED_BORDER_COLOR 0x102ff
BUTTON_PRESSED_INSIDE_COLOR 0x71898fff
BUTTON_PRESSED_TEXT_COLOR 0xfbfbf7ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x38393aff
TOGGLE_DEFAULT_INSIDE_COLOR 0x8da0a5ff
TOGGLE_DEFAULT_TEXT_COLOR 0xf8f8f1ff
TOGGLE_HOVER_BORDER_COLOR 0x1c1d1eff
TOGGLE_HOVER_INSIDE_COLOR 0x8da0a5ff
TOGGLE_HOVER_TEXT_COLOR 0xf8f8f2ff
TOGGLE_PRESSED_BORDER_COLOR 0x102ff
TOGGLE_PRESSED_INSIDE_COLOR 0x71898fff
TOGGLE_PRESSED_TEXT_COLOR 0xfbfbf7ff
TOGGLE_ACTIVE_BORDER_COLOR 0x102ff
TOGGLE_ACTIVE_INSIDE_COLOR 0x1c424cff
TOGGLE_ACTIVE_TEXT_COLOR 0xfbfbf7ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x1
SLIDER_BORDER_COLOR 0x38393aff
SLIDER_INSIDE_COLOR 0x8da0a5ff
SLIDER_DEFAULT_COLOR 0x557179ff
SLIDER_HOVER_COLOR 0x385a62ff
SLIDER_ACTIVE_COLOR 0x2b36ff
SLIDERBAR_BORDER_COLOR 0x38393aff
SLIDERBAR_INSIDE_COLOR 0x8da0a5ff
SLIDERBAR_DEFAULT_COLOR 0x557179ff
SLIDERBAR_HOVER_COLOR 0x385a62ff
SLIDERBAR_ACTIVE_COLOR 0x2b36ff
SLIDERBAR_ZERO_LINE_COLOR 0x1c424cff
PROGRESSBAR_BORDER_COLOR 0x38393aff
PROGRESSBAR_INSIDE_COLOR 0x8da0a5ff
PROGRESSBAR_PROGRESS_COLOR 0x557179ff
PROGRESSBAR_BORDER_WIDTH 0x2
SPINNER_LABEL_BORDER_COLOR 0x38393aff
SPINNER_LABEL_INSIDE_COLOR 0x8da0a5ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x38393aff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0x8da0a5ff
SPINNER_DEFAULT_SYMBOL_COLOR 0xf8f8f1ff
SPINNER_DEFAULT_TEXT_COLOR 0xf8f8f1ff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0x1c1d1eff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0x8da0a5ff
SPINNER_HOVER_SYMBOL_COLOR 0xf8f8f2ff
SPINNER_HOVER_TEXT_COLOR 0xf8f8f2ff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x102ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0x71898fff
SPINNER_PRESSED_SYMBOL_COLOR 0xfbfbf7ff
SPINNER_PRESSED_TEXT_COLOR 0xfbfbf7ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x1e
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x38393aff
COMBOBOX_DEFAULT_INSIDE_COLOR 0x8da0a5ff
COMBOBOX_DEFAULT_TEXT_COLOR 0xf8f8f1ff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0xf8f8f1ff
COMBOBOX_HOVER_BORDER_COLOR 0x1c1d1eff
COMBOBOX_HOVER_INSIDE_COLOR 0x8da0a5ff
COMBOBOX_HOVER_TEXT_COLOR 0xf8f8f2ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0xf8f8f2ff
COMBOBOX_PRESSED_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_INSIDE_COLOR 0x1c424cff
COMBOBOX_PRESSED_TEXT_COLOR 0xfbfbf8ff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0x1c424cff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0xfbfbf8ff
CHECKBOX_DEFAULT_BORDER_COLOR 0x38393aff
CHECKBOX_DEFAULT_INSIDE_COLOR 0x8da0a5ff
CHECKBOX_HOVER_BORDER_COLOR 0x1c1d1eff
CHECKBOX_HOVER_INSIDE_COLOR 0xffffffff
CHECKBOX_CLICK_BORDER_COLOR 0x102ff
CHECKBOX_CLICK_INSIDE_COLOR 0x557179ff
CHECKBOX_STATUS_ACTIVE_COLOR 0x1c424cff
CHECKBOX_INSIDE_WIDTH 0x4
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x38393aff
TEXTBOX_INSIDE_COLOR 0x8da0a5ff
TEXTBOX_TEXT_COLOR 0xf8f8f1ff
TEXTBOX_LINE_COLOR 0xfafaf5ff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,98 +0,0 @@
GLOBAL_BASE_COLOR 0xfcf6e3ff
GLOBAL_BORDER_COLOR 0x102ff
GLOBAL_TEXT_COLOR 0x657b82ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0xfefcf5ff
LABEL_BORDER_WIDTH 0x1
LABEL_TEXT_COLOR 0x657b82ff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x2
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x38393aff
BUTTON_DEFAULT_INSIDE_COLOR 0xfdfbf2ff
BUTTON_DEFAULT_TEXT_COLOR 0x657b82ff
BUTTON_HOVER_BORDER_COLOR 0x1c1d1eff
BUTTON_HOVER_INSIDE_COLOR 0xfdfbf2ff
BUTTON_HOVER_TEXT_COLOR 0x76898fff
BUTTON_PRESSED_BORDER_COLOR 0x102ff
BUTTON_PRESSED_INSIDE_COLOR 0xfdfaefff
BUTTON_PRESSED_TEXT_COLOR 0xa9b5b9ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x38393aff
TOGGLE_DEFAULT_INSIDE_COLOR 0xfdfbf2ff
TOGGLE_DEFAULT_TEXT_COLOR 0x657b82ff
TOGGLE_HOVER_BORDER_COLOR 0x1c1d1eff
TOGGLE_HOVER_INSIDE_COLOR 0xfdfbf2ff
TOGGLE_HOVER_TEXT_COLOR 0x76898fff
TOGGLE_PRESSED_BORDER_COLOR 0x102ff
TOGGLE_PRESSED_INSIDE_COLOR 0xfdfaefff
TOGGLE_PRESSED_TEXT_COLOR 0xa9b5b9ff
TOGGLE_ACTIVE_BORDER_COLOR 0x102ff
TOGGLE_ACTIVE_INSIDE_COLOR 0xfcf7e6ff
TOGGLE_ACTIVE_TEXT_COLOR 0xa9b5b9ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x1
SLIDER_BUTTON_BORDER_WIDTH 0x1
SLIDER_BORDER_COLOR 0x38393aff
SLIDER_INSIDE_COLOR 0xfdfbf2ff
SLIDER_DEFAULT_COLOR 0xfdf9ecff
SLIDER_HOVER_COLOR 0xfcf8e9ff
SLIDER_ACTIVE_COLOR 0xfcf6e3ff
SLIDERBAR_BORDER_COLOR 0x38393aff
SLIDERBAR_INSIDE_COLOR 0xfdfbf2ff
SLIDERBAR_DEFAULT_COLOR 0xfdf9ecff
SLIDERBAR_HOVER_COLOR 0xfcf8e9ff
SLIDERBAR_ACTIVE_COLOR 0xfcf6e3ff
SLIDERBAR_ZERO_LINE_COLOR 0xfcf7e6ff
PROGRESSBAR_BORDER_COLOR 0x38393aff
PROGRESSBAR_INSIDE_COLOR 0xfdfbf2ff
PROGRESSBAR_PROGRESS_COLOR 0xfdf9ecff
PROGRESSBAR_BORDER_WIDTH 0x2
SPINNER_LABEL_BORDER_COLOR 0x38393aff
SPINNER_LABEL_INSIDE_COLOR 0xfdfbf2ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x38393aff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0xfdfbf2ff
SPINNER_DEFAULT_SYMBOL_COLOR 0x657b82ff
SPINNER_DEFAULT_TEXT_COLOR 0x657b82ff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0x1c1d1eff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0xfdfbf2ff
SPINNER_HOVER_SYMBOL_COLOR 0x76898fff
SPINNER_HOVER_TEXT_COLOR 0x76898fff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x102ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0xfdfaefff
SPINNER_PRESSED_SYMBOL_COLOR 0xa9b5b9ff
SPINNER_PRESSED_TEXT_COLOR 0xa9b5b9ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x1e
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x38393aff
COMBOBOX_DEFAULT_INSIDE_COLOR 0xfdfbf2ff
COMBOBOX_DEFAULT_TEXT_COLOR 0x657b82ff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0x657b82ff
COMBOBOX_HOVER_BORDER_COLOR 0x1c1d1eff
COMBOBOX_HOVER_INSIDE_COLOR 0xfdfbf2ff
COMBOBOX_HOVER_TEXT_COLOR 0x76898fff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0x76898fff
COMBOBOX_PRESSED_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_INSIDE_COLOR 0xfcf7e6ff
COMBOBOX_PRESSED_TEXT_COLOR 0xbac4c7ff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x102ff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0xfcf7e6ff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0xbac4c7ff
CHECKBOX_DEFAULT_BORDER_COLOR 0x38393aff
CHECKBOX_DEFAULT_INSIDE_COLOR 0xfdfbf2ff
CHECKBOX_HOVER_BORDER_COLOR 0x1c1d1eff
CHECKBOX_HOVER_INSIDE_COLOR 0xffffffff
CHECKBOX_CLICK_BORDER_COLOR 0x102ff
CHECKBOX_CLICK_INSIDE_COLOR 0xfdf9ecff
CHECKBOX_STATUS_ACTIVE_COLOR 0xfcf7e6ff
CHECKBOX_INSIDE_WIDTH 0x4
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x38393aff
TEXTBOX_INSIDE_COLOR 0xfdfbf2ff
TEXTBOX_TEXT_COLOR 0x657b82ff
TEXTBOX_LINE_COLOR 0x98a7abff
TEXTBOX_TEXT_FONTSIZE 0xa

View file

@ -1,98 +0,0 @@
GLOBAL_BASE_COLOR 0xf5f5f5ff
GLOBAL_BORDER_COLOR 0xf5f5f5ff
GLOBAL_TEXT_COLOR 0xf5f5f5ff
GLOBAL_TEXT_FONTSIZE 0xa
GLOBAL_BORDER_WIDTH 0x1
BACKGROUND_COLOR 0x2d2d2dff
LABEL_BORDER_WIDTH 0x2
LABEL_TEXT_COLOR 0xafafafff
LABEL_TEXT_PADDING 0x14
BUTTON_BORDER_WIDTH 0x1
BUTTON_TEXT_PADDING 0x14
BUTTON_DEFAULT_BORDER_COLOR 0x414141ff
BUTTON_DEFAULT_INSIDE_COLOR 0x323232ff
BUTTON_DEFAULT_TEXT_COLOR 0xafafafff
BUTTON_HOVER_BORDER_COLOR 0x3e3e3eff
BUTTON_HOVER_INSIDE_COLOR 0x2d2d2dff
BUTTON_HOVER_TEXT_COLOR 0x767472ff
BUTTON_PRESSED_BORDER_COLOR 0x414141ff
BUTTON_PRESSED_INSIDE_COLOR 0x323232ff
BUTTON_PRESSED_TEXT_COLOR 0x616161ff
TOGGLE_TEXT_PADDING 0x14
TOGGLE_BORDER_WIDTH 0x1
TOGGLE_DEFAULT_BORDER_COLOR 0x414141ff
TOGGLE_DEFAULT_INSIDE_COLOR 0x323232ff
TOGGLE_DEFAULT_TEXT_COLOR 0xafafafff
TOGGLE_HOVER_BORDER_COLOR 0x3e3e3eff
TOGGLE_HOVER_INSIDE_COLOR 0x2d2d2dff
TOGGLE_HOVER_TEXT_COLOR 0x767472ff
TOGGLE_PRESSED_BORDER_COLOR 0x414141ff
TOGGLE_PRESSED_INSIDE_COLOR 0x323232ff
TOGGLE_PRESSED_TEXT_COLOR 0x616161ff
TOGGLE_ACTIVE_BORDER_COLOR 0xafafafff
TOGGLE_ACTIVE_INSIDE_COLOR 0x414141ff
TOGGLE_ACTIVE_TEXT_COLOR 0xa3a3a3ff
TOGGLEGROUP_PADDING 0x3
SLIDER_BORDER_WIDTH 0x0
SLIDER_BUTTON_BORDER_WIDTH 0x0
SLIDER_BORDER_COLOR 0x414141ff
SLIDER_INSIDE_COLOR 0x232525ff
SLIDER_DEFAULT_COLOR 0x646464ff
SLIDER_HOVER_COLOR 0x767472ff
SLIDER_ACTIVE_COLOR 0x929291ff
SLIDERBAR_BORDER_COLOR 0x828282ff
SLIDERBAR_INSIDE_COLOR 0x262626ff
SLIDERBAR_DEFAULT_COLOR 0x616161ff
SLIDERBAR_HOVER_COLOR 0x646464ff
SLIDERBAR_ACTIVE_COLOR 0x929292ff
SLIDERBAR_ZERO_LINE_COLOR 0xafafafff
PROGRESSBAR_BORDER_COLOR 0x828282ff
PROGRESSBAR_INSIDE_COLOR 0x262626ff
PROGRESSBAR_PROGRESS_COLOR 0x646464ff
PROGRESSBAR_BORDER_WIDTH 0x0
SPINNER_LABEL_BORDER_COLOR 0x414141ff
SPINNER_LABEL_INSIDE_COLOR 0x323232ff
SPINNER_DEFAULT_BUTTON_BORDER_COLOR 0x414141ff
SPINNER_DEFAULT_BUTTON_INSIDE_COLOR 0x323232ff
SPINNER_DEFAULT_SYMBOL_COLOR 0xafafafff
SPINNER_DEFAULT_TEXT_COLOR 0xafafafff
SPINNER_HOVER_BUTTON_BORDER_COLOR 0x3e3e3eff
SPINNER_HOVER_BUTTON_INSIDE_COLOR 0x2d2d2dff
SPINNER_HOVER_SYMBOL_COLOR 0x767472ff
SPINNER_HOVER_TEXT_COLOR 0x767472ff
SPINNER_PRESSED_BUTTON_BORDER_COLOR 0x414141ff
SPINNER_PRESSED_BUTTON_INSIDE_COLOR 0x323232ff
SPINNER_PRESSED_SYMBOL_COLOR 0x646464ff
SPINNER_PRESSED_TEXT_COLOR 0x646464ff
COMBOBOX_PADDING 0x1
COMBOBOX_BUTTON_WIDTH 0x1e
COMBOBOX_BUTTON_HEIGHT 0x1e
COMBOBOX_BORDER_WIDTH 0x1
COMBOBOX_DEFAULT_BORDER_COLOR 0x414141ff
COMBOBOX_DEFAULT_INSIDE_COLOR 0x323232ff
COMBOBOX_DEFAULT_TEXT_COLOR 0xafafafff
COMBOBOX_DEFAULT_LIST_TEXT_COLOR 0xafafafff
COMBOBOX_HOVER_BORDER_COLOR 0x3e3e3eff
COMBOBOX_HOVER_INSIDE_COLOR 0x2d2d2dff
COMBOBOX_HOVER_TEXT_COLOR 0x767472ff
COMBOBOX_HOVER_LIST_TEXT_COLOR 0x767472ff
COMBOBOX_PRESSED_BORDER_COLOR 0x414141ff
COMBOBOX_PRESSED_INSIDE_COLOR 0x323232ff
COMBOBOX_PRESSED_TEXT_COLOR 0x646464ff
COMBOBOX_PRESSED_LIST_BORDER_COLOR 0x414141ff
COMBOBOX_PRESSED_LIST_INSIDE_COLOR 0x323232ff
COMBOBOX_PRESSED_LIST_TEXT_COLOR 0x646464ff
CHECKBOX_DEFAULT_BORDER_COLOR 0x414141ff
CHECKBOX_DEFAULT_INSIDE_COLOR 0x323232ff
CHECKBOX_HOVER_BORDER_COLOR 0x3e3e3eff
CHECKBOX_HOVER_INSIDE_COLOR 0x2d2d2dff
CHECKBOX_CLICK_BORDER_COLOR 0x414141ff
CHECKBOX_CLICK_INSIDE_COLOR 0x323232ff
CHECKBOX_STATUS_ACTIVE_COLOR 0x414141ff
CHECKBOX_INSIDE_WIDTH 0x2
TEXTBOX_BORDER_WIDTH 0x1
TEXTBOX_BORDER_COLOR 0x414141ff
TEXTBOX_INSIDE_COLOR 0x323232ff
TEXTBOX_TEXT_COLOR 0xafafafff
TEXTBOX_LINE_COLOR 0xafafafff
TEXTBOX_TEXT_FONTSIZE 0x9

View file

@ -0,0 +1,31 @@
package main
import (
"fmt"
gui "git.terah.dev/UnrealXR/raylib-go/raygui"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
rl.InitWindow(800, 450, "raygui - button")
rl.SetTargetFPS(60)
var button bool
for !rl.WindowShouldClose() {
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
button = gui.Button(rl.NewRectangle(50, 150, 100, 40), "Click")
if button {
fmt.Println("Clicked on button")
}
rl.EndDrawing()
}
rl.CloseWindow()
}

View file

@ -0,0 +1,281 @@
package main
import (
"fmt"
gui "git.terah.dev/UnrealXR/raylib-go/raygui"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
/*******************************************************************************************
*
* raygui - controls test suite
*
* TEST CONTROLS:
* - gui.DropdownBox()
* - gui.CheckBox()
* - gui.Spinner()
* - gui.ValueBox()
* - gui.TextBox()
* - gui.Button()
* - gui.ComboBox()
* - gui.ListView()
* - gui.ToggleGroup()
* - gui.ColorPicker()
* - gui.Slider()
* - gui.SliderBar()
* - gui.ProgressBar()
* - gui.ColorBarAlpha()
* - gui.ScrollPanel()
*
*
* DEPENDENCIES:
* raylib 4.0 - Windowing/input management and drawing.
* raygui 3.2 - Immediate-mode GUI controls.
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2016-2022 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
//#define RAYGUI_CUSTOM_ICONS // It requires providing gui_icons.h in the same directory
//#include "gui_icons.h" // External icons data provided, it can be generated with rGuiIcons tool
// ------------------------------------------------------------------------------------
// Program main entry point
// ------------------------------------------------------------------------------------
func main() {
// Initialization
//---------------------------------------------------------------------------------------
const (
screenWidth = 690
screenHeight = 560
)
rl.InitWindow(screenWidth, screenHeight, "raygui - controls test suite")
rl.SetExitKey(0)
// GUI controls initialization
//----------------------------------------------------------------------------------
var (
dropdownBox000Active int32 = 0
dropDown000EditMode bool = false
dropdownBox001Active int32 = 0
dropDown001EditMode bool = false
spinner001Value int32 = 0
spinnerEditMode bool = false
valueBox002Value int32 = 0
valueBoxEditMode bool = false
textBoxText = "Text box"
textBoxEditMode bool = false
listViewScrollIndex int32 = 0
listViewActive int32 = -1
listViewExScrollIndex int32 = 0
listViewExActive int32 = 2
listViewExFocus int32 = -1
listViewExList = []string{"This", "is", "a", "list view", "with", "disable", "elements", "amazing!"}
colorPickerValue = rl.Red
sliderValue float32 = 50
sliderBarValue float32 = 60
progressValue float32 = 0.4
forceSquaredChecked bool = false
alphaValue float32 = 0.5
comboBoxActive int32 = 1
toggleGroupActive int32 = 0
viewScroll = rl.Vector2{0, 0}
//----------------------------------------------------------------------------------
// Custom GUI font loading
//Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0);
//GuiSetFont(font);
exitWindow bool = false
showMessageBox bool = false
textInput string
showTextInputBox bool = false
// TODO textInputFileName string
)
rl.SetTargetFPS(60)
//--------------------------------------------------------------------------------------
// Main game loop
for !exitWindow { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
exitWindow = rl.WindowShouldClose()
if rl.IsKeyPressed(rl.KeyEscape) {
showMessageBox = !showMessageBox
}
if rl.IsKeyDown(rl.KeyLeftControl) && rl.IsKeyPressed(rl.KeyS) {
showTextInputBox = true
}
// TODO if rl.IsFileDropped() {
// TODO var droppedFiles gui.FilePathList = rl.LoadDroppedFiles()
// TODO if (droppedFiles.count > 0) && rl.IsFileExtension(droppedFiles.paths[0], ".rgs") {
// TODO gui.LoadStyle(droppedFiles.paths[0])
// TODO }
// TODO rl.UnloadDroppedFiles(droppedFiles) // Clear internal buffers
// TODO }
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.BeginDrawing()
rl.ClearBackground(rl.GetColor(uint(gui.GetStyle(gui.DEFAULT, gui.BACKGROUND_COLOR))))
// raygui: controls drawing
//----------------------------------------------------------------------------------
if dropDown000EditMode || dropDown001EditMode {
gui.Lock()
} else if !dropDown000EditMode && !dropDown001EditMode {
gui.Unlock()
}
//GuiDisable();
// First GUI column
//GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
forceSquaredChecked = gui.CheckBox(rl.Rectangle{25, 108, 15, 15}, "FORCE CHECK!", forceSquaredChecked)
gui.SetStyle(gui.TEXTBOX, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_CENTER)
//GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, TEXT_ALIGN_LEFT);
gui.Spinner(rl.Rectangle{25, 135, 125, 30}, "", &spinner001Value, 0, 100, spinnerEditMode)
if gui.ValueBox(rl.Rectangle{25, 175, 125, 30}, "", &valueBox002Value, 0, 100, valueBoxEditMode) {
valueBoxEditMode = !valueBoxEditMode
}
gui.SetStyle(gui.TEXTBOX, gui.TEXT_ALIGNMENT, int64(gui.TEXT_ALIGN_LEFT))
if gui.TextBox(rl.Rectangle{25, 215, 125, 30}, &textBoxText, 64, textBoxEditMode) {
textBoxEditMode = !textBoxEditMode
}
gui.SetStyle(gui.BUTTON, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_CENTER)
if gui.Button(rl.Rectangle{25, 255, 125, 30}, gui.IconText(gui.ICON_FILE_SAVE, "Save File")) {
showTextInputBox = true
}
gui.GroupBox(rl.Rectangle{25, 310, 125, 150}, "STATES")
//GuiLock();
gui.SetState(gui.STATE_NORMAL)
if gui.Button(rl.Rectangle{30, 320, 115, 30}, "NORMAL") {
}
gui.SetState(gui.STATE_FOCUSED)
if gui.Button(rl.Rectangle{30, 355, 115, 30}, "FOCUSED") {
}
gui.SetState(gui.STATE_PRESSED)
if gui.Button(rl.Rectangle{30, 390, 115, 30}, "#15#PRESSED") {
}
gui.SetState(gui.STATE_DISABLED)
if gui.Button(rl.Rectangle{30, 425, 115, 30}, "DISABLED") {
}
gui.SetState(gui.STATE_NORMAL)
//GuiUnlock();
comboBoxActive = gui.ComboBox(rl.Rectangle{25, 470, 125, 30}, "ONE;TWO;THREE;FOUR", comboBoxActive)
// NOTE: gui.DropdownBox must draw after any other control that can be covered on unfolding
gui.SetStyle(gui.DROPDOWNBOX, gui.TEXT_ALIGNMENT, int64(gui.TEXT_ALIGN_LEFT))
if gui.DropdownBox(rl.Rectangle{25, 65, 125, 30}, "#01#ONE;#02#TWO;#03#THREE;#04#FOUR", &dropdownBox001Active, dropDown001EditMode) {
dropDown001EditMode = !dropDown001EditMode
}
gui.SetStyle(gui.DROPDOWNBOX, gui.TEXT_ALIGNMENT, gui.TEXT_ALIGN_CENTER)
if gui.DropdownBox(rl.Rectangle{25, 25, 125, 30}, "ONE;TWO;THREE", &dropdownBox000Active, dropDown000EditMode) {
dropDown000EditMode = !dropDown000EditMode
}
// Second GUI column
listViewActive = gui.ListView(rl.Rectangle{165, 25, 140, 140}, "Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey", &listViewScrollIndex, listViewActive)
listViewExActive = gui.ListViewEx(rl.Rectangle{165, 180, 140, 200}, listViewExList, &listViewExFocus, &listViewExScrollIndex, listViewExActive)
toggleGroupActive = gui.ToggleGroup(rl.Rectangle{165, 400, 140, 25}, "#1#ONE\n#3#TWO\n#8#THREE\n#23#", toggleGroupActive)
// Third GUI column
gui.Panel(rl.NewRectangle(320, 25, 225, 140), "Panel Info")
colorPickerValue = gui.ColorPicker(rl.Rectangle{320, 185, 196, 192}, "", colorPickerValue)
sliderValue = gui.Slider(rl.Rectangle{355, 400, 165, 20}, "TEST",
fmt.Sprintf("%2.2f", sliderValue), sliderValue, -50, 100)
sliderBarValue = gui.SliderBar(rl.Rectangle{320, 430, 200, 20}, "",
fmt.Sprintf("%2.2f", sliderBarValue), sliderBarValue, 0, 100)
progressValue = gui.ProgressBar(rl.Rectangle{320, 460, 200, 20}, "", "", progressValue, 0, 1)
// NOTE: View rectangle could be used to perform some scissor test
var view rl.Rectangle
gui.ScrollPanel(rl.Rectangle{560, 25, 102, 354}, "", rl.Rectangle{560, 25, 300, 1200}, &viewScroll, &view)
var mouseCell rl.Vector2
gui.Grid(rl.Rectangle{560, 25 + 180 + 195, 100, 120}, "", 20, 3, &mouseCell)
alphaValue = gui.ColorBarAlpha(rl.Rectangle{320, 490, 200, 30}, "", alphaValue)
gui.StatusBar(rl.Rectangle{0, float32(rl.GetScreenHeight()) - 20, float32(rl.GetScreenWidth()), 20}, "This is a status bar")
if showMessageBox {
rl.DrawRectangle(0, 0, int32(rl.GetScreenWidth()), int32(rl.GetScreenHeight()), rl.Fade(rl.RayWhite, 0.8))
var result int32 = gui.MessageBox(rl.Rectangle{float32(rl.GetScreenWidth())/2 - 125, float32(rl.GetScreenHeight())/2 - 50, 250, 100}, gui.IconText(gui.ICON_EXIT, "Close Window"), "Do you really want to exit?", "Yes;No")
if (result == 0) || (result == 2) {
showMessageBox = false
} else if result == 1 {
exitWindow = true
}
}
if showTextInputBox {
rl.DrawRectangle(0, 0, int32(rl.GetScreenWidth()), int32(rl.GetScreenHeight()), rl.Fade(rl.RayWhite, 0.8))
var secretViewActive bool
var result int32 = gui.TextInputBox(
rl.Rectangle{float32(rl.GetScreenWidth())/2 - 120, float32(rl.GetScreenHeight())/2 - 60, 240, 140},
"Save",
gui.IconText(gui.ICON_FILE_SAVE, "Save file as..."),
"Ok;Cancel",
&textInput, 255, &secretViewActive)
if result == 1 {
// TODO: Validate textInput value and save
// strcpy(textInputFileName, textInput)
// TODO textInputFileName = textInput
}
if (result == 0) || (result == 1) || (result == 2) {
showTextInputBox = false
//strcpy(textInput, "\0");
textInput = ""
}
}
//----------------------------------------------------------------------------------
rl.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,3 @@
This example loads a custom .rgi-file and draws the 255th icon. You can use the [rGuiIcons](https://raylibtech.itch.io/rguiicons) tool to view or create icon files.
![Screenshot](./screenshot.png)

Binary file not shown.

View file

@ -0,0 +1,20 @@
package main
import (
"git.terah.dev/UnrealXR/raylib-go/raygui"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
rl.InitWindow(800, 600, "raylib-go - icons example")
defer rl.CloseWindow()
raygui.LoadIcons("default_icons_with_255.rgi", false)
for !rl.WindowShouldClose() {
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
raygui.DrawIcon(raygui.ICON_255, 100, 100, 8, rl.Gray)
rl.EndDrawing()
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

View file

@ -0,0 +1,99 @@
package main
import (
"fmt"
gui "git.terah.dev/UnrealXR/raylib-go/raygui"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
/*******************************************************************************************
*
* raygui - portable window
*
* DEPENDENCIES:
* raylib 4.0 - Windowing/input management and drawing.
* raygui 3.0 - Immediate-mode GUI controls.
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2016-2022 Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
// ------------------------------------------------------------------------------------
// Program main entry point
// ------------------------------------------------------------------------------------
func main() {
// Initialization
//---------------------------------------------------------------------------------------
const (
screenWidth = 800
screenHeight = 600
)
rl.SetConfigFlags(rl.FlagWindowUndecorated)
rl.InitWindow(screenWidth, screenHeight, "raygui - portable window")
// General variables
var (
mousePosition = rl.Vector2{0, 0}
windowPosition = rl.Vector2{500, 200}
panOffset = mousePosition
dragWindow = false
)
rl.SetWindowPosition(int(windowPosition.X), int(windowPosition.Y))
exitWindow := false
rl.SetTargetFPS(60)
//--------------------------------------------------------------------------------------
// Main game loop
for !exitWindow && !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
mousePosition = rl.GetMousePosition()
if rl.IsMouseButtonPressed(rl.MouseLeftButton) {
if (rl.CheckCollisionPointRec(mousePosition, rl.Rectangle{0, 0, screenWidth, 20})) {
dragWindow = true
panOffset = mousePosition
}
}
if dragWindow {
windowPosition.X += (mousePosition.X - panOffset.X)
windowPosition.Y += (mousePosition.Y - panOffset.Y)
if rl.IsMouseButtonReleased(rl.MouseLeftButton) {
dragWindow = false
}
rl.SetWindowPosition(int(windowPosition.X), int(windowPosition.Y))
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
exitWindow = gui.WindowBox(rl.Rectangle{0, 0, screenWidth, screenHeight}, "#198# PORTABLE WINDOW")
rl.DrawText(fmt.Sprintf("Mouse Position: [ %.0f, %.0f ]", mousePosition.X, mousePosition.Y), 10, 40, 10, rl.DarkGray)
rl.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}

View file

@ -0,0 +1,193 @@
package main
import (
"fmt"
gui "git.terah.dev/UnrealXR/raylib-go/raygui"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
/*******************************************************************************************
*
* raygui - Controls test
*
* TEST CONTROLS:
* - gui.ScrollPanel()
*
* DEPENDENCIES:
* raylib 4.0 - Windowing/input management and drawing.
* raygui 3.0 - Immediate-mode GUI controls.
*
* COMPILATION (Windows - MinGW):
* gcc -o $(NAME_PART).exe $(FILE_NAME) -I../../src -lraylib -lopengl32 -lgdi32 -std=c99
*
* COMPILATION (Linux - gcc):
* gcc -o $(NAME_PART) $(FILE_NAME) -I../../src -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -std=c99
*
* LICENSE: zlib/libpng
*
* Copyright (c) 2019-2022 Vlad Adrian (@Demizdor) and Ramon Santamaria (@raysan5)
*
**********************************************************************************************/
// ------------------------------------------------------------------------------------
// Program main entry point
// ------------------------------------------------------------------------------------
func main() {
// Initialization
//---------------------------------------------------------------------------------------
const (
screenWidth = 800
screenHeight = 450
)
rl.InitWindow(screenWidth, screenHeight, "raygui - gui.ScrollPanel()")
var (
panelRec = rl.Rectangle{20, 40, 200, 150}
panelContentRec = rl.Rectangle{0, 0, 340, 340}
panelView = rl.Rectangle{0, 0, 0, 0}
panelScroll = rl.Vector2{99, -20}
mouseCell = rl.Vector2{0, 0}
showContentArea = true
)
rl.SetTargetFPS(60)
//---------------------------------------------------------------------------------------
// Main game loop
for !rl.WindowShouldClose() {
// Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
// TODO: Implement required update logic
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.DrawText(fmt.Sprintf("[%.1f, %.1f]", panelScroll.X, panelScroll.Y), 4, 4, 20, rl.Red)
gui.ScrollPanel(panelRec, "", panelContentRec, &panelScroll, &panelView)
rl.BeginScissorMode(int32(panelView.X), int32(panelView.Y), int32(panelView.Width), int32(panelView.Height))
gui.Grid(rl.Rectangle{
float32(panelRec.X + panelScroll.X),
float32(panelRec.Y + panelScroll.Y),
float32(panelContentRec.Width),
float32(panelContentRec.Height),
}, "", 16, 3, &mouseCell)
rl.EndScissorMode()
if showContentArea {
rl.DrawRectangle(
int32(panelRec.X+panelScroll.X),
int32(panelRec.Y+panelScroll.Y),
int32(panelContentRec.Width),
int32(panelContentRec.Height),
rl.Fade(rl.Red, 0.1),
)
}
DrawStyleEditControls()
showContentArea = gui.CheckBox(rl.Rectangle{565, 80, 20, 20}, "SHOW CONTENT AREA", showContentArea)
panelContentRec.Width = gui.SliderBar(rl.Rectangle{590, 385, 145, 15},
"WIDTH",
fmt.Sprintf("%.1f", panelContentRec.Width),
panelContentRec.Width,
1, 600)
panelContentRec.Height = gui.SliderBar(rl.Rectangle{590, 410, 145, 15},
"HEIGHT",
fmt.Sprintf("%.1f", panelContentRec.Height),
panelContentRec.Height, 1, 400)
rl.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}
// Draw and process scroll bar style edition controls
func DrawStyleEditControls() {
// ScrollPanel style controls
//----------------------------------------------------------
gui.GroupBox(rl.Rectangle{550, 170, 220, 205}, "SCROLLBAR STYLE")
var style int32
style = int32(gui.GetStyle(gui.SCROLLBAR, gui.BORDER_WIDTH))
gui.Label(rl.Rectangle{555, 195, 110, 10}, "BORDER_WIDTH")
gui.Spinner(rl.Rectangle{670, 190, 90, 20}, "", &style, 0, 6, false)
gui.SetStyle(gui.SCROLLBAR, gui.BORDER_WIDTH, int64(style))
style = int32(gui.GetStyle(gui.SCROLLBAR, gui.ARROWS_SIZE))
gui.Label(rl.Rectangle{555, 220, 110, 10}, "ARROWS_SIZE")
gui.Spinner(rl.Rectangle{670, 215, 90, 20}, "", &style, 4, 14, false)
gui.SetStyle(gui.SCROLLBAR, gui.ARROWS_SIZE, int64(style))
style = int32(gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING))
gui.Label(rl.Rectangle{555, 245, 110, 10}, "SLIDER_PADDING")
gui.Spinner(rl.Rectangle{670, 240, 90, 20}, "", &style, 0, 14, false)
gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING, int64(style))
style = boolToint32(gui.CheckBox(rl.Rectangle{565, 280, 20, 20}, "ARROWS_VISIBLE", int32Tobool(int32(gui.GetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE)))))
gui.SetStyle(gui.SCROLLBAR, gui.ARROWS_VISIBLE, int64(style))
style = int32(gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING))
gui.Label(rl.Rectangle{555, 325, 110, 10}, "SLIDER_PADDING")
gui.Spinner(rl.Rectangle{670, 320, 90, 20}, "", &style, 0, 14, false)
gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_PADDING, int64(style))
style = int32(gui.GetStyle(gui.SCROLLBAR, gui.SLIDER_WIDTH))
gui.Label(rl.Rectangle{555, 350, 110, 10}, "SLIDER_WIDTH")
gui.Spinner(rl.Rectangle{670, 345, 90, 20}, "", &style, 2, 100, false)
gui.SetStyle(gui.SCROLLBAR, gui.SLIDER_WIDTH, int64(style))
var text string
if gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE) == gui.SCROLLBAR_LEFT_SIDE {
text = "SCROLLBAR: LEFT"
} else {
text = "SCROLLBAR: RIGHT"
}
style = boolToint32(gui.Toggle(rl.Rectangle{560, 110, 200, 35}, text, int32Tobool(int32(gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE)))))
gui.SetStyle(gui.LISTVIEW, gui.SCROLLBAR_SIDE, int64(style))
//----------------------------------------------------------
// ScrollBar style controls
//----------------------------------------------------------
gui.GroupBox(rl.Rectangle{550, 20, 220, 135}, "SCROLLPANEL STYLE")
style = int32(gui.GetStyle(gui.LISTVIEW, gui.SCROLLBAR_WIDTH))
gui.Label(rl.Rectangle{555, 35, 110, 10}, "SCROLLBAR_WIDTH")
gui.Spinner(rl.Rectangle{670, 30, 90, 20}, "", &style, 6, 30, false)
gui.SetStyle(gui.LISTVIEW, gui.SCROLLBAR_WIDTH, int64(style))
style = int32(gui.GetStyle(gui.DEFAULT, gui.BORDER_WIDTH))
gui.Label(rl.Rectangle{555, 60, 110, 10}, "BORDER_WIDTH")
gui.Spinner(rl.Rectangle{670, 55, 90, 20}, "", &style, 0, 20, false)
gui.SetStyle(gui.DEFAULT, gui.BORDER_WIDTH, int64(style))
//----------------------------------------------------------
}
func boolToint32(b bool) int32 {
if b {
return 1
}
return 0
}
func int32Tobool(v int32) bool {
return 0 < v
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

View file

@ -0,0 +1,95 @@
/*******************************************************************************************
*
* raylib [models] example - Load 3d model with animations and play them
*
* Example originally created with raylib 2.5, last time updated with raylib 3.5
*
* Example contributed by Culacant (@culacant) and reviewed by Ramon Santamaria (@raysan5)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2019-2024 Culacant (@culacant) and Ramon Santamaria (@raysan5)
*
********************************************************************************************
*
* NOTE: To export a model from blender, make sure it is not posed, the vertices need to be
* in the same position as they would be in edit mode and the scale of your models is
* set to 0. Scaling can be done from the export menu.
*
********************************************************************************************/
package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - model animation")
camera := rl.Camera{}
camera.Position = rl.NewVector3(10.0, 10.0, 10.0)
camera.Target = rl.NewVector3(0.0, 0.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
model := rl.LoadModel("guy.iqm")
texture := rl.LoadTexture("guytex.png")
rl.SetMaterialTexture(model.Materials, rl.MapDiffuse, texture)
position := rl.NewVector3(0, 0, 0)
anims := rl.LoadModelAnimations("guyanim.iqm")
animFrameCount := 0
rl.DisableCursor()
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera, rl.CameraFirstPerson)
if rl.IsKeyDown(rl.KeySpace) {
animFrameCount++
animCurrent := anims[0]
animFrameNum := animCurrent.FrameCount
rl.UpdateModelAnimation(model, anims[0], int32(animFrameCount))
if animFrameCount >= int(animFrameNum) {
animFrameCount = 0
}
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
rl.DrawModelEx(model, position, rl.NewVector3(1, 0, 0), -90, rl.NewVector3(1, 1, 1), rl.White)
// Draw translation cubes
for i := int32(0); i < model.BoneCount; i++ {
pose := anims[0].GetFramePose(animFrameCount, int(i))
rl.DrawCube(pose.Translation, 0.2, 0.2, 0.2, rl.Red)
}
rl.DrawGrid(10, 1)
rl.EndMode3D()
rl.DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, rl.Black)
rl.DrawText("(c) Guy IQM 3D model by @culacant", 10, 30, 10, rl.Black)
rl.EndDrawing()
}
rl.UnloadModel(model)
rl.UnloadModelAnimations(anims)
rl.UnloadTexture(texture)
rl.CloseWindow()
}

View file

@ -1,13 +1,26 @@
package main
/*******************************************************************************************
*
* raylib [models] example - Drawing billboards
*
* Example originally created with raylib 1.3, last time updated with raylib 3.5
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2015-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/package main
import (
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
func main() {
screenWidth := int32(800)
screenHeight := int32(450)
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards")
camera := rl.Camera{}
@ -17,28 +30,61 @@ func main() {
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
bill := rl.LoadTexture("billboard.png") // Our texture billboard
billPosition := rl.NewVector3(0.0, 2.0, 0.0) // Position where draw billboard
bill := rl.LoadTexture("billboard.png") // Our texture billboard
billPositionStatic := rl.NewVector3(0.0, 2.0, 0.0) // Position of static billboard
billPositionRotating := rl.NewVector3(1.0, 2.0, 1.0) // Position of rotating billboard
rl.SetCameraMode(camera, rl.CameraOrbital) // Set an orbital camera mode
// Entire billboard texture, source is used to take a segment from a larger texture.
source := rl.Rectangle{
Width: float32(bill.Width),
Height: float32(bill.Height),
}
// NOTE: Billboard locked on axis-Y
billUp := rl.Vector3{Y: 1.0}
// Set the height of the rotating billboard to 1.0 with the aspect ratio fixed
size := rl.Vector2{
X: source.Width / source.Height,
Y: 1.0,
}
// Rotate around origin
// Here we choose to rotate around the image center
origin := rl.Vector2Scale(size, 0.5)
// Distance is needed for the correct billboard draw order
// Larger distance (further away from the camera) should be drawn prior to smaller distance.
var distanceStatic, distanceRotating, rotation float32
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera) // Update camera
// Update
rl.UpdateCamera(&camera, rl.CameraOrbital) // Update camera with orbital camera mode
rotation += 0.4
distanceStatic = rl.Vector3Distance(camera.Position, billPositionStatic)
distanceRotating = rl.Vector3Distance(camera.Position, billPositionRotating)
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
rl.DrawGrid(10, 1.0) // Draw a grid
rl.DrawBillboard(camera, bill, billPosition, 2.0, rl.White)
// Draw order matters!
if distanceStatic > distanceRotating {
rl.DrawBillboard(camera, bill, billPositionStatic, 2.0, rl.White)
rl.DrawBillboardPro(camera, bill, source, billPositionRotating, billUp, size, origin, rotation, rl.White)
} else {
rl.DrawBillboardPro(camera, bill, source, billPositionRotating, billUp, size, origin, rotation, rl.White)
rl.DrawBillboard(camera, bill, billPositionStatic, 2.0, rl.White)
}
rl.EndMode3D()
rl.DrawFPS(10, 10)
rl.EndDrawing()
}

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
"git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {

View file

@ -1,7 +1,7 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -30,14 +30,12 @@ func main() {
rl.UnloadImage(image) // Unload cubicmap image from RAM, already uploaded to VRAM
rl.SetCameraMode(camera, rl.CameraOrbital) // Set an orbital camera mode
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
// Update
rl.UpdateCamera(&camera) // Update camera
rl.UpdateCamera(&camera, rl.CameraOrbital) // Update camera with orbital camera mode
// Draw

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -0,0 +1,256 @@
/*******************************************************************************************
*
* raylib [models] example - Draw textured cube
*
* Example originally created with raylib 4.5, last time updated with raylib 4.5
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2022-2024 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
package main
import rl "git.terah.dev/UnrealXR/raylib-go/raylib"
const (
screenWidth = 800
screenHeight = 450
)
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - draw cube texture")
// Define the camera to look into our 3d world
camera := rl.Camera{
Position: rl.Vector3{
Y: 10.0,
Z: 10.0,
},
Target: rl.Vector3{},
Up: rl.Vector3{Y: 1.0},
Fovy: 45.0,
Projection: rl.CameraPerspective,
}
// Load texture to be applied to the cubes sides
texture := rl.LoadTexture("cubicmap_atlas.png")
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
// TODO: Update your variables here
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
// Draw cube with an applied texture
vec := rl.Vector3{
X: -2.0,
Y: 2.0,
}
DrawCubeTexture(texture, vec, 2.0, 4.0, 2.0, rl.White)
// Draw cube with an applied texture, but only a defined rectangle piece of the texture
rec := rl.Rectangle{
Y: float32(texture.Height) / 2.0,
Width: float32(texture.Width) / 2.0,
Height: float32(texture.Height) / 2.0,
}
vec = rl.Vector3{
X: 2.0,
Y: 1.0,
}
DrawCubeTextureRec(texture, rec, vec, 2.0, 2.0, 2.0, rl.White)
rl.DrawGrid(10, 1.0) // Draw a grid
rl.EndMode3D()
rl.DrawFPS(10, 10)
rl.EndDrawing()
}
// De-Initialization
rl.UnloadTexture(texture) // Unload texture
rl.CloseWindow() // Close window and OpenGL context
}
// DrawCubeTexture draws a textured cube
// NOTE: Cube position is the center position
func DrawCubeTexture(texture rl.Texture2D, position rl.Vector3, width, height, length float32, color rl.Color) {
x := position.X
y := position.Y
z := position.Z
// Set desired texture to be enabled while drawing following vertex data
rl.SetTexture(texture.ID)
// Vertex data transformation can be defined with the commented lines,
// but in this example we calculate the transformed vertex data directly when calling rlVertex3f()
// rl.PushMatrix()
// NOTE: Transformation is applied in inverse order (scale -> rotate -> translate)
//rl.Translatef(2.0, 0.0, 0.0)
//rl.Rotatef(45, 0, 1, )
//rl.Scalef(2.0, 2.0, 2.0)
rl.Begin(rl.Quads)
rl.Color4ub(color.R, color.G, color.B, color.A)
// Front Face
rl.Normal3f(0.0, 0.0, 1.0) // Normal Pointing Towards Viewer
rl.TexCoord2f(0.0, 0.0)
rl.Vertex3f(x-width/2, y-height/2, z+length/2) // Bottom Left Of The Texture and Quad
rl.TexCoord2f(1.0, 0.0)
rl.Vertex3f(x+width/2, y-height/2, z+length/2) // Bottom Right Of The Texture and Quad
rl.TexCoord2f(1.0, 1.0)
rl.Vertex3f(x+width/2, y+height/2, z+length/2) // Top Right Of The Texture and Quad
rl.TexCoord2f(0.0, 1.0)
rl.Vertex3f(x-width/2, y+height/2, z+length/2) // Top Left Of The Texture and Quad
// Back Face
rl.Normal3f(0.0, 0.0, -1.0) // Normal Pointing Away From Viewer
rl.TexCoord2f(1.0, 0.0)
rl.Vertex3f(x-width/2, y-height/2, z-length/2) // Bottom Right Of The Texture and Quad
rl.TexCoord2f(1.0, 1.0)
rl.Vertex3f(x-width/2, y+height/2, z-length/2) // Top Right Of The Texture and Quad
rl.TexCoord2f(0.0, 1.0)
rl.Vertex3f(x+width/2, y+height/2, z-length/2) // Top Left Of The Texture and Quad
rl.TexCoord2f(0.0, 0.0)
rl.Vertex3f(x+width/2, y-height/2, z-length/2) // Bottom Left Of The Texture and Quad
// Top Face
rl.Normal3f(0.0, 1.0, 0.0) // Normal Pointing Up
rl.TexCoord2f(0.0, 1.0)
rl.Vertex3f(x-width/2, y+height/2, z-length/2) // Top Left Of The Texture and Quad.
rl.TexCoord2f(0.0, 0.0)
rl.Vertex3f(x-width/2, y+height/2, z+length/2) // Bottom Left Of The Texture and Quad
rl.TexCoord2f(1.0, 0.0)
rl.Vertex3f(x+width/2, y+height/2, z+length/2) // Bottom Right Of The Texture and Quad
rl.TexCoord2f(1.0, 1.0)
rl.Vertex3f(x+width/2, y+height/2, z-length/2) // Top Right Of The Texture and Quad Bottom Face
rl.Normal3f(0.0, -1.0, 0.0) // Normal Pointing Down
rl.TexCoord2f(1.0, 1.0)
rl.Vertex3f(x-width/2, y-height/2, z-length/2) // Top Right Of The Texture and Quad
rl.TexCoord2f(0.0, 1.0)
rl.Vertex3f(x+width/2, y-height/2, z-length/2) // Top Left Of The Texture and Quad
rl.TexCoord2f(0.0, 0.0)
rl.Vertex3f(x+width/2, y-height/2, z+length/2) // Bottom Left Of The Texture and Quad
rl.TexCoord2f(1.0, 0.0)
rl.Vertex3f(x-width/2, y-height/2, z+length/2) // Bottom Right Of The Texture and Quad
// Right face
rl.Normal3f(1.0, 0.0, 0.0) // Normal Pointing Right
rl.TexCoord2f(1.0, 0.0)
rl.Vertex3f(x+width/2, y-height/2, z-length/2) // Bottom Right Of The Texture and Quad
rl.TexCoord2f(1.0, 1.0)
rl.Vertex3f(x+width/2, y+height/2, z-length/2) // Top Right Of The Texture and Quad
rl.TexCoord2f(0.0, 1.0)
rl.Vertex3f(x+width/2, y+height/2, z+length/2) // Top Left Of The Texture and Quad
rl.TexCoord2f(0.0, 0.0)
rl.Vertex3f(x+width/2, y-height/2, z+length/2) // Bottom Left Of The Texture and Quad
// Left Face
rl.Normal3f(-1.0, 0.0, 0.0) // Normal Pointing Left
rl.TexCoord2f(0.0, 0.0)
rl.Vertex3f(x-width/2, y-height/2, z-length/2) // Bottom Left Of The Texture and Quad
rl.TexCoord2f(1.0, 0.0)
rl.Vertex3f(x-width/2, y-height/2, z+length/2) // Bottom Right Of The Texture and Quad
rl.TexCoord2f(1.0, 1.0)
rl.Vertex3f(x-width/2, y+height/2, z+length/2) // Top Right Of The Texture and Quad
rl.TexCoord2f(0.0, 1.0)
rl.Vertex3f(x-width/2, y+height/2, z-length/2) // Top Left Of The Texture and Quad
rl.End()
//rl.PopMatrix()
rl.SetTexture(0)
}
// DrawCubeTextureRec draws a cube with texture piece applied to all faces
func DrawCubeTextureRec(texture rl.Texture2D, source rl.Rectangle, position rl.Vector3, width, height,
length float32, color rl.Color) {
x := position.X
y := position.Y
z := position.Z
texWidth := float32(texture.Width)
texHeight := float32(texture.Height)
// Set desired texture to be enabled while drawing following vertex data
rl.SetTexture(texture.ID)
// We calculate the normalized texture coordinates for the desired texture-source-rectangle
// It means converting from (tex.width, tex.height) coordinates to [0.0f, 1.0f] equivalent
rl.Begin(rl.Quads)
rl.Color4ub(color.R, color.G, color.B, color.A)
// Front face
rl.Normal3f(0.0, 0.0, 1.0)
rl.TexCoord2f(source.X/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x-width/2, y-height/2, z+length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x+width/2, y-height/2, z+length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, source.Y/texHeight)
rl.Vertex3f(x+width/2, y+height/2, z+length/2)
rl.TexCoord2f(source.X/texWidth, source.Y/texHeight)
rl.Vertex3f(x-width/2, y+height/2, z+length/2)
// Back face
rl.Normal3f(0.0, 0.0, -1.0)
rl.TexCoord2f((source.X+source.Width)/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x-width/2, y-height/2, z-length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, source.Y/texHeight)
rl.Vertex3f(x-width/2, y+height/2, z-length/2)
rl.TexCoord2f(source.X/texWidth, source.Y/texHeight)
rl.Vertex3f(x+width/2, y+height/2, z-length/2)
rl.TexCoord2f(source.X/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x+width/2, y-height/2, z-length/2)
// Top face
rl.Normal3f(0.0, 1.0, 0.0)
rl.TexCoord2f(source.X/texWidth, source.Y/texHeight)
rl.Vertex3f(x-width/2, y+height/2, z-length/2)
rl.TexCoord2f(source.X/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x-width/2, y+height/2, z+length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x+width/2, y+height/2, z+length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, source.Y/texHeight)
rl.Vertex3f(x+width/2, y+height/2, z-length/2)
// Bottom face
rl.Normal3f(0.0, -1.0, 0.0)
rl.TexCoord2f((source.X+source.Width)/texWidth, source.Y/texHeight)
rl.Vertex3f(x-width/2, y-height/2, z-length/2)
rl.TexCoord2f(source.X/texWidth, source.Y/texHeight)
rl.Vertex3f(x+width/2, y-height/2, z-length/2)
rl.TexCoord2f(source.X/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x+width/2, y-height/2, z+length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x-width/2, y-height/2, z+length/2)
// Right face
rl.Normal3f(1.0, 0.0, 0.0)
rl.TexCoord2f((source.X+source.Width)/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x+width/2, y-height/2, z-length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, source.Y/texHeight)
rl.Vertex3f(x+width/2, y+height/2, z-length/2)
rl.TexCoord2f(source.X/texWidth, source.Y/texHeight)
rl.Vertex3f(x+width/2, y+height/2, z+length/2)
rl.TexCoord2f(source.X/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x+width/2, y-height/2, z+length/2)
// Left face
rl.Normal3f(-1.0, 0.0, 0.0)
rl.TexCoord2f(source.X/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x-width/2, y-height/2, z-length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, (source.Y+source.Height)/texHeight)
rl.Vertex3f(x-width/2, y-height/2, z+length/2)
rl.TexCoord2f((source.X+source.Width)/texWidth, source.Y/texHeight)
rl.Vertex3f(x-width/2, y+height/2, z+length/2)
rl.TexCoord2f(source.X/texWidth, source.Y/texHeight)
rl.Vertex3f(x-width/2, y+height/2, z-length/2)
rl.End()
rl.SetTexture(0)
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -0,0 +1,117 @@
/*******************************************************************************************
*
* raylib [models] example - first person maze
*
* This example has been created using raylib-go v0.0.0-20220104071325-2f072dc2d259 (https://git.terah.dev/UnrealXR/raylib-go)
* raylib-go is licensed under an unmodified zlib/libpng license (https://git.terah.dev/UnrealXR/raylib-go/blob/master/LICENSE)
*
* Original C version for Raylib 2.5 Copyright (c) 2019 Ramon Santamaria (@raysan5)
* Converted to Go by Michael Redman January 4, 2022
*
********************************************************************************************/
package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
// Initialization
//--------------------------------------------------------------------------------------
var screenWidth int32 = 800
var screenHeight int32 = 450
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - first person maze")
// Define the camera to look into our 3d world
camera := rl.Camera{}
camera.Position = rl.NewVector3(0.2, 0.4, 0.2)
camera.Target = rl.NewVector3(0.0, 0.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
imMap := rl.LoadImage("cubicmap.png") // Load cubicmap image (RAM)
cubicmap := rl.LoadTextureFromImage(imMap) // Convert image to texture to display (VRAM)
mesh := rl.GenMeshCubicmap(*imMap, rl.NewVector3(1.0, 1.0, 1.0))
model := rl.LoadModelFromMesh(mesh)
// NOTE: By default each cube is mapped to one part of texture atlas
texture := rl.LoadTexture("cubicmap_atlas.png") // load map texture
model.Materials.GetMap(rl.MapDiffuse).Texture = texture // Set map diffuse texture
// Get map image data to be used for collision detectio
mapPixels := rl.LoadImageColors(imMap)
rl.UnloadImage(imMap) // Unload image from RAM
mapPosition := rl.NewVector3(-16.0, 0.0, -8.0) // Set model position
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
//----------------------------------------------------------------------------------
oldCamPos := camera.Position // Store old camera position
rl.UpdateCamera(&camera, rl.CameraFirstPerson) // Update camera with first person mode
// Check player collision (we simplify to 2D collision detection)
playerPos := rl.NewVector2(camera.Position.X, camera.Position.Z)
playerRadius := 0.1 // Collision radius (player is modelled as a cylinder for collision)
playerCellX := (int)(playerPos.X - mapPosition.X + 0.5)
playerCellY := (int)(playerPos.Y - mapPosition.Z + 0.5)
// Out-of-limits security check
if playerCellX < 0 {
playerCellX = 0
} else if playerCellX >= int(cubicmap.Width) {
playerCellX = int(cubicmap.Width) - 1
}
if playerCellY < 0 {
playerCellY = 0
} else if playerCellY >= int(cubicmap.Height) {
playerCellY = int(cubicmap.Height) - 1
}
// Check map collisions using image data and player position
// TODO: Improvement: Just check player surrounding cells for collision
for y := 0; y < int(cubicmap.Height); y++ {
for x := 0; x < int(cubicmap.Width); x++ {
// Collision: white pixel, only check R channel
if mapPixels[y*int(cubicmap.Width)+x].R == 255 && (rl.CheckCollisionCircleRec(playerPos, float32(playerRadius), rl.NewRectangle(float32(mapPosition.X-0.5+float32(x)), float32(mapPosition.Z-0.5+float32(y)), 1.0, 1.0))) {
// Collision detected, reset camera position
camera.Position = oldCamPos
}
}
}
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
rl.DrawModel(model, mapPosition, 1.0, rl.White) // Draw maze map
rl.EndMode3D()
rl.DrawTextureEx(cubicmap, rl.NewVector2(float32(rl.GetScreenWidth())-float32(cubicmap.Width)*4.0-20, 20.0), 0.0, 4.0, rl.White)
rl.DrawRectangleLines(int32(rl.GetScreenWidth())-cubicmap.Width*4-20, 20, cubicmap.Width*4, cubicmap.Height*4, rl.Green)
// Draw player position radar
rl.DrawRectangle(int32(rl.GetScreenWidth()-int(cubicmap.Width*4)-20+(playerCellX*4)), int32(20+playerCellY*4), 4, 4, rl.Red)
rl.DrawFPS(10, 10)
rl.EndDrawing()
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
rl.UnloadTexture(cubicmap) // Unload cubicmap texture
rl.UnloadTexture(texture) // Unload map texture
rl.UnloadModel(model) // Unload map model
rl.CloseWindow() // Close window and OpenGL context
//--------------------------------------------------------------------------------------
}

View file

@ -1,9 +1,5 @@
package main
import (
"github.com/gen2brain/raylib-go/raylib"
)
func main() {
screenWidth := int32(800)
screenHeight := int32(450)

View file

@ -0,0 +1,74 @@
package main
import (
"fmt"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
screenWidth := int32(1280)
screenHeight := int32(720)
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - gltf loading")
camera := rl.Camera{}
camera.Position = rl.NewVector3(5.0, 5.0, 5.0)
camera.Target = rl.NewVector3(0.0, 2.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
model := rl.LoadModel("robot.glb")
animIndex := 0
animCurrentFrame := 0
modelAnims := rl.LoadModelAnimations("robot.glb")
position := rl.NewVector3(0, 0, 0)
rl.DisableCursor()
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera, rl.CameraOrbital)
if rl.IsKeyPressed(rl.KeyUp) {
animIndex++
if animIndex >= len(modelAnims) {
animIndex = 0
}
}
if rl.IsKeyPressed(rl.KeyDown) {
animIndex--
if animIndex < 0 {
animIndex = len(modelAnims) - 1
}
}
animPlaying := modelAnims[animIndex]
animCurrentFrame = (animCurrentFrame + 1) % int(animPlaying.FrameCount)
rl.UpdateModelAnimation(model, animPlaying, int32(animCurrentFrame))
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
rl.DrawModel(model, position, 0.8, rl.White)
rl.EndMode3D()
rl.DrawText(fmt.Sprintf("current animation: %s [%d]", animPlaying.GetName(), animIndex), 10, 10, 10, rl.Black)
rl.DrawText("UP/DOWN ARROW KEYS CHANGE ANIMATION", 10, 30, 10, rl.Black)
rl.EndDrawing()
}
rl.UnloadModel(model)
rl.CloseWindow()
}

Binary file not shown.

View file

@ -3,7 +3,7 @@ package main
import (
//"fmt"
"github.com/gen2brain/raylib-go/raylib"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
@ -30,14 +30,12 @@ func main() {
rl.UnloadImage(image) // Unload heightmap image from RAM, already uploaded to VRAM
rl.SetCameraMode(camera, rl.CameraOrbital) // Set an orbital camera mode
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
// Update
rl.UpdateCamera(&camera) // Update camera
rl.UpdateCamera(&camera, rl.CameraOrbital) // Update camera with orbital camera mode
// Draw

Binary file not shown.

View file

@ -0,0 +1,155 @@
/*******************************************************************************************
*
* raylib [models] example - Load models M3D
*
* Example originally created with raylib 4.5, last time updated with raylib 4.5
*
* Example contributed by bzt (@bztsrc) and reviewed by Ramon Santamaria (@raysan5)
*
* NOTES:
* - Model3D (M3D) fileformat specs: https://gitlab.com/bztsrc/model3d
* - Bender M3D exported: https://gitlab.com/bztsrc/model3d/-/tree/master/blender
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2022-2024 bzt (@bztsrc)
*
********************************************************************************************/
package main
import (
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
func main() {
// Initialization
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - M3D model loading")
// Define the camera to look into our 3d world
camera := rl.Camera{
Position: rl.NewVector3(1.5, 1.5, 1.5),
Target: rl.NewVector3(0.0, 0.4, 0.0),
Up: rl.NewVector3(0.0, 1.0, 0.0),
Fovy: 45.0,
Projection: rl.CameraPerspective,
}
position := rl.NewVector3(0.0, 0.0, 0.0)
modelFileName := "cesium_man.m3d"
drawMesh := true
drawSkeleton := true
animPlaying := false // Store anim state, what to draw
// Load model
model := rl.LoadModel(modelFileName)
// Load animations
animFrameCounter := 0
animID := 0
anims := rl.LoadModelAnimations(modelFileName)
animsCount := int32(len(anims))
rl.DisableCursor()
rl.SetTargetFPS(60)
// Main game loop
for !rl.WindowShouldClose() {
// Update
rl.UpdateCamera(&camera, rl.CameraFirstPerson)
if animsCount > 0 {
// Play animation when space bar is held down (or step one frame with N)
if rl.IsKeyDown(rl.KeySpace) || rl.IsKeyPressed(rl.KeyN) {
animFrameCounter++
if animFrameCounter >= int(anims[animID].FrameCount) {
animFrameCounter = 0
}
rl.UpdateModelAnimation(model, anims[animID], int32(animFrameCounter))
animPlaying = true
}
// Select animation by pressing C
if rl.IsKeyPressed(rl.KeyC) {
animFrameCounter = 0
animID++
if animID >= int(animsCount) {
animID = 0
}
rl.UpdateModelAnimation(model, anims[animID], 0)
animPlaying = true
}
}
// Toggle skeleton drawing
if rl.IsKeyPressed(rl.KeyB) {
drawSkeleton = !drawSkeleton
}
// Toggle mesh drawing
if rl.IsKeyPressed(rl.KeyM) {
drawMesh = !drawMesh
}
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
// Draw 3d model with texture
if drawMesh {
rl.DrawModel(model, position, 1.0, rl.White)
}
// Draw the animated skeleton
if drawSkeleton {
modelBones := model.GetBones()
modelPoses := model.GetBindPose()
anim := anims[animID]
animBones := anim.GetBones()
for bone := 0; bone < int(model.BoneCount)-1; bone++ {
if !animPlaying || animsCount == 0 {
// Display the bind-pose skeleton
rl.DrawCube(modelPoses[bone].Translation, 0.04, 0.04, 0.04, rl.Red)
if modelBones[bone].Parent >= 0 {
rl.DrawLine3D(modelPoses[bone].Translation, modelPoses[modelBones[bone].Parent].Translation, rl.Red)
}
} else {
// // Display the frame-pose skeleton
pos := anim.GetFramePose(animFrameCounter, bone).Translation
rl.DrawCube(pos, 0.05, 0.05, 0.05, rl.Red)
if animBones[bone].Parent >= 0 {
endPos := anim.GetFramePose(animFrameCounter, int(animBones[bone].Parent)).Translation
rl.DrawLine3D(pos, endPos, rl.Red)
}
}
}
}
rl.DrawGrid(10, 1.0)
rl.EndMode3D()
rl.DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, screenHeight-80, 10, rl.Maroon)
rl.DrawText("PRESS N to STEP ONE ANIMATION FRAME", 10, screenHeight-60, 10, rl.DarkGray)
rl.DrawText("PRESS C to CYCLE THROUGH ANIMATIONS", 10, screenHeight-40, 10, rl.DarkGray)
rl.DrawText("PRESS M to toggle MESH, B to toggle SKELETON DRAWING", 10, screenHeight-20, 10, rl.DarkGray)
rl.DrawText("(c) CesiumMan model by KhronosGroup", screenWidth-210, screenHeight-20, 10, rl.Gray)
rl.EndDrawing()
}
// De-Initialization
rl.UnloadModelAnimations(anims)
rl.UnloadModel(model)
rl.CloseWindow()
}

View file

@ -0,0 +1,167 @@
package main
import (
"unsafe"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
func main() {
screenWidth := int32(1280)
screenHeight := int32(720)
numModels := 9
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh generation")
camera := rl.Camera{}
camera.Position = rl.NewVector3(10.0, 5.0, 10.0)
camera.Target = rl.NewVector3(0.0, 0.0, 0.0)
camera.Up = rl.NewVector3(0.0, 1.0, 0.0)
camera.Fovy = 45.0
camera.Projection = rl.CameraPerspective
checked := rl.GenImageChecked(2, 2, 1, 1, rl.Black, rl.Red)
texture := rl.LoadTextureFromImage(checked)
rl.UnloadImage(checked)
models := make([]rl.Model, numModels)
models[0] = rl.LoadModelFromMesh(rl.GenMeshPlane(2, 2, 4, 3))
models[1] = rl.LoadModelFromMesh(rl.GenMeshCube(2, 1, 2))
models[2] = rl.LoadModelFromMesh(rl.GenMeshSphere(2, 32, 32))
models[3] = rl.LoadModelFromMesh(rl.GenMeshHemiSphere(2, 16, 16))
models[4] = rl.LoadModelFromMesh(rl.GenMeshCylinder(1, 2, 16))
models[5] = rl.LoadModelFromMesh(rl.GenMeshTorus(0.25, 4, 16, 32))
models[6] = rl.LoadModelFromMesh(rl.GenMeshKnot(1, 2, 16, 128))
models[7] = rl.LoadModelFromMesh(rl.GenMeshPoly(5, 2))
models[8] = rl.LoadModelFromMesh(GenMeshCustom())
for i := 0; i < numModels; i++ {
rl.SetMaterialTexture(models[i].Materials, rl.MapDiffuse, texture)
}
position := rl.Vector3Zero()
currentModel := 0
rl.SetTargetFPS(60)
for !rl.WindowShouldClose() {
rl.UpdateCamera(&camera, rl.CameraOrbital)
if rl.IsKeyPressed(rl.KeyUp) {
currentModel = (currentModel + 1) % numModels // Cycle between the textures
}
if rl.IsKeyPressed(rl.KeyDown) {
// Adding numModels here is necessary to avoid a crash
// where the golang % (modulus) operator, doesn't work as
// one might expect for negative numbers.
currentModel = (currentModel + numModels - 1) % numModels // Cycle between the textures
}
if rl.IsMouseButtonPressed(rl.MouseButtonLeft) {
currentModel = (currentModel + 1) % numModels // Cycle between the textures
}
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
rl.DrawModel(models[currentModel], position, 1, rl.White)
rl.DrawGrid(10, 1)
rl.EndMode3D()
rl.DrawRectangle(10, 10, 310, 50, rl.Fade(rl.SkyBlue, 0.5))
rl.DrawRectangleLines(10, 10, 310, 50, rl.Fade(rl.DarkBlue, 0.5))
rl.DrawText("UP/DOWN ARROW KEY OR LEFT MOUSE", 20, 20, 10, rl.Blue)
rl.DrawText("BUTTON TO CHANGE MODELS", 20, 40, 10, rl.Blue)
txt := "PLANE"
switch currentModel {
case 1:
txt = "CUBE"
case 2:
txt = "SPHERE"
case 3:
txt = "HEMISPHERE"
case 4:
txt = "CYLINDER"
case 5:
txt = "TORUS"
case 6:
txt = "KNOT"
case 7:
txt = "POLY"
case 8:
txt = "Custom (triangle)"
}
txtlen := rl.MeasureText(txt, 20)
rl.DrawText(txt, screenWidth/2-txtlen/2, 10, 20, rl.DarkBlue)
rl.EndDrawing()
}
rl.UnloadTexture(texture)
// Custom models meshes needs to be
// cleared manually
clearCustomMesh(models[8])
for i := 0; i < numModels; i++ {
rl.UnloadModel(models[i])
}
rl.CloseWindow()
}
func clearCustomMesh(model rl.Model) {
// Vertices, Normals and Texcoords of your CUSTOM mesh are Go slices.
// UnloadModel calls UnloadMesh for every mesh and UnloadMesh tries
// to free your Go slices. This will panic because it cannot free
// Go slices. Free() is a C function and it expects to free C memory
// and not a Go slice. So clear the slices manually like this.
model.Meshes.Vertices = nil
model.Meshes.Normals = nil
model.Meshes.Texcoords = nil
}
// GenMeshCustom generates a simple triangle mesh from code
func GenMeshCustom() rl.Mesh {
mesh := rl.Mesh{
TriangleCount: 1,
VertexCount: 3,
}
var vertices, normals, texcoords []float32
// 3 vertices
vertices = addCoord(vertices, 0, 0, 0)
vertices = addCoord(vertices, 1, 0, 2)
vertices = addCoord(vertices, 2, 0, 0)
mesh.Vertices = unsafe.SliceData(vertices)
// 3 normals
normals = addCoord(normals, 0, 1, 0)
normals = addCoord(normals, 0, 1, 0)
normals = addCoord(normals, 0, 1, 0)
mesh.Normals = unsafe.SliceData(normals)
// 3 texcoords
texcoords = addCoord(texcoords, 0, 0)
texcoords = addCoord(texcoords, 0.5, 1)
texcoords = addCoord(texcoords, 1, 0)
mesh.Texcoords = unsafe.SliceData(texcoords)
// Upload mesh data from CPU (RAM) to GPU (VRAM) memory
rl.UploadMesh(&mesh, false)
return mesh
}
func addCoord(slice []float32, values ...float32) []float32 {
for _, value := range values {
slice = append(slice, value)
}
return slice
}

View file

@ -0,0 +1,261 @@
/*******************************************************************************************
*
* raylib [models] example - Mesh picking in 3d mode, ground plane, triangle, mesh
*
* Example originally created with raylib 1.7, last time updated with raylib 4.0
*
* Example contributed by Joel Davis (@joeld42) and reviewed by Ramon Santamaria (@raysan5)
*
* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified,
* BSD-like license that allows static linking with closed source software
*
* Copyright (c) 2017-2024 Joel Davis (@joeld42) and Ramon Santamaria (@raysan5)
*
********************************************************************************************/
package main
import (
"fmt"
"math"
"unsafe"
rl "git.terah.dev/UnrealXR/raylib-go/raylib"
)
const (
screenWidth = 800
screenHeight = 450
)
// Program main entry point
func main() {
rl.InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh picking")
// Define the camera to look into our 3d world
camera := rl.Camera{
Position: rl.Vector3{
X: 20.0,
Y: 20.0,
Z: 20.0,
}, // Camera position
Target: rl.Vector3{Y: 8.0}, // Camera looking at point
Up: rl.Vector3{Y: 1.6}, // Camera up vector (rotation towards target)
Fovy: 45.0, // Camera field-of-view Y
Projection: rl.CameraPerspective, // Camera projection type
}
var ray rl.Ray // Picking ray
tower := rl.LoadModel("turret.obj") // Load OBJ model
texture := rl.LoadTexture("turret_diffuse.png") // Load model texture
materials := unsafe.Slice(tower.Materials, tower.MaterialCount)
materials[0].GetMap(rl.MapDiffuse).Texture = texture // Set model diffuse texture
towerPos := rl.Vector3{} // Set model position
meshes := unsafe.Slice(tower.Meshes, tower.MeshCount)
towerBBox := rl.GetMeshBoundingBox(meshes[0]) // Get mesh bounding box
// Ground quad
g0 := rl.Vector3{
X: -50.0,
Z: -50.0,
}
g1 := rl.Vector3{
X: -50.0,
Z: 50.0,
}
g2 := rl.Vector3{
X: 50.0,
Z: 50.0,
}
g3 := rl.Vector3{
X: 50.0,
Z: -50.0,
}
// Test triangle
ta := rl.Vector3{
X: -25.0,
Y: 0.5,
}
tb := rl.Vector3{
X: -4.0,
Y: 2.5,
Z: 1.0,
}
tc := rl.Vector3{
X: -8.0,
Y: 6.5,
}
bary := rl.Vector3{}
// Test sphere
sp := rl.Vector3{
X: -30.0,
Y: 5.0,
Z: 5.0,
}
sr := float32(4.0)
rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second
// Main game loop
for !rl.WindowShouldClose() { // Detect window close button or ESC key
// Update
if rl.IsCursorHidden() {
rl.UpdateCamera(&camera, rl.CameraFirstPerson) // Update camera
}
// Toggle camera controls
if rl.IsMouseButtonPressed(rl.MouseButtonRight) {
if rl.IsCursorHidden() {
rl.EnableCursor()
} else {
rl.DisableCursor()
}
}
// Display information about the closest hit
collision := rl.RayCollision{
Distance: math.MaxFloat32,
Hit: false,
}
hitObjectName := "None"
cursorColor := rl.White
// Get ray and test against objects
// See issue : https://git.terah.dev/UnrealXR/raylib-go/issues/457
//ray = rl.GetScreenToWorldRay(rl.GetMousePosition(), camera)
ray = rl.GetMouseRay(rl.GetMousePosition(), camera)
// Check ray collision against ground quad
groundHitInfo := rl.GetRayCollisionQuad(ray, g0, g1, g2, g3)
if (groundHitInfo.Hit) && (groundHitInfo.Distance < collision.Distance) {
collision = groundHitInfo
cursorColor = rl.Green
hitObjectName = "Ground"
}
// Check ray collision against test triangle
triHitInfo := rl.GetRayCollisionTriangle(ray, ta, tb, tc)
if (triHitInfo.Hit) && (triHitInfo.Distance < collision.Distance) {
collision = triHitInfo
cursorColor = rl.Purple
hitObjectName = "Triangle"
bary = rl.Vector3Barycenter(collision.Point, ta, tb, tc)
}
// Check ray collision against test sphere
sphereHitInfo := rl.GetRayCollisionSphere(ray, sp, sr)
if (sphereHitInfo.Hit) && (sphereHitInfo.Distance < collision.Distance) {
collision = sphereHitInfo
cursorColor = rl.Orange
hitObjectName = "Sphere"
}
// Check ray collision against bounding box first, before trying the full ray-mesh test
boxHitInfo := rl.GetRayCollisionBox(ray, towerBBox)
if (boxHitInfo.Hit) && (boxHitInfo.Distance < collision.Distance) {
collision = boxHitInfo
cursorColor = rl.Orange
hitObjectName = "Box"
// Check ray collision against model meshes
meshHitInfo := rl.RayCollision{}
for m := int32(0); m < tower.MeshCount; m++ {
// NOTE: We consider the model.transform for the collision check, but
// it can be checked against any transform Matrix, used when checking against same
// model drawn multiple times with multiple transforms
meshHitInfo = rl.GetRayCollisionMesh(ray, meshes[m], tower.Transform)
if meshHitInfo.Hit {
// Save the closest hit mesh
if (!collision.Hit) || (collision.Distance > meshHitInfo.Distance) {
collision = meshHitInfo
}
break // Stop once one mesh collision is detected, the colliding mesh is m
}
}
if meshHitInfo.Hit {
collision = meshHitInfo
cursorColor = rl.Orange
hitObjectName = "Mesh"
}
}
// Draw
rl.BeginDrawing()
rl.ClearBackground(rl.RayWhite)
rl.BeginMode3D(camera)
// Draw the tower
// WARNING: If scale is different from 1.0f,
// not considered by GetRayCollisionModel()
rl.DrawModel(tower, towerPos, 1.0, rl.White)
// Draw the test triangle
rl.DrawLine3D(ta, tb, rl.Purple)
rl.DrawLine3D(tb, tc, rl.Purple)
rl.DrawLine3D(tc, ta, rl.Purple)
// Draw the test sphere
rl.DrawSphereWires(sp, sr, 8, 8, rl.Purple)
// Draw the mesh bbox if we hit it
if boxHitInfo.Hit {
rl.DrawBoundingBox(towerBBox, rl.Lime)
}
// If we hit something, draw the cursor at the hit point
if collision.Hit {
rl.DrawCube(collision.Point, 0.3, 0.3, 0.3, cursorColor)
rl.DrawCubeWires(collision.Point, 0.3, 0.3, 0.3, rl.Red)
normalEnd := rl.Vector3{}
normalEnd.X = collision.Point.X + collision.Normal.X
normalEnd.Y = collision.Point.Y + collision.Normal.Y
normalEnd.Z = collision.Point.Z + collision.Normal.Z
rl.DrawLine3D(collision.Point, normalEnd, rl.Red)
}
rl.DrawRay(ray, rl.Maroon)
rl.DrawGrid(10, 10.0)
rl.EndMode3D()
// Draw some debug GUI text
rl.DrawText(fmt.Sprintf("Hit Object: %s", hitObjectName), 10, 50, 10, rl.Black)
if collision.Hit {
ypos := int32(70)
rl.DrawText(fmt.Sprintf("Distance: %3.2f", collision.Distance), 10, ypos, 10, rl.Black)
rl.DrawText(Vec2Str("Hit Pos : %3.2f %3.2f %3.2f", collision.Point), 10, ypos+15, 10, rl.Black)
rl.DrawText(Vec2Str("Hit Norm: %3.2f %3.2f %3.2f", collision.Normal), 10, ypos+30, 10, rl.Black)
if triHitInfo.Hit && hitObjectName == "Triangle" {
rl.DrawText(Vec2Str("Barycenter: %3.2f %3.2f %3.2f", bary), 10, ypos+45, 10, rl.Black)
}
}
rl.DrawText("Right click mouse to toggle camera controls", 10, 430, 10, rl.Gray)
rl.DrawText("(c) Turret 3D model by Alberto Cano", screenWidth-200, screenHeight-20, 10, rl.Gray)
rl.DrawFPS(10, 10)
rl.EndDrawing()
}
// De-Initialization
rl.UnloadModel(tower) // Unload model
rl.UnloadTexture(texture) // Unload texture
rl.CloseWindow() // Close window and OpenGL context
}
func Vec2Str(format string, vec rl.Vector3) string {
return fmt.Sprintf(format, vec.X, vec.Y, vec.Z)
}

Some files were not shown because too many files have changed in this diff Show more