Compare commits
2049 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
cc3b8645df | ||
![]() |
8e44f7b3c7 | ||
![]() |
54e24d905a | ||
![]() |
cd616258c6 | ||
![]() |
9e7dedf5af | ||
![]() |
1dbce35247 | ||
![]() |
1841afad11 | ||
![]() |
d88523f03a | ||
![]() |
3caa044bf2 | ||
![]() |
7bd0f8b28c | ||
![]() |
d2cc5b88df | ||
![]() |
d003c23ecf | ||
![]() |
b8bd1d2ea6 | ||
![]() |
005f2ffb75 | ||
![]() |
931b672c92 | ||
![]() |
6edf15b9f9 | ||
![]() |
322cebcbaf | ||
![]() |
9393d1d76f | ||
![]() |
fe1c04d1b8 | ||
![]() |
533780aadf | ||
![]() |
0c0ff2802e | ||
![]() |
3e0de31424 | ||
![]() |
befd363966 | ||
![]() |
375adf86a6 | ||
![]() |
6985953e3d | ||
![]() |
e18e8c6276 | ||
![]() |
bbdf9f4880 | ||
![]() |
201007e426 | ||
![]() |
db98dba10f | ||
![]() |
03ca9508bf | ||
![]() |
44eedf235d | ||
![]() |
551cf50685 | ||
![]() |
6a3eca3f92 | ||
![]() |
ca9e652f8b | ||
![]() |
28a9a181cb | ||
![]() |
9459186125 | ||
![]() |
df74607479 | ||
![]() |
e659336c11 | ||
![]() |
e72b96ada1 | ||
![]() |
bd2c81d481 | ||
![]() |
564baa22d6 | ||
![]() |
b4e2f5b45c | ||
![]() |
42e64e931b | ||
![]() |
6c049fdd76 | ||
![]() |
e38d28543a | ||
![]() |
d91179f8ab | ||
![]() |
5ecee69088 | ||
![]() |
22c8ea76aa | ||
![]() |
a8e2c7de9c | ||
![]() |
deffad1701 | ||
![]() |
aab6c11ce1 | ||
![]() |
4a69c2d75e | ||
![]() |
2c219fb814 | ||
![]() |
61e0e4b4f3 | ||
![]() |
9318dc98ce | ||
![]() |
487bc613fd | ||
![]() |
9d8f15c19d | ||
![]() |
6c6d6776c0 | ||
![]() |
4cae2b8829 | ||
![]() |
4c0925067a | ||
![]() |
82491fcf6c | ||
![]() |
b9573e583f | ||
![]() |
d6c1159fce | ||
![]() |
8bc2813b0c | ||
![]() |
a0127d8300 | ||
![]() |
fd5e457bb4 | ||
![]() |
5b4197afeb | ||
![]() |
d6fee9da29 | ||
![]() |
3201bad65a | ||
![]() |
8f1d6f3850 | ||
![]() |
df50eada53 | ||
![]() |
276847eca9 | ||
![]() |
8cb324b2da | ||
![]() |
85850a955a | ||
![]() |
3b4a64f2d6 | ||
![]() |
fd2adbe62d | ||
![]() |
a7207dc6d4 | ||
![]() |
3f48ffb1b6 | ||
![]() |
18f61948ce | ||
![]() |
80bf636f81 | ||
![]() |
76aca9b0d1 | ||
![]() |
c5f7863689 | ||
![]() |
1430d01906 | ||
![]() |
6026ed61a5 | ||
![]() |
f52d2de582 | ||
![]() |
ed6962edd3 | ||
![]() |
2b5fc12036 | ||
![]() |
a5881fb9cc | ||
![]() |
c9043b5a87 | ||
![]() |
6ffc8cb799 | ||
![]() |
e4d7bbec1e | ||
![]() |
077bef4286 | ||
![]() |
6d64327a87 | ||
![]() |
cd5e2e0f17 | ||
![]() |
326fe09777 | ||
![]() |
97bf2706c4 | ||
![]() |
788049df09 | ||
![]() |
81546308cd | ||
![]() |
11612fce27 | ||
![]() |
1652943f98 | ||
![]() |
d892243d18 | ||
![]() |
f6231aa8b6 | ||
![]() |
7e32a627e8 | ||
![]() |
0958904eac | ||
![]() |
4492a70a4b | ||
![]() |
50fc4f7164 | ||
![]() |
769cf23e53 | ||
![]() |
883ed20e7c | ||
![]() |
e0a3a51b75 | ||
![]() |
6ebc3fd29a | ||
![]() |
988f5b7832 | ||
![]() |
051040af2d | ||
![]() |
ffde83d85f | ||
![]() |
36750ffb9a | ||
![]() |
7530a60abc | ||
![]() |
dd8f0765b8 | ||
![]() |
8af5f9dfe0 | ||
![]() |
51124bfb74 | ||
![]() |
97f8b85429 | ||
![]() |
f742f1289d | ||
![]() |
0be4d802ee | ||
![]() |
5616314069 | ||
![]() |
4c4b564392 | ||
![]() |
e86b4d4e03 | ||
![]() |
1be72a2e72 | ||
![]() |
09b022305f | ||
![]() |
d90a33b850 | ||
![]() |
231a69417a | ||
![]() |
7bf6becc94 | ||
![]() |
6d922b3e1f | ||
![]() |
468309d06c | ||
![]() |
f72b315cb6 | ||
![]() |
2ace360230 | ||
![]() |
a976e76ae6 | ||
![]() |
4d5d1e0434 | ||
![]() |
b908a4078a | ||
![]() |
5437458469 | ||
![]() |
3a11cc5e31 | ||
![]() |
327aec9da4 | ||
![]() |
19f280f4b7 | ||
![]() |
184df917be | ||
![]() |
d50e291e86 | ||
![]() |
6dc2f979cc | ||
![]() |
c32ed921a2 | ||
![]() |
8f287e72d2 | ||
![]() |
70e0070a85 | ||
![]() |
cb66c89dfa | ||
![]() |
e2861fa71f | ||
![]() |
26c9176a14 | ||
![]() |
44cd4faf83 | ||
![]() |
2b2b1f91ee | ||
![]() |
5bb23c6c06 | ||
![]() |
7918c0bf71 | ||
![]() |
7f5fa4d49c | ||
![]() |
007ae1b7b3 | ||
![]() |
d1ef6869a9 | ||
![]() |
58346414f7 | ||
![]() |
44c95af463 | ||
![]() |
227880977e | ||
![]() |
eb508bf75f | ||
![]() |
1ce8c80de9 | ||
![]() |
f955b2255d | ||
![]() |
2090ad8119 | ||
![]() |
7f7aac643a | ||
![]() |
1093766669 | ||
![]() |
d5bbcbc15f | ||
![]() |
1ab3c058f5 | ||
![]() |
1d5fbef93d | ||
![]() |
779719f5dc | ||
![]() |
520f317a75 | ||
![]() |
03ee03e2a6 | ||
![]() |
8be93762d9 | ||
![]() |
c2ec88f930 | ||
![]() |
2dcaddc81c | ||
![]() |
04af83ff99 | ||
![]() |
cbef78ea18 | ||
![]() |
e604fe1ace | ||
![]() |
8e0a277f7c | ||
![]() |
6f73008007 | ||
![]() |
750323da53 | ||
![]() |
5931bd501c | ||
![]() |
30ef3f3122 | ||
![]() |
a2edc9d641 | ||
![]() |
ce9f191f1b | ||
![]() |
bdb61306ac | ||
![]() |
727cb1819b | ||
![]() |
c8e97df233 | ||
![]() |
dd3b3dbadb | ||
![]() |
61679a4bbc | ||
![]() |
230e78a23e | ||
![]() |
f2a675ae53 | ||
![]() |
493a67e6d5 | ||
![]() |
ddf6c65d00 | ||
![]() |
f818ec0e05 | ||
![]() |
1f70a8984a | ||
![]() |
278d8575bd | ||
![]() |
c37d2d448d | ||
![]() |
fcb0cae605 | ||
![]() |
4dcc02ff1e | ||
![]() |
e4be917d1b | ||
![]() |
b97134c3e1 | ||
![]() |
7caa3201d5 | ||
![]() |
1f0f8c33fa | ||
![]() |
7fa2861160 | ||
![]() |
0e48396369 | ||
![]() |
b760f16f9b | ||
![]() |
1a82e1ab26 | ||
![]() |
e1baae0249 | ||
![]() |
e69424c86f | ||
![]() |
f51dcd8bfa | ||
![]() |
ff984d13db | ||
![]() |
9941a6f4aa | ||
![]() |
c801830bcc | ||
![]() |
e7cf03b1e4 | ||
![]() |
7965f983ba | ||
![]() |
b19e155b34 | ||
![]() |
c93bca8c27 | ||
![]() |
0bd06eec51 | ||
![]() |
e517d8fd16 | ||
![]() |
e574428343 | ||
![]() |
f44dbf21cf | ||
![]() |
0bb90d21c6 | ||
![]() |
b5a1282c6b | ||
![]() |
dae426d9c6 | ||
![]() |
9b7a24331d | ||
![]() |
00c34a035c | ||
![]() |
27c274bc3c | ||
![]() |
e8bb53ed35 | ||
![]() |
61afd07bd7 | ||
![]() |
1320044e94 | ||
![]() |
b63ffcfa0f | ||
![]() |
5290390494 | ||
![]() |
a7de5bf6d9 | ||
![]() |
22e72cb0a1 | ||
![]() |
8d5484bbe0 | ||
![]() |
647d8b2d53 | ||
![]() |
f3f3e7cf6d | ||
![]() |
bd4aa2459f | ||
![]() |
bc6ae93a48 | ||
![]() |
b155333178 | ||
![]() |
e17a9a8216 | ||
![]() |
53ad53d051 | ||
![]() |
bcdde6c65a | ||
![]() |
35d54dd7e4 | ||
![]() |
263e81b5c9 | ||
![]() |
2affac820e | ||
![]() |
217917530b | ||
![]() |
48d0c93ace | ||
![]() |
b872de951b | ||
![]() |
d51f382ef8 | ||
![]() |
b5395b22cc | ||
![]() |
07b522c113 | ||
![]() |
a7f2fedbfb | ||
![]() |
0e18b14605 | ||
![]() |
963551ee6e | ||
![]() |
69c8fa409a | ||
![]() |
54587d7fdb | ||
![]() |
08fc886afd | ||
![]() |
2388cbc3cd | ||
![]() |
a6f9cc5629 | ||
![]() |
3e1d6859db | ||
![]() |
4a7840b752 | ||
![]() |
d24b89bb0e | ||
![]() |
de78fa69bc | ||
![]() |
203b2f65d1 | ||
![]() |
5ae2c0d15b | ||
![]() |
3b5a26099e | ||
![]() |
33eec31575 | ||
![]() |
acbfba9250 | ||
![]() |
9d0ee6c2f6 | ||
![]() |
104391f82b | ||
![]() |
54d0acc3b6 | ||
![]() |
0cd327ccb2 | ||
![]() |
82f88e5df9 | ||
![]() |
25a232a6f3 | ||
![]() |
9a7524661f | ||
![]() |
14b81c20c1 | ||
![]() |
9dbd30c44b | ||
![]() |
825d15b069 | ||
![]() |
55396ae2b8 | ||
![]() |
69a1c19735 | ||
![]() |
2f471414c2 | ||
![]() |
2cf37708c0 | ||
![]() |
c9722161d1 | ||
![]() |
ca921e5a53 | ||
![]() |
7099e4ea4d | ||
![]() |
a78a1504a8 | ||
![]() |
f991a075e1 | ||
![]() |
853cc6f4c9 | ||
![]() |
d54ea107f7 | ||
![]() |
13fa61f7d9 | ||
![]() |
8337787ced | ||
![]() |
49c5a433df | ||
![]() |
10dc276423 | ||
![]() |
44376c04fa | ||
![]() |
a0d9913c7c | ||
![]() |
5463e14886 | ||
![]() |
589cec0dd5 | ||
![]() |
f9d9ff7e48 | ||
![]() |
83029225d6 | ||
![]() |
08200f8f40 | ||
![]() |
17c91bad6f | ||
![]() |
1e1b20c889 | ||
![]() |
96e0f0e35e | ||
![]() |
b2acff66de | ||
![]() |
899e1fbd94 | ||
![]() |
f70a0a996c | ||
![]() |
9ec8c0f1d6 | ||
![]() |
1be826fb16 | ||
![]() |
25ceec9b8f | ||
![]() |
8b3694a34d | ||
![]() |
6624672bfa | ||
![]() |
398d793dbb | ||
![]() |
c71b01c8ac | ||
![]() |
14b889be41 | ||
![]() |
3238cba47c | ||
![]() |
49e945f958 | ||
![]() |
84ef860443 | ||
![]() |
f9144ac5b0 | ||
![]() |
3be83dac7e | ||
![]() |
b9bb80d004 | ||
![]() |
60d7215b2a | ||
![]() |
6d317c7afe | ||
![]() |
e2e4b8df28 | ||
![]() |
a6877c82c6 | ||
![]() |
261b00e9e8 | ||
![]() |
a6416f82a7 | ||
![]() |
96be62e88b | ||
![]() |
e03afbf2fa | ||
![]() |
322d868841 | ||
![]() |
88d2810fa3 | ||
![]() |
68024f1b0b | ||
![]() |
3a96a66fdf | ||
![]() |
9c65caea8c | ||
![]() |
6105ff9959 | ||
![]() |
e52f4282d6 | ||
![]() |
ac4c911ad7 | ||
![]() |
68bf6c9701 | ||
![]() |
24b12e5e23 | ||
![]() |
02dd4d32b5 | ||
![]() |
09228752ce | ||
![]() |
b0852002b8 | ||
![]() |
75433a670e | ||
![]() |
b6b58991e6 | ||
![]() |
e12182f59b | ||
![]() |
7ef604fbf5 | ||
![]() |
0eb222bda1 | ||
![]() |
99d3803d16 | ||
![]() |
37986b26cb | ||
![]() |
2f024dbfef | ||
![]() |
4fe8e05a7f | ||
![]() |
81518ccd13 | ||
![]() |
2eceecb7b7 | ||
![]() |
879c2f484b | ||
![]() |
085779707f | ||
![]() |
24657ca789 | ||
![]() |
5f65380732 | ||
![]() |
aa6a1b4283 | ||
![]() |
36ae9c8c3a | ||
![]() |
d43af4918b | ||
![]() |
9e0105a1a3 | ||
![]() |
c570f7ca63 | ||
![]() |
244007a99b | ||
![]() |
3c3d56bb4a | ||
![]() |
3d755d617a | ||
![]() |
415e7e972c | ||
![]() |
f460b3842e | ||
![]() |
743cc6add6 | ||
![]() |
ecf797cc7d | ||
![]() |
52cd0395b4 | ||
![]() |
f897169160 | ||
![]() |
47c7f3624f | ||
![]() |
b3110c14fe | ||
![]() |
ab01cd45bc | ||
![]() |
31c8c86d8e | ||
![]() |
9b24554698 | ||
![]() |
539a9ca50e | ||
![]() |
cbe0dcedfe | ||
![]() |
61b0ab5332 | ||
![]() |
9668f546d3 | ||
![]() |
bd2e3b2a90 | ||
![]() |
8380c488be | ||
![]() |
2ba43b595e | ||
![]() |
ad31730b6a | ||
![]() |
6cec382f65 | ||
![]() |
b6c9b54316 | ||
![]() |
551de156bb | ||
![]() |
a483e17f50 | ||
![]() |
3f9d76f227 | ||
![]() |
33da9bc8f6 | ||
![]() |
368b0320c6 | ||
![]() |
df67e799dd | ||
![]() |
18601f7619 | ||
![]() |
1ef818b032 | ||
![]() |
d9d9546ee5 | ||
![]() |
1375a616b2 | ||
![]() |
037fbc571a | ||
![]() |
e3dcccb936 | ||
![]() |
86df9168e7 | ||
![]() |
1474172b4a | ||
![]() |
53280a56e3 | ||
![]() |
5b71e5b3d1 | ||
![]() |
7057d08369 | ||
![]() |
8ace02c2ff | ||
![]() |
76c821a68d | ||
![]() |
5dc216f419 | ||
![]() |
b065edc878 | ||
![]() |
7f602c9e1e | ||
![]() |
a6ccc14d39 | ||
![]() |
63507d5f81 | ||
![]() |
0a3473a2a9 | ||
![]() |
afea7e2aff | ||
![]() |
4909f9711c | ||
![]() |
0d8a994d95 | ||
![]() |
d012316b87 | ||
![]() |
ba4b39a025 | ||
![]() |
5430d5d52e | ||
![]() |
975e611bb8 | ||
![]() |
9446746001 | ||
![]() |
ea5f4eabf8 | ||
![]() |
dffe635fd3 | ||
![]() |
c043226b56 | ||
![]() |
107294f3e6 | ||
![]() |
cd6d752217 | ||
![]() |
8928248c71 | ||
![]() |
c63051bd9e | ||
![]() |
d649ff0823 | ||
![]() |
dc6e559bf6 | ||
![]() |
f4a2d1ef29 | ||
![]() |
e129d52897 | ||
![]() |
399d4b5f46 | ||
![]() |
7114c1b1f3 | ||
![]() |
32d855470d | ||
![]() |
1bab8f05cc | ||
![]() |
d302316e51 | ||
![]() |
ef6674a99d | ||
![]() |
2051be3825 | ||
![]() |
7b63b0b132 | ||
![]() |
9640a7d7df | ||
![]() |
9000fc28a3 | ||
![]() |
412c52499a | ||
![]() |
ddea9d68bf | ||
![]() |
ca0ff82046 | ||
![]() |
c273fe9756 | ||
![]() |
6dd97409d6 | ||
![]() |
b2789949ee | ||
![]() |
1288d6a5df | ||
![]() |
ea0decece8 | ||
![]() |
144b0ed695 | ||
![]() |
515a7c3526 | ||
![]() |
b043c5e277 | ||
![]() |
52f7ee6b5f | ||
![]() |
87920111aa | ||
![]() |
4f9de9527f | ||
![]() |
639f41cf54 | ||
![]() |
541dceb87b | ||
![]() |
1c7416910e | ||
![]() |
2fbc2eede6 | ||
![]() |
c418aa2fb0 | ||
![]() |
ccd6271a7f | ||
![]() |
c45eeb8024 | ||
![]() |
becddd7725 | ||
![]() |
dc4dba4857 | ||
![]() |
f5dcb51efe | ||
![]() |
e284adcfc1 | ||
![]() |
96b8c9dd5a | ||
![]() |
42db9584de | ||
![]() |
8068b86742 | ||
![]() |
4a63e5dfb3 | ||
![]() |
5ace947a80 | ||
![]() |
7ca90d87f9 | ||
![]() |
2068037417 | ||
![]() |
ed9744756e | ||
![]() |
934e6c01ab | ||
![]() |
4a406fa94b | ||
![]() |
8462ed73fe | ||
![]() |
b0f033b43a | ||
![]() |
4a8644e999 | ||
![]() |
c317ffeca6 | ||
![]() |
86ebb877fe | ||
![]() |
00274f070f | ||
![]() |
ff9b486ebe | ||
![]() |
b9250cc47b | ||
![]() |
42505f0d0a | ||
![]() |
20968830c0 | ||
![]() |
1d91a46008 | ||
![]() |
f3f6d3fd8e | ||
![]() |
fb334e2fd1 | ||
![]() |
dd50348b4d | ||
![]() |
12cb3afd9e | ||
![]() |
b951f8700e | ||
![]() |
958fed26c9 | ||
![]() |
e173db19f7 | ||
![]() |
353912b215 | ||
![]() |
c074783861 | ||
![]() |
0fc1323c80 | ||
![]() |
74fd671763 | ||
![]() |
b0adac96b7 | ||
![]() |
93a4b5e851 | ||
![]() |
f78747130c | ||
![]() |
18bf0ac044 | ||
![]() |
88839b093c | ||
![]() |
0169b72bdc | ||
![]() |
6369b47f11 | ||
![]() |
ae35c37c8a | ||
![]() |
eeca607506 | ||
![]() |
1f310f7d4b | ||
![]() |
2ec8880197 | ||
![]() |
fba117e3cd | ||
![]() |
7045ceaaed | ||
![]() |
71d9426565 | ||
![]() |
d071418cba | ||
![]() |
2a263f7b5f | ||
![]() |
17d40b2f37 | ||
![]() |
c59651bff0 | ||
![]() |
c764b3d03e | ||
![]() |
1fcca40db5 | ||
![]() |
98f447f714 | ||
![]() |
072684d276 | ||
![]() |
b2712b6db7 | ||
![]() |
f57367e786 | ||
![]() |
a766e2c480 | ||
![]() |
3655c6e466 | ||
![]() |
2227742e96 | ||
![]() |
814f665bc1 | ||
![]() |
2fc7bc9504 | ||
![]() |
cbb134946c | ||
![]() |
c756227e11 | ||
![]() |
00d2768bc9 | ||
![]() |
bee980e90f | ||
![]() |
c43caeccb6 | ||
![]() |
c6cd07c373 | ||
![]() |
e52032f646 | ||
![]() |
9040526f17 | ||
![]() |
38d9fcb08e | ||
![]() |
980d9d4cd4 | ||
![]() |
84aff31973 | ||
![]() |
163339991c | ||
![]() |
92729662f4 | ||
![]() |
2679c4ae9b | ||
![]() |
63fd96354e | ||
![]() |
4c06725461 | ||
![]() |
52cd5c6324 | ||
![]() |
0dabb2708b | ||
![]() |
76c6f0b1e6 | ||
![]() |
e8b65422c4 | ||
![]() |
d368403a13 | ||
![]() |
ba32d6a753 | ||
![]() |
8f569e59b1 | ||
![]() |
bf169f7f42 | ||
![]() |
e893f3629e | ||
![]() |
6546474fa4 | ||
![]() |
025dab9907 | ||
![]() |
eb7b5e59bb | ||
![]() |
8ca8550739 | ||
![]() |
013f80f3a3 | ||
![]() |
53fbeeea71 | ||
![]() |
36fcffeaae | ||
![]() |
6589c808b5 | ||
![]() |
5f0f87ecce | ||
![]() |
65cf3080a5 | ||
![]() |
c04cb0a65e | ||
![]() |
9f09f6f550 | ||
![]() |
bfa66f446a | ||
![]() |
c949b74114 | ||
![]() |
e0c95ede50 | ||
![]() |
83b4b13a2c | ||
![]() |
056a494baf | ||
![]() |
aba3739c13 | ||
![]() |
495b6d8883 | ||
![]() |
3c9aa780f9 | ||
![]() |
5f5bd20f07 | ||
![]() |
786cd63057 | ||
![]() |
c3049a9b06 | ||
![]() |
c51f63f661 | ||
![]() |
3fe268d004 | ||
![]() |
a0ac8ee2c4 | ||
![]() |
954757532a | ||
![]() |
92ca68aac8 | ||
![]() |
fcd13fd5d2 | ||
![]() |
c46abd34d4 | ||
![]() |
03c4ed6b3f | ||
![]() |
8c1f32f2fe | ||
![]() |
eee8393eb0 | ||
![]() |
5370fe18e0 | ||
![]() |
4fad1607ed | ||
![]() |
4b1bc7f65e | ||
![]() |
272073785f | ||
![]() |
b6d7fa9bb0 | ||
![]() |
1a61dc2c77 | ||
![]() |
9dd3c03153 | ||
![]() |
402a8bfd68 | ||
![]() |
43cb6414f6 | ||
![]() |
567831a693 | ||
![]() |
9c524ee3a6 | ||
![]() |
1adc031301 | ||
![]() |
99c7ca4f4a | ||
![]() |
60f0d78170 | ||
![]() |
a08cf1ce63 | ||
![]() |
6809380d3d | ||
![]() |
d5c43099cd | ||
![]() |
f54501a355 | ||
![]() |
90f3f870c2 | ||
![]() |
d0190af69f | ||
![]() |
07534497e6 | ||
![]() |
910b4b5d53 | ||
![]() |
95b39e5345 | ||
![]() |
9f8a2e4612 | ||
![]() |
413d059fd8 | ||
![]() |
afb841b7dd | ||
![]() |
c068de183b | ||
![]() |
949ed3f9f8 | ||
![]() |
9b24120cd9 | ||
![]() |
d033c87d27 | ||
![]() |
f1acd4a065 | ||
![]() |
e01a1ba10c | ||
![]() |
1a37f09b02 | ||
![]() |
4a4fffe439 | ||
![]() |
a083d4726f | ||
![]() |
aec6c0350a | ||
![]() |
9f50c6e611 | ||
![]() |
b4a68d2c87 | ||
![]() |
636a2acc95 | ||
![]() |
ad174def77 | ||
![]() |
2800b2a19a | ||
![]() |
b6b01f5420 | ||
![]() |
1e2d3d93fe | ||
![]() |
bc981a0628 | ||
![]() |
34ce1048d0 | ||
![]() |
33aef15555 | ||
![]() |
9819614276 | ||
![]() |
0780cd4e6a | ||
![]() |
a5bfd7db22 | ||
![]() |
e563ebe240 | ||
![]() |
f8a4498a24 | ||
![]() |
65e6a6db53 | ||
![]() |
c9d6b7e356 | ||
![]() |
aba25e9ba3 | ||
![]() |
b3b828c8bb | ||
![]() |
dd7b64a536 | ||
![]() |
4ca229ed7f | ||
![]() |
a8f142e736 | ||
![]() |
6a48e7376b | ||
![]() |
4a31ce4bd2 | ||
![]() |
87a3970222 | ||
![]() |
5f09c71f98 | ||
![]() |
2a2bee8964 | ||
![]() |
31b598cbc6 | ||
![]() |
fb0f2fd181 | ||
![]() |
01e65664dd | ||
![]() |
32e5e20734 | ||
![]() |
026f9829e5 | ||
![]() |
a63ad0fec4 | ||
![]() |
edb9e4159d | ||
![]() |
1ed3d3285f | ||
![]() |
42ad00b7c2 | ||
![]() |
fd5c36fc32 | ||
![]() |
3d6c1f3f4f | ||
![]() |
518bdfc134 | ||
![]() |
35fe34ba0f | ||
![]() |
27bccdbd50 | ||
![]() |
3ec2365103 | ||
![]() |
76062247f8 | ||
![]() |
93e2fd8ea1 | ||
![]() |
16842233c9 | ||
![]() |
0880be638e | ||
![]() |
7f6b16add4 | ||
![]() |
bac50fbba5 | ||
![]() |
321027a242 | ||
![]() |
0ca874c710 | ||
![]() |
4c27412eff | ||
![]() |
f05d6dfc3c | ||
![]() |
8ccb558996 | ||
![]() |
fd1fe3ac14 | ||
![]() |
35c6aff21f | ||
![]() |
50c887cb0a | ||
![]() |
822c2ddad5 | ||
![]() |
83aba22e49 | ||
![]() |
a522914183 | ||
![]() |
3861bc80f2 | ||
![]() |
39732d04ec | ||
![]() |
0ebd8b0f6e | ||
![]() |
3bdf367711 | ||
![]() |
70a7c65668 | ||
![]() |
18b31f6792 | ||
![]() |
9c66d961d0 | ||
![]() |
2d5c8e61b1 | ||
![]() |
73774aadd6 | ||
![]() |
a64e909e55 | ||
![]() |
c4500901eb | ||
![]() |
33069cddc5 | ||
![]() |
e197665e1d | ||
![]() |
db0cfa935f | ||
![]() |
d593bd0081 | ||
![]() |
2d6213af60 | ||
![]() |
86f2d4b9f9 | ||
![]() |
66320582a3 | ||
![]() |
c785d84d30 | ||
![]() |
be40d97954 | ||
![]() |
71fe3c0b08 | ||
![]() |
9a515ae9db | ||
![]() |
b4f4b179c2 | ||
![]() |
0b869948c6 | ||
![]() |
332f3b4f9d | ||
![]() |
3c99093aed | ||
![]() |
f2656871e9 | ||
![]() |
7bcae59477 | ||
![]() |
3a1e6ab0b6 | ||
![]() |
9b072dc346 | ||
![]() |
cfec2b40a4 | ||
![]() |
247da006ae | ||
![]() |
b0f8ea27e3 | ||
![]() |
5620e73914 | ||
![]() |
ec22577e5a | ||
![]() |
e38a7fcede | ||
![]() |
e7f0d0eef1 | ||
![]() |
ecfe31bf1d | ||
![]() |
8d3750e36d | ||
![]() |
1df7a8b4a6 | ||
![]() |
517a7e3466 | ||
![]() |
0ed82150f0 | ||
![]() |
61ce160023 | ||
![]() |
bc1bfe54d6 | ||
![]() |
35172430c6 | ||
![]() |
a5c8ce2a34 | ||
![]() |
99c226b344 | ||
![]() |
be4d530ebe | ||
![]() |
4b8a0268ed | ||
![]() |
881f134f4d | ||
![]() |
3e082f1d62 | ||
![]() |
b4d28cc7a1 | ||
![]() |
c67cffea38 | ||
![]() |
8849a4c752 | ||
![]() |
f5894278b7 | ||
![]() |
7e65c300b6 | ||
![]() |
9956344215 | ||
![]() |
843731e048 | ||
![]() |
4315b82ea7 | ||
![]() |
82c54449bf | ||
![]() |
774b120335 | ||
![]() |
1bba1242f4 | ||
![]() |
677c5cc9a8 | ||
![]() |
f7bebf9861 | ||
![]() |
8374460c39 | ||
![]() |
20d205cae5 | ||
![]() |
5fd83708cf | ||
![]() |
17b3f5e02e | ||
![]() |
d2d4b17633 | ||
![]() |
ca338b3318 | ||
![]() |
29067e19d9 | ||
![]() |
74255b6eb2 | ||
![]() |
795c6b465c | ||
![]() |
eb7212fe42 | ||
![]() |
82577ededc | ||
![]() |
4b7ea25603 | ||
![]() |
0c2a58cf96 | ||
![]() |
54f070a0f4 | ||
![]() |
c47b04a2c6 | ||
![]() |
fdf8501e81 | ||
![]() |
99affa0caf | ||
![]() |
407746193d | ||
![]() |
1f56e8e5d0 | ||
![]() |
dd4dd0e87d | ||
![]() |
5a230659ef | ||
![]() |
c3b8a41f95 | ||
![]() |
50bc77ed96 | ||
![]() |
256bc6e1dc | ||
![]() |
e6ed85e993 | ||
![]() |
0a33fbf8bb | ||
![]() |
9724443c5b | ||
![]() |
0d06c946f2 | ||
![]() |
954a24545f | ||
![]() |
44de97ea16 | ||
![]() |
f65bd8e4a0 | ||
![]() |
4889f240fe | ||
![]() |
080a79f0b0 | ||
![]() |
2f65975c5e | ||
![]() |
b5dd18a70c | ||
![]() |
5338bbf70d | ||
![]() |
90b36bd274 | ||
![]() |
b7a8a40e71 | ||
![]() |
160408f269 | ||
![]() |
72b90bff0f | ||
![]() |
efc4b2941b | ||
![]() |
0c16af01e5 | ||
![]() |
5387b45431 | ||
![]() |
b2f0c7ca8b | ||
![]() |
3f0c296422 | ||
![]() |
ff44cb02e7 | ||
![]() |
9eaff6902f | ||
![]() |
f1bb245999 | ||
![]() |
e23c120c8b | ||
![]() |
9875198a56 | ||
![]() |
6ba5217c28 | ||
![]() |
314e1e0fd5 | ||
![]() |
c87006f85a | ||
![]() |
004117a05c | ||
![]() |
2ac7b684b5 | ||
![]() |
974a6d4031 | ||
![]() |
ae0b776eaf | ||
![]() |
59652c75b4 | ||
![]() |
7b42492941 | ||
![]() |
8278eebfac | ||
![]() |
3f3ee5e37f | ||
![]() |
fee5e8cfac | ||
![]() |
46c2f2058f | ||
![]() |
8f5ff64420 | ||
![]() |
ca8c565617 | ||
![]() |
5d1f661661 | ||
![]() |
3813722f17 | ||
![]() |
63c65f8cc5 | ||
![]() |
2c0604aa29 | ||
![]() |
023a08aeb9 | ||
![]() |
7154b42f48 | ||
![]() |
7c888edba1 | ||
![]() |
4ec65c0d25 | ||
![]() |
81897e7771 | ||
![]() |
b898a161f7 | ||
![]() |
6d1519c132 | ||
![]() |
cb29b1d2ac | ||
![]() |
6e683d57e8 | ||
![]() |
c964559bc9 | ||
![]() |
cb463a37ef | ||
![]() |
f88a943418 | ||
![]() |
f9277f2163 | ||
![]() |
9261c3b8dc | ||
![]() |
b734802743 | ||
![]() |
59038bae96 | ||
![]() |
c05701253e | ||
![]() |
aaf9c648d3 | ||
![]() |
d1c9afd1d8 | ||
![]() |
47e3fbfc12 | ||
![]() |
b347c35ef4 | ||
![]() |
bb7b9adb37 | ||
![]() |
b16f118452 | ||
![]() |
203d1a154e | ||
![]() |
9cfaa81a7e | ||
![]() |
9cda98b4e9 | ||
![]() |
de103ecc5e | ||
![]() |
2ac956208d | ||
![]() |
c46989a1d9 | ||
![]() |
bbdbc098dc | ||
![]() |
d8c19be047 | ||
![]() |
e54c8ecdf8 | ||
![]() |
34e791376d | ||
![]() |
05cff44d0a | ||
![]() |
1c364cc507 | ||
![]() |
177af272f0 | ||
![]() |
4cb3e4a240 | ||
![]() |
05f039f85f | ||
![]() |
afcd748fdf | ||
![]() |
b4988777ef | ||
![]() |
f8d94aeba5 | ||
![]() |
42d5e3bd24 | ||
![]() |
836c1636a2 | ||
![]() |
9492901133 | ||
![]() |
1f6eb1fc61 | ||
![]() |
f2f05a734d | ||
![]() |
ac6b4d3830 | ||
![]() |
734776b923 | ||
![]() |
7bf6a712cc | ||
![]() |
c4bd214cf0 | ||
![]() |
1a879ba08e | ||
![]() |
a08117155d | ||
![]() |
495108a2e9 | ||
![]() |
30bb24aa6e | ||
![]() |
c85dfd4bc6 | ||
![]() |
b681e8c277 | ||
![]() |
37a64df7b9 | ||
![]() |
7b5f61ddf7 | ||
![]() |
a1527f5620 | ||
![]() |
3c3a9318ff | ||
![]() |
d8edcafe5a | ||
![]() |
ff7108389b | ||
![]() |
8a549c3fbe | ||
![]() |
825eab37e2 | ||
![]() |
762d2580cd | ||
![]() |
f164ec80d6 | ||
![]() |
7586031410 | ||
![]() |
7cd24d2706 | ||
![]() |
3b120bd7d9 | ||
![]() |
fc7d4cef18 | ||
![]() |
46f95a730a | ||
![]() |
6d6659205c | ||
![]() |
53457e4664 | ||
![]() |
e5a2def57f | ||
![]() |
61f6b0f707 | ||
![]() |
4a158d972d | ||
![]() |
4ea8494f3e | ||
![]() |
07a2c00e84 | ||
![]() |
1ca445a9b9 | ||
![]() |
fbda9c4180 | ||
![]() |
9b334dcd25 | ||
![]() |
21181f8167 | ||
![]() |
d4f5c4e133 | ||
![]() |
658c280669 | ||
![]() |
0369bb4c8c | ||
![]() |
d5d391faaf | ||
![]() |
81388363fa | ||
![]() |
037da8879a | ||
![]() |
674ee2cf75 | ||
![]() |
202f45415c | ||
![]() |
bf3a213e44 | ||
![]() |
e7464d5fc3 | ||
![]() |
3c91dc099d | ||
![]() |
5da815234c | ||
![]() |
a27be5f2a9 | ||
![]() |
14cdd7fbff | ||
![]() |
852f3d4fd0 | ||
![]() |
6d6c542a1d | ||
![]() |
d8bf84f118 | ||
![]() |
5de597579f | ||
![]() |
4419ee9802 | ||
![]() |
aaea2eb9a6 | ||
![]() |
1aa775eca8 | ||
![]() |
b2d4cd66a7 | ||
![]() |
c394708c43 | ||
![]() |
5df10d824c | ||
![]() |
060d501cd1 | ||
![]() |
4a9b77dd70 | ||
![]() |
814507906f | ||
![]() |
673ea62b27 | ||
![]() |
06b8727d70 | ||
![]() |
d5c0f9d386 | ||
![]() |
377dcb025f | ||
![]() |
ab9f5d5780 | ||
![]() |
f5d792e551 | ||
![]() |
d91ad4e2aa | ||
![]() |
177c58d23a | ||
![]() |
b9310f7d3a | ||
![]() |
46ce30a2eb | ||
![]() |
44e21d84cd | ||
![]() |
17f09cb034 | ||
![]() |
a81dfabf86 | ||
![]() |
784aa1b6b5 | ||
![]() |
fda91436b5 | ||
![]() |
05f68c22d5 | ||
![]() |
0925f4ec4d | ||
![]() |
b8481369f7 | ||
![]() |
f1bcfc1352 | ||
![]() |
d1c9c34b2f | ||
![]() |
e8630c78d0 | ||
![]() |
d0fca7e02b | ||
![]() |
aa9353feb4 | ||
![]() |
0716125ee9 | ||
![]() |
918fc002d0 | ||
![]() |
bdbb1eb901 | ||
![]() |
481ce3d39d | ||
![]() |
85c400c006 | ||
![]() |
f0626324ab | ||
![]() |
6fa5dec16d | ||
![]() |
0603e59cae | ||
![]() |
6b072e696d | ||
![]() |
f7b706263a | ||
![]() |
c7f0350182 | ||
![]() |
b0d5a7a372 | ||
![]() |
bee283b12b | ||
![]() |
e23e73d9b2 | ||
![]() |
6f3186eacc | ||
![]() |
f18c8cea16 | ||
![]() |
41e49c5a6e | ||
![]() |
5d46c27cd5 | ||
![]() |
6d1b712a96 | ||
![]() |
9d3ad52160 | ||
![]() |
4123233f78 | ||
![]() |
a3d71dd58d | ||
![]() |
2b50440a77 | ||
![]() |
9fb6eda5f1 | ||
![]() |
38df2cad25 | ||
![]() |
4245237892 | ||
![]() |
773b0b6bc0 | ||
![]() |
66d22acfb3 | ||
![]() |
aa945055fa | ||
![]() |
ca96122a7b | ||
![]() |
ed4fdfdaf8 | ||
![]() |
3be81b01d7 | ||
![]() |
f2d61d4d43 | ||
![]() |
f16f39e8aa | ||
![]() |
80f6b2f963 | ||
![]() |
64f67f6e9f | ||
![]() |
6d3b11ef91 | ||
![]() |
3393fda384 | ||
![]() |
673dcf9436 | ||
![]() |
cc917fbac6 | ||
![]() |
16101ce3d8 | ||
![]() |
836d3341a5 | ||
![]() |
988d39029f | ||
![]() |
43fd9ffe08 | ||
![]() |
02842a3e2f | ||
![]() |
4ff98f34bb | ||
![]() |
5c80f65082 | ||
![]() |
137057f499 | ||
![]() |
6d34adbd60 | ||
![]() |
1142d4edae | ||
![]() |
b8ce680511 | ||
![]() |
0ce7f0c409 | ||
![]() |
d5e0f4e84e | ||
![]() |
8f60996b64 | ||
![]() |
a9315fc422 | ||
![]() |
1c05017548 | ||
![]() |
9e285d8dc3 | ||
![]() |
98d7a10c08 | ||
![]() |
4a3ed6d73c | ||
![]() |
b3bc4b21d1 | ||
![]() |
76a67a149e | ||
![]() |
97e3277d58 | ||
![]() |
648676f46b | ||
![]() |
5fecf5c088 | ||
![]() |
c384b375df | ||
![]() |
b1651baea5 | ||
![]() |
4c791100cc | ||
![]() |
5af1b4a7c9 | ||
![]() |
3396743aba | ||
![]() |
efa286a550 | ||
![]() |
b4a3f294bf | ||
![]() |
2a158c4795 | ||
![]() |
db6538859c | ||
![]() |
b082807b0b | ||
![]() |
637d3195ec | ||
![]() |
2ae9ce29eb | ||
![]() |
978c49472a | ||
![]() |
753b549aa5 | ||
![]() |
87fc7254e7 | ||
![]() |
65d4eb5e82 | ||
![]() |
4a65b19f0f | ||
![]() |
1ffe713d93 | ||
![]() |
478d3cbb79 | ||
![]() |
c5bf9623d1 | ||
![]() |
79c8eb543e | ||
![]() |
9923fe51a7 | ||
![]() |
7f0880a735 | ||
![]() |
173f199313 | ||
![]() |
94142ecce5 | ||
![]() |
0c58c1198f | ||
![]() |
1e55c30824 | ||
![]() |
8b35de3276 | ||
![]() |
10280c4b91 | ||
![]() |
36f20376e6 | ||
![]() |
9d66bc4a05 | ||
![]() |
a9ab516dae | ||
![]() |
d27709b1f2 | ||
![]() |
384602e5b5 | ||
![]() |
d0cf19e035 | ||
![]() |
be97583f00 | ||
![]() |
7dbb17792a | ||
![]() |
4770e2010d | ||
![]() |
5d88eb1d95 | ||
![]() |
f1c3f2870b | ||
![]() |
2a9b8d7a39 | ||
![]() |
1d71e1b754 | ||
![]() |
959a228815 | ||
![]() |
342b89c5b9 | ||
![]() |
852813bdf1 | ||
![]() |
1ffc4c7825 | ||
![]() |
bd26b66c27 | ||
![]() |
3377a4485b | ||
![]() |
c98b7eecd8 | ||
![]() |
6e20037f7d | ||
![]() |
29f14186c1 | ||
![]() |
289e04a62a | ||
![]() |
a1b6b217e4 | ||
![]() |
eb9072a2f1 | ||
![]() |
cc2b3228d1 | ||
![]() |
caecb1c1eb | ||
![]() |
7e36727328 | ||
![]() |
ed387d00aa | ||
![]() |
7fbd821727 | ||
![]() |
f69f930b51 | ||
![]() |
cae209816c | ||
![]() |
2c079d7c6e | ||
![]() |
46248b0922 | ||
![]() |
47b6e62744 | ||
![]() |
6f27941e28 | ||
![]() |
1950085893 | ||
![]() |
306945fe14 | ||
![]() |
16ac468bdb | ||
![]() |
58c762baa3 | ||
![]() |
865b216ebe | ||
![]() |
82a0fae678 | ||
![]() |
7f9513fbf4 | ||
![]() |
cfe47cc854 | ||
![]() |
4960e6b6d7 | ||
![]() |
3b80e2c1e0 | ||
![]() |
d5f5f0a930 | ||
![]() |
ae70540a96 | ||
![]() |
00c7e54d3c | ||
![]() |
5f1b4e9474 | ||
![]() |
5da66e7ec8 | ||
![]() |
3d519c7a39 | ||
![]() |
80789e6140 | ||
![]() |
055d501345 | ||
![]() |
70ec517fda | ||
![]() |
5c30e079f4 | ||
![]() |
735968e685 | ||
![]() |
d3d9aaceb1 | ||
![]() |
8c0bd30fcb | ||
![]() |
50ccc39d6b | ||
![]() |
68d647c1af | ||
![]() |
58d2f70b7e | ||
![]() |
36cf1f7dfd | ||
![]() |
2dc5f580a6 | ||
![]() |
02c456432d | ||
![]() |
a61b832c4a | ||
![]() |
13ebc745fe | ||
![]() |
8f7cb6fb19 | ||
![]() |
a008d49230 | ||
![]() |
a422e39492 | ||
![]() |
07a375e2d6 | ||
![]() |
6d68c78989 | ||
![]() |
9e8232d750 | ||
![]() |
c604b53f78 | ||
![]() |
020601092e | ||
![]() |
a94b553aff | ||
![]() |
4facc03a64 | ||
![]() |
53056f3e7e | ||
![]() |
fbf0362943 | ||
![]() |
7fa1f2ffde | ||
![]() |
ab5d1df7cb | ||
![]() |
7921d85dc8 | ||
![]() |
32a671b9da | ||
![]() |
ab0d19f356 | ||
![]() |
c482f37dfd | ||
![]() |
c12737ae38 | ||
![]() |
3140496a12 | ||
![]() |
61558ab83f | ||
![]() |
76c9e9883d | ||
![]() |
5139948ef9 | ||
![]() |
3e1321ac24 | ||
![]() |
13e18c23ed | ||
![]() |
af46222b12 | ||
![]() |
eaec086177 | ||
![]() |
bec58075ff | ||
![]() |
0e6b249260 | ||
![]() |
5ff9811ea8 | ||
![]() |
6c2dc5574f | ||
![]() |
ce1c4055f7 | ||
![]() |
de865a9b55 | ||
![]() |
697e1d4941 | ||
![]() |
7a09043cba | ||
![]() |
f5f3b4e095 | ||
![]() |
40fbe9da81 | ||
![]() |
ebfb1978b8 | ||
![]() |
8328353204 | ||
![]() |
13c56887f1 | ||
![]() |
2272a4722f | ||
![]() |
94a5fc5c2c | ||
![]() |
a36cc7075a | ||
![]() |
f1f51bd9b6 | ||
![]() |
1eafa7020d | ||
![]() |
55b9a2479a | ||
![]() |
52cb0d709a | ||
![]() |
d38fb9bda2 | ||
![]() |
6efaa78058 | ||
![]() |
e62c30c8b1 | ||
![]() |
0ba349bdf2 | ||
![]() |
35bda8980f | ||
![]() |
cac378bd95 | ||
![]() |
be551d7707 | ||
![]() |
bfb5ffedda | ||
![]() |
a05150392a | ||
![]() |
6f335d2c9e | ||
![]() |
f685acd69e | ||
![]() |
dbec22f2df | ||
![]() |
4ef3acfa41 | ||
![]() |
0fbd48a889 | ||
![]() |
b7b51569e2 | ||
![]() |
55491fdb36 | ||
![]() |
a2794379a0 | ||
![]() |
fc19e24eba | ||
![]() |
da71c3d801 | ||
![]() |
e815e205da | ||
![]() |
eb58a0596d | ||
![]() |
7959ccd84d | ||
![]() |
338bb3fd9c | ||
![]() |
11172118d1 | ||
![]() |
9d6d68f00a | ||
![]() |
31b64d4689 | ||
![]() |
3876f19d6a | ||
![]() |
22672bc738 | ||
![]() |
56ec22f5c9 | ||
![]() |
84d1b19f61 | ||
![]() |
24c267d324 | ||
![]() |
d587cc0e36 | ||
![]() |
1733125873 | ||
![]() |
884e13ac2f | ||
![]() |
bcc2b17701 | ||
![]() |
3922bc27cd | ||
![]() |
7cefbd8a94 | ||
![]() |
e2a3a52ad6 | ||
![]() |
8fd4507847 | ||
![]() |
9fea631bfb | ||
![]() |
09cc27ca7a | ||
![]() |
bc80174357 | ||
![]() |
1aecd5be07 | ||
![]() |
2ff2096b36 | ||
![]() |
3fb1c446ea | ||
![]() |
8bdd03eeac | ||
![]() |
2f9abe6e13 | ||
![]() |
ee72654b55 | ||
![]() |
164ead03c9 | ||
![]() |
f88c95ce2d | ||
![]() |
308fcbb96c | ||
![]() |
be61d2f8c1 | ||
![]() |
6fbf6a1c23 | ||
![]() |
5a4eb34c39 | ||
![]() |
c4922c9e88 | ||
![]() |
e977915577 | ||
![]() |
572936ec65 | ||
![]() |
a8bed54586 | ||
![]() |
4b444e7cc3 | ||
![]() |
9127b5a57d | ||
![]() |
8652e644dd | ||
![]() |
4ff85c2ac2 | ||
![]() |
6981e2bffa | ||
![]() |
8fb84d9e63 | ||
![]() |
71ab202295 | ||
![]() |
369b8532c0 | ||
![]() |
f9f33926f7 | ||
![]() |
9ee96bea95 | ||
![]() |
5f7ac64c44 | ||
![]() |
b358402cb3 | ||
![]() |
a522b6e23b | ||
![]() |
03d9583b94 | ||
![]() |
e913de58c7 | ||
![]() |
afe033412b | ||
![]() |
c28a5fbd62 | ||
![]() |
6062201e8f | ||
![]() |
b01f5ff6a7 | ||
![]() |
24c9b1f717 | ||
![]() |
9fdf4420d5 | ||
![]() |
4df7a0f2f8 | ||
![]() |
3468af213f | ||
![]() |
d5d1305bc0 | ||
![]() |
1b0996fb0b | ||
![]() |
1879a8129e | ||
![]() |
4e84ded7ef | ||
![]() |
1a8fbe5cf0 | ||
![]() |
5a1cbb2842 | ||
![]() |
54537e8f0b | ||
![]() |
c9c1263e6f | ||
![]() |
d1a5374ac4 | ||
![]() |
c914010606 | ||
![]() |
56bd9da07c | ||
![]() |
d60dc7c2eb | ||
![]() |
97fc266ad4 | ||
![]() |
3ce0228206 | ||
![]() |
0d0f306fc2 | ||
![]() |
c25b4cdc69 | ||
![]() |
3a5fc0c320 | ||
![]() |
3d6be7fd80 | ||
![]() |
47afda2549 | ||
![]() |
6a2bbae521 | ||
![]() |
5625c11e99 | ||
![]() |
16609d6702 | ||
![]() |
8d2de09f3d | ||
![]() |
4dae3385c3 | ||
![]() |
66ec0b5d82 | ||
![]() |
7999bbafa8 | ||
![]() |
4c43a40788 | ||
![]() |
c10c49e44f | ||
![]() |
1a60f376a4 | ||
![]() |
27ba7de1e4 | ||
![]() |
68a02e567d | ||
![]() |
c46c0fc652 | ||
![]() |
3884716948 | ||
![]() |
8de1427803 | ||
![]() |
bab08f1c89 | ||
![]() |
d63e32a377 | ||
![]() |
52b88e0991 | ||
![]() |
3e8427799c | ||
![]() |
2963782992 | ||
![]() |
77f599885d | ||
![]() |
7b07b68bfd | ||
![]() |
fb90477354 | ||
![]() |
cbda329bfd | ||
![]() |
5d186639c9 | ||
![]() |
e2cfc6b838 | ||
![]() |
3c1be60c66 | ||
![]() |
5f4449f0a1 | ||
![]() |
558ec3891b | ||
![]() |
dcbfb83031 | ||
![]() |
3524fc414b | ||
![]() |
420b85da98 | ||
![]() |
28c2759ae1 | ||
![]() |
374e3e7e11 | ||
![]() |
904ef0d4be | ||
![]() |
99ee26b001 | ||
![]() |
ee049641ba | ||
![]() |
4f47f90336 | ||
![]() |
2d90cc59b6 | ||
![]() |
5576dea00b | ||
![]() |
8323f81ab5 | ||
![]() |
f5f5ce0d33 | ||
![]() |
88f4747437 | ||
![]() |
b79ede4edb | ||
![]() |
70a96fff80 | ||
![]() |
7bf2854e94 | ||
![]() |
f0d8c009ae | ||
![]() |
0ae486f07c | ||
![]() |
79a6235811 | ||
![]() |
c99fc5108e | ||
![]() |
09fa002818 | ||
![]() |
ee795150fa | ||
![]() |
f97f39987c | ||
![]() |
5631f822bd | ||
![]() |
ca13c2ed0c | ||
![]() |
058af472ea | ||
![]() |
3d5a408177 | ||
![]() |
9281e477eb | ||
![]() |
76536fe24b | ||
![]() |
1bcf500eca | ||
![]() |
522af9f477 | ||
![]() |
1c98e6b698 | ||
![]() |
4dada32693 | ||
![]() |
34aea08ba2 | ||
![]() |
6b2823775e | ||
![]() |
d999b3ed53 | ||
![]() |
5f5d191d88 | ||
![]() |
dd468e9ef9 | ||
![]() |
302d84cedc | ||
![]() |
ad8a5a95b2 | ||
![]() |
29d505c98e | ||
![]() |
688045307a | ||
![]() |
72eb2632cc | ||
![]() |
e3b2485453 | ||
![]() |
60232810d8 | ||
![]() |
d1133ca8d3 | ||
![]() |
13bef7aa02 | ||
![]() |
b574e105dd | ||
![]() |
4dfffff19b | ||
![]() |
9417b9969d | ||
![]() |
46a7822eee | ||
![]() |
501ef80bed | ||
![]() |
7ca6397223 | ||
![]() |
e2173922f0 | ||
![]() |
96fa716525 | ||
![]() |
4bc339ea4e | ||
![]() |
0bc71d84f8 | ||
![]() |
2168d8aa1a | ||
![]() |
cafc66a3c1 | ||
![]() |
4c9d0f16a5 | ||
![]() |
80b3c4cd2b | ||
![]() |
5bcddca5e1 | ||
![]() |
c286bea8e1 | ||
![]() |
4fb3103dfa | ||
![]() |
cf6d2e3985 | ||
![]() |
7447b3e1da | ||
![]() |
cf2975d062 | ||
![]() |
af1eb5453a | ||
![]() |
05f8e83ba9 | ||
![]() |
21a01ec870 | ||
![]() |
ae6adb173b | ||
![]() |
90e1ed2b5e | ||
![]() |
17878550b1 | ||
![]() |
7afa0b09ab | ||
![]() |
0a27525a4b | ||
![]() |
3e88156817 | ||
![]() |
897179a06c | ||
![]() |
8f91ed81c5 | ||
![]() |
d17a0cee1a | ||
![]() |
302ec438dd | ||
![]() |
cac2a66deb | ||
![]() |
78b4494e2b | ||
![]() |
caa7bc366b | ||
![]() |
6ad8323860 | ||
![]() |
9f2fc81df2 | ||
![]() |
8a4e28f81d | ||
![]() |
4b93349db5 | ||
![]() |
11cf455fe0 | ||
![]() |
b0a0c5d431 | ||
![]() |
f2d61d4043 | ||
![]() |
0ff26f527f | ||
![]() |
5c32cf2095 | ||
![]() |
64f6c74c9a | ||
![]() |
2e26ce235d | ||
![]() |
ae2d0d4cd8 | ||
![]() |
26833f5aae | ||
![]() |
ea5b00528b | ||
![]() |
e4e315bbfc | ||
![]() |
27df983ee0 | ||
![]() |
5a041a6af5 | ||
![]() |
3d6696f6c9 | ||
![]() |
d53b6f4381 | ||
![]() |
48374c85dd | ||
![]() |
f74791ed7b | ||
![]() |
f232f34981 | ||
![]() |
9811a37690 | ||
![]() |
dcd6942ed1 | ||
![]() |
c320a21f2b | ||
![]() |
80eb4f3f50 | ||
![]() |
30941c0dd1 | ||
![]() |
cf71e1242e | ||
![]() |
0da7c499b6 | ||
![]() |
0b65b44a78 | ||
![]() |
46e7a26770 | ||
![]() |
c9ac176fa7 | ||
![]() |
c0983f3400 | ||
![]() |
30c8058fca | ||
![]() |
c60cc9ee18 | ||
![]() |
6dac1efefe | ||
![]() |
8b3603cd48 | ||
![]() |
3fa6fdacf2 | ||
![]() |
90c62c4cc0 | ||
![]() |
4f1bee3165 | ||
![]() |
dcf5f45f68 | ||
![]() |
af890cf210 | ||
![]() |
c9e30f7754 | ||
![]() |
03cc031d00 | ||
![]() |
7d1d9ff143 | ||
![]() |
bdb450fccb | ||
![]() |
179f2f9e4f | ||
![]() |
41c5f3a017 | ||
![]() |
847944e240 | ||
![]() |
b10425492a | ||
![]() |
8bbbe8cd76 | ||
![]() |
037edbaa13 | ||
![]() |
bc08271da3 | ||
![]() |
cd7f25830b | ||
![]() |
706755d146 | ||
![]() |
0e29aa2951 | ||
![]() |
d84f922372 | ||
![]() |
76ff4d220e | ||
![]() |
86fbf4fd8f | ||
![]() |
d38d7a1bed | ||
![]() |
8c5d403dda | ||
![]() |
f575935ace | ||
![]() |
ea4b5552c2 | ||
![]() |
b46a800597 | ||
![]() |
b62bbb78ed | ||
![]() |
5107a2dc40 | ||
![]() |
ded07690fd | ||
![]() |
83dbc07650 | ||
![]() |
e060944b34 | ||
![]() |
075f51e0a3 | ||
![]() |
f0ada8c40d | ||
![]() |
9737c58054 | ||
![]() |
529d20ee6a | ||
![]() |
ad3d270c42 | ||
![]() |
454b422fd6 | ||
![]() |
4d78d27bd9 | ||
![]() |
6db44500b7 | ||
![]() |
6acfda599e | ||
![]() |
5c112ff542 | ||
![]() |
aee5d9a390 | ||
![]() |
1ddf594d15 | ||
![]() |
9799856ad4 | ||
![]() |
b7f8e97b03 | ||
![]() |
ac44db26a2 | ||
![]() |
c85cd29049 | ||
![]() |
3d0208223a | ||
![]() |
dc4d5dabcd | ||
![]() |
f7d4951165 | ||
![]() |
0bcb873cbb | ||
![]() |
29761c2519 | ||
![]() |
eeb151586f | ||
![]() |
7ab008878a | ||
![]() |
ec72a8868e | ||
![]() |
ba60918eaa | ||
![]() |
e660700924 | ||
![]() |
fd67e31f63 | ||
![]() |
8301980ba8 | ||
![]() |
5f73850fa6 | ||
![]() |
e94acf86f8 | ||
![]() |
d6feeb14ff | ||
![]() |
9d09ada33b | ||
![]() |
c3208c5cd6 | ||
![]() |
4636e3367c | ||
![]() |
f2152aa391 | ||
![]() |
2646ed0393 | ||
![]() |
9ef0240e99 | ||
![]() |
790bc72806 | ||
![]() |
289a53221d | ||
![]() |
a2a3d3aeb6 | ||
![]() |
17732fa9c4 | ||
![]() |
fa98289ddb | ||
![]() |
0e6d1cb272 | ||
![]() |
cc39b4660a | ||
![]() |
fa3112b40e | ||
![]() |
6ca1fd59a9 | ||
![]() |
1fb874cdc5 | ||
![]() |
34e5fcf47e | ||
![]() |
a1038f61b6 | ||
![]() |
5f1e8b8278 | ||
![]() |
91f1f324c0 | ||
![]() |
eb36c351cf | ||
![]() |
f707c1ca46 | ||
![]() |
299ae7a4bd | ||
![]() |
3104d3d6cd | ||
![]() |
04d9deac92 | ||
![]() |
f12754b01f | ||
![]() |
f9bbce0da7 | ||
![]() |
62087d21cc | ||
![]() |
89a84a621b | ||
![]() |
1c370f5a17 | ||
![]() |
cb05c51911 | ||
![]() |
ec2cbaa5eb | ||
![]() |
173529e048 | ||
![]() |
9639b14e1b | ||
![]() |
17eefed08f | ||
![]() |
2e5d898443 | ||
![]() |
6b5e18e6bf | ||
![]() |
0da88ac5c5 | ||
![]() |
c8a30b262d | ||
![]() |
284eaf1576 | ||
![]() |
c1e49d2b13 | ||
![]() |
cde2c1aa6d | ||
![]() |
aa22d97983 | ||
![]() |
4b51248372 | ||
![]() |
1d545449bb | ||
![]() |
78b502b0bf | ||
![]() |
3b67a4cfba | ||
![]() |
1a2a44200a | ||
![]() |
9361615786 | ||
![]() |
0133917bf9 | ||
![]() |
b6cec214bd | ||
![]() |
a66c8531d6 | ||
![]() |
37cc45a0a8 | ||
![]() |
a04a7b6ea5 | ||
![]() |
f2f4079411 | ||
![]() |
565b1089bd | ||
![]() |
06a8d7eb06 | ||
![]() |
108055cd62 | ||
![]() |
66b096d978 | ||
![]() |
1136d4222f | ||
![]() |
136408d8b8 | ||
![]() |
ee9bf76ae9 | ||
![]() |
a3f16c8459 | ||
![]() |
956a6e6f77 | ||
![]() |
8b7ca8b670 | ||
![]() |
35ee4e52c8 | ||
![]() |
ea7afc8ec8 | ||
![]() |
db3dd9d200 | ||
![]() |
60223a358b | ||
![]() |
c453ac8265 | ||
![]() |
269b120104 | ||
![]() |
584e74c676 | ||
![]() |
fa78023aa4 | ||
![]() |
ebc2b9a286 | ||
![]() |
5e45c3c824 | ||
![]() |
e2ba22ec59 | ||
![]() |
49df957058 | ||
![]() |
95c1bf9544 | ||
![]() |
db4585b3e2 | ||
![]() |
d6bc7b8877 | ||
![]() |
ee52b13ae6 | ||
![]() |
d0e26247f4 | ||
![]() |
0caf925d5d | ||
![]() |
dc68205a18 | ||
![]() |
7128ef686d | ||
![]() |
d728494099 | ||
![]() |
5bcda7bf15 | ||
![]() |
9e7a3b7017 | ||
![]() |
530e520727 | ||
![]() |
2e3e62a413 | ||
![]() |
4d8f18e00b | ||
![]() |
ea8363a3b0 | ||
![]() |
c5931c75c6 | ||
![]() |
d07e4f44f1 | ||
![]() |
dcabb49244 | ||
![]() |
18a13679fd | ||
![]() |
6ee5718b2e | ||
![]() |
d0e7195a16 | ||
![]() |
7053724fd6 | ||
![]() |
c9d22c7a14 | ||
![]() |
893facdf6d | ||
![]() |
78e4772f21 | ||
![]() |
305efcf5ad | ||
![]() |
0d911127d7 | ||
![]() |
5ea18b9426 | ||
![]() |
d8bd8634ab | ||
![]() |
dcbf2a0e0c | ||
![]() |
fffbf48dec | ||
![]() |
a167067cbd | ||
![]() |
4476a9e241 | ||
![]() |
4011c13d4b | ||
![]() |
6106ab8a2e | ||
![]() |
1674465bdc | ||
![]() |
8ca6f8c6ec | ||
![]() |
04caf1c262 | ||
![]() |
ce56fcb1ed | ||
![]() |
68088bc5be | ||
![]() |
0dfc7fffff | ||
![]() |
75a73d9417 | ||
![]() |
d042ed52fa | ||
![]() |
2cc05e5e92 | ||
![]() |
2a058338f3 | ||
![]() |
4d2b8471fa | ||
![]() |
26252c4c1d | ||
![]() |
c70d8acb33 | ||
![]() |
16dd57747c | ||
![]() |
24ba22a43a | ||
![]() |
2da3c6d288 | ||
![]() |
c7486a0339 | ||
![]() |
c86b3d0c05 | ||
![]() |
2d1b2efb92 | ||
![]() |
9ec4776812 | ||
![]() |
2f08845d1e | ||
![]() |
9f5efeb309 | ||
![]() |
182054b662 | ||
![]() |
a8bb9b6b19 | ||
![]() |
84252f9b70 | ||
![]() |
89409817b5 | ||
![]() |
7b360d8579 | ||
![]() |
83459159f4 | ||
![]() |
4b6e6d4dd4 | ||
![]() |
954ced21a4 | ||
![]() |
98c60838fe | ||
![]() |
09f28d0f57 | ||
![]() |
8aab52aeda | ||
![]() |
afd2ffb74a | ||
![]() |
825e42dc00 | ||
![]() |
b99b21fa38 | ||
![]() |
0018522031 | ||
![]() |
30fafb77db | ||
![]() |
ed19064405 | ||
![]() |
94c92a58a1 | ||
![]() |
9c9aeaef47 | ||
![]() |
cbbe948529 | ||
![]() |
823abf666e | ||
![]() |
685273675b | ||
![]() |
15cd4dce4e | ||
![]() |
9cbfcbb820 | ||
![]() |
fca83c9ff8 | ||
![]() |
54c7fa491e | ||
![]() |
c69ce1d750 | ||
![]() |
84a6724b33 | ||
![]() |
a847df921f | ||
![]() |
687fe2c3c7 | ||
![]() |
e98ea900cf | ||
![]() |
2ef9552454 | ||
![]() |
6a392f0eb2 | ||
![]() |
c00062655f | ||
![]() |
4ad375a378 | ||
![]() |
4a3509f06d | ||
![]() |
4fae37bb88 | ||
![]() |
646f1c3f71 | ||
![]() |
df5c64d0be | ||
![]() |
65ecde1e75 | ||
![]() |
728e1715cc | ||
![]() |
e484d58d9c | ||
![]() |
708e8c558c | ||
![]() |
4ec0ac89cd | ||
![]() |
196bda0597 | ||
![]() |
bf32081fa9 | ||
![]() |
13925f7bd4 | ||
![]() |
e6ad166ae3 | ||
![]() |
db5493b783 | ||
![]() |
5d6475c93b | ||
![]() |
ac475f46b9 | ||
![]() |
c21ca3ca1a | ||
![]() |
99f99bea47 | ||
![]() |
d0ff78e7f4 | ||
![]() |
3113a20390 | ||
![]() |
41959eeae1 | ||
![]() |
08da91047e | ||
![]() |
6e9d3eb0f9 | ||
![]() |
ed674d865b | ||
![]() |
233f7611da | ||
![]() |
f874fdc1ad | ||
![]() |
4e57bd1f18 | ||
![]() |
455be7f6f6 | ||
![]() |
23d66e9b6f | ||
![]() |
882e2abee1 | ||
![]() |
68ba34c17b | ||
![]() |
a286d9166b | ||
![]() |
fcd30c5649 | ||
![]() |
8ae0da1fa1 | ||
![]() |
25f5995be0 | ||
![]() |
cf6c6fefd7 | ||
![]() |
c5663ca015 | ||
![]() |
51c0b61a43 | ||
![]() |
634f8f0d0f | ||
![]() |
efa1c96d19 | ||
![]() |
423a45ac85 | ||
![]() |
dc385ba4ec | ||
![]() |
c8e8c0a002 | ||
![]() |
c04752c0e4 | ||
![]() |
ae87a35f6e | ||
![]() |
29c618a35e | ||
![]() |
036e77939f | ||
![]() |
de7bddb8df | ||
![]() |
fd05d3e353 | ||
![]() |
a640503119 | ||
![]() |
f24fd14814 | ||
![]() |
f98c4dc82b | ||
![]() |
f1d16386b6 | ||
![]() |
144681fc0f | ||
![]() |
03c82605a0 | ||
![]() |
183795b8aa | ||
![]() |
91e00431d4 | ||
![]() |
3b4d8442e0 | ||
![]() |
4f0165f32d | ||
![]() |
fb6ef2c2f4 | ||
![]() |
bb49102a4b | ||
![]() |
4cc394c376 | ||
![]() |
8eb6fc5612 | ||
![]() |
5e7686695f | ||
![]() |
e5a56fa985 | ||
![]() |
f10835cf09 | ||
![]() |
a5e79b7663 | ||
![]() |
b7461846ab | ||
![]() |
40119949cb | ||
![]() |
21229aa3f6 | ||
![]() |
1793f2c3b8 | ||
![]() |
4a637191f2 | ||
![]() |
8991573984 | ||
![]() |
7f2e67e924 | ||
![]() |
1ce010c7d4 | ||
![]() |
fe0cf8f9a9 | ||
![]() |
32508f6db1 | ||
![]() |
1c23edd1e5 | ||
![]() |
ea50092356 | ||
![]() |
891c4a458a | ||
![]() |
0c539cbf32 | ||
![]() |
70d405b41b | ||
![]() |
95da97fa74 | ||
![]() |
546c727520 | ||
![]() |
1656d17b22 | ||
![]() |
8fa5c9dce2 | ||
![]() |
b8b34a1b26 | ||
![]() |
6608c5a8a7 | ||
![]() |
a299bc289b | ||
![]() |
e0d8cceb65 | ||
![]() |
3a739c38c5 | ||
![]() |
d32feaa668 | ||
![]() |
f269fb46ea | ||
![]() |
63ea3449d3 | ||
![]() |
e97438114f | ||
![]() |
a5492dd5fc | ||
![]() |
fa057f512f | ||
![]() |
55f0abbe99 | ||
![]() |
9f5c5dfff4 | ||
![]() |
802f29fb0e | ||
![]() |
8a29e5eb5e | ||
![]() |
b804f38150 | ||
![]() |
46ea556593 | ||
![]() |
5335f262be | ||
![]() |
b11cda959d | ||
![]() |
8c8e5bb7c8 | ||
![]() |
59cf0f6a42 | ||
![]() |
5659249dfa | ||
![]() |
b894a78385 | ||
![]() |
3b45336929 | ||
![]() |
da28cff0f6 | ||
![]() |
5dbb93dbb4 | ||
![]() |
6cb0603fbe | ||
![]() |
8e30bd1f69 | ||
![]() |
6e5ceaa30d | ||
![]() |
e8c79f53a6 | ||
![]() |
e683fe88b9 | ||
![]() |
1bcb5ddd50 | ||
![]() |
4db2da9185 | ||
![]() |
1b39b2e261 | ||
![]() |
f144b6bae4 | ||
![]() |
2bd7245508 | ||
![]() |
b62f7c3057 | ||
![]() |
f4e455398c | ||
![]() |
85908befea | ||
![]() |
a6f5a0339a | ||
![]() |
c17c1ccaea | ||
![]() |
88e1fd9530 | ||
![]() |
2fa7e00f16 | ||
![]() |
5208d57f1e | ||
![]() |
76024b5036 | ||
![]() |
002dacef40 | ||
![]() |
580c0a7296 | ||
![]() |
67423ff64b | ||
![]() |
b135bcd422 | ||
![]() |
fb4105cf8a | ||
![]() |
d1f099374c | ||
![]() |
932396922d | ||
![]() |
afdf357fbe | ||
![]() |
8c117cfb57 | ||
![]() |
f13b30d606 | ||
![]() |
165b3dd215 | ||
![]() |
d218534fff | ||
![]() |
333fdf6b90 | ||
![]() |
625e4e2fb3 | ||
![]() |
949e93f9fe | ||
![]() |
e9792ef771 | ||
![]() |
9bf411f580 | ||
![]() |
11a8dacb0f | ||
![]() |
3bd7109d8b | ||
![]() |
9af10686b2 | ||
![]() |
c5377f4e05 | ||
![]() |
34db515acb | ||
![]() |
6ffb3c72fb | ||
![]() |
f582ab06ad | ||
![]() |
7c36289768 | ||
![]() |
544df87a8e | ||
![]() |
77558eec0c | ||
![]() |
d05acb1b68 | ||
![]() |
ef1f9fe450 | ||
![]() |
4e0378ab7c | ||
![]() |
075f599abb | ||
![]() |
94d0e83207 | ||
![]() |
ab459bf418 | ||
![]() |
35f1ebf9f3 | ||
![]() |
b1a90a7f91 | ||
![]() |
da5221910f | ||
![]() |
50c5df0838 | ||
![]() |
a7a81ca749 | ||
![]() |
4879106096 | ||
![]() |
e28fef6ee0 | ||
![]() |
9a578c5962 | ||
![]() |
0a345a6128 | ||
![]() |
94a1fdc2ae | ||
![]() |
acc322b3e1 | ||
![]() |
e5fe2c216e | ||
![]() |
e93475d854 | ||
![]() |
858ccb350d | ||
![]() |
7e568c8903 | ||
![]() |
60194753d7 | ||
![]() |
808aeabf4c | ||
![]() |
32330801c9 | ||
![]() |
535b9e606f | ||
![]() |
92bcf09c53 | ||
![]() |
aa982f80f5 | ||
![]() |
d7e7ef6a7d | ||
![]() |
055d8927cc | ||
![]() |
8692c49511 | ||
![]() |
ecd6f77de7 | ||
![]() |
5cfd59258a | ||
![]() |
9dd20577cd | ||
![]() |
ea45223f1f | ||
![]() |
12581c1721 | ||
![]() |
324259ef8e | ||
![]() |
773360caa3 | ||
![]() |
ca402e9d36 | ||
![]() |
6ac5d3bc06 | ||
![]() |
c52ba520ce | ||
![]() |
322ca97c24 | ||
![]() |
ef36950b72 | ||
![]() |
4e5f5764ce | ||
![]() |
3a9ed0e846 | ||
![]() |
997170a317 | ||
![]() |
8745d733f9 | ||
![]() |
86f683dcbb | ||
![]() |
04d9c4c183 | ||
![]() |
9964935a12 | ||
![]() |
72e909f556 | ||
![]() |
0919d43dfb | ||
![]() |
27e44c43c5 | ||
![]() |
07858c3a1f | ||
![]() |
fd2b0c7c38 | ||
![]() |
b8b0247043 | ||
![]() |
6da175fccb | ||
![]() |
037898be56 | ||
![]() |
82f71880e9 | ||
![]() |
0b04807258 | ||
![]() |
5837249d76 | ||
![]() |
ba640598e5 | ||
![]() |
a42bfa7794 | ||
![]() |
5436d93a3d | ||
![]() |
36552ff995 | ||
![]() |
0af2f45815 | ||
![]() |
39e22e98ce | ||
![]() |
e8fa630c28 | ||
![]() |
6e4cfa5ecf | ||
![]() |
c0d8ae7f4d | ||
![]() |
7834a4e2fc | ||
![]() |
0b24330d86 | ||
![]() |
0b7c2ab183 | ||
![]() |
f7acee9221 | ||
![]() |
8b3a82688e | ||
![]() |
067b884f39 | ||
![]() |
a98578c91d | ||
![]() |
14d3b0a084 | ||
![]() |
552033da27 | ||
![]() |
66556b8b47 | ||
![]() |
3434255ce6 | ||
![]() |
d686cc6c4a | ||
![]() |
d50194940d | ||
![]() |
e30421e84c | ||
![]() |
c944d62374 | ||
![]() |
84befaea24 | ||
![]() |
2be8753788 | ||
![]() |
a59433e7a3 | ||
![]() |
cd08ae7b85 | ||
![]() |
1ec87f7990 | ||
![]() |
bae1bf7b0a | ||
![]() |
024e48850e | ||
![]() |
9572d6c063 | ||
![]() |
d9c5614342 | ||
![]() |
4c6c182023 | ||
![]() |
fca60cb597 | ||
![]() |
6a4afae5cc | ||
![]() |
fd851d1d8b | ||
![]() |
9e450df053 | ||
![]() |
c7ae28aaa2 | ||
![]() |
19721c70ff | ||
![]() |
e25f1227c0 | ||
![]() |
4e4b6bef21 | ||
![]() |
a7714c842f | ||
![]() |
eae98e1c34 | ||
![]() |
ba257b09f5 | ||
![]() |
05fe1c22ed | ||
![]() |
7db895ab5d | ||
![]() |
ceb7325727 | ||
![]() |
7d2318c167 | ||
![]() |
a632a04a30 | ||
![]() |
2b4a1f295a | ||
![]() |
3cad094edd | ||
![]() |
c062f8d4fe | ||
![]() |
ee4b553c2a | ||
![]() |
3cb4edcbc3 | ||
![]() |
e1353b9f7d | ||
![]() |
47827ddda1 | ||
![]() |
387795311c | ||
![]() |
77eda6494e | ||
![]() |
b25cdf7f7d | ||
![]() |
765870fe8f | ||
![]() |
cc6cf9a741 | ||
![]() |
ab12193f10 | ||
![]() |
b926765ce0 | ||
![]() |
9ab6718234 | ||
![]() |
42c92e4f2e | ||
![]() |
b9e53cd135 | ||
![]() |
dc52c8f769 | ||
![]() |
032c8333d9 | ||
![]() |
b92c1bbbf7 | ||
![]() |
f5048742aa | ||
![]() |
e9ea3f50bf | ||
![]() |
a9e045a1a8 | ||
![]() |
7d0407c6a2 | ||
![]() |
c00cd38b01 | ||
![]() |
e96c22d6f8 | ||
![]() |
874dc89fca | ||
![]() |
5104567a24 | ||
![]() |
2968ba9938 | ||
![]() |
cae6f3c613 | ||
![]() |
bb8c1826d3 | ||
![]() |
274921cd35 | ||
![]() |
39fda7af82 | ||
![]() |
31934ac374 | ||
![]() |
d739895e4a | ||
![]() |
e37ef10595 | ||
![]() |
4a7e522d4b | ||
![]() |
b2a5390adb | ||
![]() |
0bfd283526 | ||
![]() |
7ea8326b52 | ||
![]() |
8847602061 | ||
![]() |
e6bc655d6a | ||
![]() |
061ee04cb5 | ||
![]() |
3c4a91658e | ||
![]() |
fad81f36e4 | ||
![]() |
b482e26925 | ||
![]() |
7ec6ebb9fa | ||
![]() |
5a98d2da1f | ||
![]() |
21d8394170 | ||
![]() |
5e913c31a4 | ||
![]() |
d51d6a4650 | ||
![]() |
3c57c6afc5 | ||
![]() |
905b6ec53d | ||
![]() |
08a4ee34eb | ||
![]() |
1bd592fe67 | ||
![]() |
db1ad74ef2 | ||
![]() |
2e5f58255a | ||
![]() |
cfa60ab7e6 | ||
![]() |
d3cf316e40 | ||
![]() |
a2c8ddca13 | ||
![]() |
29d8b48503 | ||
![]() |
0c60609268 | ||
![]() |
63ed471ed2 | ||
![]() |
d16519f5de | ||
![]() |
fcff83e65c | ||
![]() |
7375d0460a | ||
![]() |
2706fa86cd | ||
![]() |
6bea9d0232 | ||
![]() |
ab05ace3ce | ||
![]() |
05ccc4fd42 | ||
![]() |
a471b6197a | ||
![]() |
db2ad9648d | ||
![]() |
45b214d83e | ||
![]() |
e6ef3f6e6a | ||
![]() |
9d27bba23f | ||
![]() |
063e26c521 | ||
![]() |
9b5e66f5ea | ||
![]() |
d025230707 | ||
![]() |
c790891e60 | ||
![]() |
78a660d409 | ||
![]() |
4040f9095d | ||
![]() |
d95f743b6f | ||
![]() |
5eff7d2642 | ||
![]() |
51688c004c | ||
![]() |
e2ff32eb84 | ||
![]() |
c79a46889f | ||
![]() |
735bf98945 | ||
![]() |
86446c6102 | ||
![]() |
0287319c38 | ||
![]() |
5ecb6801fa | ||
![]() |
3a0d164a76 | ||
![]() |
c389f62837 | ||
![]() |
b648a9ddee | ||
![]() |
597b143634 | ||
![]() |
1b2225a622 | ||
![]() |
0cdeb4e267 | ||
![]() |
d09b9fbbde | ||
![]() |
c40b3a287c | ||
![]() |
1195025c4c | ||
![]() |
a99ce2f306 | ||
![]() |
9d47934a02 | ||
![]() |
3b6e5119f3 | ||
![]() |
42b1cb1aaa | ||
![]() |
1989b9fcd9 | ||
![]() |
34d0851f79 | ||
![]() |
b6d0e3adb2 | ||
![]() |
07129b26c3 | ||
![]() |
d25b56f6d4 | ||
![]() |
42b7b11710 | ||
![]() |
e915812730 | ||
![]() |
ace185954c | ||
![]() |
1ef1f3d7ea | ||
![]() |
815f90974c | ||
![]() |
a08e0929bc | ||
![]() |
d86c5e3950 | ||
![]() |
278f82e536 | ||
![]() |
983cc8d291 | ||
![]() |
8e2680f41f | ||
![]() |
fc6081fe70 | ||
![]() |
01651af08a | ||
![]() |
c56ef738ed | ||
![]() |
d2b98fbb5c | ||
![]() |
222995c32e | ||
![]() |
56a7979750 | ||
![]() |
ecb3c47704 | ||
![]() |
0b03431c95 | ||
![]() |
5e2e9aa23e | ||
![]() |
aff8d151a4 | ||
![]() |
8e186e840c | ||
![]() |
a42f8328b2 | ||
![]() |
370479f7c5 | ||
![]() |
7a6c22bc25 | ||
![]() |
8ead7ad4cf | ||
![]() |
f76a00adc1 | ||
![]() |
1c8874e6d5 | ||
![]() |
f06a15ac8b | ||
![]() |
650a8f7f15 | ||
![]() |
e6b82cb111 | ||
![]() |
c04f37d0f5 | ||
![]() |
79cf87d91d | ||
![]() |
96f520ff6d | ||
![]() |
1c8dce429e | ||
![]() |
a68818e320 | ||
![]() |
0a71a92eeb | ||
![]() |
4127638f92 | ||
![]() |
451568e5a9 | ||
![]() |
174cd86d08 | ||
![]() |
43b13d623b |
95
.gitignore
vendored
@@ -1,17 +1,10 @@
|
||||
# Ignore generated files
|
||||
# ...
|
||||
|
||||
# Ignore compiled binaries
|
||||
src/core.o
|
||||
src/shapes.o
|
||||
src/textures.o
|
||||
src/text.o
|
||||
src/models.o
|
||||
src/audio.o
|
||||
src/vector3.o
|
||||
src/stb_image.o
|
||||
src/*.exe
|
||||
examples/*.o
|
||||
# Ignore VIM's backup generated files
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# Ignore thumbnails created by windows
|
||||
Thumbs.db
|
||||
@@ -42,12 +35,40 @@ Thumbs.db
|
||||
*.sbr
|
||||
*.sdf
|
||||
obj/
|
||||
[R]elease/
|
||||
[Rr]elease.win32/
|
||||
_ReSharper*/
|
||||
[Tt]est[Rr]esult*
|
||||
ipch/
|
||||
*.opensdf
|
||||
|
||||
# Ignore compiled binaries
|
||||
*.o
|
||||
*.exe
|
||||
!tools/rREM/rrem.exe
|
||||
|
||||
# Ignore all examples files
|
||||
examples/*
|
||||
# Unignore all examples dirs
|
||||
!examples/*/
|
||||
# Unignore all examples files with extension
|
||||
!examples/*.c
|
||||
!examples/*.lua
|
||||
!examples/*.png
|
||||
# Unignore examples Makefile
|
||||
!examples/Makefile
|
||||
|
||||
# Ignore all games files
|
||||
games/*
|
||||
# Unignore all games dirs
|
||||
!games/*/
|
||||
# Unignore all games files with extension
|
||||
!games/*.c
|
||||
!games/*.lua
|
||||
!games/*.png
|
||||
# Unignore games makefile
|
||||
!games/Makefile
|
||||
|
||||
# Ignore files build by xcode
|
||||
*.mode*v*
|
||||
*.pbxuser
|
||||
@@ -61,3 +82,55 @@ xcschememanagement.plist
|
||||
._.*
|
||||
xcuserdata/
|
||||
DerivedData/
|
||||
|
||||
# Visual Studio project
|
||||
project/vs2015/*.db
|
||||
project/vs2015/*.opendb
|
||||
project/vs2015.UWP/packages
|
||||
project/vs2015.UWP/*.db
|
||||
!project/vs2015/raylib.sln
|
||||
!project/vs2015/raylib/*.vcxproj
|
||||
!project/vs2015/examples/*.vcxproj
|
||||
!project/vs2017/raylib.sln
|
||||
!project/vs2017/raylib/*.vcxproj
|
||||
!project/vs2017/examples/*.vcxproj
|
||||
!project/vs2015.UWP/raylib/*.vcxproj
|
||||
!project/vs2015.UWP/*.sln
|
||||
!project/vs2015.UWP/raylib.App.UWP/*.vcxproj
|
||||
|
||||
# Web examples
|
||||
docs/examples/web/*.html
|
||||
docs/examples/web/*/*.html
|
||||
!docs/examples/web/loader.html
|
||||
!docs/examples/web/core/loader.html
|
||||
!docs/examples/web/shapes/loader.html
|
||||
!docs/examples/web/text/loader.html
|
||||
!docs/examples/web/textures/loader.html
|
||||
!docs/examples/web/audio/loader.html
|
||||
!docs/examples/web/physac/loader.html
|
||||
!docs/examples/web/shaders/loader.html
|
||||
!docs/examples/web/models/loader.html
|
||||
|
||||
# CMake stuff
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Testing
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
compile_commands.json
|
||||
CTestTestfile.cmake
|
||||
build
|
||||
!templates/android_project/Makefile
|
||||
|
||||
# Unignore These makefiles...
|
||||
!examples/CMakeLists.txt
|
||||
!games/CMakeLists.txt
|
||||
|
||||
# Ignore Android generated files and folders
|
||||
templates/android_project/output
|
||||
|
||||
# Ignore GNU global tags
|
||||
GPATH
|
||||
GRTAGS
|
||||
GTAGS
|
||||
|
62
.travis.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
language: c
|
||||
dist: trusty
|
||||
|
||||
git:
|
||||
depth: 3
|
||||
|
||||
# TODO we could use a 32 bit Docker container for running true 32-bit tests
|
||||
# services: - docker
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
env: ARCH=i386
|
||||
sudo: required
|
||||
- os: linux
|
||||
env: ARCH=amd64
|
||||
sudo: required
|
||||
- os: osx
|
||||
env: ARCH=universal
|
||||
|
||||
before_script:
|
||||
|
||||
before_install:
|
||||
- if [ "$TRAVIS_OS_NAME" == "linux" ]; then
|
||||
sudo apt-get install -y gcc-multilib
|
||||
libasound2-dev:$ARCH
|
||||
libxcursor-dev:$ARCH libxinerama-dev:$ARCH mesa-common-dev:$ARCH
|
||||
libx11-dev:$ARCH libxrandr-dev:$ARCH libxi-dev:$ARCH
|
||||
libgl1-mesa-dev:$ARCH libglu1-mesa-dev:$ARCH;
|
||||
export RAYLIB_PACKAGE_SUFFIX="-Linux-$ARCH";
|
||||
if [ "$ARCH" == "i386" ]; then export CFLAGS="-m32"; fi;
|
||||
if [ "$ARCH" == "amd64" ]; then export CFLAGS="-m64"; fi;
|
||||
if [ "$GLFW" == "SYSTEM" ]; then
|
||||
wget 'http://ftp.de.debian.org/debian/pool/main/g/glfw3/libglfw3_3.2.1-1_amd64.deb';
|
||||
wget 'http://ftp.de.debian.org/debian/pool/main/g/glfw3/libglfw3-dev_3.2.1-1_amd64.deb';
|
||||
sudo dpkg -i libglfw3_3.2.1-1_amd64.deb libglfw3-dev_3.2.1-1_amd64.deb;
|
||||
fi;
|
||||
fi
|
||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
||||
export RAYLIB_PACKAGE_SUFFIX="-macOS";
|
||||
if [ "$GLFW" == "SYSTEM" ]; then brew update; brew install glfw; fi;
|
||||
fi
|
||||
- "$CC --version"
|
||||
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake -DMACOS_FATLIB=ON -DSTATIC=ON -DSHARED=ON -DBUILD_EXAMPLES=ON -DBUILD_GAMES=ON -DUSE_EXTERNAL_GLFW=IF_POSSIBLE ..
|
||||
- make VERBOSE=1
|
||||
- make package
|
||||
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key:
|
||||
secure: LvqUIAN/3dJul+Ra2iK3tSaNG5IwsNMmGIwVMy0DK5IBCxiQPBc9pWGiE30RTBPt6Z+N4BhMEE8DtUl+vnISlMoHWNIIhF2zwC66hs/F7zY7qEITMRSmfiLcqxQysknFOnJB06CATgXcFqlEo9j+t4abrG/f3qcb92J4O2uNz336Au2myTx93Q5MxbyA7KiUuEutFnb2dWiPCY4d+sGeXEfsiD2R7aj/8MaWOkoGdZVrTkI9juMgvpImkjQBArvqdjUMeT3MsRrwgOIq5v2GFV9dOl8k1WzPeT8B2JHh00ed/o1/wuFq/cLLOxtYo2+Pv3+xatOrlexoX0WkDm7C9/L1W5U4rLexU3CQ9mMBmHPnp6k/WXZ5QXEE4uUF0+LpN3XlIXzFpdZmZiVV8VLxg2WvyncMmivYiu7/MTkyfZxyKkzwl7sZZslzHA9kOGedGaN7b7/2B77OFHoQK8lKfdFml7jJnarh+89nenNZYMab0E8qkOJOyb2bYlDTa0/2nyxGiyymYgq6YHLNrDbhqB/1LzdgzjMliQ8ri5q9Ux2vjfcqOzhfAmcwFwnY/D6yXJWYi0DWpHZdpKl3du6dYDrypW91/yDWbwiJ/YhrE7ZunzrcB6GH/QkbuzWxdCth39rQAHih8DG01co/K3Gvi4yGjvIH5tFUpyEolMnpMiA=
|
||||
file_glob: true
|
||||
file: raylib-*.tar.gz
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: raysan5/raylib
|
||||
branch: master
|
||||
tags: true
|
562
CHANGELOG
@@ -1,10 +1,566 @@
|
||||
changelog
|
||||
---------
|
||||
|
||||
Current Release: raylib 1.0.4 (January 2014)
|
||||
Current Release: raylib 1.8.0 (Oct 2017)
|
||||
|
||||
NOTE: Only versions marked as 'Release' are available on release folder, updates are only available as source.
|
||||
NOTE: Current Release includes all previous updates.
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.8.0 (Oct 2017)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
In this release, multiple parts of the library have been reviewed (again) for consistency and simplification.
|
||||
It exposes more than 30 new functions in comparison with previous version and it improves overall programming experience.
|
||||
|
||||
BIG CHANGES:
|
||||
- New Image generation functions: Gradient, Checked, Noise, Cellular...
|
||||
- New Mesh generation functions: Cube, Sphere, Cylinder, Torus, Knot...
|
||||
- New Shaders and Materials systems to support PBR materials
|
||||
- Custom Android APK build pipeline with simple Makefile
|
||||
- Complete review of rlgl layer functionality
|
||||
- Complete review of raymath functionality
|
||||
|
||||
detailed changes:
|
||||
[rlgl] RENAMED: rlglLoadTexture() to rlLoadTexture()
|
||||
[rlgl] RENAMED: rlglLoadRenderTexture() to rlLoadRenderTexture()
|
||||
[rlgl] RENAMED: rlglUpdateTexture() to rlUpdateTexture()
|
||||
[rlgl] RENAMED: rlglGenerateMipmaps() to rlGenerateMipmaps()
|
||||
[rlgl] RENAMED: rlglReadScreenPixels() to rlReadScreenPixels()
|
||||
[rlgl] RENAMED: rlglReadTexturePixels() to rlReadTexturePixels()
|
||||
[rlgl] RENAMED: rlglLoadMesh() to rlLoadMesh()
|
||||
[rlgl] RENAMED: rlglUpdateMesh() to rlUpdateMesh()
|
||||
[rlgl] RENAMED: rlglDrawMesh() to rlDrawMesh()
|
||||
[rlgl] RENAMED: rlglUnloadMesh() to rlUnloadMesh()
|
||||
[rlgl] RENAMED: rlglUnproject() to rlUnproject()
|
||||
[rlgl] RENAMED: LoadCompressedTexture() to LoadTextureCompressed()
|
||||
[rlgl] RENAMED: GetDefaultTexture() to GetTextureDefault()
|
||||
[rlgl] RENAMED: LoadDefaultShader() to LoadShaderDefault()
|
||||
[rlgl] RENAMED: LoadDefaultShaderLocations() to SetShaderDefaultLocations()
|
||||
[rlgl] RENAMED: UnloadDefaultShader() to UnLoadShaderDefault()
|
||||
[rlgl] ADDED: rlGenMapCubemap(), Generate cubemap texture map from HDR texture
|
||||
[rlgl] ADDED: rlGenMapIrradiance(), Generate irradiance texture map
|
||||
[rlgl] ADDED: rlGenMapPrefilter(), Generate prefilter texture map
|
||||
[rlgl] ADDED: rlGenMapBRDF(), Generate BRDF texture map
|
||||
[rlgl] ADDED: GetVrDeviceInfo(), Get VR device information for some standard devices
|
||||
[rlgl] REVIEWED: InitVrSimulator(), to accept device parameters as input
|
||||
[core] ADDED: SetWindowTitle(), Set title for window (only PLATFORM_DESKTOP)
|
||||
[core] ADDED: GetExtension(), Get file extension
|
||||
[shapes] REMOVED: DrawRectangleGradient(), replaced by DrawRectangleGradientV() and DrawRectangleGradientH()
|
||||
[shapes] ADDED: DrawRectangleGradientV(), Draw a vertical-gradient-filled rectangle
|
||||
[shapes] ADDED: DrawRectangleGradientH(), Draw a horizontal-gradient-filled rectangle
|
||||
[shapes] ADDED: DrawRectangleGradientEx(), Draw a gradient-filled rectangle with custom vertex colors
|
||||
[shapes] ADDED: DrawRectangleT(), Draw rectangle using text character
|
||||
[textures] ADDED: SaveImageAs(), Save image as PNG file
|
||||
[textures] ADDED: GenImageGradientV(), Generate image: vertical gradient
|
||||
[textures] ADDED: GenImageGradientH(), Generate image: horizontal gradient
|
||||
[textures] ADDED: GenImageGradientRadial(), Generate image: radial gradient
|
||||
[textures] ADDED: GenImageChecked(), Generate image: checked
|
||||
[textures] ADDED: GenImageWhiteNoise(), Generate image: white noise
|
||||
[textures] ADDED: GenImagePerlinNoise(), Generate image: perlin noise
|
||||
[textures] ADDED: GenImageCellular(), Generate image: cellular algorithm. Bigger tileSize means bigger cells
|
||||
[textures] ADDED: GenTextureCubemap(), Generate cubemap texture from HDR texture
|
||||
[textures] ADDED: GenTextureIrradiance(), Generate irradiance texture using cubemap data
|
||||
[textures] ADDED: GenTexturePrefilter(), Generate prefilter texture using cubemap data
|
||||
[textures] ADDED: GenTextureBRDF(), Generate BRDF texture using cubemap data
|
||||
[models] REMOVED: LoadMeshEx(), Mesh struct variables can be directly accessed
|
||||
[models] REMOVED: UpdateMesh(), very ineficient
|
||||
[models] REMOVED: LoadHeightmap(), use GenMeshHeightmap() and LoadModelFromMesh()
|
||||
[models] REMOVED: LoadCubicmap(), use GenMeshCubicmap() and LoadModelFromMesh()
|
||||
[models] RENAMED: LoadDefaultMaterial() to LoadMaterialDefault()
|
||||
[models] ADDED: GenMeshPlane(), Generate plane mesh (with subdivisions)
|
||||
[models] ADDED: GenMeshCube(), Generate cuboid mesh
|
||||
[models] ADDED: GenMeshSphere(), Generate sphere mesh (standard sphere)
|
||||
[models] ADDED: GenMeshHemiSphere(), Generate half-sphere mesh (no bottom cap)
|
||||
[models] ADDED: GenMeshCylinder(), Generate cylinder mesh
|
||||
[models] ADDED: GenMeshTorus(), Generate torus mesh
|
||||
[models] ADDED: GenMeshKnot(), Generate trefoil knot mesh
|
||||
[models] ADDED: GenMeshHeightmap(), Generate heightmap mesh from image data
|
||||
[models] ADDED: GenMeshCubicmap(), Generate cubes-based map mesh from image data
|
||||
[raymath] REVIEWED: full Matrix functionality to align with GLM in usage
|
||||
[raymath] RENAMED: Vector3 functions for consistency: Vector*() renamed to Vector3*()
|
||||
[build] Integrate Android APK building into examples Makefile
|
||||
[build] Integrate Android APK building into templates Makefiles
|
||||
[build] Improved Visual Studio 2015 project, folders, references...
|
||||
[templates] Reviewed the full pack to support Android building
|
||||
[examples] Reviewed full collection to adapt to raylib changes
|
||||
[examples] [textures] ADDED: textures_image_generation
|
||||
[examples] [models] ADDED: models_mesh_generation
|
||||
[examples] [models] ADDED: models_material_pbr
|
||||
[examples] [models] ADDED: models_skybox
|
||||
[examples] [models] ADDED: models_yaw_pitch_roll
|
||||
[examples] [others] REVIEWED: rlgl_standalone
|
||||
[examples] [others] REVIEWED: audio_standalone
|
||||
[github] Moved raylib webpage to own repo: github.com/raysan5/raylib.com
|
||||
[games] Reviewed game: Koala Seasons
|
||||
[*] Updated STB libraries to latest version
|
||||
[*] Multiple bugs corrected (check github issues)
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.7.0 (20 May 2017)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
In this new raylib release, multiple parts of the library have been reviewed for consistency and simplification.
|
||||
It exposes almost 300 functions, around 30 new functions in comparison with previous version and, again,
|
||||
it sets a stepping stone towards raylib future.
|
||||
|
||||
BIG changes:
|
||||
- More than 30 new functions added to the library, check list below.
|
||||
- Support of configuration flags on every raylib module, to customize library build.
|
||||
- Improved build system for all supported platforms with a unique Makefile to compile sources.
|
||||
- Complete review of examples and sample games, added new sample material.
|
||||
- Support automatic GIF recording of current window, just pressing Ctrl+F12
|
||||
- Improved library consistency and organization in general.
|
||||
|
||||
other changes:
|
||||
[core] Added function: SetWindowIcon(), to setup icon by code
|
||||
[core] Added function: SetWindowMonitor(), to set current display monitor
|
||||
[core] Added function: SetWindowMinSize(), to set minimum resize size
|
||||
[core] Added function: TakeScreenshot(), made public to API (also launched internally with F12)
|
||||
[core] Added function: GetDirectoryPath(), get directory for a given fileName (with path)
|
||||
[core] Added function: GetWorkingDirectory(), get current working directory
|
||||
[core] Added function: ChangeDirectory(), change working directory
|
||||
[core] Added function: TraceLog(), made public to API
|
||||
[core] Improved timming system to avoid busy wait loop on frame sync: Wait()
|
||||
[core] Added support for gamepad on HTML5 platform
|
||||
[core] Support mouse lock, useful for camera system
|
||||
[core] Review functions description comments
|
||||
[rlgl] Removed function: GetStandardShader(), removed internal standard shader
|
||||
[rlgl] Removed function: CreateLight(), removed internal lighting system
|
||||
[rlgl] Removed function: DestroyLight(), removed internal lighting system
|
||||
[rlgl] Removed function: InitVrDevice(), removed VR device render, using simulator
|
||||
[rlgl] Removed function: CloseVrDevice(), removed VR device render, using simulator
|
||||
[rlgl] Removed function: IsVrDeviceReady(), removed VR device render, using simulator
|
||||
[rlgl] Removed function: IsVrSimulator(), removed VR device render, using simulator
|
||||
[rlgl] Added function: InitVrSimulator(), init VR simulator for selected device
|
||||
[rlgl] Added function: CloseVrSimulator(), close VR simulator for current device
|
||||
[rlgl] Added function: IsVrSimulatorReady(), detect if VR device is ready
|
||||
[rlgl] Added function: BeginVrDrawing(), begin VR simulator stereo rendering
|
||||
[rlgl] Added function: EndVrDrawing(), end VR simulator stereo rendering
|
||||
[rlgl] Renamed function: ReadTextFile() to LoadText() and exposed to API
|
||||
[rlgl] Removed internal lighting system and standard shader, moved to example
|
||||
[rlgl] Removed Oculus Rift support, moved to oculus_rift example
|
||||
[rlgl] Removed VR device support and replaced by VR simulator
|
||||
[shapes] Added function: DrawLineEx(), draw line with QUADS, supports custom line thick
|
||||
[shapes] Added function: DrawLineBezier(), draw a line using cubic-bezier curves in-out
|
||||
[shapes] Added function: DrawRectanglePro(), draw a color-filled rectangle with pro parameters
|
||||
[textures] Removed function: LoadImageFromRES(), redesigning custom RRES fileformat
|
||||
[textures] Removed function: LoadTextureFromRES(), redesigning custom RRES fileformat
|
||||
[textures] Removed function: LoadTextureEx(), use instead Image -> LoadImagePro(), LoadImageEx()
|
||||
[textures] Added function: LoadImagePro()), load image from raw data with parameters
|
||||
[textures] Review TraceLog() message when image file not found
|
||||
[text] Renamed function: LoadSpriteFontTTF() to LoadSpriteFontEx(), for consistency
|
||||
[text] Removed rBMF fileformat support, replaced by .png
|
||||
[text] Refactor SpriteFont struct (better for rres custom fileformat)
|
||||
[text] Renamed some variables for consistency
|
||||
[models] Added function: LoadMesh(), load mesh from file
|
||||
[models] Added function: LoadMeshEx(), load mesh from vertex data
|
||||
[models] Added function: UnloadMesh(), unload mesh from memory (RAM and/or VRAM)
|
||||
[models] Added function: GetCollisionRayMesh(), get collision info between ray and mesh
|
||||
[models] Added function: GetCollisionRayTriangle(), get collision info between ray and triangle
|
||||
[models] Added function: GetCollisionRayGround(), get collision info between ray and ground plane
|
||||
[models] Renamed function: LoadModelEx() to LoadModelFromMesh()
|
||||
[models] Removed function: DrawLight(), removed internal lighting system
|
||||
[models] Renamed function: LoadModelEx() to LoadModelFromMesh() for consistency
|
||||
[models] Removed function: LoadStandardMaterial(), removed internal standard shader
|
||||
[models] Removed function: LoadModelFromRES(), redesigning custom RRES fileformat
|
||||
[models] Renamed multiple variables for consistency
|
||||
[audio] Added function: SetMasterVolume(), define listener volume
|
||||
[audio] Added function: ResumeSound(), resume a paused sound
|
||||
[audio] Added function: SetMusicLoopCount(), set number of repeats for a music
|
||||
[audio] Added function: LoadWaveEx(), load wave from raw audio data
|
||||
[audio] Added function: WaveCrop(), crop wave audio data
|
||||
[audio] Added function: WaveFormat(), format audio data
|
||||
[audio] Removed function: LoadSoundFromRES(), redesigning custom RRES fileformat
|
||||
[audio] Added support for 32bit audio samples
|
||||
[audio] Preliminary support for multichannel, limited to mono and stereo
|
||||
[audio] Make sure buffers are ready for update: UpdateMusicStream()
|
||||
[utils] Replaced function: GetExtension() by IsFileExtension() and made public to API
|
||||
[utils] Unified function: TraceLog() between Android and other platforms
|
||||
[utils] Removed internal function: GetNextPOT(), simplified implementation
|
||||
[raymath] Added function: QuaternionToEuler(), to work with Euler angles
|
||||
[raymath] Added function: QuaternionFromEuler(), to work with Euler angles
|
||||
[raymath] Added multiple Vector2 math functions
|
||||
[build] Integrate Android source building into Makefile
|
||||
[example] Added example: shapes_lines_bezier
|
||||
[example] Added example: text_input_box
|
||||
[github] Moved gh-pages branch to master/docs
|
||||
[github] Moved rlua.h and Lua examples to own repo: raylib-lua
|
||||
[games] Reviewed full games collection
|
||||
[games] New game added to collection: Koala Seasons
|
||||
[*] Reviewed and improved examples collection (new assets)
|
||||
[*] Reorganized library functions, structs, enums
|
||||
[*] Updated STB libraries to latest version
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.6.0 (20 November 2016)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
This new raylib version commemorates raylib 3rd anniversary and represents another complete review of the library.
|
||||
It includes some interesting new features and is a stepping stone towards raylib future.
|
||||
|
||||
HUGE changes:
|
||||
[rlua] Lua BINDING: Complete raylib Lua binding, ALL raylib functions ported to Lua plus the +60 code examples.
|
||||
[audio] COMPLETE REDESIGN: Improved music support and also raw audio data processing and playing, +20 new functions added.
|
||||
[physac] COMPLETE REWRITE: Improved performance, functionality and simplified usage, moved to own repository and added multiple examples!
|
||||
|
||||
other changes:
|
||||
|
||||
[core] Corrected issue on OSX with HighDPI display
|
||||
[core] Added flag to allow resizable window
|
||||
[core] Allow no default font loading
|
||||
[core] Corrected old issue with mouse buttons on web
|
||||
[core] Improved gamepad support, unified across platforms
|
||||
[core] Gamepad id functionality: GetGamepadName(), IsGamepadName()
|
||||
[core] Gamepad buttons/axis checking functionality:
|
||||
[core] Reviewed Android key inputs system, unified with desktop
|
||||
[rlgl] Redesigned lighting shader system
|
||||
[rlgl] Updated standard shader for better performance
|
||||
[rlgl] Support alpha on framebuffer: rlglLoadRenderTexture()
|
||||
[rlgl] Reviewed UpdateVrTracking() to update camera
|
||||
[rlgl] Added IsVrSimulator() to check for VR simulator
|
||||
[shapes] Corrected issue on DrawPolyEx()
|
||||
[textures] Simplified supported image formats support
|
||||
[textures] Improved text drawing within an image: ImageDrawText()
|
||||
[textures] Support image alpha mixing: ImageAlphaMask()
|
||||
[textures] Support textures filtering: SetTextureFilter()
|
||||
[textures] Support textures wrap modes: SetTextureWrap()
|
||||
[text] Improved TTF spritefont generation: LoadSpriteFontTTF()
|
||||
[text] Improved AngelCode fonts support (unordered chars)
|
||||
[text] Added TraceLog info on image spritefont loading
|
||||
[text] Improved text measurement: MeasureTextEx()
|
||||
[models] Improved OBJ loading flexibility
|
||||
[models] Reviewed functions: DrawLine3D(), DrawCircle3D()
|
||||
[models] Removed function: ResolveCollisionCubicmap()
|
||||
[camera] Redesigned camera system and ported to header-only
|
||||
[camera] Removed function: UpdateCameraPlayer()
|
||||
[gestures] Redesigned gestures module to header-only
|
||||
[audio] Simplified Music loading and playing system
|
||||
[audio] Added trace on audio device closing
|
||||
[audio] Reviewed Wave struct, improved flexibility
|
||||
[audio] Support sound data update: UpdateSound()
|
||||
[audio] Added support for FLAC audio loading/streaming
|
||||
[raygui] Removed raygui from raylib repo (moved to own repo)
|
||||
[build] Added OpenAL static library
|
||||
[build] Added Visual Studio 2015 projects
|
||||
[build] Support shared/dynamic raylib compilation
|
||||
[*] Updated LibOVR to SDK version 1.8
|
||||
[*] Updated games to latest raylib version
|
||||
[*] Improved examples and added new ones
|
||||
[*] Improved Android support
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.5.0 (18 July 2016)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
Probably this new version is the biggest boost of the library ever, lots of parts of the library have been redesigned,
|
||||
lots of bugs have been solved and some **AMAZING** new features have been added.
|
||||
|
||||
HUGE changes:
|
||||
[rlgl] OCULUS RIFT CV1: Added support for VR, not oly Oculus Rift CV1 but also stereo rendering simulator (multiplatform).
|
||||
[rlgl] MATERIALS SYSTEM: Added support for Materials (.mtl) and multiple material properties: diffuse, specular, normal.
|
||||
[rlgl] LIGHTING SYSTEM: Added support for up to 8 lights of 3 different types: Omni, Directional and Spot.
|
||||
[physac] REDESIGNED: Improved performance and simplified usage, physic objects now are managed internally in a second thread!
|
||||
[audio] CHIPTUNES: Added support for module audio music (.xm, .mod) loading and playing. Multiple mixing channels supported.
|
||||
|
||||
other changes:
|
||||
|
||||
[core] Review Android button inputs
|
||||
[core] Support Android internal data storage
|
||||
[core] Renamed WorldToScreen() to GetWorldToScreen()
|
||||
[core] Removed function SetCustomCursor()
|
||||
[core] Removed functions BeginDrawingEx(), BeginDrawingPro()
|
||||
[core] Replaced functions InitDisplay() + InitGraphics() with: InitGraphicsDevice()
|
||||
[core] Added support for field-of-view Y (fovy) on 3d Camera
|
||||
[core] Added 2D camera mode functions: Begin2dMode() - End2dMode()
|
||||
[core] Translate mouse inputs to Android touch/gestures internally
|
||||
[core] Translate mouse inputs as touch inputs in HTML5
|
||||
[core] Improved function GetKeyPressed() to support multiple keys (including function keys)
|
||||
[core] Improved gamepad support, specially for RaspberryPi (including multiple gamepads support)
|
||||
[rlgl] Support stereo rendering simulation (duplicate draw calls by viewport, optimized)
|
||||
[rlgl] Added distortion shader (embeded) to support custom VR simulator: shader_distortion.h
|
||||
[rlgl] Added support for OpenGL 2.1 on desktop
|
||||
[rlgl] Improved 2D vs 3D drawing system (lines, triangles, quads)
|
||||
[rlgl] Improved DXT-ETC1 support on HTML5
|
||||
[rlgl] Review function: rlglUnproject()
|
||||
[rlgl] Removed function: rlglInitGraphics(), integrated into rlglInit()
|
||||
[rlgl] Updated Mesh and Shader structs
|
||||
[rlgl] Simplified internal (default) dynamic buffers
|
||||
[rlgl] Added support for indexed and dynamic mesh data
|
||||
[rlgl] Set fixed vertex attribs location points
|
||||
[rlgl] Improved mesh data loading support
|
||||
[rlgl] Added standard shader (embeded) to support materials and lighting: shader_standard.h
|
||||
[rlgl] Added light functions: CreateLight(), DestroyLight()
|
||||
[rlgl] Added wire mode functions: rlDisableWireMode(), rlEnableWireMode()
|
||||
[rlgl] Review function consistency, added: rlglLoadMesh(), rlglUpdateMesh(), rlglDrawMesh(), rlglUnloadMesh()
|
||||
[rlgl] Replaced SetCustomShader() by: BeginShaderMode() - EndShaderMode()
|
||||
[rlgl] Replaced SetBlendMode() by: BeginBlendMode() - EndBlendMode()
|
||||
[rlgl] Added functions to customize internal matrices: SetMatrixProjection(), SetMatrixModelview()
|
||||
[rlgl] Unified internal shaders to only one default shader
|
||||
[rlgl] Added support for render to texture (RenderTexture2D):
|
||||
LoadRenderTexture() - UnloadRenderTexture()
|
||||
BeginTextureMode() - EndTextureMode()
|
||||
[rlgl] Removed SetShaderMap*() functions
|
||||
[rlgl] Redesigned default buffers usage functions:
|
||||
LoadDefaultBuffers() - UnloadDefaultBuffers()
|
||||
UpdateDefaultBuffers() - DrawDefaultBuffers()
|
||||
[shapes] Corrected bug on GetCollisionRec()
|
||||
[textures] Added support for Nearest-Neighbor image scaling
|
||||
[textures] Added functions to draw text on image: ImageDrawText(), ImageDrawTextEx()
|
||||
[text] Reorganized internal functions: Added LoadImageFont()
|
||||
[text] Security check for unsupported BMFonts
|
||||
[models] Split mesh creation from model loading on heightmap and cubicmap
|
||||
[models] Updated BoundingBox collision detections
|
||||
[models] Added color parameter to DrawBoundigBox()
|
||||
[models] Removed function: DrawQuad()
|
||||
[models] Removed function: SetModelTexture()
|
||||
[models] Redesigned DrawPlane() to use RL_TRIANGLES
|
||||
[models] Redesigned DrawRectangleV() to use RL_TRIANGLES
|
||||
[models] Redesign to accomodate new materials system: LoadMaterial()
|
||||
[models] Added material functions: LoadDefaultMaterial(), LoadStandardMaterial()
|
||||
[models] Added MTL material loading support: LoadMTL()
|
||||
[models] Added function: DrawLight()
|
||||
[audio] Renamed SoundIsPlaying() to IsSoundPlaying()
|
||||
[audio] Renamed MusicIsPlaying() to IsMusicPlaying()
|
||||
[audio] Support multiple Music streams (indexed)
|
||||
[audio] Support multiple mixing channels
|
||||
[gestures] Improved and reviewed gestures system
|
||||
[raymath] Added QuaternionInvert()
|
||||
[raymath] Removed function: PrintMatrix()
|
||||
[raygui] Ported to header-only library (https://github.com/raysan5/raygui)
|
||||
[shaders] Added depth drawing shader (requires a depth texture)
|
||||
[shaders] Reviewed included shaders and added comments
|
||||
[OpenAL Soft] Updated to latest version (1.17.2)
|
||||
[GLFW3] Updated to latest version (3.2)
|
||||
[stb] Updated to latest headers versions
|
||||
[GLAD] Converted to header only library and simplified to only used extensions
|
||||
[*] Reorganize library folders: external libs moved to src/external folder
|
||||
[*] Reorganize src folder for Android library
|
||||
[*] Review external dependencies usage
|
||||
[*] Improved Linux and OSX build systems
|
||||
[*] Lots of tweaks and bugs corrected all around
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.4.0 (22 February 2016)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
This version supposed another big improvement for raylib, including new modules and new features.
|
||||
More than 30 new functions have been added to previous raylib version.
|
||||
Around 8 new examples and +10 new game samples have been added.
|
||||
|
||||
BIG changes:
|
||||
[textures] IMAGE MANIPULATION: Functions to crop, resize, colorize, flip, dither and even draw image-to-image or text-to-image.
|
||||
[text] SPRITEFONT SUPPORT: Added support for AngelCode fonts (.fnt) and TrueType fonts (.ttf).
|
||||
[gestures] REDESIGN: Gestures system simplified and prepared to process generic touch events, including mouse events (multiplatform).
|
||||
[physac] NEW MODULE: Basic 2D physics support, use colliders and rigidbodies; apply forces to physic objects.
|
||||
|
||||
other changes:
|
||||
|
||||
[rlgl] Removed GLEW library dependency, now using GLAD
|
||||
[rlgl] Implemented alternative to glGetTexImage() on OpenGL ES
|
||||
[rlgl] Using depth data on batch drawing
|
||||
[rlgl] Reviewed glReadPixels() function
|
||||
[core][rlgl] Reviewed raycast system, now 3D picking works
|
||||
[core] Android: Reviewed Android App cycle, paused if inactive
|
||||
[shaders] Implemented Blinn-Phong lighting shading model
|
||||
[textures] Implemented Floyd-Steinberg dithering - ImageDither()
|
||||
[text] Added line-break support to DrawText()
|
||||
[text] Added TrueType Fonts support (using stb_truetype)
|
||||
[models] Implement function: CalculateBoundingBox(Mesh mesh)
|
||||
[models] Added functions to check Ray collisions
|
||||
[models] Improve map resolution control on LoadHeightmap()
|
||||
[camera] Corrected small-glitch on zoom-in with mouse-wheel
|
||||
[gestures] Implemented SetGesturesEnabled() to enable only some gestures
|
||||
[gestures] Implemented GetElapsedTime() on Windows system
|
||||
[gestures] Support mouse gestures for desktop platforms
|
||||
[raymath] Complete review of the module and converted to header-only
|
||||
[easings] Added new module for easing animations
|
||||
[stb] Updated to latest headers versions
|
||||
[*] Lots of tweaks around
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.3.0 (01 September 2015)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
This version supposed a big boost for raylib, new modules have been added with lots of features.
|
||||
Most of the modules have been completely reviewed to accomodate to the new features.
|
||||
Over 50 new functions have been added to previous raylib version.
|
||||
Most of the examples have been redone and +10 new advanced examples have been added.
|
||||
|
||||
BIG changes:
|
||||
[rlgl] SHADERS: Support for model shaders and postprocessing shaders (multiple functions)
|
||||
[textures] FORMATS: Support for multiple internal formats, including compressed formats
|
||||
[camera] NEW MODULE: Set of cameras for 3d view: Free, Orbital, 1st person, 3rd person
|
||||
[gestures] NEW MODULE: Gestures system for Android and HTML5 platforms
|
||||
[raygui] NEW MODULE: Set of IMGUI elements for tools development (experimental)
|
||||
|
||||
other changes:
|
||||
|
||||
[rlgl] Added check for OpenGL supported extensions
|
||||
[rlgl] Added function SetBlenMode() to select some predefined blending modes
|
||||
[core] Added support for drop&drag of external files into running program
|
||||
[core] Added functions ShowCursor(), HideCursor(), IsCursorHidden()
|
||||
[core] Renamed function SetFlags() to SetConfigFlags()
|
||||
[shapes] Simplified some functions to improve performance
|
||||
[textures] Review of Image struct to support multiple data formats
|
||||
[textures] Added function LoadImageEx()
|
||||
[textures] Added function LoadImageRaw()
|
||||
[textures] Added function LoadTextureEx()
|
||||
[textures] Simplified function parameters LoadTextureFromImage()
|
||||
[textures] Added function GetImageData()
|
||||
[textures] Added function GetTextureData()
|
||||
[textures] Renamed function ConvertToPOT() to ImageConvertToPOT()
|
||||
[textures] Added function ImageConvertFormat()
|
||||
[textures] Added function GenTextureMipmaps()
|
||||
[text] Added support for Latin-1 Extended characters for default font
|
||||
[text] Redesigned SpriteFont struct, replaced Character struct by Rectangle
|
||||
[text] Removed function GetFontBaseSize(), use directly spriteFont.size
|
||||
[models] Review of struct: Model (added shaders support)
|
||||
[models] Added 3d collision functions (sphere vs sphere vs box vs box)
|
||||
[models] Added function DrawCubeTexture()
|
||||
[models] Added function DrawQuad()
|
||||
[models] Added function DrawRay()
|
||||
[models] Simplified funtion DrawPlane()
|
||||
[models] Removed function DrawPlaneEx()
|
||||
[models] Simplified funtion DrawGizmo()
|
||||
[models] Removed function DrawGizmoEx()
|
||||
[models] Added function LoadModelEx()
|
||||
[models] Review of function LoadCubicMap()
|
||||
[models] Added function ResolveCollisionCubicmap()
|
||||
[audio] Decopupled from raylib, now this module can be used as standalone
|
||||
[audio] Added function UpdateMusicStream()
|
||||
[raymath] Complete review of the module
|
||||
[stb] Updated to latest headers versions
|
||||
[*] Lots of tweaks around
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.2.2 (31 December 2014)
|
||||
-----------------------------------------------
|
||||
[*] Added support for HTML5 compiling (emscripten, asm.js)
|
||||
[core] Corrected bug on input handling (keyboard and mouse)
|
||||
[textures] Renamed function CreateTexture() to LoadTextureFromImage()
|
||||
[textures] Added function ConvertToPOT()
|
||||
[rlgl] Added support for color tint on models on GL 3.3+ and ES2
|
||||
[rlgl] Added support for normals on models
|
||||
[models] Corrected bug on DrawBillboard()
|
||||
[models] Corrected bug on DrawHeightmap()
|
||||
[models] Renamed LoadCubesmap() to LoadCubicmap()
|
||||
[audio] Added function LoadSoundFromWave()
|
||||
[makefile] Added support for Linux and OSX compiling
|
||||
[stb] Updated to latest headers versions
|
||||
[*] Lots of tweaks around
|
||||
|
||||
---------------------------------------------------------------
|
||||
Update: raylib 1.2.1 (17 October 2014) (Small Fixes Update)
|
||||
---------------------------------------------------------------
|
||||
[core] Added function SetupFlags() to preconfigure raylib Window
|
||||
[core] Corrected bug on fullscreen mode
|
||||
[rlgl] rlglDrawmodel() - Added rotation on Y axis
|
||||
[text] MeasureTextEx() - Corrected bug on measures for default font
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.2 (16 September 2014)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
This version supposed a complete redesign of the [core] module to support Android and Raspberry Pi.
|
||||
Multiples modules have also been tweaked to accomodate to the new platforms, specially [rlgl]
|
||||
|
||||
[core] Added multiple platforms support: Android and Raspberry Pi
|
||||
[core] InitWindow() - Complete rewrite and split for Android
|
||||
[core] InitDisplay() - Internal function added to calculate proper display size
|
||||
[core] InitGraphics() - Internal function where OpenGL graphics are initialized
|
||||
[core] Complete refactoring of input functions to accomodate to new platforms
|
||||
[core] Mouse and Keyboard raw data reading functions added for Raspberry Pi
|
||||
[core] GetTouchX(), GetTouchY() - Added for Android
|
||||
[core] Added Android callbacks to process inputs and Android activity commands
|
||||
[rlgl] Adjusted buffers depending on platform
|
||||
[rlgl] Added security check in case deployed vertex excess buffer size
|
||||
[rlgl] Adjusted indices type depending on GL version (int or short)
|
||||
[rlgl] Fallback to VBOs only usage if VAOs not supported on ES2
|
||||
[rlgl] rlglLoadModel() stores vbo ids on new Model struct
|
||||
[textures] Added support for PKM files (ETC1, ETC2 compression support)
|
||||
[shapes] DrawRectangleV() - Modified, depending on OGL version uses TRIANGLES or QUADS
|
||||
[text] LoadSpriteFont() - Modified to use LoadImage()
|
||||
[models] Minor changes on models loading to accomodate to new Model struct
|
||||
[audio] PauseMusicStream(), ResumeMusicStream() - Added
|
||||
[audio] Reduced music buffer size to avoid stalls on Raspberry Pi
|
||||
[src] Added makefile for Windows and RPI
|
||||
[src] Added resources file (raylib icon and executable info)
|
||||
[examples] Added makefile for Windows and RPI
|
||||
[examples] Renamed and merged with test examples for coherence with module names
|
||||
[templates] Added multiple templates to be use as a base-code for games
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.1.1 (22 July 2014)
|
||||
-----------------------------------------------
|
||||
[core] ShowLogo() - To enable raylib logo animation at startup
|
||||
[core] Corrected bug with window resizing
|
||||
[rlgl] Redefined colors arrays to use byte instead of float
|
||||
[rlgl] Removed double buffer system (no performance improvement)
|
||||
[rlgl] rlglDraw() - Reorganized buffers drawing order
|
||||
[rlgl] Corrected bug on screen resizing
|
||||
[shapes] DrawRectangle() - Use QUADS instead of TRIANGLES
|
||||
[models] DrawSphereWires() - Corrected some issues
|
||||
[models] LoadOBJ() - Redesigned to support multiple meshes
|
||||
[models] LoadCubesMap() - Loading a map as cubes (by pixel color)
|
||||
[textures] Added security check if file doesn't exist
|
||||
[text] Corrected bug on SpriteFont loading
|
||||
[examples] Corrected some 3d examples
|
||||
[test] Added cubesmap loading test
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.1.0 (19 April 2014)
|
||||
-----------------------------------------------
|
||||
NOTE:
|
||||
This version supposed a complete internal redesign of the library to support OpenGL 3.3+ and OpenGL ES 2.0.
|
||||
New module [rlgl] has been added to 'translate' immediate mode style functions (i.e. rlVertex3f()) to GL 1.1, 3.3+ or ES2.
|
||||
Another new module [raymath] has also been added with lot of useful 3D math vector-matrix-quaternion functions.
|
||||
|
||||
[rlgl] New module, abstracts OpenGL rendering (multiple versions support)
|
||||
[raymath] New module, useful 3D math vector-matrix-quaternion functions
|
||||
[core] Adapt all OpenGL code (initialization, drawing) to use [rlgl]
|
||||
[shapes] Rewrite all shapes drawing functions to use [rlgl]
|
||||
[textures] Adapt texture GPU loading to use [rlgl]
|
||||
[textures] Added support for DDS images (compressed and uncompressed)
|
||||
[textures] CreateTexture() - Redesigned to add mipmap automatic generation
|
||||
[textures] DrawTexturePro() - Redesigned and corrected bugs
|
||||
[models] Rewrite all 3d-shapes drawing functions to use [rlgl]
|
||||
[models] Adapt model loading and drawing to use [rlgl]
|
||||
[models] Model struct updated to include texture id
|
||||
[models] SetModelTexture() - Added, link a texture to a model
|
||||
[models] DrawModelEx() - Redesigned with extended parameters
|
||||
[audio] Added music streaming support (OGG files)
|
||||
[audio] Added support for OGG files as Sound
|
||||
[audio] PlayMusicStream() - Added, open a new music stream and play it
|
||||
[audio] StopMusicStream() - Added, stop music stream playing and close stream
|
||||
[audio] PauseMusicStream() - Added, pause music stream playing
|
||||
[audio] MusicIsPlaying() - Added, to check if music is playing
|
||||
[audio] SetMusicVolume() - Added, set volume for music
|
||||
[audio] GetMusicTimeLength() - Added, get current music time length (in seconds)
|
||||
[audio] GetMusicTimePlayed() - Added, get current music time played (in seconds)
|
||||
[utils] Added log tracing functionality - TraceLog(), TraceLogOpen(), TraceLogClose()
|
||||
[*] Log tracing messages all around the code
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.0.6 (16 March 2014)
|
||||
-----------------------------------------------
|
||||
[core] Removed unused lighting-system code
|
||||
[core] Removed SetPerspective() function, calculated directly
|
||||
[core] Unload and reload default font on fullscreen toggle
|
||||
[core] Corrected bug gamepad buttons checking if no gamepad available
|
||||
[texture] DrawTextureV() - Added, to draw using Vector2 for position
|
||||
[texture] LoadTexture() - Redesigned, now uses LoadImage() + CreateTexture()
|
||||
[text] FormatText() - Corrected memory leak bug
|
||||
[models] Added Matrix struct and related functions
|
||||
[models] DrawBillboard() - Reviewed, now it works!
|
||||
[models] DrawBillboardRec() - Reviewed, now it works!
|
||||
[tests] Added folder with multiple tests for new functions
|
||||
|
||||
-----------------------------------------------
|
||||
Update: raylib 1.0.5 (28 January 2014)
|
||||
-----------------------------------------------
|
||||
[audio] LoadSound() - Corrected a bug, WAV file was not closed!
|
||||
[core] GetMouseWheelMove() - Added, check mouse wheel Y movement
|
||||
[texture] CreateTexture2D() renamed to CreateTexture()
|
||||
[models] LoadHeightmap() - Added, Heightmap can be loaded as a Model
|
||||
[tool] rREM updated, now supports (partially) drag and drop of files
|
||||
|
||||
-----------------------------------------------
|
||||
Release: raylib 1.0.4 (23 January 2014)
|
||||
|
61
CMakeLists.txt
Executable file
@@ -0,0 +1,61 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
|
||||
# Config options
|
||||
option(BUILD_EXAMPLES "Build the examples." ON)
|
||||
option(BUILD_GAMES "Build the example games." ON)
|
||||
option(ENABLE_ASAN "Enable AddressSanitizer (ASAN) for debugging (degrades performance)" OFF)
|
||||
option(ENABLE_UBSAN "Enable UndefinedBehaviorSanitizer (UBSan) for debugging" OFF)
|
||||
option(ENABLE_MSAN "Enable MemorySanitizer (MSan) for debugging (not recommended for run with ASAN)" OFF)
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS "3.1")
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
set(CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}")
|
||||
endif()
|
||||
else()
|
||||
set (CMAKE_C_STANDARD 99)
|
||||
endif()
|
||||
|
||||
include(CheckCCompilerFlag)
|
||||
function(add_if_flag_works flag)
|
||||
CHECK_C_COMPILER_FLAG("${flag}" COMPILER_HAS_THOSE_TOGGLES)
|
||||
set(outcome "Failed")
|
||||
if(COMPILER_HAS_THOSE_TOGGLES)
|
||||
foreach(var ${ARGN})
|
||||
set(${var} "${flag} ${${var}}" PARENT_SCOPE)
|
||||
endforeach()
|
||||
set(outcome "works")
|
||||
endif()
|
||||
message(STATUS "Testing if ${flag} can be used -- ${outcome}")
|
||||
endfunction()
|
||||
|
||||
add_if_flag_works(-Werror=pointer-arith CMAKE_C_FLAGS)
|
||||
add_if_flag_works(-Werror=implicit-function-declaration CMAKE_C_FLAGS)
|
||||
# src/external/jar_xm.h does shady stuff
|
||||
add_if_flag_works(-fno-strict-aliasing CMAKE_C_FLAGS)
|
||||
|
||||
if (ENABLE_ASAN)
|
||||
add_if_flag_works(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||
add_if_flag_works(-fsanitize=address CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||
endif()
|
||||
if (ENABLE_UBSAN)
|
||||
add_if_flag_works(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||
add_if_flag_works(-fsanitize=undefined CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||
endif()
|
||||
if (ENABLE_MSAN)
|
||||
add_if_flag_works(-fno-omit-frame-pointer CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||
add_if_flag_works(-fsanitize=memory CMAKE_C_FLAGS CMAKE_LINKER_FLAGS)
|
||||
endif()
|
||||
|
||||
if (ENABLE_MSAN AND ENABLE_ASAN)
|
||||
MESSAGE(WARNING "Compiling with both AddressSanitizer and MemorySanitizer is not recommended")
|
||||
endif()
|
||||
|
||||
add_subdirectory(src release)
|
||||
|
||||
if (${BUILD_EXAMPLES})
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
if (${BUILD_GAMES})
|
||||
add_subdirectory(games)
|
||||
endif()
|
128
CONTRIBUTING.md
Normal file
@@ -0,0 +1,128 @@
|
||||
## Contributing to raylib
|
||||
|
||||
Hello contributors! Welcome to raylib!
|
||||
|
||||
This document contains a set of guidelines to contribute to the project. These are mostly guidelines, not rules.
|
||||
Use your best judgement, and feel free to propose changes to this document in a pull-request.
|
||||
|
||||
### raylib philosophy
|
||||
|
||||
- raylib is a tool to LEARN videogames programming, every single function in raylib should be a tutorial on itself.
|
||||
- raylib is SIMPLE and EASY-TO-USE, I tried to keep it compact with a small set of functions, if a function is too complex or is not clearly useful, better not to include it.
|
||||
- raylib is open source and free; educators and institutions can use this tool to TEACH videogames programming completely by free.
|
||||
- raylib is collaborative; contribution of tutorials / code-examples / bugs-solving / code-comments are highly appreciated.
|
||||
- raylib's license (and its external libs respective licenses) allow using it for commercial products.
|
||||
|
||||
### Some interesting reads to start with
|
||||
|
||||
- [raylib history](HISTORY.md)
|
||||
- [raylib architecture](https://github.com/raysan5/raylib/wiki/raylib-architecture)
|
||||
- [raylib license](LICENSE.md)
|
||||
- [raylib roadmap](ROADMAP.md)
|
||||
|
||||
[raylib Wiki](https://github.com/raysan5/raylib/wiki) contains some information about the library and is open to anyone for edit.
|
||||
Feel free to review it if required, just take care not to break anything.
|
||||
|
||||
### raylib C coding conventions
|
||||
|
||||
Despite being written in C, raylib does not follow the standard Hungarian notation for C,
|
||||
it [follows Pascal-case/camel-case notation](https://github.com/raysan5/raylib/wiki/raylib-coding-conventions),
|
||||
more common on C# language. All code formatting decisions have been carefully taken
|
||||
to make it easier for students to read, write and understand code.
|
||||
|
||||
Source code is extensively commented for that purpose, raylib primary learning method is:
|
||||
|
||||
> learn by reading code and examples
|
||||
|
||||
For detailed information on building raylib and examples, please check [raylib Wiki](https://github.com/raysan5/raylib/wiki).
|
||||
|
||||
### Opening new Issues
|
||||
|
||||
To open new issue for raylib (bug, enhancement, discussion...), just try to follow these rules:
|
||||
|
||||
- Make sure the issue has not already been reported before by searching on GitHub under Issues.
|
||||
- If you're unable to find an open issue addressing the problem, open a new one. Be sure to include a
|
||||
title and clear description, as much relevant information as possible, and a code sample demonstrating the unexpected behavior.
|
||||
- If applies, attach some screenshot of the issue and a .zip file with the code sample and required resources.
|
||||
- On issue description, add a brackets tag about the raylib module that relates to this issue.
|
||||
If don't know the module, just report the issue, I will review it.
|
||||
- You can check other issues to see how is being done!
|
||||
|
||||
### Sending a Pull-Request
|
||||
|
||||
- Make sure the PR description clearly describes the problem and solution. Include the relevant issue number if applicable.
|
||||
- Don't send big pull-requests (lots of changelists), they are difficult to review. It's better to send small pull-request, one at a time.
|
||||
- Verify that changes don't break the build (at least on Windows platform). As many platforms where you can test it, the better, but don't worry
|
||||
if you cannot test all the platforms.
|
||||
|
||||
### raylib bindings
|
||||
|
||||
Some people ported raylib to other languages in form of bindings or wrappers to the library, here is a list with the ones I'm aware of:
|
||||
|
||||
- [raylib C/C++ version (default)](https://github.com/raysan5/raylib)
|
||||
- [raylib Lua binding](https://github.com/raysan5/raylib-lua)
|
||||
- [raylib Go binding](https://github.com/gen2brain/raylib-go)
|
||||
- [raylib Nim binding](https://gitlab.com/define-private-public/raylib-Nim)
|
||||
- [raylib Crystal binding](https://gitlab.com/Zatherz/cray)
|
||||
- [raylib Perl wrapper](https://metacpan.org/pod/Graphics::Raylib)
|
||||
- raylib Pascal binding with custom IDE (closed-source)
|
||||
|
||||
Usually, raylib bindings follow the convention: `raylib-{language}`
|
||||
|
||||
Let me know if you're writing a new binding for raylib, I will list it here and I usually
|
||||
provide the icon/logo for that new language binding.
|
||||
|
||||
### Contact information
|
||||
|
||||
If you have any doubt, don't hesitate to [contact me](mailto:ray@raylib.com)!.
|
||||
You can write me a direct mail but you can also contact me on the following networks:
|
||||
|
||||
- [raylib forum](http://forum.raylib.com/) - A good place for discussions or to ask for help.
|
||||
- [raylib gitter](https://gitter.im/raylib) - A direct communication channel for project discussions.
|
||||
- [raylib twitter](https://twitter.com/raysan5) - My personal twitter account, I usually post about raylib, you can send me PMs.
|
||||
- [raylib web](http://www.raylib.com/) - On top-right corner there is a bunch of networks where you can find me.
|
||||
|
||||
Thank you very much for your time! :)
|
||||
|
||||
----
|
||||
|
||||
Here is a list of raylib contributors, these people have invested part of their time
|
||||
contributing (in some way or another) to make the raylib project better. Huge thanks to all of them!
|
||||
|
||||
- [Zopokx](https://github.com/Zopokx) for testing the web.
|
||||
- [Elendow](http://www.elendow.com) for testing and helping on web development.
|
||||
- Victor Dual for implementing and testing 3D shapes functions.
|
||||
- Marc Palau for implementing and testing 3D shapes functions and contribute on camera and gestures modules.
|
||||
- Kevin Gato for improving texture internal formats support and helping on raygui development.
|
||||
- Daniel Nicolas for improving texture internal formats support and helping on raygui development.
|
||||
- Marc Agüera for testing and using raylib on a real product ([Koala Seasons](http://www.koalaseasons.com))
|
||||
- Daniel Moreno for testing and using raylib on a real product ([Koala Seasons](http://www.koalaseasons.com))
|
||||
- Daniel Gomez for testing and using raylib on a real product ([Koala Seasons](http://www.koalaseasons.com))
|
||||
- [Sergio Martinez](https://github.com/anidealgift) for helping on raygui development and tools development (raygui_styler).
|
||||
- [Victor Fisac](https://github.com/victorfisac) for developing physics raylib module (physac) and implementing PBR materials and lighting systems... among multiple other improvements and multiple tools and games.
|
||||
- Albert Martos for helping on raygui and porting examples and game-templates to Android and HTML5.
|
||||
- Ian Eito for helping on raygui and porting examples and game-templates to Android and HTML5.
|
||||
- [procedural](https://github.com/procedural) for testing raylib on Linux, correcting some bugs and adding several mouse functions.
|
||||
- [Chris Hemingway](https://github.com/cHemingway) for improving raylib on OSX build system.
|
||||
- [Emanuele Petriglia](https://github.com/LelixSuper) for working on multiple GNU/Linux improvements and developing [TicTacToe](https://github.com/LelixSuper/TicTacToe) raylib game.
|
||||
- [Joshua Reisenauer](https://github.com/kd7tck) for adding audio modules support (XM, MOD) and reviewing audio system.
|
||||
- [Marcelo Paez](https://github.com/paezao) for his help on OSX to solve High DPI display issue. Thanks Marcelo!
|
||||
- [Ghassan Al-Mashareqa](https://github.com/ghassanpl) for his amazing contribution with raylib Lua module, I just work over his code to implement [rlua](https://github.com/raysan5/raylib/blob/master/src/rlua.h)
|
||||
- [Teodor Stoenescu](https://github.com/teodor-stoenescu) for his improvements on OBJ object loading.
|
||||
- [RDR8](https://github.com/RDR8) for helping with Linux build improvements
|
||||
- [Saggi Mizrahi](https://github.com/ficoos) for multiple fixes on Linux and audio system
|
||||
- [Daniel Lemos](https://github.com/xspager) for fixing issues on Linux games building
|
||||
- [Joel Davis](https://github.com/joeld42) for adding raycast picking utilities and a [great example](https://github.com/raysan5/raylib/blob/master/examples/models/models_mesh_picking.c)
|
||||
- [Richard Goodwin](https://github.com/AudioMorphology) for adding RPI touchscreen support
|
||||
- [Milan Nikolic](https://github.com/gen2brain) for adding Android build support with custom standalone toolchain
|
||||
- [Michael Vetter](https://github.com/jubalh) for improvements on build system and adding meson support for Linux
|
||||
- [Wilhem Barbier](https://github.com/nounoursheureux) for adding Image generation functions and some fixes
|
||||
- [Benjamin Summerton](https://github.com/define-private-public) for improving OSX building and his amazing work on CMake build sytem
|
||||
- [MartinFX](https://github.com/Martinfx) for adding compilation support for FreeBSD OS
|
||||
- [Wilhem Barbier](https://github.com/nounoursheureux) for supporting default shaders on shader loading, if shader not provided
|
||||
- [Ahmad Fatoum](https://github.com/a3f) for implementing continuus integration support for raylib (Travis and AppVeyor) and greatly improving build system.
|
||||
- [SamNChiet](https://github.com/SamNChiet) for his work on UWP inputs implementation.
|
||||
- [David Reid](https://github.com/mackron) for a complete review of audio module to support his amazing mini_al audio library.
|
||||
- [Kai](https://github.com/questor) for multiple code reviews and improvements.
|
||||
|
||||
Please, if I forget someone in this list, excuse me and write me an email to remind me to add you!
|
18
HELPME.md
@@ -7,23 +7,21 @@ please, [let me know][raysan5].
|
||||
The following help is highly appreciated:
|
||||
|
||||
- C programming - Can you write / review / test / improve the code?
|
||||
- Translators / Localizators - Can you translate raylib to another language?
|
||||
- Documentation / Tutorials / Example writters - Can you write some tutorial / example?
|
||||
- Web Development - Can you help with the web? Can you setup a forum?
|
||||
- Porting to Linux and OSX - Can you compile and test raylib on another OS?
|
||||
- Web Development - Can you help with the web? SEO, style, code writting: https://github.com/raysan5/raylib.com
|
||||
- Porting to Linux, OSX, RaspberryPi, consoles... - Can you compile and test raylib on another systems?
|
||||
- Testers of current features and multiple systems - Can you find some bug on raylib?
|
||||
|
||||
If you can not help on any of the above points but you still want to contribute in some way... please, consider helping
|
||||
with a small [donation](http://www.raylib.com/helpme.htm) (just some euros...). It will really motivate to continue improving this project (and pay some bills… or some coffee).
|
||||
with a small [donation](http://www.raylib.com/helpme.html) or contributing with [raylib patreon](https://www.patreon.com/raysan5). It will really motivate to continue improving this project...
|
||||
|
||||
raylib philosophy
|
||||
------------------
|
||||
|
||||
* raylib is a tool to LEARN videogames programming, every single function in raylib should be a tutorial on itself.
|
||||
* raylib is SIMPLE and EASY-TO-USE, I tried to keep it compact with a small set of functions, if a function is too complex or
|
||||
has not a clear usefulness, better not to include it.
|
||||
* raylib is SIMPLE and EASY-TO-USE, I tried to keep it compact with a small set of functions, if a function is too complex or has not a clear usefulness, better not to include it.
|
||||
* raylib is open source and free; educators and institutions can use this tool to TEACH videogames programming completely by free.
|
||||
* raylib is, hopefully, collaborative; contribution of tutorials / code-examples / bugs-solving / code-comments are highly appreciated.
|
||||
* raylib is collaborative; contribution of tutorials / code-examples / bugs-solving / code-comments are highly appreciated.
|
||||
* raylib's license (and its external libs respective licenses) allow using it for commercial products.
|
||||
|
||||
contact
|
||||
@@ -32,6 +30,8 @@ contact
|
||||
* Webpage: [http://www.raylib.com](http://www.raylib.com)
|
||||
* Twitter: [http://www.twitter.com/raysan5](http://www.twitter.com/raysan5)
|
||||
* Facebook: [http://www.facebook.com/raylibgames](http://www.facebook.com/raylibgames)
|
||||
* Reddit: [https://www.reddit.com/r/raylib](https://www.reddit.com/r/raylib)
|
||||
* Twitch: [http://www.twitch.tv/raysan5](http://www.twitch.tv/raysan5)
|
||||
* Patreon: [https://www.patreon.com/raysan5](https://www.patreon.com/raysan5)
|
||||
|
||||
|
||||
[raysan5]: mailto:raysan@raysanweb.com "Ramon Santamaria - Ray San"
|
||||
[raysan5]: mailto:ray@raylib.com "Ramon Santamaria - Ray San"
|
||||
|
204
HISTORY.md
Normal file
@@ -0,0 +1,204 @@
|
||||
<img src="https://github.com/raysan5/raylib/blob/master/logo/logo256x256.png" width=256>
|
||||
|
||||
history
|
||||
-------
|
||||
|
||||
I've developed videogames for some years and 4 years ago I started teaching videogames development
|
||||
to young people with artistic profile, most of them had never written a single line of code.
|
||||
|
||||
I started with C language basis and, after searching for the most simple and easy-to-use library to teach
|
||||
videogames programming, I found WinBGI; it was great and it worked very well with students, in just a
|
||||
couple of weeks that people that had never written a single line of code were able to program (and understand)
|
||||
a simple PONG and some of them even a BREAKOUT!
|
||||
|
||||
But WinBGI was not the clearer and most organized lib. There were a lot of things I found useless and
|
||||
confusing and some function names were not clear enough for most of the students; not to mention points
|
||||
like no transparencies support or no hardware acceleration.
|
||||
|
||||
So, I decided to create my own lib, hardware accelerated, clear function names, quite organized, well structured,
|
||||
plain C coding and, the most important, primarily intended to LEARN videogames programming.
|
||||
|
||||
I've coded quite a lot in C# and XNA and I really love it (in fact, my students learn C# after C),
|
||||
so, I decided to use C# language notation and XNA naming conventions. That way, students can jump from
|
||||
raylib to XNA, MonoGame or similar libs extremely easily.
|
||||
|
||||
raylib started as a weekend project and after three months of hard work, raylib 1.0 was published on November 2013.
|
||||
|
||||
Enjoy it.
|
||||
|
||||
notes on raylib 1.1
|
||||
-------------------
|
||||
|
||||
On April 2014, after 6 month of first raylib release, raylib 1.1 has been released. This new version presents a
|
||||
complete internal redesign of the library to support OpenGL 1.1, OpenGL 3.3+ and OpenGL ES 2.0.
|
||||
|
||||
A new module named [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h) has been added to the library. This new module translates raylib-OpenGL-style
|
||||
immediate mode functions (i.e. rlVertex3f(), rlBegin(), ...) to different versions of OpenGL (1.1, 3.3+, ES2), selectable by one define.
|
||||
|
||||
[rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h) also comes with a second new module named [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h), which includes
|
||||
a bunch of useful functions for 3d-math with vectors, matrices and quaternions.
|
||||
|
||||
Some other big changes of this new version have been the support for OGG files loading and stream playing, and the
|
||||
support of DDS texture files (compressed and uncompressed) along with mipmaps support.
|
||||
|
||||
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.1.
|
||||
|
||||
notes on raylib 1.2
|
||||
-------------------
|
||||
|
||||
On September 2014, after 5 month of raylib 1.1 release, it comes raylib 1.2. Again, this version presents a
|
||||
complete internal redesign of [core](https://github.com/raysan5/raylib/blob/master/src/core.c) module to support two new platforms: [Android](http://www.android.com/) and [Raspberry Pi](http://www.raspberrypi.org/).
|
||||
|
||||
It's been some month of really hard work to accomodate raylib to those new platforms while keeping it easy for the user.
|
||||
On Android, raylib manages internally the activity cicle, as well as the inputs; on Raspberry Pi, a complete raw input
|
||||
system has been written from scratch.
|
||||
|
||||
A new display initialization system has been created to support multiple resolutions, adding black bars if required;
|
||||
user only defines desired screen size and it gets properly displayed.
|
||||
|
||||
Now raylib can easily deploy games to Android devices and Raspberry Pi (console mode).
|
||||
|
||||
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.2.
|
||||
|
||||
In December 2014, new raylib 1.2.2 was published with support to compile directly for web (html5) using [emscripten](http://kripken.github.io/emscripten-site/) and [asm.js](http://asmjs.org/).
|
||||
|
||||
notes on raylib 1.3
|
||||
-------------------
|
||||
|
||||
On September 2015, after 1 year of raylib 1.2 release, arrives raylib 1.3. This version adds shaders functionality,
|
||||
improves tremendously textures module and also provides some new modules (camera system, gestures system, IMGUI).
|
||||
|
||||
Shaders support is the biggest addition to raylib 1.3, with support for easy shaders loading and use. Loaded shaders can be
|
||||
attached to 3d models or used as fullscreen postrocessing effects. A bunch of postprocessing shaders are also included
|
||||
in this release, check raylib/shaders folder.
|
||||
|
||||
Textures module has grown to support most of the internal texture formats available in OpenGL (RGB565, RGB888, RGBA5551, RGBA4444, etc.), including compressed texture formats (DXT, ETC1, ETC2, ASTC, PVRT); raylib 1.3 can load .dds, .pkm, .ktx, .astc and .pvr files.
|
||||
A brand new [camera](https://github.com/raysan5/raylib/blob/master/src/camera.c) module offers to the user multiple preconfigured ready-to-use camera systems (free camera, 1st person, 3rd person).
|
||||
Camera modes are very easy to use, just check examples: [core_3d_camera_free.c](https://github.com/raysan5/raylib/blob/master/examples/core_3d_camera_free.c) and [core_3d_camera_first_person.c](https://github.com/raysan5/raylib/blob/master/examples/core_3d_camera_first_person.c).
|
||||
|
||||
New [gestures](https://github.com/raysan5/raylib/blob/master/src/gestures.h) module simplifies gestures detection on Android and HTML5 programs.
|
||||
|
||||
[raygui](https://github.com/raysan5/raylib/blob/master/src/raygui.h), the new IMGUI (Immediate Mode GUI) module offers a set of functions to create simple user interfaces,
|
||||
primary intended for tools development. It's still in experimental state but already fully functional.
|
||||
|
||||
Most of the examples have been completely rewritten and +10 new examples have been added to show the new raylib features.
|
||||
|
||||
Lots of code changes and lot of testing have concluded in this amazing new raylib 1.3.
|
||||
|
||||
notes on raylib 1.4
|
||||
-------------------
|
||||
|
||||
On February 2016, after 4 months of raylib 1.3 release, it comes raylib 1.4. For this new version,
|
||||
lots of parts of the library have been reviewed, lots of bugs have been solved and some interesting features have been added.
|
||||
|
||||
First big addition is a set of [Image manipulation functions](https://github.com/raysan5/raylib/blob/master/src/raylib.h#L673) have been added to crop, resize, colorize, flip, dither and even draw image-to-image or text-to-image.
|
||||
Now a basic image processing can be done before converting the image to texture for usage.
|
||||
|
||||
SpriteFonts system has been improved, adding support for AngelCode fonts (.fnt) and TrueType Fonts (using [stb_truetype](https://github.com/nothings/stb/blob/master/stb_truetype.h) helper library).
|
||||
Now raylib can read standard .fnt font data and also generate at loading a SpriteFont from a TTF file.
|
||||
|
||||
New [physac](https://github.com/raysan5/raylib/blob/master/src/physac.h) physics module for basic 2D physics support. Still in development but already functional.
|
||||
Module comes with some usage examples for basic jump and level interaction and also force-based physic movements.
|
||||
|
||||
[raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h) module has been reviewed; some bugs have been solved and the module has been converted to a header-only file for easier portability, optionally, functions can also be used as inline.
|
||||
|
||||
[gestures](https://github.com/raysan5/raylib/blob/master/src/gestures.c) module has redesigned and simplified, now it can process touch events from any source, including mouse.
|
||||
This way, gestures system can be used on any platform providing an unified way to work with inputs and allowing the user to create multiplatform games with only one source code.
|
||||
|
||||
Raspberry Pi input system has been redesigned to better read raw inputs using generic Linux event handlers (keyboard:`stdin`, mouse:`/dev/input/mouse0`, gamepad:`/dev/input/js0`).
|
||||
Gamepad support has also been added (experimental).
|
||||
|
||||
Other important improvements are the functional raycast system for 3D picking, including some ray collision-detection functions,
|
||||
and the addition of two simple functions for persistent data storage. Now raylib user can save and load game data in a file (only some platforms supported).
|
||||
A simple [easings](https://github.com/raysan5/raylib/blob/master/src/easings.h) module has also been added for values animation.
|
||||
|
||||
Up to 8 new code examples have been added to show the new raylib features and +10 complete game samples have been provided to learn
|
||||
how to create some classic games like Arkanoid, Asteroids, Missile Commander, Snake or Tetris.
|
||||
|
||||
Lots of code changes and lots of hours of hard work have concluded in this amazing new raylib 1.4.
|
||||
|
||||
notes on raylib 1.5
|
||||
-------------------
|
||||
|
||||
On July 2016, after 5 months of raylib 1.4 release, arrives raylib 1.5. This new version is the biggest boost of the library until now, lots of parts of the library have been redesigned, lots of bugs have been solved and some **AMAZING** new features have been added.
|
||||
|
||||
VR support: raylib supports **Oculus Rift CV1**, one of the most anticipated VR devices in the market. Additionally, raylib supports simulated VR stereo rendering, independent of the VR device; it means, raylib can generate stereo renders with custom head-mounted-display device parameteres, that way, any VR device in the market can be **simulated in any platform** just configuring device parameters (and consequently, lens distortion). To enable VR is [extremely easy](https://github.com/raysan5/raylib/blob/master/examples/core_oculus_rift.c).
|
||||
|
||||
New materials system: now raylib supports standard material properties for 3D models, including diffuse-ambient-specular colors and diffuse-normal-specular textures. Just assign values to standard material and everything is processed internally.
|
||||
|
||||
New lighting system: added support for up to 8 configurable lights and 3 light types: **point**, **directional** and **spot** lights. Just create a light, configure its parameters and raylib manages render internally for every 3d object using standard material.
|
||||
|
||||
Complete gamepad support on Raspberry Pi: Gamepad system has been completely redesigned. Now multiple gamepads can be easily configured and used; gamepad data is read and processed in raw mode in a second thread.
|
||||
|
||||
Redesigned physics module: [physac](https://github.com/raysan5/raylib/blob/master/src/physac.h) module has been converted to header only and usage [has been simplified](https://github.com/raysan5/raylib/blob/master/examples/physics_basic_rigidbody.c). Performance has also been singnificantly improved, now physic objects are managed internally in a second thread.
|
||||
|
||||
Audio chiptunese support and mixing channels: Added support for module audio music (.xm, .mod) loading and playing. Multiple mixing channels are now also supported. All this features thanks to the amazing work of @kd7tck.
|
||||
|
||||
Other additions include a [2D camera system](https://github.com/raysan5/raylib/blob/master/examples/core_2d_camera.c), render textures for offline render (and most comprehensive [postprocessing](https://github.com/raysan5/raylib/blob/master/examples/shaders_postprocessing.c)) or support for legacy OpenGL 2.1 on desktop platforms.
|
||||
|
||||
This new version is so massive that is difficult to list all the improvements, most of raylib modules have been reviewed and [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.c) module has been completely redesigned to accomodate to new material-lighting systems and stereo rendering. You can check [CHANGELOG](https://github.com/raysan5/raylib/blob/master/CHANGELOG) file for a more detailed list of changes.
|
||||
|
||||
Up to 8 new code examples have been added to show the new raylib features and also some samples to show the usage of [rlgl](https://github.com/raysan5/raylib/blob/master/examples/rlgl_standalone.c) and [audio](https://github.com/raysan5/raylib/blob/master/examples/audio_standalone.c) raylib modules as standalone libraries.
|
||||
|
||||
Lots of code changes (+400 commits) and lots of hours of hard work have concluded in this amazing new raylib 1.5.
|
||||
|
||||
notes on raylib 1.6
|
||||
-------------------
|
||||
|
||||
On November 2016, only 4 months after raylib 1.5, arrives raylib 1.6. This new version represents another big review of the library and includes some interesting additions. This version conmmemorates raylib 3rd anniversary (raylib 1.0 was published on November 2013) and it is a stepping stone for raylib future. raylib roadmap has been reviewed and redefined to focus on its primary objective: create a simple and easy-to-use library to learn videogames programming. Some of the new features:
|
||||
|
||||
Complete [raylib Lua binding](https://github.com/raysan5/raylib-lua). All raylib functions plus the +60 code examples have been ported to Lua, now Lua users can enjoy coding videogames in Lua while using all the internal power of raylib. This addition also open the doors to Lua scripting support for a future raylib-based engine, being able to move game logic (Init, Update, Draw, De-Init) to Lua scripts while keep using raylib functionality.
|
||||
|
||||
Completely redesigned [audio module](https://github.com/raysan5/raylib/blob/master/src/audio.c). Based on the new direction taken in raylib 1.5, it has been further improved and more functionality added (+20 new functions) to allow raw audio processing and streaming. [FLAC file format support](https://github.com/raysan5/raylib/blob/master/src/external/dr_flac.h) has also been added. In the same line, [OpenAL Soft](https://github.com/kcat/openal-soft) backend is now provided as a static library in Windows to allow static linking and get ride of OpenAL32.dll. Now raylib Windows games are completey self-contained, no external libraries required any more!
|
||||
|
||||
[Physac](https://github.com/victorfisac/Physac) module has been moved to its own repository and it has been improved A LOT, actually, library has been completely rewritten from scratch by [@victorfisac](https://github.com/victorfisac), multiple samples have been added together with countless new features to match current standard 2D physic libraries. Results are amazing!
|
||||
|
||||
Camera and gestures modules have been reviewed, highly simplified and ported to single-file header-only libraries for easier portability and usage flexibility. Consequently, camera system usage has been simplified in all examples.
|
||||
|
||||
Improved Gamepad support on Windows and Raspberry Pi with the addition of new functions for custom gamepad configurations but supporting by default PS3 and Xbox-based gamepads.
|
||||
|
||||
Improved textures and text functionality, adding new functions for texture filtering control and better TTF/AngelCode fonts loading and generation support.
|
||||
|
||||
Build system improvement. Added support for raylib dynamic library generation (raylib.dll) for users that prefer dynamic library linking. Also thinking on advance users, it has been added pre-configured [Visual Studio C++ 2015 solution](https://github.com/raysan5/raylib/tree/master/project/vs2015) with raylib project and C/C++ examples for users that prefer that professional IDE and compiler.
|
||||
|
||||
New examples, new functions, complete code-base review, multiple bugs corrected... this is raylib 1.6. Enjoy making games.
|
||||
|
||||
notes on raylib 1.7
|
||||
-------------------
|
||||
|
||||
On May 2017, around 6 month after raylib 1.6, comes another raylib instalment, raylib 1.7. This time library has been improved a lot in terms of consistency and cleanness. As stated in [this patreon article](https://www.patreon.com/posts/raylib-future-7501034), this new raylib version has focused efforts in becoming more simple and easy-to-use to learn videogames programming. Some highlights of this new version are:
|
||||
|
||||
More than 30 new functions added to the library, functions to control Window, utils to work with filenames and extensions, functions to draw lines with custom thick, mesh loading, functions for 3d ray collisions detailed detection, funtions for VR simulation and much more... Just check [CHANGELOG](CHANGELOG) for a detailed list of additions!
|
||||
|
||||
Support of [configuration flags](https://github.com/raysan5/raylib/issues/200) on every raylib module. Advance users can customize raylib just choosing desired features, defining some configuration flags on modules compilation. That way users can control library size and available functionality.
|
||||
|
||||
Improved [build system](https://github.com/raysan5/raylib/blob/master/src/Makefile) for all supported platforms (Windows, Linux, OSX, RPI, Android, HTML5) with a unique Makefile to compile sources. Added support for Android compilation with a custom standalone toolchain and also multiple build compliation flags.
|
||||
|
||||
New [examples](http://www.raylib.com/examples.html) and [sample games](http://www.raylib.com/games.html) added. All samples material has been reviewed, removing useless examples and adding more comprehensive ones; all material has been ported to latest raylib version and tested in multiple platforms. Examples folder structure has been improved and also build systems.
|
||||
|
||||
Improved library consistency and organization in general. Functions and parameters have been renamed, some parts of the library have been cleaned and simplyfied, some functions has been moved to examples (lighting, Oculus Rift CV1 support) towards a more generic library implementation. Lots of hours have been invested in this process...
|
||||
|
||||
Some other features: Gamepad support on HTML5, RPI touch screen support, 32bit audio support, frames timming improvements, public log system, rres file format support, automatic GIF recording...
|
||||
|
||||
And here it is another version of **raylib, a simple and easy-to-use library to learn videogames programming**. Enjoy it.
|
||||
|
||||
notes on raylib 1.8
|
||||
-------------------
|
||||
|
||||
October 2017, around 5 months after latest raylib version, another release is published: raylib 1.8. Again, several modules of the library have been reviewed and some new functionality added. Main changes of this new release are:
|
||||
|
||||
[Procedural image generation](https://github.com/raysan5/raylib/blob/master/examples/textures/textures_image_generation.c) function, a set of new functions have been added to generate gradients, checked, noise and cellular images from scratch. Image generation could be useful for certain textures or learning pourpouses.
|
||||
|
||||
[Parametric mesh generation](https://github.com/raysan5/raylib/blob/master/examples/models/models_mesh_generation.c) functions, create 3d meshes from scratch just defining a set of parameters, meshes like cube, sphere, cylinder, torus, knot and more can be very useful for prototyping or for lighting and texture testing.
|
||||
|
||||
PBR Materials support, a completely redesigned shaders and material system allows advance materials definition and usage, with fully customizable shaders. Some new functions have been added to generate the environment textures required for PBR shading and a a new complete [PBR material example](https://github.com/raysan5/raylib/blob/master/examples/models/models_material_pbr.c) is also provided for reference.
|
||||
|
||||
Custom Android APK build pipeline with [simple Makefile](https://github.com/raysan5/raylib/blob/master/templates/simple_game/Makefile). Actually, full code building mechanism based on plain Makefile has been completely reviewed and Android building has been added for sources and also for examples and templates building into final APK package. This way, raylib Android building has been greatly simplified and integrated seamlessly into standard build scripts.
|
||||
|
||||
[rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.c) module has been completely reviewed and most of the functions renamed for consistency. This way, standalone usage of rlgl is promoted, with a [complete example provided](https://github.com/raysan5/raylib/blob/master/examples/others/rlgl_standalone.c). rlgl offers a pseudo-OpenGL 1.1 immediate-mode programming-style layer, with backends to multiple OpenGL versions.
|
||||
|
||||
[raymath](https://github.com/raysan5/raylib/blob/master/src/rlgl.c) library has been also reviewed to align with other advance math libraries like [GLM](https://github.com/g-truc/glm). Matrix math has been improved and simplified, some new Quaternion functions have been added and Vector3 functions have been renamed all around the library for consistency with new Vector2 functionality.
|
||||
|
||||
Additionally, as always, examples and templates have been reviewed to work with new version (some new examples have been added), all external libraries have been updated to latest stable version and latest Notepad++ and MinGW have been configured to work with new raylib. For a full list of changes, just check [CHANGELOG](CHANGELOG).
|
||||
|
||||
New installer provided, web updated, examples re-builded, documentation reviewed... **new raylib 1.8 published**. Enjoy coding games.
|
14
LICENSE.md
@@ -7,7 +7,7 @@ source code
|
||||
raylib is 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) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
|
||||
|
||||
This software is provided "as-is", without any express or implied warranty. In no event
|
||||
will the authors be held liable for any damages arising from the use of this software.
|
||||
@@ -27,7 +27,7 @@ applications, and to alter it and redistribute it freely, subject to the followi
|
||||
fonts
|
||||
------
|
||||
|
||||
All rBMF fonts provided with raylib are free to use (freeware) and have been designed by the following people:
|
||||
The following fonts [provided with raylib](https://github.com/raysan5/raylib/tree/master/examples/text/resources/fonts) are free to use (freeware) and have been designed by the following people:
|
||||
|
||||
* Alpha Beta - Brian Kent (AEnigma)
|
||||
* Setback - Brian Kent (AEnigma)
|
||||
@@ -37,3 +37,13 @@ All rBMF fonts provided with raylib are free to use (freeware) and have been des
|
||||
* Mecha - Captain Falcon
|
||||
* PixelPlay - Aleksander Shevchuk
|
||||
* PixAntiqua - Gerhard Großmann
|
||||
|
||||
2d art
|
||||
------
|
||||
|
||||
[scarfy spritesheet](https://github.com/raysan5/raylib/blob/master/examples/textures/resources/scarfy.png) and [fudesumi image](https://github.com/raysan5/raylib/blob/master/examples/textures/resources/fudesumi.png) have been created by [Eiden Marsal](https://www.artstation.com/artist/marshall_z) and licensed as [Creative Commons Attribution-NonCommercial 3.0](https://creativecommons.org/licenses/by-nc/3.0/legalcode)
|
||||
|
||||
3d models
|
||||
---------
|
||||
|
||||
[dwarf 3d model and textures](https://github.com/raysan5/raylib/tree/master/examples/models/resources/model) have been created by David Moreno and licensed as [Creative Commons Attribution-NonCommercial 3.0](https://creativecommons.org/licenses/by-nc/3.0/legalcode)
|
||||
|
131
README.md
@@ -1,93 +1,63 @@
|
||||
<img src="http://www.raylib.com/img/fb_raylib_logo.png" width=256>
|
||||
<img align="left" src="https://github.com/raysan5/raylib/blob/master/logo/raylib_256x256.png" width=256>
|
||||
|
||||
about
|
||||
-----
|
||||
**raylib is a simple and easy-to-use library to learn videogames programming.**
|
||||
|
||||
raylib is a simple and easy-to-use library to learn videogames programming.
|
||||
raylib is highly inspired by Borland BGI graphics lib and by XNA framework.
|
||||
|
||||
raylib is highly inspired by Borland BGI graphics lib (more specifically WinBGI) and by XNA framework.
|
||||
Allegro and SDL have also been analyzed for reference.
|
||||
raylib could be useful for prototyping, tools development, graphic applications, embedded systems and education.
|
||||
|
||||
Want to see how easy is making games with raylib? Jump to [code examples!] (http://www.raylib.com/examples.htm)
|
||||
NOTE for ADVENTURERS: raylib is a programming library to learn videogames programming;
|
||||
no fancy interface, no visual helpers, no auto-debugging... just coding in the most
|
||||
pure spartan-programmers way. Are you ready to learn? Jump to [code examples!](http://www.raylib.com/examples.html)
|
||||
|
||||
history
|
||||
-------
|
||||
|
||||
I've developed videogames for some years and last year I had to taught videogames development
|
||||
to young people with artistic profile, most of them had never written a single line of code.
|
||||
|
||||
I started with C language basis and, after searching for the most simple and easy-to-use library to teach
|
||||
videogames programming, I found WinBGI; it was great and it worked very well with students, in just a
|
||||
couple of weeks that people that had never written a single line of code were able to program (and understand)
|
||||
a simple PONG and some of them even a BREAKOUT!
|
||||
|
||||
But WinBGI was not the clearer and most organized lib. There were a lot of things I found useless and
|
||||
confusing and some function names were not clear enough for most of the students; not to mention points
|
||||
like no transparencies support or no hardware acceleration.
|
||||
|
||||
So, I decided to create my own lib, hardware accelerated, clear function names, quite organized, well structured,
|
||||
plain C coding and, the most important, primarily intended to LEARN videogames programming.
|
||||
|
||||
I've coded quite a lot in C# and XNA and I really love it (in fact, my students learn C# with XNA after C),
|
||||
so, I decided to use C# language notation and XNA naming conventions. That way, students can jump from
|
||||
raylib to XNA (or MonoGame) extremely easily.
|
||||
|
||||
raylib started as a weekend project and after three months of hard work, here it is the first version.
|
||||
|
||||
Enjoy it.
|
||||
[](https://travis-ci.org/raysan5/raylib)
|
||||
[](https://ci.appveyor.com/project/raysan5/raylib)
|
||||
[](https://gitter.im/raylib/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
[](https://discord.gg/VkzNHUE)
|
||||
[](LICENSE.md)
|
||||
[](https://twitter.com/raysan5)
|
||||
|
||||
features
|
||||
--------
|
||||
|
||||
* Written in plain C code (C99)
|
||||
* Uses C# PascalCase/camelCase notation
|
||||
* Hardware accelerated using OpenGL 1.1
|
||||
* Transparencies support (RGBA Colors)
|
||||
* Custom color palette for better use on white background
|
||||
* Basic 3D Support (camera, basic models, OBJ models, etc)
|
||||
* Powerful Text module with SpriteFonts support
|
||||
* Written in plain C code (C99) in PascalCase/camelCase notation
|
||||
* Hardware accelerated with OpenGL (1.1, 2.1, 3.3 or ES2 - choose at compile)
|
||||
* Unique OpenGL abstraction layer (usable as standalone module): [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.c)
|
||||
* Powerful fonts module with SpriteFonts support (XNA fonts, AngelCode fonts, TTF)
|
||||
* Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC)
|
||||
* Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more!
|
||||
* Flexible Materials system, supporting classic maps and PBR maps
|
||||
* Shaders support, including Model shaders and Postprocessing shaders
|
||||
* Powerful math module for Vector, Matrix and Quaternion operations: [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h)
|
||||
* Audio loading and playing with streaming support (WAV, OGG, FLAC, XM, MOD)
|
||||
* Multiple platforms support: Windows, Linux, FreeBSD, MacOS, UWP, Android, Raspberry Pi, HTML5.
|
||||
* VR stereo rendering with configurable HMD device parameters
|
||||
* NO external dependencies, all required libraries included with raylib
|
||||
* Complete bindings to LUA ([raylib-lua](https://github.com/raysan5/raylib-lua)) and Go ([raylib-go](https://github.com/gen2brain/raylib-go))
|
||||
|
||||
raylib uses on its core module the outstanding [GLFW3] (http://www.glfw.org/) library. The best option by far I found for
|
||||
window/context and input management (clean, focused, great license, well documented, modern, ...).
|
||||
raylib uses on its [core](https://github.com/raysan5/raylib/blob/master/src/core.c) module the outstanding [GLFW3](http://www.glfw.org/) library, embedded inside raylib in the form of [rglfw](https://github.com/raysan5/raylib/blob/master/src/rglfw.c) module, avoiding that way external dependencies.
|
||||
|
||||
raylib is licensed under a zlib/libpng license like GLFW3. View [LICENSE] (https://github.com/raysan5/raylib/blob/master/LICENSE.md).
|
||||
raylib uses on its [audio](https://github.com/raysan5/raylib/blob/master/src/audio.c) module, the amazing [mini_al](https://github.com/dr-soft/mini_al) audio library, single-file header-only and supporting multiple platforms and multiple audio backends.
|
||||
|
||||
tool requirements
|
||||
------------------
|
||||
raylib uses internally multiple single-file header-only libraries to support multiple fileformats loading and saving, all those libraries are embedded with raylib and available in [src/external](https://github.com/raysan5/raylib/tree/master/src/external) directory.
|
||||
|
||||
*On Android, `native_app_glue module` (provided by Android NDK) and native Android libraries are used to manage window/context, inputs and activity life cycle.*
|
||||
|
||||
*On Raspberry Pi, Videocore API and EGL libraries are used for window/context management and raw inputs reading.*
|
||||
|
||||
build and installation
|
||||
----------------------
|
||||
|
||||
Binary releases for Windows, Linux and macOS are available at the [Github Releases](https://github.com/raysan5/raylib/releases) page. raylib is also available via multiple package managers on multiple OS distributions. For more info check [raylib Wiki](https://github.com/raysan5/raylib/wiki).
|
||||
|
||||
To build raylib yourself, check out also the [raylib Wiki](https://github.com/raysan5/raylib/wiki) for detailed instructions.
|
||||
|
||||
raylib has been developed using exclusively two tools:
|
||||
|
||||
* Notepad++ (text editor) - [http://notepad-plus-plus.org/](http://notepad-plus-plus.org/)
|
||||
* MinGW (GCC compiler) - [http://www.mingw.org/](http://www.mingw.org/)
|
||||
|
||||
Those are the tools I recommend to develop with raylib, in fact, those are the tools my students use.
|
||||
I believe those are the best tools to train spartan-programmers.
|
||||
|
||||
Someone could argue about debugging. raylib is a library intended for learning and I think C it's a clear enough language
|
||||
to allow writing small-mid size programs with a printf-based debugging. All raylib examples have also been written this way.
|
||||
|
||||
building
|
||||
--------
|
||||
|
||||
raylib could be build with the following command lines (Using GCC compiler):
|
||||
|
||||
cd raylib/src
|
||||
gcc -c core.c -std=c99 -Wall
|
||||
gcc -c shapes.c -std=c99 -Wall
|
||||
gcc -c textures.c -std=c99 -Wall
|
||||
gcc -c stb_image.c -std=c99 -Wall
|
||||
gcc -c text.c -std=c99 -Wall
|
||||
gcc -c models.c -std=c99 -Wall
|
||||
gcc -c vector3.c -std=c99 -Wall
|
||||
gcc -c audio.c -std=c99 -Wall
|
||||
gcc -c utils.c -std=c99 -Wall
|
||||
ar rcs raylib.a core.o shapes.o textures.o stb_image.o text.o models.o vector3.o utils.o audio.o
|
||||
|
||||
To compile examples, make sure raylib.h is placed in include path and libraries raylib (libraylib.a) and glfw3 (libglfw3.a)
|
||||
are placed in the libraries path. It's also recommended to link with file icon.o for fancy raylib icon usage.
|
||||
|
||||
cd raylib/examples
|
||||
gcc -o test_code.exe test_code.c icon.o -lraylib -lglfw3 -lopengl32 -lgdi32 -std=c99 -Wl,--subsystem,windows
|
||||
Those are the tools recommended to develop with raylib, in fact, those are the tools my students use.
|
||||
|
||||
contact
|
||||
-------
|
||||
@@ -95,18 +65,19 @@ contact
|
||||
* Webpage: [http://www.raylib.com](http://www.raylib.com)
|
||||
* Twitter: [http://www.twitter.com/raysan5](http://www.twitter.com/raysan5)
|
||||
* Facebook: [http://www.facebook.com/raylibgames](http://www.facebook.com/raylibgames)
|
||||
* Reddit: [https://www.reddit.com/r/raylib](https://www.reddit.com/r/raylib)
|
||||
* Twitch: [http://www.twitch.tv/raysan5](http://www.twitch.tv/raysan5)
|
||||
* Patreon: [https://www.patreon.com/raysan5](https://www.patreon.com/raysan5)
|
||||
* YouTube: [https://www.youtube.com/channel/raylib](https://www.youtube.com/channel/UC8WIBkhYb5sBNqXO1mZ7WSQ)
|
||||
|
||||
If you are using raylib and you enjoy it, please, [let me know][raysan5].
|
||||
|
||||
If you feel you can help, then, [helpme!] (http://www.raylib.com/helpme.htm)
|
||||
If you feel you can help, then, [helpme!](http://www.raylib.com/helpme.html)
|
||||
|
||||
acknowledgments
|
||||
---------------
|
||||
license
|
||||
-------
|
||||
|
||||
The following people have contributed in some way to make raylib project a reality. Big thanks to them!
|
||||
raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE.md) for further details.
|
||||
|
||||
- [Zopokx](https://github.com/Zopokx)
|
||||
- [Elendow](http://www.elendow.com)
|
||||
[raysan5]: mailto:ray@raylib.com "Ramon Santamaria - Ray San"
|
||||
|
||||
|
||||
[raysan5]: mailto:raysan@raysanweb.com "Ramon Santamaria - Ray San"
|
||||
|
57
ROADMAP.md
@@ -1,22 +1,53 @@
|
||||
roadmap
|
||||
-------
|
||||
|
||||
First version of raylib is quite complete and functional but there is still a lot of things I would like to improve.
|
||||
Here it is a list of features I would like to add and functions to improve.
|
||||
Current version of raylib is complete and functional but there is still a lot of room for improvement.
|
||||
Here it is a wish-list with features and ideas to improve the library.
|
||||
|
||||
Around the source code there are some TODO points with pending revisions/bugs and here it is a list of features I would like to add.
|
||||
Note that [raylib source code](https://github.com/raysan5/raylib/tree/master/src) has some *TODO* marks around code with pending things to review and improve. Check [GitHub Issues](https://github.com/raysan5/raylib/issues) for further details!
|
||||
|
||||
raylib v1.x
|
||||
**raylib 1.x**
|
||||
- [ ] Basic GPU stats sytem (memory, draws, time...)
|
||||
- [ ] Improved custom file-format (.rres) and packaging tool
|
||||
- [ ] Touch-based camera controls for Android
|
||||
- [ ] Quaternions-based camera system
|
||||
|
||||
- Review Billboard Drawing functions
|
||||
- Review Heightmap Loading and Drawing functions - Load Heightmap directly as a Model
|
||||
- Lighting support (only 3d mode) - CreateLight()
|
||||
- [DONE] Simple Collision Detection functions
|
||||
- Default scene Camera controls (zoom, pan, rotate)
|
||||
- Basic Procedural Texture / Image generation (Gradient, Checked, Spot, Noise, Cellular)
|
||||
- Software mipmapping generation and POT conversion (custom implementation)
|
||||
- Comments / Functions translation (?)
|
||||
**raylib 1.8**
|
||||
- [x] Improved Materials system with PBR support
|
||||
- [x] Procedural image generation functions (spot, gradient, noise...)
|
||||
- [x] Procedural mesh generation functions (cube, sphere...)
|
||||
- [x] Custom Android APK build pipeline (default Makefile)
|
||||
|
||||
**raylib 1.7**
|
||||
- [x] Support configuration flags
|
||||
- [x] Improved build system for Android
|
||||
- [x] Gamepad support on HTML5
|
||||
|
||||
**raylib 1.6**
|
||||
- [x] Lua scripting support (raylib Lua wrapper)
|
||||
- [x] Redesigned audio module
|
||||
- [x] Support FLAC file format
|
||||
|
||||
**raylib 1.5**
|
||||
- [x] Support Oculus Rift CV1 and VR stereo rendering (simulator)
|
||||
- [x] Redesign Shaders/Textures system -> New Materials system
|
||||
- [x] Support lighting: Omni, Directional and Spot lights
|
||||
- [x] Redesign physics module (physac)
|
||||
- [x] Chiptunes audio modules support
|
||||
|
||||
**raylib 1.4**
|
||||
- [x] TTF fonts support (using stb_truetype)
|
||||
- [x] Raycast system for 3D picking (including collisions detection)
|
||||
- [x] Floyd-Steinberg dithering on 16bit image format conversion
|
||||
- [x] Basic image manipulation functions (crop, resize, draw...)
|
||||
- [x] Storage load/save data functionality
|
||||
- [x] Add Physics module (physac)
|
||||
- [x] Remove GLEW dependency -> Replaced by GLAD
|
||||
- [x] Redesign Raspberry PI inputs system
|
||||
- [x] Redesign gestures module to be multiplatform
|
||||
- [x] Module raymath as header-only and functions inline
|
||||
- [x] Add Easings module (easings.h)
|
||||
|
||||
Any feature missing? Do you have a request? [Let me know!][raysan5]
|
||||
|
||||
[raysan5]: mailto:raysan@raysanweb.com "Ramon Santamaria - Ray San"
|
||||
[raysan5]: mailto:ray@raylib.com "Ramon Santamaria - Ray San"
|
||||
|
65
appveyor.yml
Normal file
@@ -0,0 +1,65 @@
|
||||
#os: Visual Studio 2015
|
||||
|
||||
clone_depth: 5
|
||||
|
||||
cache:
|
||||
- C:\ProgramData\chocolatey\bin -> appveyor.yml
|
||||
- C:\ProgramData\chocolatey\lib -> appveyor.yml
|
||||
|
||||
init:
|
||||
- cmake -E remove c:\programdata\chocolatey\bin\cpack.exe
|
||||
- set PATH=%PATH:C:\Program Files (x86)\Git\usr\bin;=%
|
||||
- set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
|
||||
- if [%BITS%]==[32] set MINGW=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32
|
||||
- if [%BITS%]==[64] set MINGW=C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64
|
||||
- if [%COMPILER%]==[mingw] set PATH=%MINGW%\bin;%PATH%
|
||||
- set RAYLIB_PACKAGE_SUFFIX=-Win%BITS%-%COMPILER%
|
||||
- set VERBOSE=1
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- compiler: mingw
|
||||
bits: 32
|
||||
examples: ON
|
||||
- compiler: mingw
|
||||
bits: 64
|
||||
examples: ON
|
||||
- compiler: msvc15
|
||||
bits: 32
|
||||
examples: OFF
|
||||
- compiler: msvc15
|
||||
bits: 64
|
||||
examples: OFF
|
||||
|
||||
before_build:
|
||||
- if [%compiler%]==[mingw] set CFLAGS=-m%BITS% & set LDFLAGS=-m%BITS% & set GENERATOR="MinGW Makefiles"
|
||||
- if [%COMPILER%]==[msvc15] if [%BITS%]==[32] set GENERATOR="Visual Studio 14 2015"
|
||||
- if [%COMPILER%]==[msvc15] if [%BITS%]==[64] set GENERATOR="Visual Studio 14 2015 Win64"
|
||||
- mkdir build
|
||||
- cd build
|
||||
|
||||
build_script:
|
||||
- cmake -G %GENERATOR% -DSTATIC=ON -DSHARED=ON -DBUILD_EXAMPLES=%examples% -DBUILD_GAMES=%examples% ..
|
||||
- cmake --build . --target install
|
||||
|
||||
after_build:
|
||||
- cmake --build . --target package
|
||||
|
||||
before_test:
|
||||
|
||||
test_script:
|
||||
|
||||
artifacts:
|
||||
- path: 'build\*.zip'
|
||||
|
||||
deploy:
|
||||
- provider: GitHub
|
||||
auth_token:
|
||||
secure: OxKnnT3tlkPl9365cOO84rDWU4UkHIYJc0D3r3Tv7rB3HaR2BBhlhCnl7g3nuOJy
|
||||
artifact: /.*\.zip/
|
||||
draft: false
|
||||
prerelease: false
|
||||
force_update: true
|
||||
on:
|
||||
branch: master
|
||||
appveyor_repo_tag: true # deploy on tag push only
|
Before Width: | Height: | Size: 371 KiB |
58
examples/CMakeLists.txt
Normal file
@@ -0,0 +1,58 @@
|
||||
# Setup the project and settings
|
||||
project(examples)
|
||||
|
||||
include("../utils.cmake")
|
||||
|
||||
# Make sure raylib has been built
|
||||
# TODO `build` directory should maybe be something else...
|
||||
# TODO place somewhere else?
|
||||
include_directories("../build/release")
|
||||
include_directories("../src/external")
|
||||
include_directories("../src/external/glfw/include")
|
||||
|
||||
# Get the sources together
|
||||
set(example_dirs audio core models others shaders shapes text textures)
|
||||
set(CMAKE_REQUIRED_DEFINITIONS -D_POSIX_C_SOURCE=199309L)
|
||||
include(CheckSymbolExists)
|
||||
check_symbol_exists(CLOCK_MONOTONIC time.h HAVE_CLOCK_MONOTONIC)
|
||||
check_symbol_exists(QueryPerformanceCounter windows.h HAVE_QPC)
|
||||
set(CMAKE_REQUIRED_DEFINITIONS)
|
||||
if(HAVE_QPC OR HAVE_CLOCK_MONOTONIC)
|
||||
set(example_dirs ${example_dirs} physac)
|
||||
endif()
|
||||
|
||||
set(example_sources)
|
||||
set(example_resources)
|
||||
foreach(example_dir ${example_dirs})
|
||||
# Get the .c files
|
||||
file(GLOB sources ${example_dir}/*.c)
|
||||
list(APPEND example_sources ${sources})
|
||||
|
||||
# Any any resources
|
||||
file(GLOB resources ${example_dir}/resources/*)
|
||||
list(APPEND example_resources ${resources})
|
||||
endforeach()
|
||||
|
||||
include(CheckIncludeFiles)
|
||||
check_include_files(OVR_CAPI_GL.h HAVE_OCULUS_CAPI)
|
||||
if(NOT HAVE_OCULUS_CAPI)
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/oculus_rift.c)
|
||||
endif()
|
||||
list(REMOVE_ITEM example_sources ${CMAKE_CURRENT_SOURCE_DIR}/others/standard_lighting.c)
|
||||
|
||||
|
||||
# Do each example
|
||||
foreach(example_source ${example_sources})
|
||||
# Create the basename for the example
|
||||
get_filename_component(example_name ${example_source} NAME)
|
||||
string(REPLACE ".c" "" example_name ${example_name})
|
||||
|
||||
# Setup the example
|
||||
add_executable(${example_name} ${example_source})
|
||||
|
||||
# Link the libraries
|
||||
link_libraries_to_executable(${example_name})
|
||||
endforeach()
|
||||
|
||||
# Copy all of the resource files to the destination
|
||||
file(COPY ${example_resources} DESTINATION "resources/")
|
451
examples/Makefile
Normal file
@@ -0,0 +1,451 @@
|
||||
#**************************************************************************************************
|
||||
#
|
||||
# raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
|
||||
#
|
||||
# Copyright (c) 2013-2018 Ramon Santamaria (@raysan5)
|
||||
#
|
||||
# This software is provided "as-is", without any express or implied warranty. In no event
|
||||
# will the authors be held liable for any damages arising from the use of this software.
|
||||
#
|
||||
# Permission is granted to anyone to use this software for any purpose, including commercial
|
||||
# applications, and to alter it and redistribute it freely, subject to the following restrictions:
|
||||
#
|
||||
# 1. The origin of this software must not be misrepresented; you must not claim that you
|
||||
# wrote the original software. If you use this software in a product, an acknowledgment
|
||||
# in the product documentation would be appreciated but is not required.
|
||||
#
|
||||
# 2. Altered source versions must be plainly marked as such, and must not be misrepresented
|
||||
# as being the original software.
|
||||
#
|
||||
# 3. This notice may not be removed or altered from any source distribution.
|
||||
#
|
||||
#**************************************************************************************************
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
# Define required raylib variables
|
||||
PROJECT_NAME ?= raylib_examples
|
||||
RAYLIB_VERSION ?= 1.9.7
|
||||
RAYLIB_API_VERSION ?= 1
|
||||
RAYLIB_PATH ?= ..
|
||||
|
||||
# Define default options
|
||||
|
||||
# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
|
||||
PLATFORM ?= PLATFORM_DESKTOP
|
||||
|
||||
# Locations of your newly installed library and associated headers. See ../src/Makefile
|
||||
# On Linux, if you have installed raylib but cannot compile the examples, check that
|
||||
# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
|
||||
# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
|
||||
# To enable compile-time linking to a special version of libraylib.so, change these variables here.
|
||||
# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
|
||||
# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
|
||||
# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
|
||||
# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
|
||||
DESTDIR ?= /usr/local
|
||||
RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
|
||||
# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
|
||||
RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
|
||||
|
||||
# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
|
||||
RAYLIB_LIBTYPE ?= STATIC
|
||||
|
||||
# Build mode for project: DEBUG or RELEASE
|
||||
RAYLIB_BUILD_MODE ?= RELEASE
|
||||
|
||||
# Use external GLFW library instead of rglfw module
|
||||
# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
|
||||
USE_EXTERNAL_GLFW ?= FALSE
|
||||
|
||||
# Use Wayland display server protocol on Linux desktop
|
||||
# by default it uses X11 windowing system
|
||||
USE_WAYLAND_DISPLAY ?= FALSE
|
||||
|
||||
# NOTE: On PLATFORM_WEB OpenAL Soft backend is used by default (check raylib/src/Makefile)
|
||||
|
||||
# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
# No uname.exe on MinGW!, but OS=Windows_NT on Windows!
|
||||
# ifeq ($(UNAME),Msys) -> Windows
|
||||
ifeq ($(OS),Windows_NT)
|
||||
PLATFORM_OS=WINDOWS
|
||||
else
|
||||
UNAMEOS=$(shell uname)
|
||||
ifeq ($(UNAMEOS),Linux)
|
||||
PLATFORM_OS=LINUX
|
||||
endif
|
||||
ifeq ($(UNAMEOS),FreeBSD)
|
||||
PLATFORM_OS=FREEBSD
|
||||
endif
|
||||
ifeq ($(UNAMEOS),Darwin)
|
||||
PLATFORM_OS=OSX
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
UNAMEOS=$(shell uname)
|
||||
ifeq ($(UNAMEOS),Linux)
|
||||
PLATFORM_OS=LINUX
|
||||
endif
|
||||
endif
|
||||
|
||||
# RAYLIB_PATH adjustment for different platforms.
|
||||
# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
|
||||
# Required for ldconfig or other tools that do not perform path expansion.
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
RAYLIB_PREFIX ?= ..
|
||||
RAYLIB_PATH = $(realpath $(RAYLIB_PREFIX))
|
||||
endif
|
||||
endif
|
||||
# Default path for raylib on Raspberry Pi, if installed in different path, update it!
|
||||
# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
|
||||
# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
RAYLIB_PATH ?= /home/pi/raylib
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
# Emscripten required variables
|
||||
EMSDK_PATH = C:/emsdk
|
||||
EMSCRIPTEN_VERSION = 1.37.28
|
||||
CLANG_VERSION=e1.37.28_64bit
|
||||
PYTHON_VERSION=2.7.5.3_64bit
|
||||
NODE_VERSION=4.1.1_64bit
|
||||
export PATH=$(EMSDK_PATH);$(EMSDK_PATH)\clang\$(CLANG_VERSION);$(EMSDK_PATH)\node\$(NODE_VERSION)\bin;$(EMSDK_PATH)\python\$(PYTHON_VERSION);$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION);C:\raylib\MinGW\bin:$$(PATH)
|
||||
EMSCRIPTEN=$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION)
|
||||
endif
|
||||
|
||||
# Define raylib release directory for compiled library.
|
||||
# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version.
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/win32/mingw32
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/linux
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/osx
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),FREEBSD)
|
||||
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/freebsd
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/rpi
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/html5
|
||||
endif
|
||||
|
||||
# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
|
||||
# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
|
||||
# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
|
||||
# without formal installation from ../src/Makefile. It aids portability and is useful if you have
|
||||
# multiple versions of raylib, have raylib installed to a non-standard location, or want to
|
||||
# bundle libraylib.so with your game. Change it to your liking.
|
||||
# Note: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
|
||||
# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
|
||||
# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
|
||||
# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
|
||||
# To see which libraries a built example is linking to, ldd core/core_basic_window;
|
||||
# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
|
||||
EXAMPLE_RUNTIME_PATH ?= $(RAYLIB_RELEASE_PATH)
|
||||
|
||||
# Define default C compiler: gcc
|
||||
# NOTE: define g++ compiler if using C++
|
||||
CC = gcc
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
# OSX default compiler
|
||||
CC = clang
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),FREEBSD)
|
||||
# FreeBSD default compiler
|
||||
CC = clang
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
|
||||
# Define RPI cross-compiler
|
||||
#CC = armv6j-hardfloat-linux-gnueabi-gcc
|
||||
CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
# WARNING: To compile to HTML5, code must be redesigned to use emscripten.h and emscripten_set_main_loop()
|
||||
# HTML5 emscripten compiler
|
||||
CC = emcc
|
||||
endif
|
||||
|
||||
# Define default make program: Mingw32-make
|
||||
MAKE = mingw32-make
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
MAKE = make
|
||||
endif
|
||||
endif
|
||||
|
||||
# Define compiler flags:
|
||||
# -O1 defines optimization level
|
||||
# -g enable debugging
|
||||
# -s strip unnecessary data from build
|
||||
# -Wall turns on most, but not all, compiler warnings
|
||||
# -std=c99 defines C language mode (standard C from 1999 revision)
|
||||
# -std=gnu99 defines C language mode (GNU C from 1999 revision)
|
||||
# -Wno-missing-braces ignore invalid warning (GCC bug 53119)
|
||||
# -D_DEFAULT_SOURCE use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
|
||||
CFLAGS += -O1 -s -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
|
||||
|
||||
# Additional flags for compiler (if desired)
|
||||
#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||
# resources file contains windows exe icon
|
||||
# -Wl,--subsystem,windows hides the console window
|
||||
CFLAGS += $(RAYLIB_PATH)/src/resources -Wl,--subsystem,windows
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
ifeq ($(RAYLIB_BUILD_MODE),DEBUG)
|
||||
CFLAGS += -g
|
||||
#CC = clang
|
||||
endif
|
||||
ifeq ($(RAYLIB_LIBTYPE),STATIC)
|
||||
CFLAGS += -no-pie -D_DEFAULT_SOURCE
|
||||
endif
|
||||
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
||||
# Explicitly enable runtime link to libraylib.so
|
||||
CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
CFLAGS += -std=gnu99
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
# -O2 # if used, also set --memory-init-file 0
|
||||
# --memory-init-file 0 # to avoid an external memory initialization code file (.mem)
|
||||
# -s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing
|
||||
# -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB)
|
||||
# -s USE_PTHREADS=1 # multithreading support
|
||||
# -s WASM=1 # support Web Assembly (https://github.com/kripken/emscripten/wiki/WebAssembly)
|
||||
# --preload-file resources # specify a resources folder for data compilation
|
||||
CFLAGS += -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 --profiling --preload-file resources
|
||||
|
||||
# Define a custom shell .html and output extension
|
||||
CFLAGS += --shell-file $(RAYLIB_PATH)\templates\web_shell\shell.html
|
||||
EXT = .html
|
||||
endif
|
||||
|
||||
# Define include paths for required headers.
|
||||
# Precedence: immediately local, raysan5 provided sources
|
||||
# NOTE: Several external required libraries (stb and others)
|
||||
INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/release/include -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
|
||||
|
||||
# Define additional directories containing required header files
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
# RPI required libraries
|
||||
INCLUDE_PATHS += -I/opt/vc/include
|
||||
INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
|
||||
INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),FREEBSD)
|
||||
# Consider -L$(RAYLIB_H_INSTALL_PATH)
|
||||
INCLUDE_PATHS += -I/usr/local/include
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
# Reset everything.
|
||||
# Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
|
||||
INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
|
||||
endif
|
||||
endif
|
||||
|
||||
# Define library paths containing required libs.
|
||||
# Precedence: immediately local, then raysan5 provided libs
|
||||
LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),FREEBSD)
|
||||
# Consider -L$(RAYLIB_INSTALL_PATH)
|
||||
LDFLAGS += -L. -Lsrc -L/usr/local/lib
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
# Reset everything.
|
||||
# Precedence: immediately local, installed version, raysan5 provided libs
|
||||
LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
LDFLAGS += -L/opt/vc/lib
|
||||
endif
|
||||
|
||||
# Define any libraries required on linking
|
||||
# if you want to link libraries (libname.so or libname.a), use the -lname
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||
# Libraries for Windows desktop compilation
|
||||
LDLIBS = -lraylib -lopengl32 -lgdi32
|
||||
# Required for physac examples
|
||||
LDLIBS += -static -lpthread
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
# Libraries for Debian GNU/Linux desktop compiling
|
||||
# NOTE: Required packages: libegl1-mesa-dev
|
||||
LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
|
||||
# On X11 requires also below libraries
|
||||
LDLIBS += -lX11
|
||||
# NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
|
||||
#LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
||||
# On Wayland windowing system, additional libraries requires
|
||||
ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
|
||||
LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
|
||||
endif
|
||||
# Explicit link to libc
|
||||
ifeq ($(RAYLIB_LIBTYPE),SHARED)
|
||||
LDLIBS += -lc
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
# Libraries for OSX 10.9 desktop compiling
|
||||
# NOTE: Required packages: libopenal-dev libegl1-mesa-dev
|
||||
LDLIBS = -lraylib -framework OpenGL -framework OpenAL -framework Cocoa
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),FREEBSD)
|
||||
# Libraries for FreeBSD desktop compiling
|
||||
# NOTE: Required packages: mesa-libs
|
||||
LDLIBS = -lraylib -lGL -lpthread -lm
|
||||
# On XWindow requires also below libraries
|
||||
LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
|
||||
endif
|
||||
ifeq ($(USE_EXTERNAL_GLFW),TRUE)
|
||||
# NOTE: It could require additional packages installed: libglfw3-dev
|
||||
LDLIBS += -lglfw
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
# Libraries for Raspberry Pi compiling
|
||||
# NOTE: Required packages: libasound2-dev (ALSA)
|
||||
LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
# Libraries for web (HTML5) compiling
|
||||
LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
|
||||
endif
|
||||
|
||||
# Define all object files required
|
||||
EXAMPLES = \
|
||||
core/core_basic_window \
|
||||
core/core_input_keys \
|
||||
core/core_input_mouse \
|
||||
core/core_mouse_wheel \
|
||||
core/core_input_gamepad \
|
||||
core/core_random_values \
|
||||
core/core_color_select \
|
||||
core/core_drop_files \
|
||||
core/core_storage_values \
|
||||
core/core_gestures_detection \
|
||||
core/core_3d_mode \
|
||||
core/core_3d_picking \
|
||||
core/core_3d_camera_free \
|
||||
core/core_3d_camera_first_person \
|
||||
core/core_2d_camera \
|
||||
core/core_world_screen \
|
||||
core/core_vr_simulator \
|
||||
shapes/shapes_logo_raylib \
|
||||
shapes/shapes_basic_shapes \
|
||||
shapes/shapes_colors_palette \
|
||||
shapes/shapes_logo_raylib_anim \
|
||||
shapes/shapes_lines_bezier \
|
||||
textures/textures_logo_raylib \
|
||||
textures/textures_image_loading \
|
||||
textures/textures_rectangle \
|
||||
textures/textures_srcrec_dstrec \
|
||||
textures/textures_to_image \
|
||||
textures/textures_raw_data \
|
||||
textures/textures_particles_blending \
|
||||
textures/textures_image_processing \
|
||||
textures/textures_image_drawing \
|
||||
textures/textures_image_generation \
|
||||
textures/textures_image_text \
|
||||
text/text_sprite_fonts \
|
||||
text/text_bmfont_ttf \
|
||||
text/text_raylib_fonts \
|
||||
text/text_format_text \
|
||||
text/text_writing_anim \
|
||||
text/text_ttf_loading \
|
||||
text/text_bmfont_unordered \
|
||||
text/text_input_box \
|
||||
models/models_geometric_shapes \
|
||||
models/models_box_collisions \
|
||||
models/models_billboard \
|
||||
models/models_obj_loading \
|
||||
models/models_heightmap \
|
||||
models/models_cubicmap \
|
||||
models/models_mesh_picking \
|
||||
models/models_mesh_generation \
|
||||
models/models_material_pbr \
|
||||
models/models_skybox \
|
||||
models/models_yaw_pitch_roll \
|
||||
shaders/shaders_model_shader \
|
||||
shaders/shaders_shapes_textures \
|
||||
shaders/shaders_custom_uniform \
|
||||
shaders/shaders_postprocessing \
|
||||
audio/audio_sound_loading \
|
||||
audio/audio_music_stream \
|
||||
audio/audio_module_playing \
|
||||
audio/audio_raw_stream \
|
||||
physac/physics_demo \
|
||||
physac/physics_friction \
|
||||
physac/physics_movement \
|
||||
physac/physics_restitution \
|
||||
physac/physics_shatter \
|
||||
|
||||
|
||||
CURRENT_MAKEFILE = $(lastword $(MAKEFILE_LIST))
|
||||
|
||||
# Default target entry
|
||||
all: $(EXAMPLES)
|
||||
|
||||
# Generic compilation pattern
|
||||
# NOTE: Examples must be ready for Android compilation!
|
||||
%: %.c
|
||||
ifeq ($(PLATFORM),PLATFORM_ANDROID)
|
||||
$(MAKE) -f Makefile.Android PROJECT_NAME=$@ PROJECT_SOURCE_FILES=$<
|
||||
else
|
||||
$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
|
||||
endif
|
||||
|
||||
# fix dylib install path name for each executable (MAC)
|
||||
fix_dylib:
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
find . -type f -perm +ugo+x -print0 | xargs -t -0 -R 1 -I file install_name_tool -change libglfw.3.0.dylib ../external/glfw3/lib/osx/libglfw.3.0.dylib file
|
||||
endif
|
||||
|
||||
# Clean everything
|
||||
clean:
|
||||
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
|
||||
ifeq ($(PLATFORM_OS),WINDOWS)
|
||||
del *.o *.exe /s
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),LINUX)
|
||||
find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv
|
||||
endif
|
||||
ifeq ($(PLATFORM_OS),OSX)
|
||||
find . -type f -perm +ugo+x -delete
|
||||
rm -f *.o
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||
find . -type f -executable -delete
|
||||
rm -fv *.o
|
||||
endif
|
||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||
del *.o *.html *.js
|
||||
endif
|
||||
@echo Cleaning done
|
141
examples/audio/audio_module_playing.c
Normal file
@@ -0,0 +1,141 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [audio] example - Module playing (streaming)
|
||||
*
|
||||
* NOTE: This example requires OpenAL Soft library installed
|
||||
*
|
||||
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2016 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
#define MAX_CIRCLES 64
|
||||
|
||||
typedef struct {
|
||||
Vector2 position;
|
||||
float radius;
|
||||
float alpha;
|
||||
float speed;
|
||||
Color color;
|
||||
} CircleWave;
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
SetConfigFlags(FLAG_MSAA_4X_HINT); // NOTE: Try to enable MSAA 4X
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - module playing (streaming)");
|
||||
|
||||
InitAudioDevice(); // Initialize audio device
|
||||
|
||||
Color colors[14] = { ORANGE, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK,
|
||||
YELLOW, GREEN, SKYBLUE, PURPLE, BEIGE };
|
||||
|
||||
// Creates ome circles for visual effect
|
||||
CircleWave circles[MAX_CIRCLES];
|
||||
|
||||
for (int i = MAX_CIRCLES - 1; i >= 0; i--)
|
||||
{
|
||||
circles[i].alpha = 0.0f;
|
||||
circles[i].radius = GetRandomValue(10, 40);
|
||||
circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius);
|
||||
circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius);
|
||||
circles[i].speed = (float)GetRandomValue(1, 100)/20000.0f;
|
||||
circles[i].color = colors[GetRandomValue(0, 13)];
|
||||
}
|
||||
|
||||
Music xm = LoadMusicStream("resources/mini1111.xm");
|
||||
|
||||
PlayMusicStream(xm);
|
||||
|
||||
float timePlayed = 0.0f;
|
||||
bool pause = false;
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateMusicStream(xm); // Update music buffer with new stream data
|
||||
|
||||
// Restart music playing (stop and play)
|
||||
if (IsKeyPressed(KEY_SPACE))
|
||||
{
|
||||
StopMusicStream(xm);
|
||||
PlayMusicStream(xm);
|
||||
}
|
||||
|
||||
// Pause/Resume music playing
|
||||
if (IsKeyPressed(KEY_P))
|
||||
{
|
||||
pause = !pause;
|
||||
|
||||
if (pause) PauseMusicStream(xm);
|
||||
else ResumeMusicStream(xm);
|
||||
}
|
||||
|
||||
// Get timePlayed scaled to bar dimensions
|
||||
timePlayed = GetMusicTimePlayed(xm)/GetMusicTimeLength(xm)*(screenWidth - 40);
|
||||
|
||||
// Color circles animation
|
||||
for (int i = MAX_CIRCLES - 1; (i >= 0) && !pause; i--)
|
||||
{
|
||||
circles[i].alpha += circles[i].speed;
|
||||
circles[i].radius += circles[i].speed*10.0f;
|
||||
|
||||
if (circles[i].alpha > 1.0f) circles[i].speed *= -1;
|
||||
|
||||
if (circles[i].alpha <= 0.0f)
|
||||
{
|
||||
circles[i].alpha = 0.0f;
|
||||
circles[i].radius = GetRandomValue(10, 40);
|
||||
circles[i].position.x = GetRandomValue(circles[i].radius, screenWidth - circles[i].radius);
|
||||
circles[i].position.y = GetRandomValue(circles[i].radius, screenHeight - circles[i].radius);
|
||||
circles[i].color = colors[GetRandomValue(0, 13)];
|
||||
circles[i].speed = (float)GetRandomValue(1, 100)/20000.0f;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
for (int i = MAX_CIRCLES - 1; i >= 0; i--)
|
||||
{
|
||||
DrawCircleV(circles[i].position, circles[i].radius, Fade(circles[i].color, circles[i].alpha));
|
||||
}
|
||||
|
||||
// Draw time bar
|
||||
DrawRectangle(20, screenHeight - 20 - 12, screenWidth - 40, 12, LIGHTGRAY);
|
||||
DrawRectangle(20, screenHeight - 20 - 12, (int)timePlayed, 12, MAROON);
|
||||
DrawRectangleLines(20, screenHeight - 20 - 12, screenWidth - 40, 12, GRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadMusicStream(xm); // Unload music stream buffers from RAM
|
||||
|
||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/audio/audio_module_playing.png
Normal file
After Width: | Height: | Size: 47 KiB |
93
examples/audio/audio_music_stream.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [audio] example - Music playing (streaming)
|
||||
*
|
||||
* NOTE: This example requires OpenAL Soft library installed
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - music playing (streaming)");
|
||||
|
||||
InitAudioDevice(); // Initialize audio device
|
||||
|
||||
Music music = LoadMusicStream("resources/guitar_noodling.ogg");
|
||||
|
||||
PlayMusicStream(music);
|
||||
|
||||
float timePlayed = 0.0f;
|
||||
bool pause = false;
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateMusicStream(music); // Update music buffer with new stream data
|
||||
|
||||
// Restart music playing (stop and play)
|
||||
if (IsKeyPressed(KEY_SPACE))
|
||||
{
|
||||
StopMusicStream(music);
|
||||
PlayMusicStream(music);
|
||||
}
|
||||
|
||||
// Pause/Resume music playing
|
||||
if (IsKeyPressed(KEY_P))
|
||||
{
|
||||
pause = !pause;
|
||||
|
||||
if (pause) PauseMusicStream(music);
|
||||
else ResumeMusicStream(music);
|
||||
}
|
||||
|
||||
// Get timePlayed scaled to bar dimensions (400 pixels)
|
||||
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music)*400;
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY);
|
||||
|
||||
DrawRectangle(200, 200, 400, 12, LIGHTGRAY);
|
||||
DrawRectangle(200, 200, (int)timePlayed, 12, MAROON);
|
||||
DrawRectangleLines(200, 200, 400, 12, GRAY);
|
||||
|
||||
DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY);
|
||||
DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadMusicStream(music); // Unload music stream buffers from RAM
|
||||
|
||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/audio/audio_music_stream.png
Normal file
After Width: | Height: | Size: 15 KiB |
114
examples/audio/audio_raw_stream.c
Normal file
@@ -0,0 +1,114 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [audio] example - Raw audio streaming
|
||||
*
|
||||
* NOTE: This example requires OpenAL Soft library installed
|
||||
*
|
||||
* This example has been created using raylib 1.6 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
#include <stdlib.h> // Required for: malloc(), free()
|
||||
#include <math.h> // Required for: sinf()
|
||||
|
||||
#define MAX_SAMPLES 22050
|
||||
#define MAX_SAMPLES_PER_UPDATE 4096
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - raw audio streaming");
|
||||
|
||||
InitAudioDevice(); // Initialize audio device
|
||||
|
||||
// Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono)
|
||||
AudioStream stream = InitAudioStream(22050, 16, 1);
|
||||
|
||||
// Generate samples data from sine wave
|
||||
short *data = (short *)malloc(sizeof(short)*MAX_SAMPLES);
|
||||
|
||||
// TODO: Review data generation, it seems data is discontinued for loop,
|
||||
// for that reason, there is a clip everytime audio stream is looped...
|
||||
for (int i = 0; i < MAX_SAMPLES; i++)
|
||||
{
|
||||
data[i] = (short)(sinf(((2*PI*(float)i)/2)*DEG2RAD)*32000);
|
||||
}
|
||||
|
||||
PlayAudioStream(stream); // Start processing stream buffer (no data loaded currently)
|
||||
|
||||
int totalSamples = MAX_SAMPLES;
|
||||
int samplesLeft = totalSamples;
|
||||
|
||||
Vector2 position = { 0, 0 };
|
||||
|
||||
SetTargetFPS(30); // Set our game to run at 30 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Refill audio stream if required
|
||||
// NOTE: Every update we check if stream data has been already consumed and we update
|
||||
// buffer with new data from the generated samples, we upload data at a rate (MAX_SAMPLES_PER_UPDATE),
|
||||
// but notice that at some point we update < MAX_SAMPLES_PER_UPDATE data...
|
||||
if (IsAudioBufferProcessed(stream))
|
||||
{
|
||||
int numSamples = 0;
|
||||
if (samplesLeft >= MAX_SAMPLES_PER_UPDATE) numSamples = MAX_SAMPLES_PER_UPDATE;
|
||||
else numSamples = samplesLeft;
|
||||
|
||||
UpdateAudioStream(stream, data + (totalSamples - samplesLeft), numSamples);
|
||||
|
||||
samplesLeft -= numSamples;
|
||||
|
||||
// Reset samples feeding (loop audio)
|
||||
if (samplesLeft <= 0) samplesLeft = totalSamples;
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("SINE WAVE SHOULD BE PLAYING!", 240, 140, 20, LIGHTGRAY);
|
||||
|
||||
// NOTE: Draw a part of the sine wave (only screen width, proportional values)
|
||||
for (int i = 0; i < GetScreenWidth(); i++)
|
||||
{
|
||||
position.x = i;
|
||||
position.y = 250 + 50*data[i]/32000;
|
||||
|
||||
DrawPixelV(position, RED);
|
||||
}
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
free(data); // Unload sine wave data
|
||||
|
||||
CloseAudioStream(stream); // Close raw audio stream and delete buffers from RAM
|
||||
|
||||
CloseAudioDevice(); // Close audio device (music streaming is automatically stopped)
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/audio/audio_raw_stream.png
Normal file
After Width: | Height: | Size: 16 KiB |
@@ -1,13 +1,13 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 08 - Audio loading and playing
|
||||
* raylib [audio] example - Sound loading and playing
|
||||
*
|
||||
* NOTE: This example requires OpenAL32 dll installed (or in the same folder)
|
||||
* NOTE: This example requires OpenAL Soft library installed
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -20,11 +20,14 @@ int main()
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 08 - audio loading and playing");
|
||||
InitWindow(screenWidth, screenHeight, "raylib [audio] example - sound loading and playing");
|
||||
|
||||
InitAudioDevice(); // Initialize audio device
|
||||
|
||||
Sound fx = LoadSound("resources/audio/weird.wav"); // Load WAV audio file
|
||||
Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file
|
||||
Sound fxOgg = LoadSound("resources/tanatana.ogg"); // Load OGG audio file
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
@@ -32,7 +35,8 @@ int main()
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (IsKeyPressed(KEY_SPACE)) PlaySound(fx); // Play the sound!
|
||||
if (IsKeyPressed(KEY_SPACE)) PlaySound(fxWav); // Play WAV sound
|
||||
if (IsKeyPressed(KEY_ENTER)) PlaySound(fxOgg); // Play OGG sound
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
@@ -41,7 +45,9 @@ int main()
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("Press SPACE to PLAY the SOUND!", 240, 200, 20, LIGHTGRAY);
|
||||
DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY);
|
||||
|
||||
DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
@@ -49,7 +55,8 @@ int main()
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadSound(fx); // Unload sound data
|
||||
UnloadSound(fxWav); // Unload sound data
|
||||
UnloadSound(fxOgg); // Unload sound data
|
||||
|
||||
CloseAudioDevice(); // Close audio device
|
||||
|
BIN
examples/audio/audio_sound_loading.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
examples/audio/resources/chiptun1.mod
Normal file
BIN
examples/audio/resources/guitar_noodling.ogg
Normal file
BIN
examples/audio/resources/mini1111.xm
Normal file
BIN
examples/audio/resources/sound.wav
Normal file
BIN
examples/audio/resources/tanatana.flac
Normal file
BIN
examples/audio/resources/tanatana.ogg
Normal file
139
examples/core/core_2d_camera.c
Normal file
@@ -0,0 +1,139 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - 2d camera
|
||||
*
|
||||
* This example has been created using raylib 1.5 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2016 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
#define MAX_BUILDINGS 100
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 2d camera");
|
||||
|
||||
Rectangle player = { 400, 280, 40, 40 };
|
||||
Rectangle buildings[MAX_BUILDINGS];
|
||||
Color buildColors[MAX_BUILDINGS];
|
||||
|
||||
int spacing = 0;
|
||||
|
||||
for (int i = 0; i < MAX_BUILDINGS; i++)
|
||||
{
|
||||
buildings[i].width = GetRandomValue(50, 200);
|
||||
buildings[i].height = GetRandomValue(100, 800);
|
||||
buildings[i].y = screenHeight - 130 - buildings[i].height;
|
||||
buildings[i].x = -6000 + spacing;
|
||||
|
||||
spacing += buildings[i].width;
|
||||
|
||||
buildColors[i] = (Color){ GetRandomValue(200, 240), GetRandomValue(200, 240), GetRandomValue(200, 250), 255 };
|
||||
}
|
||||
|
||||
Camera2D camera;
|
||||
|
||||
camera.target = (Vector2){ player.x + 20, player.y + 20 };
|
||||
camera.offset = (Vector2){ 0, 0 };
|
||||
camera.rotation = 0.0f;
|
||||
camera.zoom = 1.0f;
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (IsKeyDown(KEY_RIGHT))
|
||||
{
|
||||
player.x += 2; // Player movement
|
||||
camera.offset.x -= 2; // Camera displacement with player movement
|
||||
}
|
||||
else if (IsKeyDown(KEY_LEFT))
|
||||
{
|
||||
player.x -= 2; // Player movement
|
||||
camera.offset.x += 2; // Camera displacement with player movement
|
||||
}
|
||||
|
||||
// Camera target follows player
|
||||
camera.target = (Vector2){ player.x + 20, player.y + 20 };
|
||||
|
||||
// Camera rotation controls
|
||||
if (IsKeyDown(KEY_A)) camera.rotation--;
|
||||
else if (IsKeyDown(KEY_S)) camera.rotation++;
|
||||
|
||||
// Limit camera rotation to 80 degrees (-40 to 40)
|
||||
if (camera.rotation > 40) camera.rotation = 40;
|
||||
else if (camera.rotation < -40) camera.rotation = -40;
|
||||
|
||||
// Camera zoom controls
|
||||
camera.zoom += ((float)GetMouseWheelMove()*0.05f);
|
||||
|
||||
if (camera.zoom > 3.0f) camera.zoom = 3.0f;
|
||||
else if (camera.zoom < 0.1f) camera.zoom = 0.1f;
|
||||
|
||||
// Camera reset (zoom and rotation)
|
||||
if (IsKeyPressed(KEY_R))
|
||||
{
|
||||
camera.zoom = 1.0f;
|
||||
camera.rotation = 0.0f;
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
Begin2dMode(camera);
|
||||
|
||||
DrawRectangle(-6000, 320, 13000, 8000, DARKGRAY);
|
||||
|
||||
for (int i = 0; i < MAX_BUILDINGS; i++) DrawRectangleRec(buildings[i], buildColors[i]);
|
||||
|
||||
DrawRectangleRec(player, RED);
|
||||
|
||||
DrawRectangle(camera.target.x, -500, 1, screenHeight*4, GREEN);
|
||||
DrawRectangle(-500, camera.target.y, screenWidth*4, 1, GREEN);
|
||||
|
||||
End2dMode();
|
||||
|
||||
DrawText("SCREEN AREA", 640, 10, 20, RED);
|
||||
|
||||
DrawRectangle(0, 0, screenWidth, 5, RED);
|
||||
DrawRectangle(0, 5, 5, screenHeight - 10, RED);
|
||||
DrawRectangle(screenWidth - 5, 5, 5, screenHeight - 10, RED);
|
||||
DrawRectangle(0, screenHeight - 5, screenWidth, 5, RED);
|
||||
|
||||
DrawRectangle( 10, 10, 250, 113, Fade(SKYBLUE, 0.5f));
|
||||
DrawRectangleLines( 10, 10, 250, 113, BLUE);
|
||||
|
||||
DrawText("Free 2d camera controls:", 20, 20, 10, BLACK);
|
||||
DrawText("- Right/Left to move Offset", 40, 40, 10, DARKGRAY);
|
||||
DrawText("- Mouse Wheel to Zoom in-out", 40, 60, 10, DARKGRAY);
|
||||
DrawText("- A / S to Rotate", 40, 80, 10, DARKGRAY);
|
||||
DrawText("- R to reset Zoom and Rotation", 40, 100, 10, DARKGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_2d_camera.png
Normal file
After Width: | Height: | Size: 21 KiB |
92
examples/core/core_3d_camera_first_person.c
Normal file
@@ -0,0 +1,92 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - 3d camera first person
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
#define MAX_COLUMNS 20
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera first person");
|
||||
|
||||
// Define the camera to look into our 3d world (position, target, up vector)
|
||||
Camera camera = {{ 4.0f, 2.0f, 4.0f }, { 0.0f, 1.8f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 60.0f };
|
||||
|
||||
// Generates some random columns
|
||||
float heights[MAX_COLUMNS];
|
||||
Vector3 positions[MAX_COLUMNS];
|
||||
Color colors[MAX_COLUMNS];
|
||||
|
||||
for (int i = 0; i < MAX_COLUMNS; i++)
|
||||
{
|
||||
heights[i] = (float)GetRandomValue(1, 12);
|
||||
positions[i] = (Vector3){ GetRandomValue(-15, 15), heights[i]/2, GetRandomValue(-15, 15) };
|
||||
colors[i] = (Color){ GetRandomValue(20, 255), GetRandomValue(10, 55), 30, 255 };
|
||||
}
|
||||
|
||||
SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateCamera(&camera); // Update camera
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
DrawPlane((Vector3){ 0.0f, 0.0f, 0.0f }, (Vector2){ 32.0f, 32.0f }, LIGHTGRAY); // Draw ground
|
||||
DrawCube((Vector3){ -16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, BLUE); // Draw a blue wall
|
||||
DrawCube((Vector3){ 16.0f, 2.5f, 0.0f }, 1.0f, 5.0f, 32.0f, LIME); // Draw a green wall
|
||||
DrawCube((Vector3){ 0.0f, 2.5f, 16.0f }, 32.0f, 5.0f, 1.0f, GOLD); // Draw a yellow wall
|
||||
|
||||
// Draw some cubes around
|
||||
for (int i = 0; i < MAX_COLUMNS; i++)
|
||||
{
|
||||
DrawCube(positions[i], 2.0f, heights[i], 2.0f, colors[i]);
|
||||
DrawCubeWires(positions[i], 2.0f, heights[i], 2.0f, MAROON);
|
||||
}
|
||||
|
||||
End3dMode();
|
||||
|
||||
DrawRectangle( 10, 10, 220, 70, Fade(SKYBLUE, 0.5f));
|
||||
DrawRectangleLines( 10, 10, 220, 70, BLUE);
|
||||
|
||||
DrawText("First person camera default controls:", 20, 20, 10, BLACK);
|
||||
DrawText("- Move with keys: W, A, S, D", 40, 40, 10, DARKGRAY);
|
||||
DrawText("- Mouse move to look around", 40, 60, 10, DARKGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_3d_camera_first_person.png
Normal file
After Width: | Height: | Size: 17 KiB |
82
examples/core/core_3d_camera_free.c
Normal file
@@ -0,0 +1,82 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Initialize 3d camera free
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free");
|
||||
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera;
|
||||
camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position
|
||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
||||
|
||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateCamera(&camera); // Update camera
|
||||
|
||||
if (IsKeyDown('Z')) camera.target = (Vector3){ 0.0f, 0.0f, 0.0f };
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
||||
|
||||
DrawGrid(10, 1.0f);
|
||||
|
||||
End3dMode();
|
||||
|
||||
DrawRectangle( 10, 10, 320, 133, Fade(SKYBLUE, 0.5f));
|
||||
DrawRectangleLines( 10, 10, 320, 133, BLUE);
|
||||
|
||||
DrawText("Free camera default controls:", 20, 20, 10, BLACK);
|
||||
DrawText("- Mouse Wheel to Zoom in-out", 40, 40, 10, DARKGRAY);
|
||||
DrawText("- Mouse Wheel Pressed to Pan", 40, 60, 10, DARKGRAY);
|
||||
DrawText("- Alt + Mouse Wheel Pressed to Rotate", 40, 80, 10, DARKGRAY);
|
||||
DrawText("- Alt + Ctrl + Mouse Wheel Pressed for Smooth Zoom", 40, 100, 10, DARKGRAY);
|
||||
DrawText("- Z to zoom to (0, 0, 0)", 40, 120, 10, DARKGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_3d_camera_free.png
Normal file
After Width: | Height: | Size: 25 KiB |
@@ -1,11 +1,11 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 07b - Draw some basic 3d shapes (cube, sphere, cylinder...)
|
||||
* raylib [core] example - Initialize 3d mode
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -18,10 +18,16 @@ int main()
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera = {{ 0.0, 10.0, 10.0 }, { 0.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }};
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d mode");
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 07b - 3d shapes");
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera;
|
||||
camera.position = (Vector3){ 0.0f, 10.0f, 10.0f }; // Camera position
|
||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
||||
|
||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
@@ -42,24 +48,15 @@ int main()
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
DrawCube((Vector3){-4, 0, 2}, 2, 5, 2, RED);
|
||||
DrawCubeWires((Vector3){-4, 0, 2}, 2, 5, 2, GOLD);
|
||||
DrawCubeWires((Vector3){-4, 0, -2}, 3, 6, 2, MAROON);
|
||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
||||
|
||||
DrawSphere((Vector3){-1, 0, -2}, 1, GREEN);
|
||||
DrawSphereWires((Vector3){1, 0, 2}, 2, LIME);
|
||||
|
||||
DrawCylinder((Vector3){4, 0, -2}, 1, 2, 3, 4, SKYBLUE);
|
||||
DrawCylinderWires((Vector3){4, 0, -2}, 1, 2, 3, 4, DARKBLUE);
|
||||
DrawCylinderWires((Vector3){4.5, -1, 2}, 1, 1, 2, 6, BROWN);
|
||||
|
||||
DrawCylinder((Vector3){1, 0, -4}, 0, 1.5, 3, 8, GOLD);
|
||||
DrawCylinderWires((Vector3){1, 0, -4}, 0, 1.5, 3, 8, PINK);
|
||||
|
||||
DrawGrid(10.0, 1.0); // Draw a grid
|
||||
DrawGrid(10, 1.0f);
|
||||
|
||||
End3dMode();
|
||||
|
||||
DrawText("Welcome to the third dimension!", 10, 40, 20, DARKGRAY);
|
||||
|
||||
DrawFPS(10, 10);
|
||||
|
||||
EndDrawing();
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
102
examples/core/core_3d_picking.c
Normal file
@@ -0,0 +1,102 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Picking in 3d mode
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking");
|
||||
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera;
|
||||
camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position
|
||||
camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point
|
||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
||||
camera.fovy = 45.0f; // Camera field-of-view Y
|
||||
|
||||
Vector3 cubePosition = { 0.0f, 1.0f, 0.0f };
|
||||
Vector3 cubeSize = { 2.0f, 2.0f, 2.0f };
|
||||
|
||||
Ray ray = {0.0f, 0.0f, 0.0f}; // Picking line ray
|
||||
|
||||
bool collision = false;
|
||||
|
||||
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateCamera(&camera); // Update camera
|
||||
|
||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
||||
{
|
||||
ray = GetMouseRay(GetMousePosition(), camera);
|
||||
|
||||
// Check collision between ray and box
|
||||
collision = CheckCollisionRayBox(ray,
|
||||
(BoundingBox){(Vector3){ cubePosition.x - cubeSize.x/2, cubePosition.y - cubeSize.y/2, cubePosition.z - cubeSize.z/2 },
|
||||
(Vector3){ cubePosition.x + cubeSize.x/2, cubePosition.y + cubeSize.y/2, cubePosition.z + cubeSize.z/2 }});
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
if (collision)
|
||||
{
|
||||
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, RED);
|
||||
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, MAROON);
|
||||
|
||||
DrawCubeWires(cubePosition, cubeSize.x + 0.2f, cubeSize.y + 0.2f, cubeSize.z + 0.2f, GREEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawCube(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, GRAY);
|
||||
DrawCubeWires(cubePosition, cubeSize.x, cubeSize.y, cubeSize.z, DARKGRAY);
|
||||
}
|
||||
|
||||
DrawRay(ray, MAROON);
|
||||
DrawGrid(10, 1.0f);
|
||||
|
||||
End3dMode();
|
||||
|
||||
DrawText("Try selecting the box with mouse!", 240, 10, 20, DARKGRAY);
|
||||
|
||||
if(collision) DrawText("BOX SELECTED", (screenWidth - MeasureText("BOX SELECTED", 30)) / 2, screenHeight * 0.1f, 30, GREEN);
|
||||
|
||||
DrawFPS(10, 10);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_3d_picking.png
Normal file
After Width: | Height: | Size: 24 KiB |
@@ -1,11 +1,21 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 01 - Basic Window
|
||||
* raylib [core] example - Basic window
|
||||
*
|
||||
* Welcome to raylib!
|
||||
*
|
||||
* To test examples, just press F6 and execute raylib_compile_execute script
|
||||
* Note that compiled executable is placed in the same folder as .c file
|
||||
*
|
||||
* You can find all basic examples on C:\raylib\raylib\examples folder or
|
||||
* raylib official webpage: www.raylib.com
|
||||
*
|
||||
* Enjoy using raylib. :)
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -18,7 +28,9 @@ int main()
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 01a - basic window");
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
62
examples/core/core_basic_window.cpp
Normal file
@@ -0,0 +1,62 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Basic window
|
||||
*
|
||||
* Welcome to raylib!
|
||||
*
|
||||
* To test examples, just press F6 and execute raylib_compile_execute script
|
||||
* Note that compiled executable is placed in the same folder as .c file
|
||||
*
|
||||
* You can find all basic examples on C:\raylib\raylib\examples folder or
|
||||
* raylib official webpage: www.raylib.com
|
||||
*
|
||||
* Enjoy using raylib. :)
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
// TODO: Update your variables here
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
85
examples/core/core_basic_window_web.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Basic window (adapted for HTML5 platform)
|
||||
*
|
||||
* This example is prepared to compile for PLATFORM_WEB, PLATFORM_DESKTOP and PLATFORM_RPI
|
||||
* As you will notice, code structure is slightly diferent to the other examples...
|
||||
* To compile it for PLATFORM_WEB just uncomment #define PLATFORM_WEB at beginning
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
//#define PLATFORM_WEB
|
||||
|
||||
#if defined(PLATFORM_WEB)
|
||||
#include <emscripten/emscripten.h>
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Global Variables Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Module Functions Declaration
|
||||
//----------------------------------------------------------------------------------
|
||||
void UpdateDrawFrame(void); // Update and Draw one frame
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Main Enry Point
|
||||
//----------------------------------------------------------------------------------
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
||||
|
||||
#if defined(PLATFORM_WEB)
|
||||
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||
#else
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
UpdateDrawFrame();
|
||||
}
|
||||
#endif
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
// Module Functions Definition
|
||||
//----------------------------------------------------------------------------------
|
||||
void UpdateDrawFrame(void)
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
// TODO: Update your variables here
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
@@ -1,11 +1,11 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 06a - Color selection by mouse (collision detection)
|
||||
* raylib [core] example - Color selection by mouse (collision detection)
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -16,30 +16,30 @@ int main()
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 400;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - color selection (collision detection)");
|
||||
|
||||
Color colors[21] = { DARKGRAY, MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, DARKBROWN,
|
||||
GRAY, RED, GOLD, LIME, BLUE, VIOLET, BROWN, LIGHTGRAY, PINK, YELLOW,
|
||||
GREEN, SKYBLUE, PURPLE, BEIGE };
|
||||
|
||||
Rectangle recs[21]; // Rectangles array
|
||||
Rectangle colorsRecs[21]; // Rectangles array
|
||||
|
||||
// Fills recs data (for every rectangle)
|
||||
// Fills colorsRecs data (for every rectangle)
|
||||
for (int i = 0; i < 21; i++)
|
||||
{
|
||||
recs[i].x = 20 + 100*(i%7) + 10*(i%7);
|
||||
recs[i].y = 40 + 100*(i/7) + 10*(i/7);
|
||||
recs[i].width = 100;
|
||||
recs[i].height = 100;
|
||||
colorsRecs[i].x = 20 + 100*(i%7) + 10*(i%7);
|
||||
colorsRecs[i].y = 60 + 100*(i/7) + 10*(i/7);
|
||||
colorsRecs[i].width = 100;
|
||||
colorsRecs[i].height = 100;
|
||||
}
|
||||
|
||||
bool selected[21] = { false }; // Selected rectangles indicator
|
||||
bool selected[21] = { false }; // Selected rectangles indicator
|
||||
|
||||
Vector2 mousePoint;
|
||||
|
||||
InitWindowEx(screenWidth, screenHeight, "raylib example 06a - color selection", false, "resources/mouse.png");
|
||||
|
||||
SetTargetFPS(60);
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
@@ -51,7 +51,7 @@ int main()
|
||||
|
||||
for (int i = 0; i < 21; i++) // Iterate along all the rectangles
|
||||
{
|
||||
if (CheckCollisionPointRec(mousePoint, recs[i]))
|
||||
if (CheckCollisionPointRec(mousePoint, colorsRecs[i]))
|
||||
{
|
||||
colors[i].a = 120;
|
||||
|
||||
@@ -69,15 +69,15 @@ int main()
|
||||
|
||||
for (int i = 0; i < 21; i++) // Draw all rectangles
|
||||
{
|
||||
DrawRectangleRec(recs[i], colors[i]);
|
||||
DrawRectangleRec(colorsRecs[i], colors[i]);
|
||||
|
||||
// Draw four rectangles around selected rectangle
|
||||
if (selected[i])
|
||||
{
|
||||
DrawRectangle(recs[i].x, recs[i].y, 100, 10, RAYWHITE); // Square top rectangle
|
||||
DrawRectangle(recs[i].x, recs[i].y, 10, 100, RAYWHITE); // Square left rectangle
|
||||
DrawRectangle(recs[i].x + 90, recs[i].y, 10, 100, RAYWHITE); // Square right rectangle
|
||||
DrawRectangle(recs[i].x, recs[i].y + 90, 100, 10, RAYWHITE); // Square bottom rectangle
|
||||
DrawRectangle(colorsRecs[i].x, colorsRecs[i].y, 100, 10, RAYWHITE); // Square top rectangle
|
||||
DrawRectangle(colorsRecs[i].x, colorsRecs[i].y, 10, 100, RAYWHITE); // Square left rectangle
|
||||
DrawRectangle(colorsRecs[i].x + 90, colorsRecs[i].y, 10, 100, RAYWHITE); // Square right rectangle
|
||||
DrawRectangle(colorsRecs[i].x, colorsRecs[i].y + 90, 100, 10, RAYWHITE); // Square bottom rectangle
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@@ -1,11 +1,13 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 03c - Gamepad input
|
||||
* raylib [core] example - Windows drop files
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* This example only works on platforms that support drag & drop (Windows, Linux, OSX, Html5?)
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -18,12 +20,12 @@ int main()
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
Vector2 ballPosition = { screenWidth/2, screenHeight/2 };
|
||||
Vector2 gamepadMove = { 0, 0 };
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - drop files");
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 01 - gamepad input");
|
||||
int count = 0;
|
||||
char **droppedFiles = { 0 };
|
||||
|
||||
SetTargetFPS(60); // Set target frames-per-second
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
@@ -31,18 +33,9 @@ int main()
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (IsGamepadAvailable(GAMEPAD_PLAYER1))
|
||||
if (IsFileDropped())
|
||||
{
|
||||
gamepadMove = GetGamepadMovement(GAMEPAD_PLAYER1);
|
||||
|
||||
ballPosition.x += gamepadMove.x;
|
||||
ballPosition.y -= gamepadMove.y;
|
||||
|
||||
if (IsGamepadButtonPressed(GAMEPAD_PLAYER1, GAMEPAD_BUTTON_A))
|
||||
{
|
||||
ballPosition.x = screenWidth/2;
|
||||
ballPosition.y = screenHeight/2;
|
||||
}
|
||||
droppedFiles = GetDroppedFiles(&count);
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
@@ -52,9 +45,21 @@ int main()
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("move the ball with gamepad", 10, 10, 20, DARKGRAY);
|
||||
if (count == 0) DrawText("Drop your files to this window!", 100, 40, 20, DARKGRAY);
|
||||
else
|
||||
{
|
||||
DrawText("Dropped files:", 100, 40, 20, DARKGRAY);
|
||||
|
||||
DrawCircleV(ballPosition, 50, MAROON);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (i%2 == 0) DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.5f));
|
||||
else DrawRectangle(0, 85 + 40*i, screenWidth, 40, Fade(LIGHTGRAY, 0.3f));
|
||||
|
||||
DrawText(droppedFiles[i], 120, 100 + 40*i, 10, GRAY);
|
||||
}
|
||||
|
||||
DrawText("Drop new files...", 100, 110 + 40*count, 20, DARKGRAY);
|
||||
}
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
@@ -62,7 +67,9 @@ int main()
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
ClearDroppedFiles(); // Clear internal buffers
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
BIN
examples/core/core_drop_files.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
115
examples/core/core_gestures_detection.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Gestures Detection
|
||||
*
|
||||
* This example has been created using raylib 1.4 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2016 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_GESTURE_STRINGS 20
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - gestures detection");
|
||||
|
||||
Vector2 touchPosition = { 0, 0 };
|
||||
Rectangle touchArea = { 220, 10, screenWidth - 230, screenHeight - 20 };
|
||||
|
||||
int gesturesCount = 0;
|
||||
char gestureStrings[MAX_GESTURE_STRINGS][32];
|
||||
|
||||
int currentGesture = GESTURE_NONE;
|
||||
int lastGesture = GESTURE_NONE;
|
||||
|
||||
//SetGesturesEnabled(0b0000000000001001); // Enable only some gestures to be detected
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
lastGesture = currentGesture;
|
||||
currentGesture = GetGestureDetected();
|
||||
touchPosition = GetTouchPosition(0);
|
||||
|
||||
if (CheckCollisionPointRec(touchPosition, touchArea) && (currentGesture != GESTURE_NONE))
|
||||
{
|
||||
if (currentGesture != lastGesture)
|
||||
{
|
||||
// Store gesture string
|
||||
switch (currentGesture)
|
||||
{
|
||||
case GESTURE_TAP: strcpy(gestureStrings[gesturesCount], "GESTURE TAP"); break;
|
||||
case GESTURE_DOUBLETAP: strcpy(gestureStrings[gesturesCount], "GESTURE DOUBLETAP"); break;
|
||||
case GESTURE_HOLD: strcpy(gestureStrings[gesturesCount], "GESTURE HOLD"); break;
|
||||
case GESTURE_DRAG: strcpy(gestureStrings[gesturesCount], "GESTURE DRAG"); break;
|
||||
case GESTURE_SWIPE_RIGHT: strcpy(gestureStrings[gesturesCount], "GESTURE SWIPE RIGHT"); break;
|
||||
case GESTURE_SWIPE_LEFT: strcpy(gestureStrings[gesturesCount], "GESTURE SWIPE LEFT"); break;
|
||||
case GESTURE_SWIPE_UP: strcpy(gestureStrings[gesturesCount], "GESTURE SWIPE UP"); break;
|
||||
case GESTURE_SWIPE_DOWN: strcpy(gestureStrings[gesturesCount], "GESTURE SWIPE DOWN"); break;
|
||||
case GESTURE_PINCH_IN: strcpy(gestureStrings[gesturesCount], "GESTURE PINCH IN"); break;
|
||||
case GESTURE_PINCH_OUT: strcpy(gestureStrings[gesturesCount], "GESTURE PINCH OUT"); break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
gesturesCount++;
|
||||
|
||||
// Reset gestures strings
|
||||
if (gesturesCount >= MAX_GESTURE_STRINGS)
|
||||
{
|
||||
for (int i = 0; i < MAX_GESTURE_STRINGS; i++) strcpy(gestureStrings[i], "\0");
|
||||
|
||||
gesturesCount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawRectangleRec(touchArea, GRAY);
|
||||
DrawRectangle(225, 15, screenWidth - 240, screenHeight - 30, RAYWHITE);
|
||||
|
||||
DrawText("GESTURES TEST AREA", screenWidth - 270, screenHeight - 40, 20, Fade(GRAY, 0.5f));
|
||||
|
||||
for (int i = 0; i < gesturesCount; i++)
|
||||
{
|
||||
if (i%2 == 0) DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.5f));
|
||||
else DrawRectangle(10, 30 + 20*i, 200, 20, Fade(LIGHTGRAY, 0.3f));
|
||||
|
||||
if (i < gesturesCount - 1) DrawText(gestureStrings[i], 35, 36 + 20*i, 10, DARKGRAY);
|
||||
else DrawText(gestureStrings[i], 35, 36 + 20*i, 10, MAROON);
|
||||
}
|
||||
|
||||
DrawRectangleLines(10, 29, 200, screenHeight - 50, GRAY);
|
||||
DrawText("DETECTED GESTURES", 50, 15, 10, GRAY);
|
||||
|
||||
if (currentGesture != GESTURE_NONE) DrawCircleV(touchPosition, 30, MAROON);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
}
|
BIN
examples/core/core_gestures_detection.png
Normal file
After Width: | Height: | Size: 19 KiB |
194
examples/core/core_input_gamepad.c
Normal file
@@ -0,0 +1,194 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Gamepad input
|
||||
*
|
||||
* NOTE: This example requires a Gamepad connected to the system
|
||||
* raylib is configured to work with the following gamepads:
|
||||
* - Xbox 360 Controller (Xbox 360, Xbox One)
|
||||
* - PLAYSTATION(R)3 Controller
|
||||
* Check raylib.h for buttons configuration
|
||||
*
|
||||
* This example has been created using raylib 1.6 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013-2016 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
// NOTE: Gamepad name ID depends on drivers and OS
|
||||
#if defined(PLATFORM_RPI)
|
||||
#define XBOX360_NAME_ID "Microsoft X-Box 360 pad"
|
||||
#define PS3_NAME_ID "PLAYSTATION(R)3 Controller"
|
||||
#else
|
||||
#define XBOX360_NAME_ID "Xbox 360 Controller"
|
||||
#define PS3_NAME_ID "PLAYSTATION(R)3 Controller"
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
SetConfigFlags(FLAG_MSAA_4X_HINT); // Set MSAA 4X hint before windows creation
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - gamepad input");
|
||||
|
||||
Texture2D texPs3Pad = LoadTexture("resources/ps3.png");
|
||||
Texture2D texXboxPad = LoadTexture("resources/xbox.png");
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
// ...
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
if (IsGamepadAvailable(GAMEPAD_PLAYER1))
|
||||
{
|
||||
DrawText(FormatText("GP1: %s", GetGamepadName(GAMEPAD_PLAYER1)), 10, 10, 10, BLACK);
|
||||
|
||||
if (IsGamepadName(GAMEPAD_PLAYER1, XBOX360_NAME_ID))
|
||||
{
|
||||
DrawTexture(texXboxPad, 0, 0, DARKGRAY);
|
||||
|
||||
// Draw buttons: xbox home
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_HOME)) DrawCircle(394, 89, 19, RED);
|
||||
|
||||
// Draw buttons: basic
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_START)) DrawCircle(436, 150, 9, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_SELECT)) DrawCircle(352, 150, 9, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_X)) DrawCircle(501, 151, 15, BLUE);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_A)) DrawCircle(536, 187, 15, LIME);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_B)) DrawCircle(572, 151, 15, MAROON);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_Y)) DrawCircle(536, 115, 15, GOLD);
|
||||
|
||||
// Draw buttons: d-pad
|
||||
DrawRectangle(317, 202, 19, 71, BLACK);
|
||||
DrawRectangle(293, 228, 69, 19, BLACK);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_UP)) DrawRectangle(317, 202, 19, 26, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_DOWN)) DrawRectangle(317, 202 + 45, 19, 26, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_LEFT)) DrawRectangle(292, 228, 25, 19, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_RIGHT)) DrawRectangle(292 + 44, 228, 26, 19, RED);
|
||||
|
||||
// Draw buttons: left-right back
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_LB)) DrawCircle(259, 61, 20, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_XBOX_BUTTON_RB)) DrawCircle(536, 61, 20, RED);
|
||||
|
||||
// Draw axis: left joystick
|
||||
DrawCircle(259, 152, 39, BLACK);
|
||||
DrawCircle(259, 152, 34, LIGHTGRAY);
|
||||
DrawCircle(259 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_X)*20),
|
||||
152 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LEFT_Y)*20), 25, BLACK);
|
||||
|
||||
// Draw axis: right joystick
|
||||
DrawCircle(461, 237, 38, BLACK);
|
||||
DrawCircle(461, 237, 33, LIGHTGRAY);
|
||||
DrawCircle(461 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RIGHT_X)*20),
|
||||
237 - (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RIGHT_Y)*20), 25, BLACK);
|
||||
|
||||
// Draw axis: left-right triggers
|
||||
DrawRectangle(170, 30, 15, 70, GRAY);
|
||||
DrawRectangle(604, 30, 15, 70, GRAY);
|
||||
DrawRectangle(170, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LT))/2.0f)*70), RED);
|
||||
DrawRectangle(604, 30, 15, (((1.0f + GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RT))/2.0f)*70), RED);
|
||||
|
||||
//DrawText(FormatText("Xbox axis LT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_LT)), 10, 40, 10, BLACK);
|
||||
//DrawText(FormatText("Xbox axis RT: %02.02f", GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_XBOX_AXIS_RT)), 10, 60, 10, BLACK);
|
||||
}
|
||||
else if (IsGamepadName(GAMEPAD_PLAYER1, PS3_NAME_ID))
|
||||
{
|
||||
DrawTexture(texPs3Pad, 0, 0, DARKGRAY);
|
||||
|
||||
// Draw buttons: ps
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_PS)) DrawCircle(396, 222, 13, RED);
|
||||
|
||||
// Draw buttons: basic
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_SELECT)) DrawRectangle(328, 170, 32, 13, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_START)) DrawTriangle((Vector2){ 436, 168 }, (Vector2){ 436, 185 }, (Vector2){ 464, 177 }, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_TRIANGLE)) DrawCircle(557, 144, 13, LIME);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_CIRCLE)) DrawCircle(586, 173, 13, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_CROSS)) DrawCircle(557, 203, 13, VIOLET);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_SQUARE)) DrawCircle(527, 173, 13, PINK);
|
||||
|
||||
// Draw buttons: d-pad
|
||||
DrawRectangle(225, 132, 24, 84, BLACK);
|
||||
DrawRectangle(195, 161, 84, 25, BLACK);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_UP)) DrawRectangle(225, 132, 24, 29, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_DOWN)) DrawRectangle(225, 132 + 54, 24, 30, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_LEFT)) DrawRectangle(195, 161, 30, 25, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_RIGHT)) DrawRectangle(195 + 54, 161, 30, 25, RED);
|
||||
|
||||
// Draw buttons: left-right back buttons
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_L1)) DrawCircle(239, 82, 20, RED);
|
||||
if (IsGamepadButtonDown(GAMEPAD_PLAYER1, GAMEPAD_PS3_BUTTON_R1)) DrawCircle(557, 82, 20, RED);
|
||||
|
||||
// Draw axis: left joystick
|
||||
DrawCircle(319, 255, 35, BLACK);
|
||||
DrawCircle(319, 255, 31, LIGHTGRAY);
|
||||
DrawCircle(319 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_X)*20),
|
||||
255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_LEFT_Y)*20), 25, BLACK);
|
||||
|
||||
// Draw axis: right joystick
|
||||
DrawCircle(475, 255, 35, BLACK);
|
||||
DrawCircle(475, 255, 31, LIGHTGRAY);
|
||||
DrawCircle(475 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_RIGHT_X)*20),
|
||||
255 + (GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_RIGHT_Y)*20), 25, BLACK);
|
||||
|
||||
// Draw axis: left-right triggers
|
||||
DrawRectangle(169, 48, 15, 70, GRAY);
|
||||
DrawRectangle(611, 48, 15, 70, GRAY);
|
||||
DrawRectangle(169, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_L2))/2.0f)*70), RED);
|
||||
DrawRectangle(611, 48, 15, (((1.0f - GetGamepadAxisMovement(GAMEPAD_PLAYER1, GAMEPAD_PS3_AXIS_R2))/2.0f)*70), RED);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawText("- GENERIC GAMEPAD -", 280, 180, 20, GRAY);
|
||||
|
||||
// TODO: Draw generic gamepad
|
||||
}
|
||||
|
||||
DrawText(FormatText("DETECTED AXIS [%i]:", GetGamepadAxisCount(GAMEPAD_PLAYER1)), 10, 50, 10, MAROON);
|
||||
|
||||
for (int i = 0; i < GetGamepadAxisCount(GAMEPAD_PLAYER1); i++)
|
||||
{
|
||||
DrawText(FormatText("AXIS %i: %.02f", i, GetGamepadAxisMovement(GAMEPAD_PLAYER1, i)), 20, 70 + 20*i, 10, DARKGRAY);
|
||||
}
|
||||
|
||||
if (GetGamepadButtonPressed() != -1) DrawText(FormatText("DETECTED BUTTON: %i", GetGamepadButtonPressed()), 10, 430, 10, RED);
|
||||
else DrawText("DETECTED BUTTON: NONE", 10, 430, 10, GRAY);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawText("GP1: NOT DETECTED", 10, 10, 10, GRAY);
|
||||
|
||||
DrawTexture(texXboxPad, 0, 0, LIGHTGRAY);
|
||||
}
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadTexture(texPs3Pad);
|
||||
UnloadTexture(texXboxPad);
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_input_gamepad.png
Normal file
After Width: | Height: | Size: 37 KiB |
@@ -1,11 +1,11 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 03a - Keyboard input
|
||||
* raylib [core] example - Keyboard input
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -18,9 +18,9 @@ int main()
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
Vector2 ballPosition = { screenWidth/2, screenHeight/2 };
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - keyboard input");
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 05 - keyboard input");
|
||||
Vector2 ballPosition = { (float)screenWidth/2, (float)screenHeight/2 };
|
||||
|
||||
SetTargetFPS(60); // Set target frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
@@ -30,10 +30,10 @@ int main()
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (IsKeyPressed(KEY_RIGHT)) ballPosition.x += 0.8;
|
||||
if (IsKeyPressed(KEY_LEFT)) ballPosition.x -= 0.8;
|
||||
if (IsKeyPressed(KEY_UP)) ballPosition.y -= 0.8;
|
||||
if (IsKeyPressed(KEY_DOWN)) ballPosition.y += 0.8;
|
||||
if (IsKeyDown(KEY_RIGHT)) ballPosition.x += 0.8f;
|
||||
if (IsKeyDown(KEY_LEFT)) ballPosition.x -= 0.8f;
|
||||
if (IsKeyDown(KEY_UP)) ballPosition.y -= 0.8f;
|
||||
if (IsKeyDown(KEY_DOWN)) ballPosition.y += 0.8f;
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
@@ -1,11 +1,11 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 03b - Mouse input
|
||||
* raylib [core] example - Mouse input
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
@@ -18,11 +18,12 @@ int main()
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
Vector2 ballPosition = { -100.0, -100.0 };
|
||||
int counter = 0;
|
||||
int mouseX, mouseY;
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - mouse input");
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 06 - mouse input");
|
||||
Vector2 ballPosition = { -100.0f, -100.0f };
|
||||
Color ballColor = DARKBLUE;
|
||||
|
||||
SetTargetFPS(60);
|
||||
//---------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
@@ -30,14 +31,11 @@ int main()
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
||||
{
|
||||
mouseX = GetMouseX();
|
||||
mouseY = GetMouseY();
|
||||
ballPosition = GetMousePosition();
|
||||
|
||||
ballPosition.x = (float)mouseX;
|
||||
ballPosition.y = (float)mouseY;
|
||||
}
|
||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) ballColor = MAROON;
|
||||
else if (IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)) ballColor = LIME;
|
||||
else if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) ballColor = DARKBLUE;
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
@@ -46,9 +44,9 @@ int main()
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawCircleV(ballPosition, 40, GOLD);
|
||||
DrawCircleV(ballPosition, 40, ballColor);
|
||||
|
||||
DrawText("mouse click to draw the ball", 10, 10, 20, DARKGRAY);
|
||||
DrawText("move ball with mouse and click mouse button to change color", 10, 10, 20, DARKGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
BIN
examples/core/core_input_mouse.png
Normal file
After Width: | Height: | Size: 15 KiB |
58
examples/core/core_mouse_wheel.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] examples - Mouse wheel
|
||||
*
|
||||
* This test has been created using raylib 1.1 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - mouse wheel");
|
||||
|
||||
int boxPositionY = screenHeight/2 - 40;
|
||||
int scrollSpeed = 4; // Scrolling speed in pixels
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
boxPositionY -= (GetMouseWheelMove()*scrollSpeed);
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawRectangle(screenWidth/2 - 40, boxPositionY, 80, 80, MAROON);
|
||||
|
||||
DrawText("Use mouse wheel to move the cube up and down!", 10, 10, 20, GRAY);
|
||||
DrawText(FormatText("Box position Y: %03i", boxPositionY), 10, 40, 20, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_mouse_wheel.png
Normal file
After Width: | Height: | Size: 15 KiB |
65
examples/core/core_random_values.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Generate random values
|
||||
*
|
||||
* This example has been created using raylib 1.1 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2014 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - generate random values");
|
||||
|
||||
int framesCounter = 0; // Variable used to count frames
|
||||
|
||||
int randValue = GetRandomValue(-8, 5); // Get a random integer number between -8 and 5 (both included)
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
framesCounter++;
|
||||
|
||||
// Every two seconds (120 frames) a new random value is generated
|
||||
if (((framesCounter/120)%2) == 1)
|
||||
{
|
||||
randValue = GetRandomValue(-8, 5);
|
||||
framesCounter = 0;
|
||||
}
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("Every 2 seconds a new random value is generated:", 130, 100, 20, MAROON);
|
||||
|
||||
DrawText(FormatText("%i", randValue), 360, 180, 80, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_random_values.png
Normal file
After Width: | Height: | Size: 15 KiB |
85
examples/core/core_storage_values.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - Storage save/load values
|
||||
*
|
||||
* This example has been created using raylib 1.4 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
// NOTE: Storage positions must start with 0, directly related to file memory layout
|
||||
typedef enum { STORAGE_SCORE = 0, STORAGE_HISCORE } StorageData;
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - storage save/load values");
|
||||
|
||||
int score = 0;
|
||||
int hiscore = 0;
|
||||
|
||||
int framesCounter = 0;
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
if (IsKeyPressed(KEY_R))
|
||||
{
|
||||
score = GetRandomValue(1000, 2000);
|
||||
hiscore = GetRandomValue(2000, 4000);
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KEY_ENTER))
|
||||
{
|
||||
StorageSaveValue(STORAGE_SCORE, score);
|
||||
StorageSaveValue(STORAGE_HISCORE, hiscore);
|
||||
}
|
||||
else if (IsKeyPressed(KEY_SPACE))
|
||||
{
|
||||
// NOTE: If requested position could not be found, value 0 is returned
|
||||
score = StorageLoadValue(STORAGE_SCORE);
|
||||
hiscore = StorageLoadValue(STORAGE_HISCORE);
|
||||
}
|
||||
|
||||
framesCounter++;
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText(FormatText("SCORE: %i", score), 280, 130, 40, MAROON);
|
||||
DrawText(FormatText("HI-SCORE: %i", hiscore), 210, 200, 50, BLACK);
|
||||
|
||||
DrawText(FormatText("frames: %i", framesCounter), 10, 10, 20, LIME);
|
||||
|
||||
DrawText("Press R to generate random numbers", 220, 40, 20, LIGHTGRAY);
|
||||
DrawText("Press ENTER to SAVE values", 250, 310, 20, LIGHTGRAY);
|
||||
DrawText("Press SPACE to LOAD values", 252, 350, 20, LIGHTGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_storage_values.png
Normal file
After Width: | Height: | Size: 16 KiB |
85
examples/core/core_vr_simulator.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - VR Simulator (Oculus Rift CV1 parameters)
|
||||
*
|
||||
* This example has been created using raylib 1.7 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2017 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 1080;
|
||||
int screenHeight = 600;
|
||||
|
||||
// NOTE: screenWidth/screenHeight should match VR device aspect ratio
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - vr simulator");
|
||||
|
||||
// Init VR simulator (Oculus Rift CV1 parameters)
|
||||
InitVrSimulator(GetVrDeviceInfo(HMD_OCULUS_RIFT_CV1));
|
||||
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera;
|
||||
camera.position = (Vector3){ 5.0f, 2.0f, 5.0f }; // Camera position
|
||||
camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; // Camera looking at point
|
||||
camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target)
|
||||
camera.fovy = 60.0f; // Camera field-of-view Y
|
||||
|
||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set first person camera mode
|
||||
|
||||
SetTargetFPS(90); // Set our game to run at 90 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateCamera(&camera); // Update camera (simulator mode)
|
||||
|
||||
if (IsKeyPressed(KEY_SPACE)) ToggleVrMode(); // Toggle VR mode
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
BeginVrDrawing();
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
||||
|
||||
DrawGrid(40, 1.0f);
|
||||
|
||||
End3dMode();
|
||||
|
||||
EndVrDrawing();
|
||||
|
||||
DrawFPS(10, 10);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseVrSimulator(); // Close VR simulator
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_vr_simulator.png
Normal file
After Width: | Height: | Size: 173 KiB |
74
examples/core/core_world_screen.c
Normal file
@@ -0,0 +1,74 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [core] example - World to screen
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d camera free");
|
||||
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera = {{ 10.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
|
||||
|
||||
Vector3 cubePosition = { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
Vector2 cubeScreenPosition;
|
||||
|
||||
SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateCamera(&camera); // Update camera
|
||||
|
||||
// Calculate cube screen space position (with a little offset to be in top)
|
||||
cubeScreenPosition = GetWorldToScreen((Vector3){cubePosition.x, cubePosition.y + 2.5f, cubePosition.z}, camera);
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
DrawCube(cubePosition, 2.0f, 2.0f, 2.0f, RED);
|
||||
DrawCubeWires(cubePosition, 2.0f, 2.0f, 2.0f, MAROON);
|
||||
|
||||
DrawGrid(10, 1.0f);
|
||||
|
||||
End3dMode();
|
||||
|
||||
DrawText("Enemy: 100 / 100", cubeScreenPosition.x - MeasureText("Enemy: 100 / 100", 20) / 2, cubeScreenPosition.y, 20, BLACK);
|
||||
DrawText("Text is always on top of the cube", (screenWidth - MeasureText("Text is always on top of the cube", 20)) / 2, 25, 20, GRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/core/core_world_screen.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
examples/core/resources/ps3.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
examples/core/resources/xbox.png
Normal file
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 85 KiB |
@@ -1,76 +0,0 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 05b - raylib bitmap font (rbmf) loading and using
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 560;
|
||||
int screenHeight = 800;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 05b - rBMF fonts");
|
||||
|
||||
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
|
||||
SpriteFont font1 = LoadSpriteFont("resources/fonts/alagard.rbmf"); // SpriteFont loading
|
||||
SpriteFont font2 = LoadSpriteFont("resources/fonts/pixelplay.rbmf"); // SpriteFont loading
|
||||
SpriteFont font3 = LoadSpriteFont("resources/fonts/mecha.rbmf"); // SpriteFont loading
|
||||
SpriteFont font4 = LoadSpriteFont("resources/fonts/setback.rbmf"); // SpriteFont loading
|
||||
SpriteFont font5 = LoadSpriteFont("resources/fonts/romulus.rbmf"); // SpriteFont loading
|
||||
SpriteFont font6 = LoadSpriteFont("resources/fonts/pixantiqua.rbmf"); // SpriteFont loading
|
||||
SpriteFont font7 = LoadSpriteFont("resources/fonts/alpha_beta.rbmf"); // SpriteFont loading
|
||||
SpriteFont font8 = LoadSpriteFont("resources/fonts/jupiter_crash.rbmf"); // SpriteFont loading
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
// TODO: Update your variables here
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawTextEx(font1, "TESTING ALAGARD FONT", (Vector2){ 100, 100 }, GetFontBaseSize(font1)*2, 2, MAROON);
|
||||
DrawTextEx(font2, "TESTING PIXELPLAY FONT", (Vector2){ 100, 180 }, GetFontBaseSize(font2)*2, 4, ORANGE);
|
||||
DrawTextEx(font3, "TESTING MECHA FONT", (Vector2){ 100, 260 }, GetFontBaseSize(font3)*2, 8, DARKGREEN);
|
||||
DrawTextEx(font4, "TESTING SETBACK FONT", (Vector2){ 100, 350 }, GetFontBaseSize(font4)*2, 4, DARKBLUE);
|
||||
DrawTextEx(font5, "TESTING ROMULUS FONT", (Vector2){ 100, 430 }, GetFontBaseSize(font5)*2, 3, DARKPURPLE);
|
||||
DrawTextEx(font6, "TESTING PIXANTIQUA FONT", (Vector2){ 100, 510 }, GetFontBaseSize(font6)*2, 4, LIME);
|
||||
DrawTextEx(font7, "TESTING ALPHA_BETA FONT", (Vector2){ 100, 590 }, GetFontBaseSize(font7)*2, 4, GOLD);
|
||||
DrawTextEx(font8, "TESTING JUPITER_CRASH FONT", (Vector2){ 100, 660 }, GetFontBaseSize(font8)*2, 1, RED);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadSpriteFont(font1); // SpriteFont unloading
|
||||
UnloadSpriteFont(font2); // SpriteFont unloading
|
||||
UnloadSpriteFont(font3); // SpriteFont unloading
|
||||
UnloadSpriteFont(font4); // SpriteFont unloading
|
||||
UnloadSpriteFont(font5); // SpriteFont unloading
|
||||
UnloadSpriteFont(font6); // SpriteFont unloading
|
||||
UnloadSpriteFont(font7); // SpriteFont unloading
|
||||
UnloadSpriteFont(font8); // SpriteFont unloading
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
Before Width: | Height: | Size: 14 KiB |
@@ -1,144 +0,0 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib example 06c - Font selection...
|
||||
*
|
||||
* This example has been created using raylib 1.0 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 150;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib example 06c - font selection");
|
||||
|
||||
// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required)
|
||||
SpriteFont fonts[8]; // SpriteFont array
|
||||
|
||||
fonts[0] = LoadSpriteFont("resources/fonts/alagard.rbmf"); // SpriteFont loading
|
||||
fonts[1] = LoadSpriteFont("resources/fonts/pixelplay.rbmf"); // SpriteFont loading
|
||||
fonts[2] = LoadSpriteFont("resources/fonts/mecha.rbmf"); // SpriteFont loading
|
||||
fonts[3] = LoadSpriteFont("resources/fonts/setback.rbmf"); // SpriteFont loading
|
||||
fonts[4] = LoadSpriteFont("resources/fonts/romulus.rbmf"); // SpriteFont loading
|
||||
fonts[5] = LoadSpriteFont("resources/fonts/pixantiqua.rbmf"); // SpriteFont loading
|
||||
fonts[6] = LoadSpriteFont("resources/fonts/alpha_beta.rbmf"); // SpriteFont loading
|
||||
fonts[7] = LoadSpriteFont("resources/fonts/jupiter_crash.rbmf"); // SpriteFont loading
|
||||
|
||||
int currentFont = 0; // Selected font
|
||||
|
||||
Color colors[8] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD, RED };
|
||||
|
||||
const char fontNames[8][20] = { "[0] Alagard", "[1] PixelPlay", "[2] MECHA", "[3] Setback",
|
||||
"[4] Romulus", "[5] PixAntiqua", "[6] Alpha Beta", "[7] Jupiter Crash" };
|
||||
|
||||
const char text[50] = "THIS is THE FONT you SELECTED!"; // Main text
|
||||
|
||||
Vector2 textSize = MeasureTextEx(fonts[currentFont], text, GetFontBaseSize(fonts[currentFont])*3, 1);
|
||||
|
||||
Vector2 mousePoint;
|
||||
|
||||
Rectangle btnNextRec = { 673, 18, 109, 44 }; // Button rectangle (useful for collision)
|
||||
|
||||
Color btnNextOutColor = DARKBLUE; // Button color (outside line)
|
||||
Color btnNextInColor = SKYBLUE; // Button color (inside)
|
||||
|
||||
int framesCounter = 0; // Useful to count frames button is 'active' = clicked
|
||||
|
||||
SetTargetFPS(60);
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Keyboard-based font selection (easy)
|
||||
if (IsKeyPressed(KEY_RIGHT))
|
||||
{
|
||||
if (currentFont < 7) currentFont++;
|
||||
}
|
||||
|
||||
if (IsKeyPressed(KEY_LEFT))
|
||||
{
|
||||
if (currentFont > 0) currentFont--;
|
||||
}
|
||||
|
||||
// Mouse-based font selection (NEXT button logic)
|
||||
mousePoint = GetMousePosition();
|
||||
|
||||
if (CheckCollisionPointRec(mousePoint, btnNextRec))
|
||||
{
|
||||
// Mouse hover button logic
|
||||
if (framesCounter == 0)
|
||||
{
|
||||
btnNextOutColor = DARKPURPLE;
|
||||
btnNextInColor = PURPLE;
|
||||
}
|
||||
|
||||
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
|
||||
{
|
||||
framesCounter = 20; // Frames button is 'active'
|
||||
btnNextOutColor = MAROON;
|
||||
btnNextInColor = RED;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mouse not hover button
|
||||
btnNextOutColor = DARKBLUE;
|
||||
btnNextInColor = SKYBLUE;
|
||||
}
|
||||
|
||||
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON) && (framesCounter > 0)) framesCounter--;
|
||||
|
||||
if (framesCounter == 1) // We change font on frame 1
|
||||
{
|
||||
currentFont++;
|
||||
if (currentFont > 7) currentFont = 0;
|
||||
}
|
||||
|
||||
// Text measurement for better positioning on screen
|
||||
textSize = MeasureTextEx(fonts[currentFont], text, GetFontBaseSize(fonts[currentFont])*3, 1);
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawRectangle(18, 18, 644, 44, DARKGRAY);
|
||||
DrawRectangle(20, 20, 640, 40, LIGHTGRAY);
|
||||
DrawText(fontNames[currentFont], 30, 31, 20, BLACK);
|
||||
DrawText("< >", 610, 26, 30, BLACK);
|
||||
|
||||
DrawRectangleRec(btnNextRec, btnNextOutColor);
|
||||
DrawRectangle(675, 20, 105, 40, btnNextInColor);
|
||||
DrawText("NEXT", 700, 31, 20, btnNextOutColor);
|
||||
|
||||
DrawTextEx(fonts[currentFont], text, (Vector2){ screenWidth/2 - textSize.x/2,
|
||||
75 + (70 - textSize.y)/2 }, GetFontBaseSize(fonts[currentFont])*3,
|
||||
1, colors[currentFont]);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
for (int i = 0; i < 8; i++) UnloadSpriteFont(fonts[i]); // SpriteFont(s) unloading
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 3.5 KiB |
70
examples/models/models_billboard.c
Normal file
@@ -0,0 +1,70 @@
|
||||
/*******************************************************************************************
|
||||
*
|
||||
* raylib [models] example - Drawing billboards
|
||||
*
|
||||
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||
*
|
||||
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||
*
|
||||
********************************************************************************************/
|
||||
|
||||
#include "raylib.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
int screenWidth = 800;
|
||||
int screenHeight = 450;
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards");
|
||||
|
||||
// Define the camera to look into our 3d world
|
||||
Camera camera = {{ 5.0f, 4.0f, 5.0f }, { 0.0f, 2.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f };
|
||||
|
||||
Texture2D bill = LoadTexture("resources/billboard.png"); // Our texture billboard
|
||||
Vector3 billPosition = { 0.0f, 2.0f, 0.0f }; // Position where draw billboard
|
||||
|
||||
SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode
|
||||
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
// Main game loop
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// Update
|
||||
//----------------------------------------------------------------------------------
|
||||
UpdateCamera(&camera); // Update camera
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
//----------------------------------------------------------------------------------
|
||||
BeginDrawing();
|
||||
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
Begin3dMode(camera);
|
||||
|
||||
DrawBillboard(camera, bill, billPosition, 2.0f, WHITE);
|
||||
|
||||
DrawGrid(10, 1.0f); // Draw a grid
|
||||
|
||||
End3dMode();
|
||||
|
||||
DrawFPS(10, 10);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
}
|
||||
|
||||
// De-Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
UnloadTexture(bill); // Unload texture
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
BIN
examples/models/models_billboard.png
Normal file
After Width: | Height: | Size: 54 KiB |