Compare commits
763 Commits
4.0.89
...
feature/dr
Author | SHA1 | Date | |
---|---|---|---|
![]() |
c6c116ec44 | ||
![]() |
b5d2c6f4bc | ||
![]() |
a42c488ac8 | ||
![]() |
1ccc58c015 | ||
![]() |
68a736ea13 | ||
![]() |
a9980f8e89 | ||
![]() |
7156950cb8 | ||
![]() |
833cabfe3b | ||
![]() |
ed23b760a9 | ||
![]() |
98580efafa | ||
![]() |
8794861a11 | ||
![]() |
8fccc7bda4 | ||
![]() |
a09ea0ea13 | ||
![]() |
74c6ca50cb | ||
![]() |
67249c1029 | ||
![]() |
dba79bcca1 | ||
![]() |
006f93dccf | ||
![]() |
94335b9ee2 | ||
![]() |
187e27f232 | ||
![]() |
f7631bd8a5 | ||
![]() |
ad154c34e7 | ||
![]() |
357ecaca1e | ||
![]() |
e67e8d2264 | ||
![]() |
c39fc5f478 | ||
![]() |
b4c84d2058 | ||
![]() |
b7cca91e54 | ||
![]() |
86118abfb3 | ||
![]() |
119d588619 | ||
![]() |
8c1028a28b | ||
![]() |
65e47a11ec | ||
![]() |
c20a705773 | ||
![]() |
bea778cb06 | ||
![]() |
7315fe2403 | ||
![]() |
ef4e0aba6b | ||
![]() |
7d84dda389 | ||
![]() |
de1dab64fd | ||
![]() |
4333d8a3ba | ||
![]() |
4579e619a3 | ||
![]() |
7bcee7e400 | ||
![]() |
bf6ed92b1f | ||
![]() |
87bffb4361 | ||
![]() |
151182c5aa | ||
![]() |
faa678e4f7 | ||
![]() |
6113505367 | ||
![]() |
8eb124c685 | ||
![]() |
4fb2028801 | ||
![]() |
a5cc7de08f | ||
![]() |
8b0845fe9f | ||
![]() |
e127d1bb7b | ||
![]() |
75ff956418 | ||
![]() |
90236f9c43 | ||
![]() |
c480ac2d8e | ||
![]() |
793a242e00 | ||
![]() |
16713e4668 | ||
![]() |
33d731e958 | ||
![]() |
4095b4b65b | ||
![]() |
0a7778f951 | ||
![]() |
7c8c3e8a6a | ||
![]() |
26792429f7 | ||
![]() |
50810aab1d | ||
![]() |
8eeb137764 | ||
![]() |
ff2db6356e | ||
![]() |
c2eba4a0b0 | ||
![]() |
a289c0a521 | ||
![]() |
2f5dd01878 | ||
![]() |
0a95120fbb | ||
![]() |
60bf3115dd | ||
![]() |
d5f4a47eab | ||
![]() |
e5bc6b3a13 | ||
![]() |
4efe9e3d88 | ||
![]() |
869db14995 | ||
![]() |
9531d60479 | ||
![]() |
7d83fe8c07 | ||
![]() |
d285e24ff8 | ||
![]() |
09db74fc65 | ||
![]() |
41be98b306 | ||
![]() |
46cb1318a5 | ||
![]() |
1f98e4a268 | ||
![]() |
15f61e5867 | ||
![]() |
698d3095ec | ||
![]() |
608ebcb0cf | ||
![]() |
78c67a18e6 | ||
![]() |
c12de11ce0 | ||
![]() |
e15b442c1f | ||
![]() |
f84cf59f9e | ||
![]() |
b8aff5e77a | ||
![]() |
9eb5951e66 | ||
![]() |
cb92d56ff6 | ||
![]() |
6223fbb792 | ||
![]() |
16bce2f765 | ||
![]() |
e2f5665700 | ||
![]() |
c9b48ffafa | ||
![]() |
a291d846d8 | ||
![]() |
0287d80cbf | ||
![]() |
97ea23066a | ||
![]() |
e9b8b79d76 | ||
![]() |
44133370bd | ||
![]() |
e1e1fe27ae | ||
![]() |
b426212496 | ||
![]() |
940721c676 | ||
![]() |
c3118e8da3 | ||
![]() |
a9e4d8a606 | ||
![]() |
e5e46d0a5a | ||
![]() |
eed3c7ef36 | ||
![]() |
a6e0853cd6 | ||
![]() |
1dff23f201 | ||
![]() |
0586150eaf | ||
![]() |
c43d6231d7 | ||
![]() |
56230096b3 | ||
![]() |
29e707704e | ||
![]() |
33b417ac94 | ||
![]() |
0069627801 | ||
![]() |
0d3c6ee590 | ||
![]() |
7c2e3d43be | ||
![]() |
3dcd6e2803 | ||
![]() |
689b2ba5c3 | ||
![]() |
f67ba78843 | ||
![]() |
6aa515d085 | ||
![]() |
557aff7534 | ||
![]() |
59e11d8597 | ||
![]() |
26de1ae213 | ||
![]() |
dc32f948da | ||
![]() |
50768df001 | ||
![]() |
4b375b01ac | ||
![]() |
c1b02677f3 | ||
![]() |
eb8cf8028f | ||
![]() |
b80f2b566d | ||
![]() |
748c798172 | ||
![]() |
83472388f4 | ||
![]() |
34f1c5ae49 | ||
![]() |
37732928cb | ||
![]() |
2a6b7f194f | ||
![]() |
0f4d73fae3 | ||
![]() |
906fceeb9a | ||
![]() |
e616d668f3 | ||
![]() |
05baedfd5d | ||
![]() |
5bf3c26b35 | ||
![]() |
59d53c63b9 | ||
![]() |
e1a3409702 | ||
![]() |
f320f34b19 | ||
![]() |
f723182b80 | ||
![]() |
c0c71faac6 | ||
![]() |
5f73fa30fb | ||
![]() |
edbcb32bec | ||
![]() |
f57d3edf0f | ||
![]() |
71ab16a76e | ||
![]() |
7b81ddd877 | ||
![]() |
de50a90235 | ||
![]() |
536b353a24 | ||
![]() |
72740fb62c | ||
![]() |
de3f485191 | ||
![]() |
68738d343c | ||
![]() |
c0529ff5ab | ||
![]() |
4904627a6c | ||
![]() |
d00dae1d9e | ||
![]() |
5270b2bd73 | ||
![]() |
916acf16f7 | ||
![]() |
ceb8b4dde1 | ||
![]() |
577fa8bdf7 | ||
![]() |
ff131165f4 | ||
![]() |
4b45b8d7e4 | ||
![]() |
8431b10a81 | ||
![]() |
1b14519223 | ||
![]() |
5b3526b7e8 | ||
![]() |
b59a2b656f | ||
![]() |
70516b1d88 | ||
![]() |
d73ed4f6f9 | ||
![]() |
d58190e5c5 | ||
![]() |
1b996623f8 | ||
![]() |
09294dbc07 | ||
![]() |
1b27ca9647 | ||
![]() |
891a81f53e | ||
![]() |
ceb7d80ed3 | ||
![]() |
2591efee1c | ||
![]() |
adc473a6c3 | ||
![]() |
8f6e587a0d | ||
![]() |
597f1d0ebb | ||
![]() |
c3746ab388 | ||
![]() |
7f5711cb62 | ||
![]() |
eb066b88e2 | ||
![]() |
22fe36c8b5 | ||
![]() |
cdf9652934 | ||
![]() |
aa5408b1fb | ||
![]() |
facb08e502 | ||
![]() |
111dc42ec9 | ||
![]() |
b08759bf57 | ||
![]() |
a89b196a0c | ||
![]() |
1efa8674fc | ||
![]() |
9ed2aa2a70 | ||
![]() |
26aa52157a | ||
![]() |
825c3e0d26 | ||
![]() |
1f2de9f156 | ||
![]() |
bb52fab95a | ||
![]() |
e1c9db4955 | ||
![]() |
cf9d9bdd5c | ||
![]() |
41f6d8164c | ||
![]() |
31c741b8c6 | ||
![]() |
8619f18b93 | ||
![]() |
fd466d1f57 | ||
![]() |
0c688e714a | ||
![]() |
dd7a4429be | ||
![]() |
8ed7e8251a | ||
![]() |
6bcca6d024 | ||
![]() |
3c6b100188 | ||
![]() |
24cd4b52f6 | ||
![]() |
f63a8fc36e | ||
![]() |
70f6aab913 | ||
![]() |
4c12ad5f1d | ||
![]() |
6d5e4e388f | ||
![]() |
415b05b1dc | ||
![]() |
78e2f8d705 | ||
![]() |
7b0fb791cb | ||
![]() |
bd993b2c43 | ||
![]() |
6a8e15a07f | ||
![]() |
fa6033250c | ||
![]() |
b176699827 | ||
![]() |
3bf0a14951 | ||
![]() |
0c380629d5 | ||
![]() |
79f756a6f1 | ||
![]() |
d35edb72b2 | ||
![]() |
cc9851b49c | ||
![]() |
369bcfdda5 | ||
![]() |
c0e8f9e2a1 | ||
![]() |
7223da00b7 | ||
![]() |
0987ca8b3e | ||
![]() |
a886049f72 | ||
![]() |
168f06b535 | ||
![]() |
def81b6a62 | ||
![]() |
311e451a2f | ||
![]() |
8c7b4cc7bd | ||
![]() |
2494f984a9 | ||
![]() |
cec0ca0b71 | ||
![]() |
a262cebdfb | ||
![]() |
49145136d8 | ||
![]() |
9e01231334 | ||
![]() |
0d869b9f7b | ||
![]() |
ad333dff69 | ||
![]() |
16ae5dd0aa | ||
![]() |
f778f4302b | ||
![]() |
f948fd14a4 | ||
![]() |
9d05dbdd42 | ||
![]() |
9fbc4613ac | ||
![]() |
13bb7b1209 | ||
![]() |
70cbe5156e | ||
![]() |
6933030bcf | ||
![]() |
39f5aad915 | ||
![]() |
64dcfeec09 | ||
![]() |
aeea9c9f57 | ||
![]() |
0d0ce7d44d | ||
![]() |
525ea4b042 | ||
![]() |
7dbd836073 | ||
![]() |
a6f6729b88 | ||
![]() |
d4e290cfed | ||
![]() |
17ea67c2a9 | ||
![]() |
cf436333b9 | ||
![]() |
a77aa15c5e | ||
![]() |
cef7acc1c4 | ||
![]() |
91a84eb000 | ||
![]() |
a09221e4a3 | ||
![]() |
99452c2de0 | ||
![]() |
14244a4561 | ||
![]() |
1c47bbfb36 | ||
![]() |
7e16ea1aa3 | ||
![]() |
16e4df182d | ||
![]() |
1d81690bd5 | ||
![]() |
4980db392b | ||
![]() |
2a99dc6e8a | ||
![]() |
d4898c56f8 | ||
![]() |
dee9442eb6 | ||
![]() |
1bb74af465 | ||
![]() |
f990dacf65 | ||
![]() |
4630ff9d07 | ||
![]() |
06c4377141 | ||
![]() |
4e6fb68e39 | ||
![]() |
e307505d03 | ||
![]() |
f7cfd21c48 | ||
![]() |
e68e9d27bb | ||
![]() |
30a8c5be34 | ||
![]() |
3265ac5b6d | ||
![]() |
6a7d1eaf2e | ||
![]() |
cd587ba8da | ||
![]() |
35f640c1ba | ||
![]() |
2f88ab5178 | ||
![]() |
18f9b66615 | ||
![]() |
ae49eb02c4 | ||
![]() |
e215654bb3 | ||
![]() |
3feae8c257 | ||
![]() |
6f4abd3eb9 | ||
![]() |
6ea781533b | ||
![]() |
456fdc0872 | ||
![]() |
f76a531143 | ||
![]() |
151271c250 | ||
![]() |
22dea528e0 | ||
![]() |
045f7194b5 | ||
![]() |
51007bc5cd | ||
![]() |
612439a88d | ||
![]() |
f145ecd7b3 | ||
![]() |
cf7a39537d | ||
![]() |
23736e8981 | ||
![]() |
d633b032f9 | ||
![]() |
13050967c7 | ||
![]() |
eeaab6d12f | ||
![]() |
c728044260 | ||
![]() |
89a80c685f | ||
![]() |
ec7673d861 | ||
![]() |
f50940ae66 | ||
![]() |
664db415c7 | ||
![]() |
5810972a2d | ||
![]() |
4d5fd7d3d4 | ||
![]() |
f12c9c9ad8 | ||
![]() |
a144258f8d | ||
![]() |
6907cc3847 | ||
![]() |
5f367f7278 | ||
![]() |
73b7523dc6 | ||
![]() |
8eac4b616f | ||
![]() |
ea2a05cfff | ||
![]() |
d307be6d0e | ||
![]() |
a7aa1f3940 | ||
![]() |
ef879413d9 | ||
![]() |
e3eacb53ee | ||
![]() |
3db6edb1f8 | ||
![]() |
3636d99b47 | ||
![]() |
56caeaaf08 | ||
![]() |
a507f7a3ee | ||
![]() |
316e01e7f8 | ||
![]() |
134efa8ec3 | ||
![]() |
85b75b646f | ||
![]() |
09b41fa719 | ||
![]() |
f970352faa | ||
![]() |
76305ae77c | ||
![]() |
6c995d6d20 | ||
![]() |
3d14c9e555 | ||
![]() |
f8fa933a02 | ||
![]() |
fff2edc1c1 | ||
![]() |
190ad686f5 | ||
![]() |
f4b5d57c61 | ||
![]() |
fdec778d04 | ||
![]() |
c227afd8d7 | ||
![]() |
2f91fecd60 | ||
![]() |
406f98245c | ||
![]() |
eaf76105a1 | ||
![]() |
b7e0e7d54d | ||
![]() |
8f109d5a27 | ||
![]() |
907f319ce7 | ||
![]() |
146b69f91e | ||
![]() |
51d23e30e5 | ||
![]() |
a87ba9db6f | ||
![]() |
1f593d576d | ||
![]() |
346003f377 | ||
![]() |
1bd45ec96b | ||
![]() |
c078ed1e55 | ||
![]() |
4f1f04242b | ||
![]() |
976826b9ab | ||
![]() |
b4f2082454 | ||
![]() |
b4318f63d3 | ||
![]() |
6e1140fa0c | ||
![]() |
2322b3dac1 | ||
![]() |
91914c80f7 | ||
![]() |
cc127ff5ba | ||
![]() |
0b3d2be1a2 | ||
![]() |
a44bf9d6d2 | ||
![]() |
a6207f27a3 | ||
![]() |
92664eadc5 | ||
![]() |
edcbd5c9a1 | ||
![]() |
96d8066983 | ||
![]() |
0cf6583bcc | ||
![]() |
063f76750f | ||
![]() |
fef0e68dd3 | ||
![]() |
e40ffbba74 | ||
![]() |
38f58ded69 | ||
![]() |
51c60de26a | ||
![]() |
e977cd2d23 | ||
![]() |
6efdabdb36 | ||
![]() |
8709de1e3e | ||
![]() |
a29332e4dc | ||
![]() |
c82c125bb4 | ||
![]() |
6528a12671 | ||
![]() |
bb3149817d | ||
![]() |
fb805cebf1 | ||
![]() |
0702d0188a | ||
![]() |
185cbbc594 | ||
![]() |
04c4c9ed50 | ||
![]() |
dc445736ef | ||
![]() |
06ea17e7e8 | ||
![]() |
1d2ed3fe9d | ||
![]() |
6e953004f8 | ||
![]() |
1b4d1582d4 | ||
![]() |
90bd58b14a | ||
![]() |
d78cecd34f | ||
![]() |
91771682f0 | ||
![]() |
da5669ab70 | ||
![]() |
afd7ac7c92 | ||
![]() |
e8b1509fc2 | ||
![]() |
db1923c38c | ||
![]() |
86789ac491 | ||
![]() |
8f028f778d | ||
![]() |
2a3d998e7c | ||
![]() |
3969561e8d | ||
![]() |
0118b740fa | ||
![]() |
92a6e4819e | ||
![]() |
2afdcfdfa0 | ||
![]() |
a488f13aa6 | ||
![]() |
5ef46253b1 | ||
![]() |
4a4dbe850c | ||
![]() |
37c643f7bc | ||
![]() |
2e67ec83fd | ||
![]() |
de1a7c67b9 | ||
![]() |
eaba616f71 | ||
![]() |
21cf59ff5a | ||
![]() |
182c25f721 | ||
![]() |
6002dc26dc | ||
![]() |
e30e3cd705 | ||
![]() |
88f0bbca8b | ||
![]() |
6026bb8ff4 | ||
![]() |
d57d186218 | ||
![]() |
834fed0b64 | ||
![]() |
ad7544c7a3 | ||
![]() |
0bf05afead | ||
![]() |
f1bb8b5149 | ||
![]() |
5d34d7a0b0 | ||
![]() |
7b8e1c70ba | ||
![]() |
ba3fd0ebff | ||
![]() |
01ee88cdc7 | ||
![]() |
cd34cbe934 | ||
![]() |
276850b306 | ||
![]() |
883129f379 | ||
![]() |
dea86d7c33 | ||
![]() |
3d89bd50fc | ||
![]() |
54c94f62a4 | ||
![]() |
b9d71b0d9c | ||
![]() |
e5631383dd | ||
![]() |
8dc3bd3831 | ||
![]() |
cdc3e3ed90 | ||
![]() |
5281cd54cc | ||
![]() |
be66e670e9 | ||
![]() |
ee9a3d181d | ||
![]() |
a81170d934 | ||
![]() |
4825313b15 | ||
![]() |
90e1a33829 | ||
![]() |
7ad075cb59 | ||
![]() |
fd67843d0d | ||
![]() |
0b9771815b | ||
![]() |
d01a80c7b9 | ||
![]() |
3f005449ad | ||
![]() |
10e7a11a34 | ||
![]() |
65b02a7460 | ||
![]() |
0b28b0d15a | ||
![]() |
4e32b64bc6 | ||
![]() |
d7509cf7c7 | ||
![]() |
78ec0fd201 | ||
![]() |
e982f6218b | ||
![]() |
4dae5dd567 | ||
![]() |
9f81038f1d | ||
![]() |
40fcb668c4 | ||
![]() |
96afbeb931 | ||
![]() |
1ed005a472 | ||
![]() |
b9abd568d0 | ||
![]() |
6ca3a08dd8 | ||
![]() |
ccf75c63ad | ||
![]() |
f616075508 | ||
![]() |
880ccad7f5 | ||
![]() |
7d9774c01d | ||
![]() |
50b493ab2c | ||
![]() |
66ef1e0abf | ||
![]() |
ae93430539 | ||
![]() |
42022290b8 | ||
![]() |
5c9279c6df | ||
![]() |
69b2a41caa | ||
![]() |
b6d92d69bc | ||
![]() |
940ea8ba19 | ||
![]() |
ea5d92a289 | ||
![]() |
9631bc0c32 | ||
![]() |
7c14f9dd39 | ||
![]() |
59b9373974 | ||
![]() |
ab9403bece | ||
![]() |
7e23652eef | ||
![]() |
6badf722c0 | ||
![]() |
d20b5a0fbb | ||
![]() |
ba791eddcb | ||
![]() |
9a532a19db | ||
![]() |
3b75fd6df4 | ||
![]() |
d6f3b2776e | ||
![]() |
dba2d55193 | ||
![]() |
7cae68c5b8 | ||
![]() |
11c96dbef1 | ||
![]() |
46fff2dec4 | ||
![]() |
72df404d7f | ||
![]() |
cdbd3c515d | ||
![]() |
b0e29bab5b | ||
![]() |
70fada11e7 | ||
![]() |
626651ec51 | ||
![]() |
a47963e77f | ||
![]() |
179183f414 | ||
![]() |
67b7a3a060 | ||
![]() |
63dfc887cc | ||
![]() |
b537c36643 | ||
![]() |
146ed26eed | ||
![]() |
d971a4eb6a | ||
![]() |
11ac1be195 | ||
![]() |
f1509cf7b8 | ||
![]() |
612ea7f067 | ||
![]() |
fa3399f7d2 | ||
![]() |
296a2ae345 | ||
![]() |
0c7c841aab | ||
![]() |
ce7b0bfe85 | ||
![]() |
affdbbead8 | ||
![]() |
6ac34ee7e3 | ||
![]() |
e07b9ae942 | ||
![]() |
ac57c1e25a | ||
![]() |
3f3b619cd2 | ||
![]() |
6a92872fd0 | ||
![]() |
be38240eee | ||
![]() |
1bf86461f0 | ||
![]() |
2ff461f3b1 | ||
![]() |
e88701df92 | ||
![]() |
5aa30efa52 | ||
![]() |
0ac9f8720b | ||
![]() |
82684041ff | ||
![]() |
85867a53a9 | ||
![]() |
0e21c757d2 | ||
![]() |
cc4e48d82f | ||
![]() |
fa1861da27 | ||
![]() |
3533608cb0 | ||
![]() |
d22a183078 | ||
![]() |
771a2196ea | ||
![]() |
60ada8d94f | ||
![]() |
ee868546d3 | ||
![]() |
526fdd852f | ||
![]() |
cc84aa5478 | ||
![]() |
8c613ed6a3 | ||
![]() |
1e2cf210b5 | ||
![]() |
422132d8c7 | ||
![]() |
4830e6b5bc | ||
![]() |
fc2fe9e1eb | ||
![]() |
682efcbfdc | ||
![]() |
e4c6f2dd0c | ||
![]() |
cbc0a6bf2b | ||
![]() |
982fd4cc67 | ||
![]() |
f33f361e45 | ||
![]() |
be72d44a4d | ||
![]() |
7e9a2e40aa | ||
![]() |
bc5349fd26 | ||
![]() |
9131b6a143 | ||
![]() |
6fc8d1cf97 | ||
![]() |
51c172f4d5 | ||
![]() |
116e7cfe25 | ||
![]() |
d70204b24c | ||
![]() |
edae3892ca | ||
![]() |
b3b39ab468 | ||
![]() |
4699e161e4 | ||
![]() |
be3ae5802d | ||
![]() |
097508829a | ||
![]() |
1eac74c12c | ||
![]() |
af8d2fc5d8 | ||
![]() |
2ae5f01836 | ||
![]() |
a1fa6dad15 | ||
![]() |
7d8178c2e5 | ||
![]() |
70a35c11c2 | ||
![]() |
d7c897b488 | ||
![]() |
d12924daaf | ||
![]() |
2d3cdcdde8 | ||
![]() |
5ab601e8e6 | ||
![]() |
5c66a37406 | ||
![]() |
cfa161f763 | ||
![]() |
84c8efffa3 | ||
![]() |
a4e2a3e8f1 | ||
![]() |
73984d7cfc | ||
![]() |
327a3b05b8 | ||
![]() |
a9e5790d78 | ||
![]() |
a544666ea4 | ||
![]() |
d0ca9cac54 | ||
![]() |
d0910e3e6f | ||
![]() |
4018353d50 | ||
![]() |
6388e6a914 | ||
![]() |
4f144f7532 | ||
![]() |
82a7c3048f | ||
![]() |
8daa0354e1 | ||
![]() |
f26357c9b8 | ||
![]() |
4110c38c10 | ||
![]() |
084f8fbe72 | ||
![]() |
db074c7f57 | ||
![]() |
5b1fed4d9e | ||
![]() |
447106b7fb | ||
![]() |
91cfff6e84 | ||
![]() |
db3a107e0f | ||
![]() |
23dab62ad5 | ||
![]() |
3dd5c0f997 | ||
![]() |
517ef5fc57 | ||
![]() |
1d539968bb | ||
![]() |
4879bfe1b1 | ||
![]() |
e83d2a2b48 | ||
![]() |
cd84f6c43c | ||
![]() |
7bcc3dc6bb | ||
![]() |
1a995ba55c | ||
![]() |
622fcdcc62 | ||
![]() |
b933ab24dd | ||
![]() |
7fe4a5c5ff | ||
![]() |
3b36e16256 | ||
![]() |
b620737b18 | ||
![]() |
bcb9b03eab | ||
![]() |
e20f66909e | ||
![]() |
667d0a1f4a | ||
![]() |
de9d6bd103 | ||
![]() |
ba625133f1 | ||
![]() |
44ce216894 | ||
![]() |
0bcf3475b0 | ||
![]() |
09b35c9dd8 | ||
![]() |
0123128206 | ||
![]() |
7a728d370d | ||
![]() |
6bb426ecf6 | ||
![]() |
459b395ee9 | ||
![]() |
943401d8bf | ||
![]() |
020348e3b0 | ||
![]() |
347ee2a74e | ||
![]() |
c7cd582152 | ||
![]() |
6625e3fd00 | ||
![]() |
1710aacb17 | ||
![]() |
c88f7e53c0 | ||
![]() |
4c62c8c046 | ||
![]() |
ab2a347f97 | ||
![]() |
2a90e9bd5e | ||
![]() |
08a9a856a7 | ||
![]() |
ad2e85be49 | ||
![]() |
71f6cd529f | ||
![]() |
70c804e34a | ||
![]() |
8d92dd818e | ||
![]() |
7af76081d0 | ||
![]() |
3e31081e88 | ||
![]() |
c5b5819edf | ||
![]() |
6820a3eb10 | ||
![]() |
727b34df75 | ||
![]() |
bdb5461847 | ||
![]() |
c41537bcac | ||
![]() |
cd05c57e20 | ||
![]() |
c432378c78 | ||
![]() |
b650ba33b1 | ||
![]() |
f67206940e | ||
![]() |
bb69871c93 | ||
![]() |
6abfa19dd8 | ||
![]() |
f8cbd788a1 | ||
![]() |
5516c85f1d | ||
![]() |
dfc4f524fc | ||
![]() |
0b9728030a | ||
![]() |
8aeb7bfacb | ||
![]() |
966105fcc4 | ||
![]() |
51a6c935d9 | ||
![]() |
0d34568afc | ||
![]() |
b68d24e8e4 | ||
![]() |
13d5069bd3 | ||
![]() |
01372c9589 | ||
![]() |
e7498fd8f3 | ||
![]() |
846eceabdf | ||
![]() |
64692e405e | ||
![]() |
1adb4febb1 | ||
![]() |
ff24bf7af6 | ||
![]() |
d705f7503a | ||
![]() |
61b01aa1a1 | ||
![]() |
0296162cda | ||
![]() |
c11ffca94a | ||
![]() |
2fce1fc16f | ||
![]() |
2a3657abef | ||
![]() |
da4dc223f7 | ||
![]() |
eeb0dc8a63 | ||
![]() |
f6f56d77a0 | ||
![]() |
749c383fd7 | ||
![]() |
98c822bfb4 | ||
![]() |
2ed48d302d | ||
![]() |
7e7e93b94c | ||
![]() |
848df5aa5b | ||
![]() |
7a6f3ffe7c | ||
![]() |
21012c3445 | ||
![]() |
5485b28b19 | ||
![]() |
d313f13475 | ||
![]() |
a4e88bd504 | ||
![]() |
f446a75fd8 | ||
![]() |
e64bb8a6f7 | ||
![]() |
1cd4226427 | ||
![]() |
817fba1114 | ||
![]() |
37a0c3c919 | ||
![]() |
fc4b12803d | ||
![]() |
51f09d1bb6 | ||
![]() |
8ce9afff6b | ||
![]() |
84711a25c3 | ||
![]() |
d33042cece | ||
![]() |
719032f91d | ||
![]() |
73c0bf56c8 | ||
![]() |
acd8d54c5e | ||
![]() |
99b0c8345c | ||
![]() |
c97fea1a9e | ||
![]() |
cd7457eba8 | ||
![]() |
c9a0cc9afd | ||
![]() |
0f990cc913 | ||
![]() |
656921b9c8 | ||
![]() |
246bde6dec | ||
![]() |
d54eadf39d | ||
![]() |
3a2f6a2ac7 | ||
![]() |
feb243d2f7 | ||
![]() |
aea43b96d5 | ||
![]() |
64f077bcb2 | ||
![]() |
9e5893883f | ||
![]() |
99681bb89b | ||
![]() |
13dcc9a1bd | ||
![]() |
7eb96d97af | ||
![]() |
8e8b49f27d | ||
![]() |
226f67f114 | ||
![]() |
0c2600ccf4 | ||
![]() |
d3d37afea6 | ||
![]() |
507c23f401 | ||
![]() |
961513f81b | ||
![]() |
de45e12245 | ||
![]() |
746bdd0114 | ||
![]() |
8a0d0d332d | ||
![]() |
40be4153c2 | ||
![]() |
9bae415530 | ||
![]() |
fad17d7901 | ||
![]() |
35f857060c | ||
![]() |
90b8854ecf | ||
![]() |
cbb79a2d52 | ||
![]() |
116411a300 | ||
![]() |
7f3ef4002d | ||
![]() |
7ad5358451 | ||
![]() |
acd08be06a | ||
![]() |
12071e8645 | ||
![]() |
9aad6a89df | ||
![]() |
927632cd0f | ||
![]() |
f44d2ec219 | ||
![]() |
1006cf3fcb | ||
![]() |
fd8b6ce4ba | ||
![]() |
2dac7b12bb | ||
![]() |
cab91ebb8b | ||
![]() |
95709fbd4d | ||
![]() |
72a5d32979 | ||
![]() |
dca642ebb1 | ||
![]() |
d1b486f3cf | ||
![]() |
35c7328a48 | ||
![]() |
e68e814853 | ||
![]() |
117722621a | ||
![]() |
ce1c1c3cea | ||
![]() |
18626964eb | ||
![]() |
f2f40a4275 | ||
![]() |
77e4a1a614 | ||
![]() |
bec51c705b | ||
![]() |
3df427fb7c | ||
![]() |
7a6d549f53 | ||
![]() |
34981bd794 | ||
![]() |
c499817bed | ||
![]() |
f1be2948cf | ||
![]() |
976ea58f6b | ||
![]() |
12323965e0 | ||
![]() |
804e8c8718 | ||
![]() |
a549f220cb | ||
![]() |
452a4ec616 | ||
![]() |
1af2bb6023 | ||
![]() |
21dcb391b4 | ||
![]() |
8602bbfa51 | ||
![]() |
99e4c394fe | ||
![]() |
dc85bbacea | ||
![]() |
b24060f8d0 | ||
![]() |
40ba9526c4 | ||
![]() |
12106192b9 | ||
![]() |
d306c8f3fd | ||
![]() |
57c1b66a25 | ||
![]() |
54b6a7f295 |
26
.clang_complete
Normal file
@@ -0,0 +1,26 @@
|
||||
-DGDJS_EXPORTS
|
||||
-DGD_API=
|
||||
-DGD_CORE_API=
|
||||
-DGD_EXTENSION_API=
|
||||
-DGD_IDE_ONLY
|
||||
-DMACOS
|
||||
-DRELEASE
|
||||
-DWXUSINGDLL
|
||||
-D_FILE_OFFSET_BITS=64
|
||||
-D__WXMAC__
|
||||
-D__WXOSX_COCOA__
|
||||
-D__WXOSX__
|
||||
-DwxDEBUG_LEVEL=0
|
||||
-D_WCHAR_H_CPLUSPLUS_98_CONFORMANCE_
|
||||
-Wno-potentially-evaluated-expression
|
||||
-std=gnu++11
|
||||
-I/usr/local/Cellar/wxmac/3.0.2/include/wx-3.0
|
||||
-DNDEBUG
|
||||
-fPIC
|
||||
-I/Users/florian/Projects/F/GD/ExtLibs/SFML/include
|
||||
-I/Users/florian/Projects/F/GD/Core
|
||||
-I/usr/local/Cellar/wxmac/3.0.2/lib/wx/include/osx_cocoa-unicode-3.0
|
||||
-I/usr/local/Cellar/wxmac/3.0.2/include/wx-3.0
|
||||
-I/Users/florian/Projects/F/GD/GDCpp/.
|
||||
-I/Users/florian/Projects/F/GD/GDJS/.
|
||||
-F/Users/florian/Projects/F/GD/ExtLibs/SFML/extlibs/libs-osx/Frameworks
|
12
.gitignore
vendored
@@ -1,11 +1,11 @@
|
||||
/Core/GDCore/Tools/VersionPriv.h
|
||||
/docs/GDJS Runtime Documentation
|
||||
/docs/GDJS Documentation
|
||||
/docs/GDCpp Documentation
|
||||
/docs/GDCore Documentation
|
||||
/ExtLibs/boost
|
||||
/ExtLibs/SFML
|
||||
/ExtLibs/wxwidgets
|
||||
/ExtLibs/wxWidgets
|
||||
/ExtLibs/SFML
|
||||
/ExtLibs/*.7z
|
||||
/scripts/Repository keys
|
||||
/scripts/logs/*.txt
|
||||
@@ -50,11 +50,13 @@ Binaries/Packaging/logs
|
||||
!/Binaries/Output/Release_Linux/CppPlatform/
|
||||
/Binaries/**/MinGW32
|
||||
/Binaries/**/CppPlatform/Runtime
|
||||
/Binaries/**/CppPlatform/Sources
|
||||
/Binaries/**/CppPlatform/include
|
||||
/Binaries/**/CppPlatform/Extensions/include
|
||||
/Binaries/**/JsPlatform/Runtime
|
||||
/Binaries/**/JsPlatform/*.dll
|
||||
/Binaries/**/JsPlatform/*.dll.a
|
||||
/Binaries/Output/Release_Windows/newIDE
|
||||
*.autosave
|
||||
/Binaries/Output/libGD.js/Release
|
||||
/Binaries/Output/libGD.js/Debug
|
||||
@@ -63,12 +65,14 @@ Binaries/Packaging/logs
|
||||
!/scripts/libgettextlib-0-17.dll
|
||||
!/scripts/libgettextsrc-0-17.dll
|
||||
!/xgettext.exe
|
||||
!/Binaries/Output/Release_Windows/locale/libgettextlib-0-17.dll
|
||||
!/Binaries/Output/Release_Windows/locale/libgettextsrc-0-17.dll
|
||||
!/Binaries/Output/Release_Windows/locale/*.dll
|
||||
!/Binaries/Output/Release_Windows/locale/msgcat.exe
|
||||
!/Binaries/Output/Release_Windows/locale/msgfmt.exe
|
||||
!/ExtLibs/curl.exe
|
||||
!/ExtLibs/7za.exe
|
||||
!/ExtLibs/SFML/extlibs/**/*.dll
|
||||
!/ExtLibs/SFML/extlibs/**/*.so
|
||||
!/ExtLibs/SFML/extlibs/**/*.a
|
||||
**/.DS_Store
|
||||
**/node_modules/
|
||||
.idea
|
||||
|
22
.travis.yml
@@ -4,6 +4,9 @@ compiler:
|
||||
- gcc
|
||||
- clang
|
||||
|
||||
git:
|
||||
depth: 999999
|
||||
|
||||
env:
|
||||
global:
|
||||
- GCC_VERSION="4.8"
|
||||
@@ -34,6 +37,12 @@ before_install:
|
||||
- "sh -e /etc/init.d/xvfb start"
|
||||
|
||||
install:
|
||||
#Install newIDE tests dependencies
|
||||
- cd newIDE/app && npm install
|
||||
- cd ../..
|
||||
#Install GDJS tests dependencies
|
||||
- cd GDJS/tests && npm install
|
||||
- cd ../..
|
||||
#Get the correct version of gcc/g++
|
||||
- if [ "$CXX" = "g++" ]; then export CXX="g++-${GCC_VERSION}" CC="gcc-${GCC_VERSION}"; fi
|
||||
#Compile the tests only
|
||||
@@ -42,19 +51,18 @@ install:
|
||||
- cmake -DBUILD_GDJS=FALSE -DBUILD_IDE=FALSE -DBUILD_TESTS=TRUE -DNO_GUI=TRUE -DCMAKE_CXX_COMPILER=$(which $CXX) -DCMAKE_C_COMPILER=$(which $CC) ..
|
||||
- make -j 4
|
||||
- cd ..
|
||||
#Install GDJS tests dependencies
|
||||
- cd GDJS/tests
|
||||
- npm install
|
||||
- cd ../..
|
||||
|
||||
script:
|
||||
#GDJS game engine tests:
|
||||
- cd GDJS/tests
|
||||
#newIDE tests:
|
||||
- cd newIDE/app
|
||||
- npm test
|
||||
- npm run flow
|
||||
- cd ../..
|
||||
#GDJS game engine tests:
|
||||
- cd GDJS/tests && npm test
|
||||
- cd ../..
|
||||
#GDCore and GDCpp game engine tests:
|
||||
- cd .build-tests
|
||||
# - export LD_LIBRARY_PATH=$PWD/Binaries/Output/Release_Linux:$PWD/.build-tests/ExtLibs/SFML/lib:$LD_LIBRARY_PATH
|
||||
- Core/GDCore_tests
|
||||
- GDCpp/GDCpp_tests
|
||||
- Extensions/PathfindingBehavior/PathfindingBehavior_Runtime_tests
|
||||
|
89
.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Mac",
|
||||
"includePath": [
|
||||
"${workspaceRoot}",
|
||||
"${workspaceRoot}/IDE",
|
||||
"${workspaceRoot}/GDCpp",
|
||||
"${workspaceRoot}/GDJS",
|
||||
"${workspaceRoot}/Extensions",
|
||||
"${workspaceRoot}/Core",
|
||||
"${workspaceRoot}/ExtLibs/SFML/include",
|
||||
"/usr/local/lib/wx/include/osx_cocoa-unicode-3.0",
|
||||
"/usr/local/include/wx-3.0",
|
||||
"/usr/include/machine",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
|
||||
"/usr/local/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
|
||||
"/usr/include"
|
||||
],
|
||||
"defines": [
|
||||
"GD_IDE_ONLY",
|
||||
"__WXMAC__",
|
||||
"__WXOSX__",
|
||||
"__WXOSX_COCOA__",
|
||||
"GD_CORE_API=\" \"",
|
||||
"WXUSINGDLL"
|
||||
],
|
||||
"browse": {
|
||||
"path": [
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1",
|
||||
"/usr/local/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.0.0/include",
|
||||
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
|
||||
"/usr/include",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"intelliSenseMode": "clang-x64",
|
||||
"macFrameworkPath": [
|
||||
"/System/Library/Frameworks",
|
||||
"/Library/Frameworks"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"${workspaceRoot}",
|
||||
"/usr/include",
|
||||
"/usr/local/include"
|
||||
],
|
||||
"defines": [],
|
||||
"browse": {
|
||||
"path": [
|
||||
"/usr/include",
|
||||
"/usr/local/include",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"intelliSenseMode": "clang-x64"
|
||||
},
|
||||
{
|
||||
"name": "Win32",
|
||||
"includePath": [
|
||||
"${workspaceRoot}",
|
||||
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include"
|
||||
],
|
||||
"defines": [
|
||||
"_DEBUG",
|
||||
"UNICODE"
|
||||
],
|
||||
"browse": {
|
||||
"path": [
|
||||
"C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*",
|
||||
"${workspaceRoot}"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"intelliSenseMode": "msvc-x64"
|
||||
}
|
||||
],
|
||||
"version": 3
|
||||
}
|
84
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
// Place your settings in this file to overwrite default and user settings.
|
||||
{
|
||||
"files.associations": {
|
||||
"*.idl": "java",
|
||||
"iosfwd": "cpp",
|
||||
"functional": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"algorithm": "cpp",
|
||||
"random": "cpp",
|
||||
"__config": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"exception": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"new": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"complex": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"memory": "cpp",
|
||||
"ostream": "cpp",
|
||||
"sstream": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"hashtable": "cpp",
|
||||
"tuple": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"unordered_set": "cpp",
|
||||
"__split_buffer": "cpp",
|
||||
"deque": "cpp",
|
||||
"iterator": "cpp",
|
||||
"list": "cpp",
|
||||
"map": "cpp",
|
||||
"queue": "cpp",
|
||||
"regex": "cpp",
|
||||
"set": "cpp",
|
||||
"stack": "cpp",
|
||||
"string": "cpp",
|
||||
"vector": "cpp",
|
||||
"iostream": "cpp",
|
||||
"__functional_03": "cpp",
|
||||
"__hash_table": "cpp",
|
||||
"__tree": "cpp",
|
||||
"bitset": "cpp",
|
||||
"__bit_reference": "cpp",
|
||||
"__mutex_base": "cpp",
|
||||
"fstream": "cpp",
|
||||
"ios": "cpp",
|
||||
"__locale": "cpp",
|
||||
"valarray": "cpp",
|
||||
"freeglut_spaceball.c": "cpp",
|
||||
"__tuple": "cpp",
|
||||
"hash_map": "cpp",
|
||||
"hash_set": "cpp",
|
||||
"system_error": "cpp"
|
||||
},
|
||||
"files.exclude": {
|
||||
"Binaries/*build*": true,
|
||||
"Binaries/Output": true,
|
||||
"Binaries/Packaging/GDevelop.app": true,
|
||||
"ExtLibs/SFML": true,
|
||||
"docs": true,
|
||||
"GDJS/docs": true,
|
||||
"GDCpp/docs": true,
|
||||
"Core/docs": true,
|
||||
"Extensions/CommonDialogs/dlib-18.16": true,
|
||||
"newIDE/electron-app/dist": true,
|
||||
"newIDE/app/build": true,
|
||||
"newIDE/app/resources/GDJS": true,
|
||||
"newIDE/electron-app/app/www": true
|
||||
},
|
||||
// Support for Flowtype:
|
||||
"javascript.validate.enable": false
|
||||
}
|
After Width: | Height: | Size: 308 B |
After Width: | Height: | Size: 226 B |
After Width: | Height: | Size: 303 B |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 15 KiB |
@@ -55,7 +55,7 @@
|
||||
<resource alwaysLoaded="false" file="mur 6.png" kind="image" name="mur 6.png" smoothed="true" userAdded="true" />
|
||||
<resource alwaysLoaded="false" file="mur 7.png" kind="image" name="mur 7.png" smoothed="true" userAdded="true" />
|
||||
<resource alwaysLoaded="false" file="mur 8.png" kind="image" name="mur 8.png" smoothed="true" userAdded="true" />
|
||||
<resource alwaysLoaded="false" file="lumière.png" kind="image" name="lumière.png" smoothed="true" userAdded="true" />
|
||||
<resource alwaysLoaded="false" file="lumiere.png" kind="image" name="lumiere.png" smoothed="true" userAdded="true" />
|
||||
<resource alwaysLoaded="false" file="towerground.png" kind="image" name="towerground.png" smoothed="true" userAdded="true" />
|
||||
</resources>
|
||||
<resourceFolders />
|
||||
@@ -282,7 +282,7 @@
|
||||
<directions>
|
||||
<direction looping="false" timeBetweenFrames="1.000000">
|
||||
<sprites>
|
||||
<sprite hasCustomCollisionMask="false" image="lumière.png">
|
||||
<sprite hasCustomCollisionMask="false" image="lumiere.png">
|
||||
<points />
|
||||
<originPoint name="origine" x="0.000000" y="0.000000" />
|
||||
<centerPoint automatic="true" name="centre" x="4.000000" y="4.000000" />
|
||||
|
@@ -1,4 +1,4 @@
|
||||
#include "GDCpp/RuntimeScene.h"
|
||||
#include "GDCpp/Runtime/RuntimeScene.h"
|
||||
#include "TextObject/TextObject.h" //but do not forget extensions includes
|
||||
#include <iostream>
|
||||
|
||||
|
748
Binaries/Output/Release_Windows/Examples/Copy_Variables.gdg
Normal file
@@ -0,0 +1,748 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<project firstLayout="">
|
||||
<gdVersion build="95" major="4" minor="0" revision="8" />
|
||||
<properties folderProject="false" linuxExecutableFilename="" macExecutableFilename="" packageName="com.example.gamename" projectFile="C:\Users\Maciel\Programacion\gits\GD\Binaries\Output\Release_Windows\Examples\Copy_Variables.gdg" useExternalSourceFiles="false" winExecutableFilename="" winExecutableIconFile="">
|
||||
<name>Project</name>
|
||||
<author></author>
|
||||
<windowWidth>800</windowWidth>
|
||||
<windowHeight>600</windowHeight>
|
||||
<latestCompilationDirectory></latestCompilationDirectory>
|
||||
<maxFPS>60</maxFPS>
|
||||
<minFPS>10</minFPS>
|
||||
<verticalSync>false</verticalSync>
|
||||
<extensions>
|
||||
<extension name="BuiltinObject" />
|
||||
<extension name="BuiltinAudio" />
|
||||
<extension name="BuiltinVariables" />
|
||||
<extension name="BuiltinTime" />
|
||||
<extension name="BuiltinMouse" />
|
||||
<extension name="BuiltinKeyboard" />
|
||||
<extension name="BuiltinJoystick" />
|
||||
<extension name="BuiltinCamera" />
|
||||
<extension name="BuiltinWindow" />
|
||||
<extension name="BuiltinFile" />
|
||||
<extension name="BuiltinNetwork" />
|
||||
<extension name="BuiltinScene" />
|
||||
<extension name="BuiltinAdvanced" />
|
||||
<extension name="Sprite" />
|
||||
<extension name="BuiltinCommonInstructions" />
|
||||
<extension name="BuiltinCommonConversions" />
|
||||
<extension name="BuiltinStringInstructions" />
|
||||
<extension name="BuiltinMathematicalTools" />
|
||||
<extension name="BuiltinExternalLayouts" />
|
||||
<extension name="TextObject" />
|
||||
</extensions>
|
||||
<platforms>
|
||||
<platform name="GDevelop C++ platform" />
|
||||
<platform name="GDevelop JS platform" />
|
||||
</platforms>
|
||||
<currentPlatform>GDevelop C++ platform</currentPlatform>
|
||||
</properties>
|
||||
<resources>
|
||||
<resources />
|
||||
<resourceFolders />
|
||||
</resources>
|
||||
<objects />
|
||||
<objectsGroups />
|
||||
<variables />
|
||||
<layouts>
|
||||
<layout b="30" disableInputWhenNotFocused="true" mangledName="Scene" name="Scene" oglFOV="90.000000" oglZFar="500.000000" oglZNear="1.000000" r="30" standardSortMethod="false" stopSoundsOnStartup="true" title="" v="30">
|
||||
<uiSettings grid="false" gridB="80" gridG="80" gridHeight="32" gridOffsetX="0" gridOffsetY="0" gridR="80" gridWidth="32" snap="true" windowMask="false" zoomFactor="0.701632" />
|
||||
<objectsGroups />
|
||||
<variables>
|
||||
<variable name="Scene">
|
||||
<children>
|
||||
<variable name="A" value="5" />
|
||||
<variable name="B">
|
||||
<children>
|
||||
<variable name="alpha">
|
||||
<children>
|
||||
<variable name="x" value="5.5" />
|
||||
<variable name="y" value="-8" />
|
||||
</children>
|
||||
</variable>
|
||||
<variable name="beta" value="150;255;150" />
|
||||
<variable name="gamma" value="Apples" />
|
||||
</children>
|
||||
</variable>
|
||||
</children>
|
||||
</variable>
|
||||
</variables>
|
||||
<instances>
|
||||
<instance angle="0.000000" customSize="false" height="0.000000" layer="" locked="false" name="DebugText" width="0.000000" x="400.000000" y="300.000000" zOrder="1">
|
||||
<numberProperties />
|
||||
<stringProperties />
|
||||
<initialVariables>
|
||||
<variable name="ID" value="3" />
|
||||
</initialVariables>
|
||||
</instance>
|
||||
<instance angle="0.000000" customSize="false" height="0.000000" layer="" locked="false" name="DebugText" width="0.000000" x="20.000000" y="20.000000" zOrder="1">
|
||||
<numberProperties />
|
||||
<stringProperties />
|
||||
<initialVariables>
|
||||
<variable name="ID" value="0" />
|
||||
</initialVariables>
|
||||
</instance>
|
||||
<instance angle="0.000000" customSize="false" height="0.000000" layer="" locked="false" name="DebugText" width="0.000000" x="400.000000" y="20.000000" zOrder="1">
|
||||
<numberProperties />
|
||||
<stringProperties />
|
||||
<initialVariables>
|
||||
<variable name="ID" value="1" />
|
||||
</initialVariables>
|
||||
</instance>
|
||||
<instance angle="0.000000" customSize="false" height="0.000000" layer="" locked="false" name="DebugText" width="0.000000" x="20.000000" y="300.000000" zOrder="1">
|
||||
<numberProperties />
|
||||
<stringProperties />
|
||||
<initialVariables>
|
||||
<variable name="ID" value="2" />
|
||||
</initialVariables>
|
||||
</instance>
|
||||
</instances>
|
||||
<objects>
|
||||
<object bold="false" italic="false" name="DebugText" smoothed="true" type="TextObject::Text" underlined="false">
|
||||
<variables />
|
||||
<behaviors />
|
||||
<string>DebugText</string>
|
||||
<font></font>
|
||||
<characterSize>24</characterSize>
|
||||
<color b="220" g="220" r="220" />
|
||||
</object>
|
||||
</objects>
|
||||
<events>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>Update debug text at the beginning (only Scene variable will be drawn because others haven't childrend)</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="DepartScene" />
|
||||
<parameters>
|
||||
<parameter></parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>Update</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>If "A" key is pressed, convert the Scene variable into JSON and parse it into a Global variable, then randomize a child from the Global structure, to identify it</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="KeyPressed" />
|
||||
<parameters>
|
||||
<parameter></parameter>
|
||||
<parameter>a</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
<condition>
|
||||
<type inverted="false" value="BuiltinCommonInstructions::Once" />
|
||||
<parameters />
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToGlobalVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>ToJSON(Scene)</parameter>
|
||||
<parameter>Global</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarGlobal" />
|
||||
<parameters>
|
||||
<parameter>Global.B.alpha.x</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>Random(1000)</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>Update</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>If "S" key is pressed, convert the Global variable into JSON and parse it into an Object variable, then randomize another child from the Object structure, to identify it</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="KeyPressed" />
|
||||
<parameters>
|
||||
<parameter></parameter>
|
||||
<parameter>s</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>2</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
<condition>
|
||||
<type inverted="false" value="BuiltinCommonInstructions::Once" />
|
||||
<parameters />
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToObjectVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>GlobalVarToJSON(Global)</parameter>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>Object</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>Object.B.alpha.y</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>Random(1000)</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>Update</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>If "D" key is pressed, convert the Object variable into JSON (note there are no whitespaces after the "," before the variable name in the ObjectVarToJSON) and parse it into another scene variable Scene_2</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="KeyPressed" />
|
||||
<parameters>
|
||||
<parameter></parameter>
|
||||
<parameter>d</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>2</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
<condition>
|
||||
<type inverted="false" value="BuiltinCommonInstructions::Once" />
|
||||
<parameters />
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>ObjectVarToJSON(DebugText,Object)</parameter>
|
||||
<parameter>Scene_2</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>Update</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>Time to update the debug text objects, set Update = 0 to update it only once, and start a counter "i" = 0</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VarScene" />
|
||||
<parameters>
|
||||
<parameter>Update</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>Update</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>0</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>i</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>0</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>Repeat 4 times because there are 4 debug objects, in each repeat select the object with ID = i (counter variable)
Update the counter variable (i + 1)
Clear the temporal variable Temp, otherwise children are kept from one update to another, messing up the test</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Repeat</type>
|
||||
<repeatExpression>4</repeatExpression>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>Variable(i)</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="ModVarScene" />
|
||||
<parameters>
|
||||
<parameter>i</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="VariableClearChildren" />
|
||||
<parameters>
|
||||
<parameter>Temp</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>Set starting title in function of the debug object ID, and copy the testing variables into the variable Temp (this way Temp will be equal to one of the variables under test)</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>0</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>"Scene" + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>ToJSON(Scene)</parameter>
|
||||
<parameter>Temp</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>1</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>"Global" + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>GlobalVarToJSON(Global)</parameter>
|
||||
<parameter>Temp</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>2</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>"Object" + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>ObjectVarToJSON(DebugText,Object)</parameter>
|
||||
<parameter>Temp</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VarObjet" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>ID</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>3</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>=</parameter>
|
||||
<parameter>"Scene_2" + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
<action>
|
||||
<type inverted="false" value="JSONToVariableStructure" />
|
||||
<parameters>
|
||||
<parameter>ToJSON(Scene_2)</parameter>
|
||||
<parameter>Temp</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Comment</type>
|
||||
<color b="128" g="255" r="128" textB="0" textG="0" textR="0" />
|
||||
<comment>Copy values from variable Test in the debug object, to draw it, one debug object is selected at each iteration and one variable is copy into Temp variable</comment>
|
||||
<comment2></comment2>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp</parameter>
|
||||
<parameter>"A"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"____A = " + VariableString(Temp.A) + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp</parameter>
|
||||
<parameter>"B"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"____B" + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp.B</parameter>
|
||||
<parameter>"alpha"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"________alpha" + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp.B.alpha</parameter>
|
||||
<parameter>"x"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"____________x = " + VariableString(Temp.B.alpha.x) + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp.B.alpha</parameter>
|
||||
<parameter>"y"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"____________y = " + VariableString(Temp.B.alpha.y) + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
</events>
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp.B</parameter>
|
||||
<parameter>"beta"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"________beta = " + VariableString(Temp.B.beta) + NewLine()</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
<event disabled="false" folded="false">
|
||||
<type>BuiltinCommonInstructions::Standard</type>
|
||||
<conditions>
|
||||
<condition>
|
||||
<type inverted="false" value="VariableChildExists" />
|
||||
<parameters>
|
||||
<parameter>Temp.B</parameter>
|
||||
<parameter>"gamma"</parameter>
|
||||
</parameters>
|
||||
<subConditions />
|
||||
</condition>
|
||||
</conditions>
|
||||
<actions>
|
||||
<action>
|
||||
<type inverted="false" value="TextObject::String" />
|
||||
<parameters>
|
||||
<parameter>DebugText</parameter>
|
||||
<parameter>+</parameter>
|
||||
<parameter>"________gamma = " + VariableString(Temp.B.gamma)</parameter>
|
||||
</parameters>
|
||||
<subActions />
|
||||
</action>
|
||||
</actions>
|
||||
<events />
|
||||
</event>
|
||||
</events>
|
||||
</event>
|
||||
</events>
|
||||
</event>
|
||||
</events>
|
||||
</event>
|
||||
</events>
|
||||
<layers>
|
||||
<layer name="New layer" visibility="true">
|
||||
<cameras>
|
||||
<camera defaultSize="true" defaultViewport="true" height="0.000000" viewportBottom="1.000000" viewportLeft="0.000000" viewportRight="1.000000" viewportTop="0.000000" width="0.000000" />
|
||||
</cameras>
|
||||
<effects />
|
||||
</layer>
|
||||
<layer name="" visibility="true">
|
||||
<cameras>
|
||||
<camera defaultSize="true" defaultViewport="true" height="0.000000" viewportBottom="1.000000" viewportLeft="0.000000" viewportRight="1.000000" viewportTop="0.000000" width="0.000000" />
|
||||
</cameras>
|
||||
<effects />
|
||||
</layer>
|
||||
</layers>
|
||||
<behaviorsSharedData />
|
||||
</layout>
|
||||
</layouts>
|
||||
<externalEvents />
|
||||
<externalLayouts />
|
||||
<externalSourceFiles />
|
||||
</project>
|
Before Width: | Height: | Size: 130 B After Width: | Height: | Size: 130 B |
@@ -26,4 +26,16 @@
|
||||
/>
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
||||
<!-- Windows 8 -->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
||||
<!-- Windows 7 -->
|
||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
||||
<!-- Windows Vista -->
|
||||
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
|
||||
</application>
|
||||
</compatibility>
|
||||
</assembly>
|
||||
|
27035
Binaries/Output/Release_Windows/locale/de_DE/GD.po
Executable file → Normal file
25629
Binaries/Output/Release_Windows/locale/es_ES/GD.po
Executable file → Normal file
25449
Binaries/Output/Release_Windows/locale/fi_FI/GD.po
Executable file → Normal file
38506
Binaries/Output/Release_Windows/locale/fr_FR/GD.po
Executable file → Normal file
29819
Binaries/Output/Release_Windows/locale/it_IT/GD.po
Executable file → Normal file
BIN
Binaries/Output/Release_Windows/locale/libexpat.dll
Normal file
BIN
Binaries/Output/Release_Windows/locale/libgettextlib.dll
Normal file
BIN
Binaries/Output/Release_Windows/locale/libgettextpo.dll
Normal file
BIN
Binaries/Output/Release_Windows/locale/libgettextsrc.dll
Normal file
BIN
Binaries/Output/Release_Windows/locale/libiconv2.dll
Normal file
BIN
Binaries/Output/Release_Windows/locale/libintl-8.dll
Normal file
BIN
Binaries/Output/Release_Windows/locale/libintl3.dll
Normal file
25478
Binaries/Output/Release_Windows/locale/nl_NL/GD.po
Executable file → Normal file
32644
Binaries/Output/Release_Windows/locale/pl_PL/GD.po
Executable file → Normal file
25327
Binaries/Output/Release_Windows/locale/pt_PT/GD.po
Executable file → Normal file
25562
Binaries/Output/Release_Windows/locale/ru_RU/GD.po
Executable file → Normal file
39378
Binaries/Output/Release_Windows/locale/zh_CN/GD.po
Executable file → Normal file
BIN
Binaries/Output/Release_Windows/res/ribbon_default/export32.png
Normal file
After Width: | Height: | Size: 293 B |
After Width: | Height: | Size: 413 B |
After Width: | Height: | Size: 568 B |
BIN
Binaries/Output/Release_Windows/res/ribbon_default/objects64.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.1 KiB |
@@ -51,9 +51,9 @@ cd $CUR_DIR/opensuse-build-service/gdevelop
|
||||
tar zxf gdevelop_$GD_VERSION.orig.tar.gz
|
||||
echo "[OK]"
|
||||
|
||||
#We need to include ExtLibs/SFML.7z and ExtLibs/boost.7z because buildbot do not have access to internet
|
||||
#We need to include ExtLibs/SFML.7z because the buildbot do not have access to internet
|
||||
printf " Copying SFML archive... "
|
||||
cp $GD_BASE_DIR/ExtLibs/SFML.7z gdevelop-$GD_VERSION/ExtLibs/
|
||||
cp -rf $GD_BASE_DIR/ExtLibs/SFML gdevelop-$GD_VERSION/ExtLibs/
|
||||
echo "[OK]"
|
||||
|
||||
#Recreate the tar.gz with the added sources
|
||||
|
@@ -35,14 +35,14 @@ del Output\Release_Windows\log.txt > NUL 2> NUL
|
||||
|
||||
echo.
|
||||
echo --Creating installer...
|
||||
IF NOT "%SKIPINSTALLER%"=="1" "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Releases\InnoSetupInstallerScript.iss /Q
|
||||
IF NOT "%SKIPINSTALLER%"=="1" "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Releases\InnoSetupInstallerScript.iss /Qp
|
||||
IF "%SKIPINSTALLER%"=="1" echo (Skipped)
|
||||
|
||||
echo.
|
||||
echo --Creating archive...
|
||||
if exist Releases\gd3xxxx.zip (del Releases\gd3xxxx.zip)
|
||||
if exist Releases\gd4xxxx.7z (del Releases\gd4xxxx.7z)
|
||||
cd Output\Release_Windows\
|
||||
IF NOT "%SKIPINSTALLERANDARCHIVE%"=="1" "..\..\..\ExtLibs\7za.exe" a ..\..\Releases\gd3xxxx.zip * > ..\..\Packaging\logs\zipArchiveLog.txt
|
||||
IF NOT "%SKIPINSTALLERANDARCHIVE%"=="1" "..\..\..\ExtLibs\7za.exe" a ..\..\Releases\gd4xxxx.7z * -bb
|
||||
IF "%SKIPINSTALLERANDARCHIVE%"=="1" echo (Skipped)
|
||||
cd ..\..\..
|
||||
|
||||
@@ -50,4 +50,4 @@ echo. >CON
|
||||
echo Finished. Do not forget to : >CON
|
||||
echo -Update news.txt >CON
|
||||
echo -Update pad file >CON
|
||||
pause >CON
|
||||
pause >CON
|
||||
|
@@ -1,3 +1,4 @@
|
||||
#Files needed by the IDE to build games (they are not part of a devel package)
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/include/.*")
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/Extensions/include/.*")
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/Extensions/include/.*")
|
||||
addFilter("devel-file-in-non-devel-package.*/opt/gdevelop/CppPlatform/Sources/.*")
|
||||
|
@@ -12,11 +12,11 @@ Source100: gdevelop-rpmlintrc
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
BuildRequires: git rsync curl gcc-c++ cmake p7zip glew-devel xorg-x11-devel libsndfile-devel openal-soft-devel desktop-file-utils
|
||||
BuildRequires: git rsync curl gcc-c++ cmake p7zip glew-devel libsndfile-devel openal-soft-devel desktop-file-utils
|
||||
%if 0%{?fedora}
|
||||
BuildRequires: systemd-devel libjpeg-turbo-devel gtk2-devel wxGTK3-devel
|
||||
BuildRequires: systemd-devel libjpeg-turbo-devel gtk2-devel wxGTK3-devel libX11-devel
|
||||
%else
|
||||
BuildRequires: update-desktop-files libudev-devel libjpeg8-devel wxWidgets-3_0-devel
|
||||
BuildRequires: update-desktop-files libudev-devel libjpeg8-devel wxWidgets-3_0-devel xorg-x11-devel
|
||||
%endif
|
||||
Requires: gcc-c++ p7zip
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
; Inno Setup installation script for GDevelop.
|
||||
; Inno Setup installation script for GDevelop 4.
|
||||
|
||||
[Setup]
|
||||
AppName=GDevelop
|
||||
@@ -13,14 +13,14 @@ AllowNoIcons=yes
|
||||
LicenseFile=..\Output\Release_Windows\License-en.rtf
|
||||
InfoBeforeFile=..\Output\Release_Windows\Informations-en.rtf
|
||||
OutputDir=.\
|
||||
OutputBaseFilename=gd4083
|
||||
OutputBaseFilename=gd4096
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
SetupIconFile=..\Output\Release_Windows\res\icon.ico
|
||||
VersionInfoVersion=4.0
|
||||
WizardImageFile=Setup bitmap\wizbmp.bmp
|
||||
WizardSmallImageFile=Setup bitmap/smallicon.bmp
|
||||
AppCopyright=2008-2016 Florian Rival
|
||||
AppCopyright=2008-2017 Florian Rival
|
||||
VersionInfoCompany=Florian Rival
|
||||
VersionInfoDescription=GDevelop setup
|
||||
VersionInfoCopyright=2008-2016 Florian Rival
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<News>
|
||||
<Version Major="4" Minor="0" Build="88" Revision="0"/>
|
||||
<Info Info="La version 4.0.88 est disponible.

Importants changements en interne pour supporter l'Unicode dans les jeux, c'est <20> dire la possibilit<69> de pouvoir utiliser des charact<63>res de d'autres alphabets.
Nouvel objet AdMob, pour afficher des banni<6E>res publicitaires (ou <20>crans interstitiels) dans les jeux HTML5 export<72>s sur Android/iOS avec Intel XDK.
Les automatismes sont maintenant appel<65>s des Comportements (Behavior en anglais).
Nouvelle fonctionnalit<69>, la 'pile de sc<73>nes' : une nouvelle action permet de mettre en pause la sc<73>ne courante et d'en lancer une autre. On peut ensuite revenir <20> la sc<73>ne pr<70>c<EFBFBD>dente avec une autre action. Id<49>al pour faire des menus de pause, des <20>crans de combats, des <20>crans d'int<6E>rieurs de batiments..
Am<41>lioration de l'export des jeux HTML5 pour Cordova/Intel XDK.
Nouvel <20>diteur pour les objets textes
Ajout de la fonctionnalit<69> 'Sauvegarder en tant que projet dossier': les projets peuvent <20>tre sauvegard<72>s avec les sc<73>nes, <20>v<EFBFBD>nements externes et agencements externes sauvegard<72>s dans diff<66>rents fichiers. Cela rend beaucoup plus facile la collaboration dans une <20>quipe.
L'appui sur Shift dans l'<27>diteur de sc<73>ne permet de redimensionner un objet en gardant ses proportions.
L'appui sur Shift dans l'<27>diteur de sc<73>ne permet de tourner un objet par incr<63>ment r<>guliers de 15 degr<67>s.
La grille aimant<6E>e de l'<27>diteur de sc<73>ne s'applique aussi lors du redimensionnement d'objets.
Am<EFBFBD>lioration de l'objet Carte de Tuiles, notamment une baisse de la consommation m<>moire pour les grandes cartes.
Am<41>lioration pour les <20>crans haute d<>finition ('retina').
Plusieurs corrections de bugs pour la recherche de chemin, qui devrait maintenant fonctionner correctement dans tous les cas.
Correction de la recherche dans l'<27>diteur d'objets.
Correction de la condition sur la bordure suppl<70>mentaire du comportement 'D<>truire <20> la sortie de l'<27>cran'
Nouvel d<>mo utilisant les fonctionnalit<69>s Javascript 'PIXI Particles'
Correction dans l'<27>diteur de sc<73>ne o<> les objets sur des calques cach<63>s pouvaient encore <20>tre selectionn<6E>s.
Am<41>lioration et nettoyage du code en interne.
Corrections pour Mac OS X dans l'<27>diteur de sc<73>ne.
Suppression de la compilation en un fichier unique (trop instable et detect<63> comme un virus par certains antivirus).
Ajout du support pour les molettes <20> d<>filement horizontal dans l'<27>diteur de sc<73>ne.
Divers bugs corrig<69>s." Lien="http://compilgames.net"/>
|
||||
<CommunityNews text="GDevApp est une web app de cr<EFBFBD>ation de jeux bas<EFBFBD>e sur GDevelop : venez essayer la plus avanc<EFBFBD>e des applications online de cr<EFBFBD>ation de jeux. Compatible avec les tablettes et fournie avec des superbes packs de graphismes pr<EFBFBD>-pr<EFBFBD>par<EFBFBD>s." link1="https://github.com/4ian/GD" linkLabel1="GDevelop sur GitHub" link2="https://gdevapp.com?utm_source=software&utm_medium=link_fr&utm_campaign=launch" linkLabel2="Tester GDevApp, la nouvelle app de cr<EFBFBD>ation de jeux"/>
|
||||
<Version Major="4" Minor="0" Build="92" Revision="0"/>
|
||||
<Info Info="La version 4.0.92 est disponible.

(Expérimental) Exportation des jeux HTML5 vers Android/iOS/Mac/Windows avec le moteur Cocos2d-JS.
(Expérimental) Exportation des jeux natifs vers Android.

Les objets avec le comportement 'Objet se déplaçant sur des plateformes' peuvent maintenant agripper les rebords des plateformes - il faut activer l'option dans le comportement de l'objet.
Les animations des objets Sprite peuvent maintenant être nommés. Une condition et action ont été ajoutées pour utiliser ces noms.
Ajout du support basique d'effets pour les jeux HTML5. ✨ Pour le moment, 3 effets sont disponibles et peuvent être attribués au calques d'une scène. 
Amélioration des performances des jeux HTML5
Correction et améliorations pour les jeux HTML5 exportés avec Cocos2d-JS.
Lors de la recherche dans les évènements, l'évènement surlignés est correctement affiché en dépliant au besoin les groupes/évènements repliés.
Correction du rendu sur Windows avec les thèmes à fort contraste." Lien="http://compilgames.net"/>
|
||||
<CommunityNews text="GDevApp est une web app de création de jeux basée sur GDevelop : venez essayer la plus avancée des applications online de création de jeux. Compatible avec les tablettes et fournie avec des superbes packs de graphismes pré-préparés." link1="https://github.com/4ian/GD" linkLabel1="GDevelop sur GitHub" link2="https://gdevapp.com?utm_source=software&utm_medium=link_fr&utm_campaign=launch" linkLabel2="Tester GDevApp, la nouvelle app de création de jeux"/>
|
||||
</News>
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1" ?>
|
||||
<News>
|
||||
<Version Major="4" Minor="0" Build="88" Revision="0"/>
|
||||
<Info Info="Version 4.0.88 is available.

Huge internal changes to have multi-language support ('Unicode') in games.
New AdMob object, that can be used to display ad banners (or interstitial screens) in HTML5 games exported to iOS/Android with Intel XDK.
Automatisms are now called Behaviors for objects (more intuitive and easier to understand).
New scene stacking feature: a new action allows to pause the current scene and launch a new one. You can then go back to the previous one with another action. This makes it easy to create a pause menu, a RPG combat system, rooms/building that you enter from a map...
Improved export of HTML5 games to Cordova/Intel XDK.
New editor for text objects
Add 'Save as a folder project': projects can be saved with scenes, external events and external layouts stored in a different file for each. This makes it easier to collaborate on a game as a team.
Hold Shift in scene editor to resize object while keeping its aspect ratio.
Hold Shift in scene editor to rotate an object in increments.
'Snap to grid' now snaps objects when resizing them in scene editor.
Improvements on TileMap objects, including a reduced memory consumption for large maps.
Improvements for HDPI ('retina') screens.
Several bugfixes for pathfinding that should now work properly in all cases.
Fixed search not working in the objects editor.
Fixed extra border condition of Destroy Outside Behavior.
New PIXI Particles advanced Javascript demo.
Fixed objects from hidden layers could still be selected and moved in scene editor
Internal code cleaning and improvements.
Fixes for Mac OS X in the scene editor.
Removed compilation of native games to a single file executable (was too unstable and prone to antivirus blocking).
Add support for horizontal mouse wheel in the scene editor.
Fixed Vertical Synchronization and framerate limit not applied after changing the window resolution in native games
Fix small bug in Destroy Outside behavior of HTML5 games
Add an option to repeat borders and center textures of PanelSprite objects for HTML5 games
Improve performances of PanelSprite objects for HTML5 games
Fix hitboxes collision condition for HTML5 games
Fix conflicts when exporting a game using different images with the same file name.
Fix error when deactivating a behavior of an object that was just created.
Fix scene editor not properly refreshed after being resized on OS X." Lien="http://compilgames.net"/>
|
||||
<Version Major="4" Minor="0" Build="92" Revision="0"/>
|
||||
<Info Info="Version 4.0.92 is available.

New experimental option to export HTML5 games to Android/iOS/Mac/Windows using the Cocos2d as the underlying game engine.

 New experimental option to export native games to Android.

Platformer object now have an option allowing them to grab platform ledges. Activate this option in the behavior and be sure to also enable this on platforms.
Animations of Sprite objects can now be named. Specific actions/conditions are also available.
Add basic support for effects for HTML5 games. For now, there are 3 simple effects (Night, LightNight, Sepia) and you can apply one of them on each layer of a scene.
Performance improvement for HTML5 games.
Fix text rendering when using a custom font, when exporting HTML5 games with Cocos2d-JS.
Add support for non-smoothed texture for HTML5 games using Cocos2d-JS.
Add support for storage actions when for HTML5 games using Cocos2d-JS on Android/iOS.
When searching in events, events that are matched are unfolded.
Provide compatibility with Windows high contrast themes (thanks @RandomShaper!)
Many fixes" Lien="http://compilgames.net"/>
|
||||
<CommunityNews text="GDevelop has a new website! Help us to translate it to your language by going on the Crowdin project.

GDevApp is an online game creator based on GDevelop: Go try the most advanced game creation web app. Compatible with tablets and bundled with awesome graphics assets." link1="https://crowdin.com/project/gdevelop-website/" linkLabel1="Help translate GD website" link2="https://gdevapp.com?utm_source=software&utm_medium=link_en&utm_campaign=launch" linkLabel2="Try GDevApp, the online game creator based on GD"/>
|
||||
</News>
|
||||
|
@@ -18,6 +18,7 @@ gd_set_option(BUILD_IDE TRUE BOOL "TRUE to build the IDE")
|
||||
gd_set_option(BUILD_EXTENSIONS TRUE BOOL "TRUE to build the extensions")
|
||||
gd_set_option(BUILD_TESTS FALSE BOOL "TRUE to build the tests")
|
||||
gd_set_option(NO_GUI FALSE BOOL "TRUE to build without wxWidgets GUI")
|
||||
gd_set_option(FULL_VERSION_NUMBER TRUE BOOL "TRUE to build GDevelop with its full version number (lastest tag + commit hash), FALSE to only use the lastest tag (avoid rebulding many source file when developping)")
|
||||
|
||||
#Setting up installation directory, for Linux (has to be done before "project" command).
|
||||
IF(NOT WIN32)
|
||||
@@ -76,6 +77,8 @@ endif()
|
||||
set(GD_base_dir ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
#Add all the CMakeLists:
|
||||
ADD_SUBDIRECTORY(Version)
|
||||
|
||||
ADD_SUBDIRECTORY(ExtLibs)
|
||||
IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Core/CMakeLists.txt" AND BUILD_CORE)
|
||||
ADD_SUBDIRECTORY(Core)
|
||||
|
@@ -73,6 +73,7 @@ IF(NO_GUI)
|
||||
ENDIF()
|
||||
|
||||
add_library(GDCore SHARED ${source_files})
|
||||
add_dependencies(GDCore GDVersion)
|
||||
IF(EMSCRIPTEN)
|
||||
set_target_properties(GDCore PROPERTIES SUFFIX ".bc")
|
||||
ELSEIF(WIN32)
|
||||
|
@@ -510,7 +510,7 @@
|
||||
<wxDialog wxs="wxsmith/EditForEachEvent.wxs" src="GDCore/IDE/Dialogs/EditForEachEvent.cpp" hdr="GDCore/IDE/Dialogs/EditForEachEvent.h" fwddecl="0" i18n="1" name="EditForEachEvent" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/EditRepeatEvent.wxs" src="GDCore/IDE/Dialogs/EditRepeatEvent.cpp" hdr="GDCore/IDE/Dialogs/EditRepeatEvent.h" fwddecl="0" i18n="1" name="EditRepeatEvent" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/ProjectUpdateDialog.wxs" src="GDCore/IDE/Dialogs/ProjectUpdateDialog.cpp" hdr="GDCore/IDE/Dialogs/ProjectUpdateDialog.h" fwddecl="0" i18n="1" name="ProjectUpdateDialog" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/SpriteObjectEditor.wxs" src="GDCore\Extensions\BuiltinExtensions\SpriteExtension\Dialogs\SpriteObjectEditor.cpp" hdr="GDCore\Extensions\BuiltinExtensions\SpriteExtension\Dialogs\SpriteObjectEditor.h" fwddecl="0" i18n="1" name="SpriteObjectEditor" language="CPP" />
|
||||
<wxDialog wxs="wxsmith/SpriteObjectEditor.wxs" src="GDCore/Extensions/Builtin/SpriteExtension/Dialogs/SpriteObjectEditor.cpp" hdr="GDCore/Extensions/Builtin/SpriteExtension/Dialogs/SpriteObjectEditor.h" fwddecl="0" i18n="1" name="SpriteObjectEditor" language="CPP" />
|
||||
<wxPanel wxs="wxsmith/ResourcesEditor.wxs" src="GDCore/IDE/Dialogs/ResourcesEditor.cpp" hdr="GDCore/IDE/Dialogs/ResourcesEditor.h" fwddecl="0" i18n="1" name="ResourcesEditor" language="CPP" />
|
||||
</resources>
|
||||
</wxsmith>
|
||||
|
@@ -71,7 +71,7 @@
|
||||
*
|
||||
* Download the current version of the compiler used by GDevelop on Windows here:
|
||||
*
|
||||
* http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.9.2.exe/download
|
||||
* https://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/Previous/1.1309.0/tdm-gcc-4.9.2.exe/download
|
||||
*
|
||||
* \section installWinCompiler_install Installation
|
||||
*
|
||||
@@ -222,6 +222,7 @@ brew install cmake
|
||||
brew install p7zip
|
||||
brew install pkgconfig
|
||||
brew install wxwidgets
|
||||
brew install freetype
|
||||
\endcode
|
||||
* If you want to generate the documentation and translations, install Doxygen and Gettext:
|
||||
\code
|
||||
@@ -337,7 +338,7 @@ make -j4
|
||||
* \section platformstructure Structure of a platform
|
||||
*
|
||||
* A platform for GDevelop Core is a class inheriting from gd::Platform.<br>
|
||||
* They contains the extensions of the platform (see below) and offer various methods, like gd::Platform::GetProjectExporter which
|
||||
* They contains the extensions of the platform (see below) and offer various methods, like gd::Platform::GetProjectExporters which
|
||||
* is called by the IDE to export a gd::Project to a stand-alone game.
|
||||
*
|
||||
* \subsection platformloading Platforms loading
|
||||
@@ -406,7 +407,7 @@ str += " world";
|
||||
str += " " + gd::String::From(2);
|
||||
//str now contains "Hello world 2";
|
||||
|
||||
gd::string twopointfiveStr = "2.5";
|
||||
gd::String twopointfiveStr = "2.5";
|
||||
double twopointfive = twopointfive.To<double>();
|
||||
//twopointfive == 2.5
|
||||
\endcode
|
||||
@@ -499,30 +500,22 @@ Actions are declared like this :
|
||||
* Adding an object is made using gd::PlatformExtension::AddObject method.
|
||||
*
|
||||
* \code
|
||||
gd::ObjectMetadata & obj = AddObject("Name",
|
||||
gd::ObjectMetadata & obj = AddObject<MyObject>(
|
||||
"Name",
|
||||
_("Name displayed to users"),
|
||||
_("Description"),
|
||||
"path-to-a-32-by-32-icon.png",
|
||||
&FunctionForCreatingTheObject);
|
||||
* \endcode
|
||||
*
|
||||
* *FunctionForCreatingTheObject* is a function that must just create the object. It should look like this:
|
||||
*
|
||||
* \code
|
||||
gd::Object * CreateTextObject(std::string name)
|
||||
{
|
||||
return new TextObject(name);
|
||||
}
|
||||
"path-to-a-32-by-32-icon.png");
|
||||
* \endcode
|
||||
*
|
||||
* The *C++ platform* also requires that you call *AddRuntimeObject* to declare the RuntimeObject class associated to the object being declared:<br>
|
||||
* You must pass as parameter the name of the class inheriting from RuntimeObject and a function used to create an instance of the
|
||||
* RuntimeObject.
|
||||
* It has two template parameters: the first one is the corresponding object class declared with *AddObject* (class inheriting from *gd::Object*) and the
|
||||
* second one is the *RuntimeObject* class.
|
||||
* You must pass as parameter the metadata from the object previously declared and the name of the class inheriting from RuntimeObject.
|
||||
*
|
||||
* You will also want to specify the .h file associated to the object using gd::ObjectMetadata::SetIncludeFile. For example:
|
||||
* \code
|
||||
//obj is the gd::ObjectMetadata returned when you called AddObject.
|
||||
AddRuntimeObject(obj, "RuntimeTextObject", CreateRuntimeTextObject);
|
||||
AddRuntimeObject<TextObject, RuntimeTextObject>(obj, "RuntimeTextObject");
|
||||
obj.SetIncludeFile("TextObject/TextObject.h");
|
||||
* \endcode
|
||||
*
|
||||
@@ -538,7 +531,7 @@ AddEvent("Name",
|
||||
"Description",
|
||||
"Group",
|
||||
"path-to-a-16-by-16-icon.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new EventClassName))
|
||||
std::make_shared<EventClassName>())
|
||||
* \endcode
|
||||
*
|
||||
* The event must be able to generate its code when events are being translated to C++ or Javascript:<br>
|
||||
@@ -550,7 +543,7 @@ AddEvent("Standard",
|
||||
_("Standard event: Actions are run if conditions are fulfilled."),
|
||||
"",
|
||||
"res/eventaddicon.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::StandardEvent))
|
||||
std::make_shared<gd::StandardEvent>())
|
||||
.SetCodeGenerator(std::shared_ptr<gd::EventMetadata::CodeGenerator>(codeGen));
|
||||
* \endcode
|
||||
|
||||
@@ -567,8 +560,8 @@ gd::BehaviorMetadata & aut = AddBehavior("Name",
|
||||
"Group",
|
||||
"path-to-a-32-by-32-icon.png",
|
||||
"BehaviorClassName",
|
||||
std::shared_ptr<gd::Behavior>(new BehaviorClassName),
|
||||
std::shared_ptr<gd::BehaviorsSharedData>(new BehaviorSharedDataClassName));
|
||||
std::make_shared<BehaviorClassName>(),
|
||||
std::make_shared<BehaviorSharedDataClassName>());
|
||||
* \endcode
|
||||
* The last line can be replaced by <code>std::shared_ptr<gd::BehaviorsSharedData>()</code> if no shared data are being used.
|
||||
*
|
||||
@@ -626,8 +619,8 @@ public:
|
||||
"",
|
||||
"CppPlatform/Extensions/myicon.png",
|
||||
"PhysicsBehavior",
|
||||
std::shared_ptr<gd::Behavior>(new BehaviorClassName),
|
||||
std::shared_ptr<gd::BehaviorsSharedData>(new BehaviorSharedDataClassName));
|
||||
std::make_shared<BehaviorClassName>(),
|
||||
std::make_shared<BehaviorSharedDataClassName>());
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
behaviorInfo.SetIncludeFile("MyExtension/MyIncludeFile.h");
|
||||
@@ -785,5 +778,3 @@ extern "C" ExtensionBase * GD_EXTENSION_API CreateGDExtension() {
|
||||
* \brief Part of the tinyxml library
|
||||
* \ingroup TinyXml
|
||||
*/
|
||||
|
||||
|
||||
|
@@ -29,6 +29,19 @@ public:
|
||||
virtual ~CommentEvent() {};
|
||||
virtual gd::CommentEvent * Clone() const { return new CommentEvent(*this);}
|
||||
|
||||
int GetBackgroundColorRed() const { return r; }
|
||||
int GetBackgroundColorGreen() const { return v; }
|
||||
int GetBackgroundColorBlue() const { return b; }
|
||||
void SetBackgroundColor(int r_, int g_, int b_) { r = r_; v = g_; b = b_; }
|
||||
|
||||
int GetTextColorRed() const { return textR; }
|
||||
int GetTextColorGreen() const { return textG; }
|
||||
int GetTextColorBlue() const { return textB; }
|
||||
void SetTextColor(int r_, int g_, int b_) { textR = r_; textG = g_; textB = b_; }
|
||||
|
||||
const gd::String & GetComment() const { return com1; }
|
||||
void SetComment(const gd::String & comment) { com1 = comment; }
|
||||
|
||||
virtual void SerializeTo(SerializerElement & element) const;
|
||||
virtual void UnserializeFrom(gd::Project & project, const SerializerElement & element);
|
||||
|
||||
@@ -40,8 +53,8 @@ public:
|
||||
int textG; ///< Text color Green component
|
||||
int textB; ///< Text color Blue component
|
||||
|
||||
gd::String com1; ///< Comment gd::String
|
||||
gd::String com2; ///< Optional second comment gd::String
|
||||
gd::String com1; ///< Comment
|
||||
gd::String com2; ///< Optional second column comment, deprecated
|
||||
|
||||
/**
|
||||
* Called by event editor to draw the event.
|
||||
|
@@ -80,16 +80,16 @@ vector < const gd::Expression* > ForEachEvent::GetAllExpressions() const
|
||||
void ForEachEvent::SerializeTo(SerializerElement & element) const
|
||||
{
|
||||
element.AddChild("object").SetValue(objectsToPick.GetPlainString());
|
||||
gd::EventsListSerialization::SaveConditions(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SaveActions(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeEventsTo(events, element.AddChild("events"));
|
||||
}
|
||||
|
||||
void ForEachEvent::UnserializeFrom(gd::Project & project, const SerializerElement & element)
|
||||
{
|
||||
objectsToPick = gd::Expression(element.GetChild("object", 0, "Object").GetValue().GetString());
|
||||
gd::EventsListSerialization::OpenConditions(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::OpenActions(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeEventsFrom(project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
@@ -109,7 +109,10 @@ void ForEachEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::Event
|
||||
|
||||
//For Each text
|
||||
dc.SetFont( renderingHelper->GetNiceFont().Bold() );
|
||||
dc.SetTextForeground(wxColour(0,0,0));
|
||||
if ( !IsDisabled() )
|
||||
dc.SetTextForeground( wxColour( 0, 0, 0 ) );
|
||||
else
|
||||
dc.SetTextForeground( wxColour( 160, 160, 160 ) );
|
||||
dc.DrawText( _("For each object") + " " + objectsToPick.GetPlainString() + _(", repeat :"), x + 4, y + 3 );
|
||||
|
||||
//Draw conditions rectangle
|
||||
|
@@ -19,7 +19,8 @@
|
||||
#include "GDCore/Events/CodeGeneration/EventsCodeGenerator.h"
|
||||
#include "GDCore/Events/Tools/EventsCodeNameMangler.h"
|
||||
#include "GDCore/Events/Builtin/LinkEvent.h"
|
||||
#include "GDCore/IDE/Dialogs/EditLink.h"
|
||||
#include "GDCore/Events/Builtin/GroupEvent.h"
|
||||
#include "GDCore/IDE/Dialogs/LinkEventEditor.h"
|
||||
#include "GDCore/CommonTools.h"
|
||||
|
||||
using namespace std;
|
||||
@@ -29,8 +30,8 @@ namespace gd
|
||||
|
||||
const EventsList * LinkEvent::GetLinkedEvents(const gd::Project & project) const
|
||||
{
|
||||
const EventsList * events = NULL;
|
||||
const gd::ExternalEvents * linkedExternalEvents = NULL;
|
||||
const EventsList * events = nullptr;
|
||||
const gd::ExternalEvents * linkedExternalEvents = nullptr;
|
||||
if ( project.HasExternalEventsNamed(GetTarget()) )
|
||||
{
|
||||
linkedExternalEvents = &project.GetExternalEvents(GetTarget());
|
||||
@@ -39,17 +40,38 @@ const EventsList * LinkEvent::GetLinkedEvents(const gd::Project & project) const
|
||||
else if ( project.HasLayoutNamed(GetTarget()) )
|
||||
events = &project.GetLayout(GetTarget()).GetEvents();
|
||||
|
||||
//If the link only includes an events group, search it inside the layout/external events
|
||||
if( includeConfig == INCLUDE_EVENTS_GROUP )
|
||||
{
|
||||
std::size_t i = 0;
|
||||
std::size_t eventsCount = events->GetEventsCount();
|
||||
for( ; i < eventsCount; ++i )
|
||||
{
|
||||
std::shared_ptr<const GroupEvent> groupEvent = std::dynamic_pointer_cast<const GroupEvent>(events->GetEventSmartPtr(i));
|
||||
if(groupEvent && groupEvent->GetName() == eventsGroupName)
|
||||
{
|
||||
//Get its sub-events
|
||||
events = &groupEvent->GetSubEvents();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(i >= eventsCount) //We didn't find the events group, return nullptr
|
||||
events = nullptr;
|
||||
}
|
||||
|
||||
return events;
|
||||
}
|
||||
|
||||
void LinkEvent::ReplaceLinkByLinkedEvents(gd::Project & project, EventsList & eventList, std::size_t indexOfTheEventInThisList)
|
||||
void LinkEvent::ReplaceLinkByLinkedEvents(const gd::Project & project, EventsList & eventList, std::size_t indexOfTheEventInThisList)
|
||||
{
|
||||
linkWasInvalid = false;
|
||||
//Finding what to link to.
|
||||
const EventsList * eventsToInclude = GetLinkedEvents(project);
|
||||
if ( eventsToInclude != NULL )
|
||||
{
|
||||
std::size_t firstEvent = IncludeAllEvents() ? 0 : GetIncludeStart();
|
||||
std::size_t lastEvent = IncludeAllEvents() ? eventsToInclude->size() - 1 : GetIncludeEnd();
|
||||
std::size_t firstEvent = includeConfig == INCLUDE_BY_INDEX ? GetIncludeStart() : 0;
|
||||
std::size_t lastEvent = includeConfig == INCLUDE_BY_INDEX ? GetIncludeEnd() : eventsToInclude->size() - 1;
|
||||
|
||||
//Check bounds
|
||||
if ( firstEvent >= eventsToInclude->size() )
|
||||
@@ -90,8 +112,6 @@ void LinkEvent::ReplaceLinkByLinkedEvents(gd::Project & project, EventsList & ev
|
||||
eventList.RemoveEvent(indexOfTheEventInThisList);
|
||||
return;
|
||||
}
|
||||
|
||||
linkWasInvalid = false;
|
||||
}
|
||||
|
||||
LinkEvent::~LinkEvent()
|
||||
@@ -100,10 +120,18 @@ LinkEvent::~LinkEvent()
|
||||
|
||||
void LinkEvent::SerializeTo(SerializerElement & element) const
|
||||
{
|
||||
element.AddChild("include")
|
||||
.SetAttribute("includeAll", IncludeAllEvents())
|
||||
.SetAttribute("start", (int)GetIncludeStart())
|
||||
.SetAttribute("end", (int)GetIncludeEnd());
|
||||
SerializerElement & includeElement = element.AddChild("include")
|
||||
.SetAttribute("includeConfig", static_cast<int>(GetIncludeConfig()));
|
||||
|
||||
if(GetIncludeConfig() == INCLUDE_EVENTS_GROUP)
|
||||
{
|
||||
includeElement.SetAttribute("eventsGroup", GetEventsGroupName());
|
||||
}
|
||||
else if(GetIncludeConfig() == INCLUDE_BY_INDEX)
|
||||
{
|
||||
includeElement.SetAttribute("start", static_cast<int>(GetIncludeStart()));
|
||||
includeElement.SetAttribute("end", static_cast<int>(GetIncludeEnd()));
|
||||
}
|
||||
|
||||
element.AddChild("target").SetValue(GetTarget());
|
||||
}
|
||||
@@ -111,17 +139,40 @@ void LinkEvent::SerializeTo(SerializerElement & element) const
|
||||
void LinkEvent::UnserializeFrom(gd::Project & project, const SerializerElement & element)
|
||||
{
|
||||
SerializerElement & includeElement = element.GetChild("include", 0, "Limites");
|
||||
SetIncludeStartAndEnd(includeElement.GetIntAttribute("start"),
|
||||
includeElement.GetIntAttribute("end"));
|
||||
SetIncludeAllEvents(includeElement.GetBoolAttribute("includeAll", true));
|
||||
|
||||
SetTarget(element.GetChild("target", 0, "Scene").GetValue().GetString());
|
||||
|
||||
if(includeElement.HasAttribute("includeAll"))
|
||||
{
|
||||
//Compatibility with GDevelop <= 4.0.92
|
||||
if(includeElement.GetBoolAttribute("includeAll", true))
|
||||
{
|
||||
SetIncludeAllEvents();
|
||||
}
|
||||
else
|
||||
{
|
||||
SetIncludeStartAndEnd(includeElement.GetIntAttribute("start"),
|
||||
includeElement.GetIntAttribute("end"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//GDevelop > 4.0.92
|
||||
IncludeConfig config = static_cast<IncludeConfig>(includeElement.GetIntAttribute("includeConfig", 0));
|
||||
if(config == INCLUDE_ALL)
|
||||
SetIncludeAllEvents();
|
||||
else if(config == INCLUDE_EVENTS_GROUP)
|
||||
SetIncludeEventsGroup(includeElement.GetStringAttribute("eventsGroup"));
|
||||
else if(config == INCLUDE_BY_INDEX)
|
||||
SetIncludeStartAndEnd(includeElement.GetIntAttribute("start"), includeElement.GetIntAttribute("end"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
gd::BaseEvent::EditEventReturnType LinkEvent::EditEvent(wxWindow* parent_, gd::Project & project, gd::Layout & scene_, gd::MainFrameWrapper & mainFrameWrapper_)
|
||||
{
|
||||
#if !defined(GD_NO_WX_GUI)
|
||||
EditLink dialog(parent_, *this, project);
|
||||
LinkEventEditor dialog(parent_, *this, project);
|
||||
if ( dialog.ShowModal() == 0 ) return Cancelled;
|
||||
#endif
|
||||
|
||||
@@ -152,11 +203,16 @@ void LinkEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsEd
|
||||
dc.SetFont(renderingHelper->GetNiceFont());
|
||||
dc.DrawText( _("Link to ")+GetTarget(), x+32, y + 3 );
|
||||
|
||||
if ( !IncludeAllEvents() )
|
||||
if ( GetIncludeConfig() == INCLUDE_BY_INDEX )
|
||||
{
|
||||
wxRect textRect = dc.GetTextExtent(_("Link to ")+GetTarget());
|
||||
dc.DrawText( _("Include only events ")+gd::String::From(GetIncludeStart()+1)+_(" to ")+gd::String::From(GetIncludeEnd()+1), x+textRect.GetWidth()+32+10, y + 5 );
|
||||
}
|
||||
else if ( GetIncludeConfig() == INCLUDE_EVENTS_GROUP )
|
||||
{
|
||||
wxRect textRect = dc.GetTextExtent(_("Link to ")+GetTarget());
|
||||
dc.DrawText( _("Include only the events group named \"")+gd::String::From(GetEventsGroupName())+_("\""), x+textRect.GetWidth()+32+10, y + 5 );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -18,9 +18,16 @@ namespace gd
|
||||
class GD_CORE_API LinkEvent : public gd::BaseEvent
|
||||
{
|
||||
public:
|
||||
LinkEvent() : BaseEvent(), includeAll(true), includeStart(gd::String::npos), includeEnd(gd::String::npos), linkWasInvalid(false) {};
|
||||
enum IncludeConfig
|
||||
{
|
||||
INCLUDE_ALL = 0,
|
||||
INCLUDE_EVENTS_GROUP = 1,
|
||||
INCLUDE_BY_INDEX = 2 // Deprecated
|
||||
};
|
||||
|
||||
LinkEvent() : BaseEvent(), includeConfig(INCLUDE_ALL), eventsGroupName(), includeStart(gd::String::npos), includeEnd(gd::String::npos), linkWasInvalid(false) {};
|
||||
virtual ~LinkEvent();
|
||||
virtual gd::LinkEvent * Clone() const { return new LinkEvent(*this);}
|
||||
virtual gd::LinkEvent * Clone() const { return new LinkEvent(*this); }
|
||||
|
||||
/**
|
||||
* Get the link target (i.e. the scene or external events the link refers to).
|
||||
@@ -33,19 +40,23 @@ public:
|
||||
void SetTarget(const gd::String & target_) { target = target_; };
|
||||
|
||||
/**
|
||||
* Return true if the link event must include all the events of the target.
|
||||
* Return the include config.
|
||||
*/
|
||||
bool IncludeAllEvents() const { return includeAll; };
|
||||
IncludeConfig GetIncludeConfig() const { return includeConfig; }
|
||||
|
||||
/**
|
||||
* Return true if the link event must include all the events of the target.
|
||||
*/
|
||||
void SetIncludeAllEvents(bool includeAllEvents) { includeAll = includeAllEvents; };
|
||||
void SetIncludeAllEvents() { includeConfig = INCLUDE_ALL; }
|
||||
|
||||
void SetIncludeEventsGroup(const gd::String& name) { includeConfig = INCLUDE_EVENTS_GROUP; eventsGroupName = name; }
|
||||
|
||||
/**
|
||||
* Set the number of the first and last event to be included ( Meaningful only if includeAll was set to false, see SetIncludeAllEvents )
|
||||
*/
|
||||
void SetIncludeStartAndEnd(std::size_t includeStart_, std::size_t includeEnd_) { includeStart = includeStart_; includeEnd = includeEnd_; };
|
||||
void SetIncludeStartAndEnd(std::size_t includeStart_, std::size_t includeEnd_) { includeConfig = INCLUDE_BY_INDEX; includeStart = includeStart_; includeEnd = includeEnd_; }
|
||||
|
||||
gd::String GetEventsGroupName() const { return eventsGroupName; }
|
||||
|
||||
/**
|
||||
* Get the number of the first event to be included. (Meaningful only if includeAll was set to false, see SetIncludeAllEvents)
|
||||
@@ -75,7 +86,7 @@ public:
|
||||
* When implementing a platform with a link event, you should call this function when preprocessing the events
|
||||
* (See gd::EventMetadata::codeGeneration).
|
||||
*/
|
||||
void ReplaceLinkByLinkedEvents(gd::Project & project, EventsList & eventList, std::size_t indexOfTheEventInThisList);
|
||||
void ReplaceLinkByLinkedEvents(const gd::Project & project, EventsList & eventList, std::size_t indexOfTheEventInThisList);
|
||||
|
||||
virtual bool IsExecutable() const { return true; };
|
||||
|
||||
@@ -96,9 +107,14 @@ public:
|
||||
|
||||
private:
|
||||
gd::String target; ///< The name of the external events (or scene) to be included
|
||||
bool includeAll; ///< If set to true, all the events of the target should be included
|
||||
std::size_t includeStart; ///< If includeAll is set to false, represents the number of the first event of the target to included.
|
||||
std::size_t includeEnd; ///< If includeAll is set to false, represents the number of the last event of the target to included.
|
||||
|
||||
IncludeConfig includeConfig; ///< Defines which events are included by this link
|
||||
|
||||
gd::String eventsGroupName; ///< If includeConfig is set to INCLUDE_EVENTS_GROUP, represents the name of the events group to be included.
|
||||
|
||||
std::size_t includeStart; ///< If includeConfig is set to INCLUDE_BY_INDEX, represents the number of the first event of the target to included.
|
||||
std::size_t includeEnd; ///< If includeConfig is set to INCLUDE_BY_INDEX, represents the number of the last event of the target to included.
|
||||
|
||||
bool linkWasInvalid; ///< Set to true by Preprocess if the links was invalid the last time is was processed. Used to display a warning in the events editor.
|
||||
};
|
||||
|
||||
|
@@ -79,16 +79,16 @@ vector < const gd::Expression* > RepeatEvent::GetAllExpressions() const
|
||||
void RepeatEvent::SerializeTo(SerializerElement & element) const
|
||||
{
|
||||
element.AddChild("repeatExpression").SetValue(repeatNumberExpression.GetPlainString());
|
||||
gd::EventsListSerialization::SaveConditions(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SaveActions(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeEventsTo(events, element.AddChild("events"));
|
||||
}
|
||||
|
||||
void RepeatEvent::UnserializeFrom(gd::Project & project, const SerializerElement & element)
|
||||
{
|
||||
repeatNumberExpression = gd::Expression(element.GetChild("repeatExpression", 0, "RepeatExpression").GetValue().GetString());
|
||||
gd::EventsListSerialization::OpenConditions(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::OpenActions(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeEventsFrom(project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
@@ -108,7 +108,10 @@ void RepeatEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::Events
|
||||
|
||||
//Repeat text
|
||||
dc.SetFont( renderingHelper->GetNiceFont().Bold() );
|
||||
dc.SetTextForeground(wxColour(0,0,0));
|
||||
if ( !IsDisabled() )
|
||||
dc.SetTextForeground( wxColour( 0, 0, 0 ) );
|
||||
else
|
||||
dc.SetTextForeground( wxColour( 160, 160, 160 ) );
|
||||
dc.DrawText( _("Repeat") + " " + repeatNumberExpression.GetPlainString() + " " + _("times :"), x + 4, y + 3 );
|
||||
|
||||
//Draw conditions rectangle
|
||||
|
@@ -62,15 +62,15 @@ vector < gd::InstructionsList* > StandardEvent::GetAllActionsVectors()
|
||||
|
||||
void StandardEvent::SerializeTo(SerializerElement & element) const
|
||||
{
|
||||
gd::EventsListSerialization::SaveConditions(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SaveActions(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeEventsTo(events, element.AddChild("events"));
|
||||
}
|
||||
|
||||
void StandardEvent::UnserializeFrom(gd::Project & project, const SerializerElement & element)
|
||||
{
|
||||
gd::EventsListSerialization::OpenConditions(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::OpenActions(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeEventsFrom(project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
|
@@ -62,9 +62,9 @@ vector < const gd::InstructionsList* > WhileEvent::GetAllActionsVectors() const
|
||||
void WhileEvent::SerializeTo(SerializerElement & element) const
|
||||
{
|
||||
element.SetAttribute("infiniteLoopWarning", infiniteLoopWarning);
|
||||
gd::EventsListSerialization::SaveConditions(whileConditions, element.AddChild("whileConditions"));
|
||||
gd::EventsListSerialization::SaveConditions(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SaveActions(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(whileConditions, element.AddChild("whileConditions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(conditions, element.AddChild("conditions"));
|
||||
gd::EventsListSerialization::SerializeInstructionsTo(actions, element.AddChild("actions"));
|
||||
gd::EventsListSerialization::SerializeEventsTo(events, element.AddChild("events"));
|
||||
}
|
||||
|
||||
@@ -72,9 +72,9 @@ void WhileEvent::UnserializeFrom(gd::Project & project, const SerializerElement
|
||||
{
|
||||
justCreatedByTheUser = false;
|
||||
infiniteLoopWarning = element.GetBoolAttribute("infiniteLoopWarning");
|
||||
gd::EventsListSerialization::OpenConditions(project, whileConditions, element.GetChild("whileConditions", 0, "WhileConditions"));
|
||||
gd::EventsListSerialization::OpenConditions(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::OpenActions(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, whileConditions, element.GetChild("whileConditions", 0, "WhileConditions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, conditions, element.GetChild("conditions", 0, "Conditions"));
|
||||
gd::EventsListSerialization::UnserializeInstructionsFrom(project, actions, element.GetChild("actions", 0, "Actions"));
|
||||
gd::EventsListSerialization::UnserializeEventsFrom(project, events, element.GetChild("events", 0, "Events"));
|
||||
}
|
||||
|
||||
@@ -96,7 +96,10 @@ void WhileEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsE
|
||||
|
||||
//While text
|
||||
dc.SetFont( renderingHelper->GetNiceFont().Bold() );
|
||||
dc.SetTextForeground(wxColour(0,0,0));
|
||||
if ( !IsDisabled() )
|
||||
dc.SetTextForeground( wxColour( 0, 0, 0 ) );
|
||||
else
|
||||
dc.SetTextForeground( wxColour( 160, 160, 160 ) );
|
||||
dc.DrawText( _("While :"), x+5, y+5 );
|
||||
|
||||
//Draw icon if infinite loop warning is deactivated.
|
||||
@@ -110,7 +113,10 @@ void WhileEvent::Render(wxDC & dc, int x, int y, unsigned int width, gd::EventsE
|
||||
renderingHelper->DrawConditionsList(whileConditions, dc, x+80+border, y+border, width-80-border*2, this, areas, selection, platform);
|
||||
|
||||
dc.SetFont( renderingHelper->GetNiceFont().Bold() );
|
||||
dc.SetTextForeground(wxColour(0,0,0));
|
||||
if ( !IsDisabled() )
|
||||
dc.SetTextForeground( wxColour( 0, 0, 0 ) );
|
||||
else
|
||||
dc.SetTextForeground( wxColour( 160, 160, 160 ) );
|
||||
dc.DrawText( _("Repeat :"), x+4, y+whileConditionsHeight+3);
|
||||
whileConditionsHeight += repeatHeight;
|
||||
|
||||
|
@@ -20,10 +20,8 @@ void EventsCodeGenerationContext::InheritsFrom(const EventsCodeGenerationContext
|
||||
|
||||
//Objects lists declared by parent became "already declared" in the child context.
|
||||
alreadyDeclaredObjectsLists = parent_.alreadyDeclaredObjectsLists;
|
||||
for ( std::set<gd::String>::iterator it = parent_.objectsListsToBeDeclared.begin() ; it != parent_.objectsListsToBeDeclared.end(); ++it )
|
||||
alreadyDeclaredObjectsLists.insert(*it);
|
||||
for ( std::set<gd::String>::iterator it = parent_.emptyObjectsListsToBeDeclared.begin() ; it != parent_.emptyObjectsListsToBeDeclared.end(); ++it )
|
||||
alreadyDeclaredObjectsLists.insert(*it);
|
||||
std::copy( parent_.objectsListsToBeDeclared.begin(), parent_.objectsListsToBeDeclared.end(), std::inserter( alreadyDeclaredObjectsLists, alreadyDeclaredObjectsLists.begin() ) );
|
||||
std::copy( parent_.emptyObjectsListsToBeDeclared.begin(), parent_.emptyObjectsListsToBeDeclared.end(), std::inserter( alreadyDeclaredObjectsLists, alreadyDeclaredObjectsLists.begin() ) );
|
||||
|
||||
depthOfLastUse = parent_.depthOfLastUse;
|
||||
customConditionDepth = parent_.customConditionDepth;
|
||||
@@ -35,6 +33,13 @@ void EventsCodeGenerationContext::InheritsFrom(const EventsCodeGenerationContext
|
||||
}
|
||||
}
|
||||
|
||||
void EventsCodeGenerationContext::Reuse(const EventsCodeGenerationContext & parent_)
|
||||
{
|
||||
InheritsFrom(parent_);
|
||||
if (parent_.CanReuse())
|
||||
contextDepth = parent_.GetContextDepth(); // Keep same context depth
|
||||
}
|
||||
|
||||
void EventsCodeGenerationContext::ObjectsListNeeded(const gd::String & objectName)
|
||||
{
|
||||
if ( emptyObjectsListsToBeDeclared.find(objectName) == emptyObjectsListsToBeDeclared.end() )
|
||||
@@ -67,4 +72,9 @@ unsigned int EventsCodeGenerationContext::GetLastDepthObjectListWasNeeded(const
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool EventsCodeGenerationContext::IsSameObjectsList(const gd::String & objectName, const EventsCodeGenerationContext & otherContext) const
|
||||
{
|
||||
return GetLastDepthObjectListWasNeeded(objectName) == otherContext.GetLastDepthObjectListWasNeeded(objectName);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -32,7 +32,13 @@ public:
|
||||
* Default constructor. You may want to call InheritsFrom just after.
|
||||
* \param maxDepthLevel Optional pointer to an unsigned integer that will be updated to contain the maximal scope depth reached.
|
||||
*/
|
||||
EventsCodeGenerationContext(unsigned int * maxDepthLevel_ = NULL) : contextDepth(0), customConditionDepth(0), maxDepthLevel(maxDepthLevel_), parent(NULL) {};
|
||||
EventsCodeGenerationContext(unsigned int * maxDepthLevel_ = nullptr) :
|
||||
contextDepth(0),
|
||||
customConditionDepth(0),
|
||||
maxDepthLevel(maxDepthLevel_),
|
||||
parent(NULL),
|
||||
reuseExplicitlyForbidden(false)
|
||||
{};
|
||||
virtual ~EventsCodeGenerationContext() {};
|
||||
|
||||
/**
|
||||
@@ -41,6 +47,28 @@ public:
|
||||
*/
|
||||
void InheritsFrom(const EventsCodeGenerationContext & parent);
|
||||
|
||||
/**
|
||||
* \brief As InheritsFrom, mark the context as being the child of another one, but enabling
|
||||
* the child context to use the same object lists.
|
||||
*
|
||||
* Used for example for optimizing the last event of a list.
|
||||
*/
|
||||
void Reuse(const EventsCodeGenerationContext & parent);
|
||||
|
||||
/**
|
||||
* \brief Forbid any optimization that would reuse and modify the object list from this context
|
||||
* in children context.
|
||||
*
|
||||
* Used in while/for each/repeat or any event that have a loop and must ensure that
|
||||
* the list of objects stay clean.
|
||||
*/
|
||||
void ForbidReuse() { reuseExplicitlyForbidden = true; }
|
||||
|
||||
/**
|
||||
* \brief Return false if the object lists of the context can not be reused in a child context.
|
||||
*/
|
||||
bool CanReuse() const { return !reuseExplicitlyForbidden && parent != nullptr; }
|
||||
|
||||
/**
|
||||
* \brief Returns the depth of the inheritance of the context.
|
||||
*
|
||||
@@ -92,7 +120,7 @@ public:
|
||||
/**
|
||||
* \brief Consider that \a objectName is now declared in the context.
|
||||
*/
|
||||
void SetObjectDeclared(const gd::String & objectName ) { alreadyDeclaredObjectsLists.insert(objectName); }
|
||||
void SetObjectDeclared(const gd::String & objectName) { alreadyDeclaredObjectsLists.insert(objectName); }
|
||||
|
||||
/**
|
||||
* Return all the objects lists which will be declared by the current context
|
||||
@@ -122,6 +150,13 @@ public:
|
||||
*/
|
||||
unsigned int GetLastDepthObjectListWasNeeded(const gd::String & objectName) const;
|
||||
|
||||
/**
|
||||
* \brief Check if twos context have the same list for an object.
|
||||
*
|
||||
* This can be the case when a context is reusing the lists of another (see gd::EventsCodeGenerationContext::Reuse).
|
||||
*/
|
||||
bool IsSameObjectsList(const gd::String & objectName, const EventsCodeGenerationContext & otherContext) const;
|
||||
|
||||
/**
|
||||
* \brief Called when a custom condition code is generated.
|
||||
*/
|
||||
@@ -150,6 +185,7 @@ private:
|
||||
unsigned int customConditionDepth; ///< The depth of the conditions being generated.
|
||||
unsigned int * maxDepthLevel; ///< A pointer to a unsigned int updated with the maximum depth reached.
|
||||
const EventsCodeGenerationContext * parent; ///< The parent of the current context. Can be NULL.
|
||||
bool reuseExplicitlyForbidden; ///< If set to true, forbid children context to reuse this one without inheriting.
|
||||
};
|
||||
|
||||
}
|
||||
|
@@ -179,13 +179,56 @@ gd::String EventsCodeGenerator::GenerateCompoundOperatorCall(const gd::Instructi
|
||||
return callStartString+"("+argumentsStr+") "+operatorStr+" ("+rhs+")";
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateMutatorCall(const gd::InstructionMetadata & instrInfos, const vector<gd::String> & arguments, const gd::String & callStartString, std::size_t startFromArgument)
|
||||
{
|
||||
std::size_t operatorIndex = instrInfos.parameters.size();
|
||||
for (std::size_t i = startFromArgument;i<instrInfos.parameters.size();++i)
|
||||
{
|
||||
if ( instrInfos.parameters[i].type == "operator" )
|
||||
operatorIndex = i;
|
||||
}
|
||||
|
||||
//Ensure that there is at least one parameter after the operator
|
||||
if ( operatorIndex+1 >= instrInfos.parameters.size() )
|
||||
{
|
||||
ReportError();
|
||||
return "";
|
||||
}
|
||||
|
||||
gd::String operatorStr = arguments[operatorIndex];
|
||||
if ( operatorStr.size() > 2 ) operatorStr = operatorStr.substr(1, operatorStr.length()-1-1); //Operator contains quote which must be removed.
|
||||
|
||||
auto mutators = instrInfos.codeExtraInformation.optionalMutators;
|
||||
auto mutator = mutators.find(operatorStr);
|
||||
if ( mutator == mutators.end() )
|
||||
{
|
||||
ReportError();
|
||||
return "";
|
||||
}
|
||||
|
||||
gd::String rhs = arguments[operatorIndex+1];
|
||||
|
||||
//Generate arguments for calling the mutator
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = startFromArgument;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != operatorIndex && i != operatorIndex+1) //Generate classic arguments
|
||||
{
|
||||
if ( !argumentsStr.empty() ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
}
|
||||
|
||||
return callStartString + "(" + argumentsStr + ")." + mutator->second + "(" + rhs + ")";
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateConditionCode(gd::Instruction & condition, gd::String returnBoolean, EventsCodeGenerationContext & context)
|
||||
{
|
||||
gd::String conditionCode;
|
||||
|
||||
gd::InstructionMetadata instrInfos = MetadataProvider::GetConditionMetadata(platform, condition.GetType());
|
||||
|
||||
AddIncludeFile(instrInfos.codeExtraInformation.optionalIncludeFile);
|
||||
AddIncludeFiles(instrInfos.codeExtraInformation.GetIncludeFiles());
|
||||
maxConditionsListsSize = std::max(maxConditionsListsSize, condition.GetSubInstructions().size());
|
||||
|
||||
if ( instrInfos.codeExtraInformation.HasCustomCodeGenerator())
|
||||
@@ -215,21 +258,15 @@ gd::String EventsCodeGenerator::GenerateConditionCode(gd::Instruction & conditio
|
||||
gd::String objectInParameter = condition.GetParameter(pNb).GetPlainString();
|
||||
|
||||
if ( !scene.HasObjectNamed(objectInParameter) && !project.HasObjectNamed(objectInParameter)
|
||||
&& find_if(scene.GetObjectGroups().begin(), scene.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == scene.GetObjectGroups().end()
|
||||
&& find_if(project.GetObjectGroups().begin(), project.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == project.GetObjectGroups().end() )
|
||||
&& !scene.GetObjectGroups().Has(objectInParameter)
|
||||
&& !project.GetObjectGroups().Has(objectInParameter))
|
||||
{
|
||||
cout << "Bad object (" << objectInParameter << ") in a parameter of a condition " << condition.GetType() << endl;
|
||||
condition.SetParameter(pNb, gd::Expression(""));
|
||||
condition.SetType("");
|
||||
}
|
||||
else if ( !instrInfos.parameters[pNb].supplementaryInformation.empty()
|
||||
&& gd::GetTypeOfObject(project, scene, objectInParameter) != instrInfos.parameters[pNb].supplementaryInformation )
|
||||
{
|
||||
cout << "Bad object type in a parameter of a condition " << condition.GetType() << endl;
|
||||
cout << "Condition wanted " << instrInfos.parameters[pNb].supplementaryInformation << endl;
|
||||
cout << "Condition wanted " << instrInfos.parameters[pNb].supplementaryInformation << " of type " << instrInfos.parameters[pNb].supplementaryInformation << endl;
|
||||
cout << "Condition has received " << objectInParameter << " of type " << gd::GetTypeOfObject(project, scene, objectInParameter) << endl;
|
||||
|
||||
condition.SetParameter(pNb, gd::Expression(""));
|
||||
condition.SetType("");
|
||||
}
|
||||
@@ -339,7 +376,7 @@ gd::String EventsCodeGenerator::GenerateActionCode(gd::Instruction & action, Eve
|
||||
|
||||
gd::InstructionMetadata instrInfos = MetadataProvider::GetActionMetadata(platform, action.GetType());
|
||||
|
||||
AddIncludeFile(instrInfos.codeExtraInformation.optionalIncludeFile);
|
||||
AddIncludeFiles(instrInfos.codeExtraInformation.GetIncludeFiles());
|
||||
|
||||
if ( instrInfos.codeExtraInformation.HasCustomCodeGenerator() )
|
||||
{
|
||||
@@ -361,20 +398,15 @@ gd::String EventsCodeGenerator::GenerateActionCode(gd::Instruction & action, Eve
|
||||
{
|
||||
gd::String objectInParameter = action.GetParameter(pNb).GetPlainString();
|
||||
if ( !scene.HasObjectNamed(objectInParameter) && !project.HasObjectNamed(objectInParameter)
|
||||
&& find_if(scene.GetObjectGroups().begin(), scene.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == scene.GetObjectGroups().end()
|
||||
&& find_if(project.GetObjectGroups().begin(), project.GetObjectGroups().end(), bind2nd(gd::GroupHasTheSameName(), objectInParameter) ) == project.GetObjectGroups().end() )
|
||||
&& !scene.GetObjectGroups().Has(objectInParameter)
|
||||
&& !project.GetObjectGroups().Has(objectInParameter))
|
||||
{
|
||||
cout << "Bad object (" << objectInParameter << ") in a parameter of an action " << action.GetType() << endl;
|
||||
action.SetParameter(pNb, gd::Expression(""));
|
||||
action.SetType("");
|
||||
}
|
||||
else if ( !instrInfos.parameters[pNb].supplementaryInformation.empty()
|
||||
&& gd::GetTypeOfObject(project, scene, objectInParameter) != instrInfos.parameters[pNb].supplementaryInformation )
|
||||
{
|
||||
cout << "Bad object type in parameter "+gd::String::From(pNb)+" of an action " << action.GetType() << endl;
|
||||
cout << "Action wanted " << instrInfos.parameters[pNb].supplementaryInformation << " of type " << instrInfos.parameters[pNb].supplementaryInformation << endl;
|
||||
cout << "Action has received " << objectInParameter << " of type " << gd::GetTypeOfObject(project, scene, objectInParameter) << endl;
|
||||
|
||||
action.SetParameter(pNb, gd::Expression(""));
|
||||
action.SetType("");
|
||||
}
|
||||
@@ -588,38 +620,58 @@ vector<gd::String> EventsCodeGenerator::GenerateParametersCodes(vector < gd::Ex
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateObjectsDeclarationCode(EventsCodeGenerationContext & context)
|
||||
{
|
||||
auto declareObjectList = [this](gd::String object, gd::EventsCodeGenerationContext & context) {
|
||||
gd::String objectListName = GetObjectListName(object, context);
|
||||
if (!context.GetParentContext())
|
||||
{
|
||||
std::cout << "ERROR: During code generation, a context tried to use an already declared object list without having a parent" << std::endl;
|
||||
return "/* Could not declare " + objectListName + " */";
|
||||
}
|
||||
|
||||
//*Optimization*: Avoid a copy of the object list if we're using
|
||||
//the same list as the one from the parent context.
|
||||
if (context.IsSameObjectsList(object, *context.GetParentContext()))
|
||||
return "/* Reuse " + objectListName + " */";
|
||||
|
||||
gd::String declarationCode;
|
||||
|
||||
//Use a temporary variable as the names of lists are the same between contexts.
|
||||
gd::String copiedListName = GetObjectListName(object, *context.GetParentContext());
|
||||
declarationCode += "std::vector<RuntimeObject*> & " + objectListName + "T = " + copiedListName + ";\n";
|
||||
declarationCode += "std::vector<RuntimeObject*> " + objectListName + " = " + objectListName + "T;\n";
|
||||
return declarationCode;
|
||||
};
|
||||
|
||||
gd::String declarationsCode;
|
||||
for ( set<gd::String>::iterator it = context.objectsListsToBeDeclared.begin() ; it != context.objectsListsToBeDeclared.end(); ++it )
|
||||
for (auto object : context.GetObjectsListsToBeDeclared())
|
||||
{
|
||||
if ( context.alreadyDeclaredObjectsLists.find(*it) == context.alreadyDeclaredObjectsLists.end() )
|
||||
gd::String objectListDeclaration = "";
|
||||
if ( !context.ObjectAlreadyDeclared(object) )
|
||||
{
|
||||
declarationsCode += "std::vector<RuntimeObject*> "+GetObjectListName(*it, context)
|
||||
+" = runtimeContext->GetObjectsRawPointers(\""+ConvertToString(*it)+"\");\n";
|
||||
context.alreadyDeclaredObjectsLists.insert(*it);
|
||||
objectListDeclaration = "std::vector<RuntimeObject*> "+GetObjectListName(object, context)
|
||||
+" = runtimeContext->GetObjectsRawPointers(\""+ConvertToString(object)+"\");\n";
|
||||
context.SetObjectDeclared(object);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Could normally be done in one line, but clang sometimes miscompile it.
|
||||
declarationsCode += "std::vector<RuntimeObject*> & "+GetObjectListName(*it, context)+"T = "+GetObjectListName(*it, context)+";\n";
|
||||
declarationsCode += "std::vector<RuntimeObject*> "+GetObjectListName(*it, context)+" = "+GetObjectListName(*it, context)+"T;\n";
|
||||
}
|
||||
objectListDeclaration = declareObjectList(object, context);
|
||||
|
||||
declarationsCode += objectListDeclaration + "\n";
|
||||
}
|
||||
for ( set<gd::String>::iterator it = context.emptyObjectsListsToBeDeclared.begin() ; it != context.emptyObjectsListsToBeDeclared.end(); ++it )
|
||||
for (auto object : context.GetObjectsListsToBeDeclaredEmpty())
|
||||
{
|
||||
if ( context.alreadyDeclaredObjectsLists.find(*it) == context.alreadyDeclaredObjectsLists.end() )
|
||||
gd::String objectListDeclaration = "";
|
||||
if ( !context.ObjectAlreadyDeclared(object) )
|
||||
{
|
||||
declarationsCode += "std::vector<RuntimeObject*> "+GetObjectListName(*it, context)+";\n";
|
||||
context.alreadyDeclaredObjectsLists.insert(*it);
|
||||
objectListDeclaration = "std::vector<RuntimeObject*> "+GetObjectListName(object, context)+";\n";
|
||||
context.SetObjectDeclared(object);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Could normally be done in one line, but clang sometimes miscompile it.
|
||||
declarationsCode += "std::vector<RuntimeObject*> & "+GetObjectListName(*it, context)+"T = "+GetObjectListName(*it, context)+";\n";
|
||||
declarationsCode += "std::vector<RuntimeObject*> "+GetObjectListName(*it, context)+" = "+GetObjectListName(*it, context)+"T;\n";
|
||||
}
|
||||
objectListDeclaration = declareObjectList(object, context);
|
||||
|
||||
declarationsCode += objectListDeclaration + "\n";
|
||||
}
|
||||
|
||||
return declarationsCode ;
|
||||
return declarationsCode;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -628,12 +680,20 @@ gd::String EventsCodeGenerator::GenerateObjectsDeclarationCode(EventsCodeGenerat
|
||||
gd::String EventsCodeGenerator::GenerateEventsListCode(gd::EventsList & events, const EventsCodeGenerationContext & parentContext)
|
||||
{
|
||||
gd::String output;
|
||||
|
||||
for ( std::size_t eId = 0; eId < events.size();++eId )
|
||||
{
|
||||
//Each event has its own context : Objects picked in an event are totally different than the one picked in another.
|
||||
gd::EventsCodeGenerationContext context;
|
||||
context.InheritsFrom(parentContext); //Events in the same "level" share the same context as their parent.
|
||||
gd::EventsCodeGenerationContext newContext;
|
||||
newContext.InheritsFrom(parentContext); //Events in the same "level" share the same context as their parent.
|
||||
|
||||
//*Optimization*: when the event is the last of a list, we can use the
|
||||
//same lists of objects as the parent (as they will be discarded just after).
|
||||
//This avoids a copy of the lists of objects which is an expensive operation.
|
||||
bool reuseParentContext = parentContext.CanReuse() && eId == events.size()-1;
|
||||
gd::EventsCodeGenerationContext reusedContext;
|
||||
reusedContext.Reuse(parentContext);
|
||||
|
||||
auto & context = reuseParentContext ? reusedContext : newContext;
|
||||
|
||||
gd::String eventCoreCode = events[eId].GenerateEventCode(*this, context);
|
||||
gd::String scopeBegin = GenerateScopeBegin(context);
|
||||
@@ -682,17 +742,10 @@ gd::String EventsCodeGenerator::ConvertToStringExplicit(gd::String plainString)
|
||||
std::vector<gd::String> EventsCodeGenerator::ExpandObjectsName(const gd::String & objectName, const EventsCodeGenerationContext & context) const
|
||||
{
|
||||
std::vector<gd::String> realObjects;
|
||||
vector< gd::ObjectGroup >::const_iterator globalGroup = find_if(project.GetObjectGroups().begin(),
|
||||
project.GetObjectGroups().end(),
|
||||
bind2nd(gd::GroupHasTheSameName(), objectName));
|
||||
vector< gd::ObjectGroup >::const_iterator sceneGroup = find_if(scene.GetObjectGroups().begin(),
|
||||
scene.GetObjectGroups().end(),
|
||||
bind2nd(gd::GroupHasTheSameName(), objectName));
|
||||
|
||||
if ( globalGroup != project.GetObjectGroups().end() )
|
||||
realObjects = (*globalGroup).GetAllObjectsNames();
|
||||
else if ( sceneGroup != scene.GetObjectGroups().end() )
|
||||
realObjects = (*sceneGroup).GetAllObjectsNames();
|
||||
if (project.GetObjectGroups().Has(objectName))
|
||||
realObjects = project.GetObjectGroups().Get(objectName).GetAllObjectsNames();
|
||||
else if (scene.GetObjectGroups().Has(objectName))
|
||||
realObjects = scene.GetObjectGroups().Get(objectName).GetAllObjectsNames();
|
||||
else
|
||||
realObjects.push_back(objectName);
|
||||
|
||||
@@ -783,14 +836,7 @@ gd::String EventsCodeGenerator::GenerateFreeCondition(const std::vector<gd::Stri
|
||||
}
|
||||
else
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = 0;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != 0 ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
|
||||
predicat = instrInfos.codeExtraInformation.functionCallName+"("+argumentsStr+")";
|
||||
predicat = instrInfos.codeExtraInformation.functionCallName+"("+GenerateArgumentsList(arguments, 0)+")";
|
||||
}
|
||||
|
||||
//Add logical not if needed
|
||||
@@ -829,14 +875,7 @@ gd::String EventsCodeGenerator::GenerateObjectCondition(const gd::String & objec
|
||||
}
|
||||
else
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = 1;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != 1 ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
|
||||
predicat = objectFunctionCallNamePart+"("+argumentsStr+")";
|
||||
predicat = objectFunctionCallNamePart+"("+GenerateArgumentsList(arguments, 1)+")";
|
||||
}
|
||||
if ( conditionInverted ) predicat = GenerateNegatedPredicat(predicat);
|
||||
|
||||
@@ -860,14 +899,7 @@ gd::String EventsCodeGenerator::GenerateBehaviorCondition(const gd::String & obj
|
||||
}
|
||||
else
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = 2;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != 2 ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
|
||||
predicat = "("+argumentsStr+")";
|
||||
predicat = "("+GenerateArgumentsList(arguments, 2)+")";
|
||||
}
|
||||
if ( conditionInverted ) predicat = GenerateNegatedPredicat(predicat);
|
||||
|
||||
@@ -883,19 +915,14 @@ gd::String EventsCodeGenerator::GenerateFreeAction(const std::vector<gd::String>
|
||||
{
|
||||
if ( instrInfos.codeExtraInformation.accessType == gd::InstructionMetadata::ExtraInformation::MutatorAndOrAccessor )
|
||||
call = GenerateOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, instrInfos.codeExtraInformation.optionalAssociatedInstruction);
|
||||
else if ( instrInfos.codeExtraInformation.accessType == gd::InstructionMetadata::ExtraInformation::Mutators )
|
||||
call = GenerateMutatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName);
|
||||
else
|
||||
call = GenerateCompoundOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName);
|
||||
}
|
||||
else
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = 0;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != 0 ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
|
||||
call = instrInfos.codeExtraInformation.functionCallName+"("+argumentsStr+")";
|
||||
call = instrInfos.codeExtraInformation.functionCallName+"("+GenerateArgumentsList(arguments)+")";
|
||||
}
|
||||
return call+";\n";
|
||||
}
|
||||
@@ -911,20 +938,15 @@ gd::String EventsCodeGenerator::GenerateObjectAction(const gd::String & objectNa
|
||||
if ( (instrInfos.codeExtraInformation.type == "number" || instrInfos.codeExtraInformation.type == "string") )
|
||||
{
|
||||
if ( instrInfos.codeExtraInformation.accessType == gd::InstructionMetadata::ExtraInformation::MutatorAndOrAccessor )
|
||||
call = GenerateOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, instrInfos.codeExtraInformation.optionalAssociatedInstruction,2);
|
||||
call = GenerateOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, instrInfos.codeExtraInformation.optionalAssociatedInstruction, 2);
|
||||
else
|
||||
call = GenerateCompoundOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName,2);
|
||||
call = GenerateCompoundOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, 2);
|
||||
|
||||
return "For each picked object \""+objectName+"\", call "+call+".\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = 2;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != 2 ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
gd::String argumentsStr = GenerateArgumentsList(arguments, 1);
|
||||
|
||||
call = instrInfos.codeExtraInformation.functionCallName+"("+argumentsStr+")";
|
||||
return "For each picked object \""+objectName+"\", call "+call+"("+argumentsStr+").\n";
|
||||
@@ -944,20 +966,15 @@ gd::String EventsCodeGenerator::GenerateBehaviorAction(const gd::String & object
|
||||
if ( (instrInfos.codeExtraInformation.type == "number" || instrInfos.codeExtraInformation.type == "string") )
|
||||
{
|
||||
if ( instrInfos.codeExtraInformation.accessType == gd::InstructionMetadata::ExtraInformation::MutatorAndOrAccessor )
|
||||
call = GenerateOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, instrInfos.codeExtraInformation.optionalAssociatedInstruction,2);
|
||||
call = GenerateOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, instrInfos.codeExtraInformation.optionalAssociatedInstruction, 2);
|
||||
else
|
||||
call = GenerateCompoundOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName,2);
|
||||
call = GenerateCompoundOperatorCall(instrInfos, arguments, instrInfos.codeExtraInformation.functionCallName, 2);
|
||||
return "For each picked object \""+objectName+"\", call "+call
|
||||
+" for behavior \""+behaviorName+"\".\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = 2;i<arguments.size();++i)
|
||||
{
|
||||
if ( i != 2 ) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
gd::String argumentsStr = GenerateArgumentsList(arguments, 2);
|
||||
|
||||
call = instrInfos.codeExtraInformation.functionCallName+"("+argumentsStr+")";
|
||||
return "For each picked object \""+objectName+"\", call "+call+"("+argumentsStr+")"
|
||||
@@ -971,6 +988,18 @@ gd::String EventsCodeGenerator::GetObjectListName(const gd::String & name, const
|
||||
return ManObjListName(name);
|
||||
}
|
||||
|
||||
gd::String EventsCodeGenerator::GenerateArgumentsList(const std::vector<gd::String> & arguments, size_t startFrom)
|
||||
{
|
||||
gd::String argumentsStr;
|
||||
for (std::size_t i = startFrom;i<arguments.size();++i)
|
||||
{
|
||||
if (!argumentsStr.empty()) argumentsStr += ", ";
|
||||
argumentsStr += arguments[i];
|
||||
}
|
||||
|
||||
return argumentsStr;
|
||||
}
|
||||
|
||||
EventsCodeGenerator::EventsCodeGenerator(gd::Project & project_, const gd::Layout & layout, const gd::Platform & platform_) :
|
||||
project(project_),
|
||||
scene(layout),
|
||||
|
@@ -46,7 +46,7 @@ public:
|
||||
virtual ~EventsCodeGenerator() {};
|
||||
|
||||
/**
|
||||
* \brief Preprocess an events list ( Replacing for example links with the linked event ).
|
||||
* \brief Preprocess an events list (replacing for example links with the linked events).
|
||||
*
|
||||
* This should be called before any code generation.
|
||||
*/
|
||||
@@ -57,9 +57,9 @@ public:
|
||||
*
|
||||
* \param events std::vector of events
|
||||
* \param context Context used for generation
|
||||
* \return C++ code
|
||||
* \return Code
|
||||
*/
|
||||
gd::String GenerateEventsListCode(gd::EventsList & events, const EventsCodeGenerationContext & context);
|
||||
virtual gd::String GenerateEventsListCode(gd::EventsList & events, const EventsCodeGenerationContext & context);
|
||||
|
||||
/**
|
||||
* \brief Generate code for executing a condition list
|
||||
@@ -443,6 +443,7 @@ protected:
|
||||
gd::String GenerateRelationalOperatorCall(const gd::InstructionMetadata & instrInfos, const std::vector<gd::String> & arguments, const gd::String & callStartString, std::size_t startFromArgument = 0);
|
||||
gd::String GenerateOperatorCall(const gd::InstructionMetadata & instrInfos, const std::vector<gd::String> & arguments, const gd::String & callStartString, const gd::String & getterStartString, std::size_t startFromArgument = 0);
|
||||
gd::String GenerateCompoundOperatorCall(const gd::InstructionMetadata & instrInfos, const std::vector<gd::String> & arguments, const gd::String & callStartString, std::size_t startFromArgument = 0);
|
||||
gd::String GenerateMutatorCall(const gd::InstructionMetadata & instrInfos, const std::vector<gd::String> & arguments, const gd::String & callStartString, std::size_t startFromArgument = 0);
|
||||
|
||||
/**
|
||||
* \brief Must return an expression whose value is true.
|
||||
@@ -454,6 +455,13 @@ protected:
|
||||
*/
|
||||
gd::String GenerateFalse() const { return "false"; };
|
||||
|
||||
/**
|
||||
* \brief Generate the list of comma-separated arguments to be used to call a function.
|
||||
* \param arguments The code already generated for the arguments
|
||||
* \param startFrom Index of the first argument, the previous will be ignored.
|
||||
*/
|
||||
virtual gd::String GenerateArgumentsList(const std::vector<gd::String> & arguments, size_t startFrom = 0);
|
||||
|
||||
gd::Project & project; ///< The project being used.
|
||||
const gd::Layout & scene; ///< The scene being generated.
|
||||
const gd::Platform & platform; ///< The platform being used.
|
||||
|
@@ -40,7 +40,7 @@ void CallbacksForGeneratingExpressionCode::OnConstantToken(gd::String text)
|
||||
|
||||
void CallbacksForGeneratingExpressionCode::OnStaticFunction(gd::String functionName, const std::vector<gd::Expression> & parameters, const gd::ExpressionMetadata & expressionInfo)
|
||||
{
|
||||
codeGenerator.AddIncludeFile(expressionInfo.codeExtraInformation.optionalIncludeFile);
|
||||
codeGenerator.AddIncludeFiles(expressionInfo.codeExtraInformation.GetIncludeFiles());
|
||||
|
||||
//Launch custom code generator if needed
|
||||
if (expressionInfo.codeExtraInformation.HasCustomCodeGenerator())
|
||||
@@ -76,7 +76,7 @@ void CallbacksForGeneratingExpressionCode::OnObjectFunction(gd::String functionN
|
||||
const gd::Project & project = codeGenerator.GetProject();
|
||||
const gd::Layout & scene = codeGenerator.GetLayout();
|
||||
|
||||
codeGenerator.AddIncludeFile(expressionInfo.codeExtraInformation.optionalIncludeFile);
|
||||
codeGenerator.AddIncludeFiles(expressionInfo.codeExtraInformation.GetIncludeFiles());
|
||||
if ( parameters.empty() ) return;
|
||||
|
||||
//Launch custom code generator if needed
|
||||
@@ -119,7 +119,7 @@ void CallbacksForGeneratingExpressionCode::OnObjectBehaviorFunction(gd::String f
|
||||
const gd::Project & project = codeGenerator.GetProject();
|
||||
const gd::Layout & scene = codeGenerator.GetLayout();
|
||||
|
||||
codeGenerator.AddIncludeFile(expressionInfo.codeExtraInformation.optionalIncludeFile);
|
||||
codeGenerator.AddIncludeFiles(expressionInfo.codeExtraInformation.GetIncludeFiles());
|
||||
if ( parameters.size() < 2 ) return;
|
||||
|
||||
//Launch custom code generator if needed
|
||||
|
@@ -14,6 +14,8 @@ namespace gd
|
||||
{
|
||||
|
||||
EventsList BaseEvent::badSubEvents;
|
||||
std::vector< gd::String > BaseEvent::emptyDependencies;
|
||||
gd::String BaseEvent::emptySourceFile;
|
||||
|
||||
BaseEvent::BaseEvent() :
|
||||
eventHeightNeedUpdate(true),
|
||||
|
@@ -111,6 +111,19 @@ public:
|
||||
virtual std::vector < gd::Expression* > GetAllExpressions() { std::vector < gd::Expression* > noExpr; return noExpr;};
|
||||
virtual std::vector < const gd::Expression* > GetAllExpressions() const { std::vector < const gd::Expression* > noExpr; return noExpr;};
|
||||
|
||||
/**
|
||||
* \brief Returns the dependencies on source files of the project.
|
||||
* \note Default implementation returns an empty list of dependencies. This is fine for most events that
|
||||
* are not related to adding custom user source code.
|
||||
*/
|
||||
virtual const std::vector<gd::String> & GetSourceFileDependencies() const { return emptyDependencies; };
|
||||
|
||||
/**
|
||||
* \brief Returns the name of the source file associated with the event
|
||||
* \note Default implementation returns an empty string. This is fine for most events that
|
||||
* are not related to adding custom user source code.
|
||||
*/
|
||||
virtual const gd::String & GetAssociatedGDManagedSourceFile(gd::Project & project) const { return emptySourceFile; };
|
||||
///@}
|
||||
|
||||
/** \name Code generation
|
||||
@@ -263,11 +276,13 @@ protected:
|
||||
mutable unsigned int renderedHeight;
|
||||
|
||||
private:
|
||||
bool folded; ///< True if the subevents should be hidden in the events editor
|
||||
bool folded; ///< True if the subevents should be hidden in the events editor
|
||||
bool disabled; ///<True if the event is disabled and must not be executed
|
||||
gd::String type; ///<Type of the event. Must be assigned at the creation. Used for saving the event for instance.
|
||||
|
||||
static gd::EventsList badSubEvents;
|
||||
static std::vector< gd::String > emptyDependencies;
|
||||
static gd::String emptySourceFile;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -58,7 +58,7 @@ gd::BaseEvent & EventsList::InsertNewEvent(gd::Project & project, const gd::Stri
|
||||
if ( event == std::shared_ptr<gd::BaseEvent>())
|
||||
{
|
||||
std::cout << "Unknown event of type " << eventType;
|
||||
event = std::shared_ptr<gd::BaseEvent>(new EmptyEvent);
|
||||
event = std::make_shared<EmptyEvent>();
|
||||
}
|
||||
|
||||
InsertEvent(event, position);
|
||||
|
@@ -74,6 +74,11 @@ public:
|
||||
*/
|
||||
std::shared_ptr<BaseEvent> GetEventSmartPtr(size_t index) { return events[index]; };
|
||||
|
||||
/**
|
||||
* \brief Return the smart pointer to the event at position \a index in the events list.
|
||||
*/
|
||||
std::shared_ptr<const BaseEvent> GetEventSmartPtr(size_t index) const { return events[index]; };
|
||||
|
||||
/**
|
||||
* \brief Return a reference to the event at position \a index in the events list.
|
||||
*/
|
||||
@@ -145,13 +150,13 @@ public:
|
||||
*/
|
||||
///@{
|
||||
/**
|
||||
* \brief Save the objects to xml
|
||||
* \brief Serialize the events to the specified element
|
||||
* \see EventsListSerialization
|
||||
*/
|
||||
void SerializeTo(SerializerElement & element) const;
|
||||
|
||||
/**
|
||||
* \brief Load the objects from xml
|
||||
* \brief Load the events from the specified element
|
||||
* \see EventsListSerialization
|
||||
*/
|
||||
void UnserializeFrom(gd::Project & project, const SerializerElement & element);
|
||||
|
@@ -8,17 +8,12 @@
|
||||
#include "GDCore/String.h"
|
||||
#include <vector>
|
||||
#include "GDCore/Events/Expression.h"
|
||||
#include "GDCore/Tools/SPtrList.h"
|
||||
#include "GDCore/Events/InstructionsList.h"
|
||||
#include "GDCore/String.h"
|
||||
|
||||
namespace gd
|
||||
{
|
||||
|
||||
class Instruction;
|
||||
|
||||
template<typename T> class SPtrList;
|
||||
typedef SPtrList<Instruction> InstructionsList;
|
||||
|
||||
/**
|
||||
* \brief An instruction is a member of an event: It can be a condition or an action.
|
||||
*
|
||||
|
42
Core/GDCore/Events/InstructionsList.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* GDevelop Core
|
||||
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.
|
||||
* This project is released under the MIT License.
|
||||
*/
|
||||
|
||||
#include "InstructionsList.h"
|
||||
#include "GDCore/Project/Project.h"
|
||||
#include "GDCore/Events/Instruction.h"
|
||||
#include "Serialization.h"
|
||||
|
||||
namespace gd
|
||||
{
|
||||
|
||||
void InstructionsList::InsertInstructions(const InstructionsList & list, size_t begin, size_t end, size_t position)
|
||||
{
|
||||
if (begin >= list.size()) return;
|
||||
if (end < begin) return;
|
||||
if (end >= list.size()) end = list.size()-1;
|
||||
|
||||
for (std::size_t insertPos = 0;insertPos <= (end-begin);insertPos++)
|
||||
{
|
||||
const Instruction & instruction = *list.elements[begin+insertPos];
|
||||
std::shared_ptr<Instruction> copiedInstruction = std::make_shared<Instruction>(instruction);
|
||||
if (position != (size_t)-1 && position+insertPos < elements.size())
|
||||
elements.insert(elements.begin()+position+insertPos, copiedInstruction);
|
||||
else
|
||||
elements.push_back(copiedInstruction);
|
||||
}
|
||||
}
|
||||
|
||||
void InstructionsList::SerializeTo(SerializerElement & element) const
|
||||
{
|
||||
EventsListSerialization::SerializeInstructionsTo(*this, element);
|
||||
}
|
||||
|
||||
void InstructionsList::UnserializeFrom(gd::Project & project, const SerializerElement & element)
|
||||
{
|
||||
EventsListSerialization::UnserializeInstructionsFrom(project, *this, element);
|
||||
}
|
||||
|
||||
}
|
@@ -6,17 +6,37 @@
|
||||
|
||||
#ifndef GDCORE_INSTRUCTIONSLIST_H
|
||||
#define GDCORE_INSTRUCTIONSLIST_H
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "GDCore/Events/Instruction.h"
|
||||
#include "GDCore/Tools/SPtrList.h"
|
||||
namespace gd { class Instruction; }
|
||||
namespace gd { class Project; }
|
||||
namespace gd { class SerializerElement; }
|
||||
|
||||
namespace gd
|
||||
{
|
||||
|
||||
typedef SPtrList<gd::Instruction> InstructionsList;
|
||||
class InstructionsList : public SPtrList<gd::Instruction> {
|
||||
public:
|
||||
|
||||
void InsertInstructions(const InstructionsList & list, size_t begin, size_t end, size_t position = (size_t)-1);
|
||||
|
||||
/** \name Serialization
|
||||
*/
|
||||
///@{
|
||||
/**
|
||||
* \brief Serialize the instructions to the specified element
|
||||
* \see EventsListSerialization
|
||||
*/
|
||||
void SerializeTo(gd::SerializerElement & element) const;
|
||||
|
||||
/**
|
||||
* \brief Load the instructions from the specified element
|
||||
* \see EventsListSerialization
|
||||
*/
|
||||
void UnserializeFrom(gd::Project & project, const gd::SerializerElement & element);
|
||||
///@}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
@@ -46,7 +46,7 @@ size_t ExpressionParser::GetMaximalParametersNumber(const std::vector < gd::Para
|
||||
}
|
||||
|
||||
/**
|
||||
* Add blank parameters when code-only parameters are excepted.
|
||||
* Add blank parameters when code-only parameters are expected.
|
||||
* \param Parameters information
|
||||
* \param vector of parameters without code only parameters.
|
||||
*/
|
||||
@@ -100,7 +100,7 @@ bool ExpressionParser::ValidSyntax(const gd::String & str)
|
||||
{
|
||||
if ( requestNumber )
|
||||
{
|
||||
firstErrorStr = _("Number excepted");
|
||||
firstErrorStr = _("Number expected");
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -165,7 +165,7 @@ bool ExpressionParser::ValidSyntax(const gd::String & str)
|
||||
{
|
||||
if ( requestNumber )
|
||||
{
|
||||
firstErrorStr = _("Number excepted");
|
||||
firstErrorStr = _("Number expected");
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -206,7 +206,7 @@ bool ExpressionParser::ValidSyntax(const gd::String & str)
|
||||
{
|
||||
if ( requestNumber )
|
||||
{
|
||||
firstErrorStr = _("Number excepted");
|
||||
firstErrorStr = _("Number expected");
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -241,7 +241,7 @@ bool ExpressionParser::ValidSyntax(const gd::String & str)
|
||||
{
|
||||
if ( requestNumber )
|
||||
{
|
||||
firstErrorStr = _("Number excepted");
|
||||
firstErrorStr = _("Number expected");
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -283,7 +283,7 @@ bool ExpressionParser::ValidSyntax(const gd::String & str)
|
||||
}
|
||||
else if ( requestNumber )
|
||||
{
|
||||
firstErrorStr = _("Number excepted");
|
||||
firstErrorStr = _("Number expected");
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -452,7 +452,7 @@ bool ExpressionParser::ParseMathExpression(const gd::Platform & platform, const
|
||||
firstErrorPos = functionNameEnd;
|
||||
firstErrorStr = _("Incorrect number of parameters");
|
||||
firstErrorStr += " ";
|
||||
firstErrorStr += _("Excepted ( maximum ) :");
|
||||
firstErrorStr += _("Expected (maximum) :");
|
||||
firstErrorStr += gd::String::From(GetMaximalParametersNumber(instructionInfos.parameters));
|
||||
|
||||
return false;
|
||||
|
@@ -6,6 +6,7 @@
|
||||
#include "GDCore/Project/Project.h"
|
||||
#include "GDCore/Extensions/Platform.h"
|
||||
#include "GDCore/Extensions/Metadata/InstructionMetadata.h"
|
||||
#include "GDCore/Events/InstructionsList.h"
|
||||
#include "GDCore/Events/EventsList.h"
|
||||
#include "GDCore/Events/Event.h"
|
||||
#include "GDCore/Events/Serialization.h"
|
||||
@@ -21,7 +22,7 @@ using namespace std;
|
||||
namespace gd
|
||||
{
|
||||
|
||||
void EventsListSerialization::UpdateInstructionsFromGD31x(gd::Project & project, gd::InstructionsList & list, bool instructionsAreActions)
|
||||
void EventsListSerialization::UpdateInstructionsFromGD31x(gd::Project & project, gd::InstructionsList & list)
|
||||
{
|
||||
for (std::size_t i = 0;i<list.size();++i)
|
||||
{
|
||||
@@ -47,8 +48,6 @@ void EventsListSerialization::UpdateInstructionsFromGD31x(gd::Project & project,
|
||||
{
|
||||
instr.SetParameter(1, gd::Expression("\""+instr.GetParameter(1).GetPlainString()+"\""));
|
||||
}
|
||||
|
||||
//UpdateInstructionsFromGD31x(project, instr.GetSubInstructions(), instructionsAreActions);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,6 +160,7 @@ void EventsListSerialization::UpdateInstructionsFromGD2x(gd::Project & project,
|
||||
|
||||
void EventsListSerialization::UnserializeEventsFrom(gd::Project & project, EventsList & list, const SerializerElement & events)
|
||||
{
|
||||
list.Clear();
|
||||
events.ConsiderAsArrayOf("event", "Event");
|
||||
for(std::size_t i = 0; i<events.GetChildrenCount(); ++i)
|
||||
{
|
||||
@@ -172,7 +172,7 @@ void EventsListSerialization::UnserializeEventsFrom(gd::Project & project, Event
|
||||
else
|
||||
{
|
||||
std::cout << "WARNING: Unknown event of type " << type << std::endl;
|
||||
event = std::shared_ptr<gd::BaseEvent>(new EmptyEvent);
|
||||
event = std::make_shared<EmptyEvent>();
|
||||
}
|
||||
|
||||
event->SetDisabled(eventElem.GetBoolAttribute("disabled"));
|
||||
@@ -200,79 +200,39 @@ void EventsListSerialization::SerializeEventsTo(const EventsList & list, Seriali
|
||||
|
||||
using namespace std;
|
||||
|
||||
void gd::EventsListSerialization::OpenConditions(gd::Project & project, gd::InstructionsList & conditions, const SerializerElement & elem)
|
||||
void gd::EventsListSerialization::UnserializeInstructionsFrom(gd::Project & project, gd::InstructionsList & instructions, const SerializerElement & elem)
|
||||
{
|
||||
elem.ConsiderAsArrayOf("condition", "Condition");
|
||||
elem.ConsiderAsArrayOf("instruction");
|
||||
//Compatibility with GD <= 4.0.95
|
||||
if (elem.HasChild("condition", "Condition"))
|
||||
elem.ConsiderAsArrayOf("condition", "Condition");
|
||||
else if (elem.HasChild("action", "Action"))
|
||||
elem.ConsiderAsArrayOf("action", "Action");
|
||||
//end of compatibility code
|
||||
|
||||
for(std::size_t i = 0; i<elem.GetChildrenCount(); ++i)
|
||||
{
|
||||
gd::Instruction instruction;
|
||||
const SerializerElement & conditionElem = elem.GetChild(i);
|
||||
const SerializerElement & instrElement = elem.GetChild(i);
|
||||
|
||||
instruction.SetType(conditionElem.GetChild("type", 0, "Type").GetStringAttribute("value")
|
||||
.FindAndReplace("Automatism", "Behavior")); //Compatibility with GD <= 4
|
||||
instruction.SetInverted(conditionElem.GetChild("type", 0, "Type").GetBoolAttribute("inverted", false, "Contraire"));
|
||||
|
||||
//Read parameters
|
||||
vector < gd::Expression > parameters;
|
||||
|
||||
//Compatibility with GD <= 3.3
|
||||
if (conditionElem.HasChild("Parametre")) {
|
||||
|
||||
for (std::size_t j = 0;j<conditionElem.GetChildrenCount("Parametre");++j)
|
||||
parameters.push_back(gd::Expression(conditionElem.GetChild("Parametre", j).GetValue().GetString()));
|
||||
|
||||
}
|
||||
//end of compatibility code
|
||||
else
|
||||
{
|
||||
const SerializerElement & parametersElem = conditionElem.GetChild("parameters");
|
||||
parametersElem.ConsiderAsArrayOf("parameter");
|
||||
for (std::size_t j = 0;j<parametersElem.GetChildrenCount();++j)
|
||||
parameters.push_back(gd::Expression(parametersElem.GetChild(j).GetValue().GetString()));
|
||||
}
|
||||
|
||||
instruction.SetParameters( parameters );
|
||||
|
||||
//Read sub conditions
|
||||
if ( conditionElem.HasChild("subConditions", "SubConditions") )
|
||||
OpenConditions(project, instruction.GetSubInstructions(), conditionElem.GetChild("subConditions", 0, "SubConditions" ));
|
||||
|
||||
conditions.Insert( instruction );
|
||||
}
|
||||
|
||||
if ( project.GetLastSaveGDMajorVersion() < 3 ||
|
||||
(project.GetLastSaveGDMajorVersion() == 3 && project.GetLastSaveGDMinorVersion() <= 1 ) )
|
||||
UpdateInstructionsFromGD31x(project, conditions, false);
|
||||
|
||||
if ( project.GetLastSaveGDMajorVersion() < 3 )
|
||||
UpdateInstructionsFromGD2x(project, conditions, false);
|
||||
}
|
||||
|
||||
void gd::EventsListSerialization::OpenActions(gd::Project & project, gd::InstructionsList & actions, const SerializerElement & elem)
|
||||
{
|
||||
elem.ConsiderAsArrayOf("action", "Action");
|
||||
for(std::size_t i = 0; i<elem.GetChildrenCount(); ++i)
|
||||
{
|
||||
gd::Instruction instruction;
|
||||
const SerializerElement & actionElem = elem.GetChild(i);
|
||||
|
||||
instruction.SetType(actionElem.GetChild("type", 0, "Type").GetStringAttribute("value")
|
||||
instruction.SetType(instrElement.GetChild("type", 0, "Type").GetStringAttribute("value")
|
||||
.FindAndReplace("Automatism", "Behavior")); //Compatibility with GD <= 4
|
||||
instruction.SetInverted(instrElement.GetChild("type", 0, "Type").GetBoolAttribute("inverted", false, "Contraire"));
|
||||
|
||||
//Read parameters
|
||||
vector < gd::Expression > parameters;
|
||||
|
||||
//Compatibility with GD <= 3.3
|
||||
if (actionElem.HasChild("Parametre")) {
|
||||
if (instrElement.HasChild("Parametre")) {
|
||||
|
||||
for (std::size_t j = 0;j<actionElem.GetChildrenCount("Parametre");++j)
|
||||
parameters.push_back(gd::Expression(actionElem.GetChild("Parametre", j).GetValue().GetString()));
|
||||
for (std::size_t j = 0;j<instrElement.GetChildrenCount("Parametre");++j)
|
||||
parameters.push_back(gd::Expression(instrElement.GetChild("Parametre", j).GetValue().GetString()));
|
||||
|
||||
}
|
||||
//end of compatibility code
|
||||
else
|
||||
{
|
||||
const SerializerElement & parametersElem = actionElem.GetChild("parameters");
|
||||
const SerializerElement & parametersElem = instrElement.GetChild("parameters");
|
||||
parametersElem.ConsiderAsArrayOf("parameter");
|
||||
for (std::size_t j = 0;j<parametersElem.GetChildrenCount();++j)
|
||||
parameters.push_back(gd::Expression(parametersElem.GetChild(j).GetValue().GetString()));
|
||||
@@ -280,62 +240,48 @@ void gd::EventsListSerialization::OpenActions(gd::Project & project, gd::Instruc
|
||||
|
||||
instruction.SetParameters( parameters );
|
||||
|
||||
//Read sub actions
|
||||
if ( actionElem.HasChild("subActions", "SubActions") )
|
||||
OpenActions(project, instruction.GetSubInstructions(), actionElem.GetChild("subActions", 0, "SubActions" ));
|
||||
//Read sub instructions
|
||||
if ( instrElement.HasChild("subInstructions") )
|
||||
UnserializeInstructionsFrom(project, instruction.GetSubInstructions(), instrElement.GetChild("subInstructions"));
|
||||
//Compatibility with GD <= 4.0.95
|
||||
if ( instrElement.HasChild("subConditions", "SubConditions") )
|
||||
UnserializeInstructionsFrom(project, instruction.GetSubInstructions(), instrElement.GetChild("subConditions", 0, "SubConditions" ));
|
||||
if ( instrElement.HasChild("subActions", "SubActions") )
|
||||
UnserializeInstructionsFrom(project, instruction.GetSubInstructions(), instrElement.GetChild("subActions", 0, "SubActions" ));
|
||||
//end of compatibility code
|
||||
|
||||
actions.Insert( instruction );
|
||||
instructions.Insert( instruction );
|
||||
}
|
||||
|
||||
//Compatibility with GD <= 3.1
|
||||
if ( project.GetLastSaveGDMajorVersion() < 3 ||
|
||||
(project.GetLastSaveGDMajorVersion() == 3 && project.GetLastSaveGDMinorVersion() <= 1 ) )
|
||||
UpdateInstructionsFromGD31x(project, actions, true);
|
||||
UpdateInstructionsFromGD31x(project, instructions);
|
||||
|
||||
if ( project.GetLastSaveGDMajorVersion() < 3 )
|
||||
UpdateInstructionsFromGD2x(project, actions, true);
|
||||
UpdateInstructionsFromGD2x(project, instructions, elem.HasChild("action", "Action"));
|
||||
//end of compatibility code
|
||||
}
|
||||
|
||||
void gd::EventsListSerialization::SaveActions(const gd::InstructionsList & list, SerializerElement & actions)
|
||||
void gd::EventsListSerialization::SerializeInstructionsTo(const gd::InstructionsList & list, SerializerElement & instructions)
|
||||
{
|
||||
actions.ConsiderAsArrayOf("action");
|
||||
instructions.ConsiderAsArrayOf("instruction");
|
||||
for ( std::size_t k = 0;k < list.size();k++ )
|
||||
{
|
||||
SerializerElement & action = actions.AddChild("action");
|
||||
action.AddChild("type")
|
||||
SerializerElement & instruction = instructions.AddChild("instruction");
|
||||
instruction.AddChild("type")
|
||||
.SetAttribute("value", list[k].GetType())
|
||||
.SetAttribute("inverted", list[k].IsInverted());
|
||||
|
||||
//Parameters
|
||||
SerializerElement & parameters = action.AddChild("parameters");
|
||||
SerializerElement & parameters = instruction.AddChild("parameters");
|
||||
parameters.ConsiderAsArrayOf("parameter");
|
||||
for ( std::size_t l = 0;l < list[k].GetParameters().size();l++ )
|
||||
parameters.AddChild("parameter").SetValue(list[k].GetParameter(l).GetPlainString());
|
||||
|
||||
//Sub instructions
|
||||
SerializerElement & subActions = action.AddChild("subActions");
|
||||
SaveActions(list[k].GetSubInstructions(), subActions);
|
||||
}
|
||||
}
|
||||
|
||||
void gd::EventsListSerialization::SaveConditions(const gd::InstructionsList & list, SerializerElement & conditions)
|
||||
{
|
||||
conditions.ConsiderAsArrayOf("condition");
|
||||
for ( std::size_t k = 0;k < list.size();k++ )
|
||||
{
|
||||
SerializerElement & condition = conditions.AddChild("condition");
|
||||
condition.AddChild("type")
|
||||
.SetAttribute("value", list[k].GetType())
|
||||
.SetAttribute("inverted", list[k].IsInverted());
|
||||
|
||||
//Parameters
|
||||
SerializerElement & parameters = condition.AddChild("parameters");
|
||||
parameters.ConsiderAsArrayOf("parameter");
|
||||
for ( std::size_t l = 0;l < list[k].GetParameters().size();l++ )
|
||||
parameters.AddChild("parameter").SetValue(list[k].GetParameter(l).GetPlainString());
|
||||
|
||||
//Sub instructions
|
||||
SerializerElement & subConditions = condition.AddChild("subConditions");
|
||||
SaveConditions(list[k].GetSubInstructions(), subConditions);
|
||||
SerializerElement & subInstructions = instruction.AddChild("subInstructions");
|
||||
SerializeInstructionsTo(list[k].GetSubInstructions(), subInstructions);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -5,9 +5,9 @@
|
||||
*/
|
||||
#ifndef GDCORE_EVENTS_SERIALIZATION_H
|
||||
#define GDCORE_EVENTS_SERIALIZATION_H
|
||||
#include "GDCore/Events/Instruction.h"
|
||||
#include "GDCore/Serialization/Serializer.h"
|
||||
#include <vector>
|
||||
namespace gd { class InstructionsList; }
|
||||
namespace gd { class Project; }
|
||||
namespace gd { class EventsList; }
|
||||
|
||||
@@ -15,46 +15,37 @@ namespace gd
|
||||
{
|
||||
|
||||
/**
|
||||
* \brief Contains tools for loading and saving events to XML.
|
||||
* \brief Contains tools for loading and saving events to SerializerElement.
|
||||
*/
|
||||
class GD_CORE_API EventsListSerialization
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* \brief Load an events list from a TiXmlElement
|
||||
* \brief Load an events list from a SerializerElement
|
||||
* \param project The project the events belongs to.
|
||||
* \param list The event list in which the events must be loaded.
|
||||
* \param events The TiXmlElement containing the events
|
||||
* \param events The SerializerElement containing the events
|
||||
*/
|
||||
static void UnserializeEventsFrom(gd::Project & project, gd::EventsList & list, const SerializerElement & events);
|
||||
|
||||
/**
|
||||
* \brief Save an events list from a TiXmlElement
|
||||
* \brief Save an events list to a SerializerElement
|
||||
* \param list The event list to be saved.
|
||||
* \param events The TiXmlElement in which the events must be saved.
|
||||
* \param events The SerializerElement in which the events must be serialized.
|
||||
*/
|
||||
static void SerializeEventsTo(const gd::EventsList & list, SerializerElement & events);
|
||||
|
||||
/**
|
||||
* \brief Load a list of conditions from a TiXmlElement
|
||||
* \brief Unserialize a list of instructions
|
||||
*/
|
||||
static void OpenConditions(gd::Project & project, gd::InstructionsList & list, const SerializerElement & elem);
|
||||
static void UnserializeInstructionsFrom(gd::Project & project, gd::InstructionsList & list, const SerializerElement & elem);
|
||||
|
||||
/**
|
||||
* \brief Load a list of actions from a TiXmlElement
|
||||
* \brief Serialize a list of instructions
|
||||
*/
|
||||
static void OpenActions(gd::Project & project, gd::InstructionsList & list, const SerializerElement & elem);
|
||||
|
||||
/**
|
||||
* \brief Save a list of conditions to a TiXmlElement
|
||||
*/
|
||||
static void SaveConditions(const gd::InstructionsList & list, SerializerElement & elem);
|
||||
|
||||
/**
|
||||
* \brief Save a list of actions to a TiXmlElement
|
||||
*/
|
||||
static void SaveActions(const gd::InstructionsList & list, SerializerElement & elem);
|
||||
static void SerializeInstructionsTo(const gd::InstructionsList & list, SerializerElement & elem);
|
||||
|
||||
private:
|
||||
/**
|
||||
* \brief Internal method called when opening events created with GD2.x
|
||||
*
|
||||
@@ -67,7 +58,7 @@ public:
|
||||
*
|
||||
* Variables related and some storage instructions have been changed.
|
||||
*/
|
||||
static void UpdateInstructionsFromGD31x(gd::Project & project, gd::InstructionsList & list, bool instructionsAreActions);
|
||||
static void UpdateInstructionsFromGD31x(gd::Project & project, gd::InstructionsList & list);
|
||||
};
|
||||
|
||||
}
|
||||
|
@@ -21,7 +21,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAdvancedExtension(gd::P
|
||||
#if defined(GD_IDE_ONLY)
|
||||
extension.AddCondition("Toujours",
|
||||
_("Always"),
|
||||
_("This condition returns always true (or always false if condition is inverted)."),
|
||||
_("This condition always returns true (or always false, if the condition is inverted)."),
|
||||
_("Always"),
|
||||
_("Other"),
|
||||
"res/conditions/toujours24.png",
|
||||
|
@@ -21,8 +21,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
#if defined(GD_IDE_ONLY)
|
||||
extension.AddAction("PlaySoundCanal",
|
||||
_("Play a sound on a channel"),
|
||||
_("Play a sound (small audio file) on a specific channel,\nso as to be able to manipulate it."),
|
||||
_("Play the sound _PARAM1_ on the channel _PARAM2_"),
|
||||
_("Play a sound (small audio file) on a specific channel,\nso you'll be able to manipulate it."),
|
||||
_("Play the sound _PARAM1_ on the channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_"),
|
||||
_("Audio/Sounds on channels"),
|
||||
"res/actions/son24.png",
|
||||
"res/actions/son.png")
|
||||
@@ -68,10 +68,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddAction("PlayMusicCanal",
|
||||
_("Play a music on a channel"),
|
||||
_("Play a music an on specific channel,\nso as to be able to interact with later."),
|
||||
_("Play the music _PARAM1_ on channel _PARAM2_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Play a music file on a channel"),
|
||||
_("Play a music file on a specific channel,\nso you'll be able to interact with it later."),
|
||||
_("Play the music _PARAM1_ on channel _PARAM2_, vol.: _PARAM4_, loop: _PARAM3_"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -86,7 +86,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
_("Stop the music on a channel"),
|
||||
_("Stop the music on the specified channel"),
|
||||
_("Stop the music of channel _PARAM1_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -97,7 +97,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
_("Pause the music of a channel"),
|
||||
_("Pause the music on the specified channel."),
|
||||
_("Pause the music of channel _PARAM1_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -108,7 +108,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
_("Play the music of a channel"),
|
||||
_("Play the music of the channel."),
|
||||
_("Play the music of channel _PARAM1_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -117,7 +117,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModVolumeSoundCanal",
|
||||
_("Volume of the sound on a channel"),
|
||||
_("This action modify the volume of the sound on the specified channel. The volume is between 0 and 100."),
|
||||
_("This action modifies the volume of the sound on the specified channel. The volume is between 0 and 100."),
|
||||
_("Do _PARAM2__PARAM3_ to the volume of the sound on channel _PARAM1_"),
|
||||
_("Audio/Sounds on channels"),
|
||||
"res/actions/sonVolume24.png",
|
||||
@@ -131,9 +131,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModVolumeMusicCanal",
|
||||
_("Volume of the music on a channel"),
|
||||
_("This action modify the volume of the music on the specified channel. The volume is between 0 and 100."),
|
||||
_("This action modifies the volume of the music on the specified channel. The volume is between 0 and 100."),
|
||||
_("Do _PARAM2__PARAM3_ to the volume of the music on channel _PARAM1_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/musicVolume24.png",
|
||||
"res/actions/musicVolume.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -145,7 +145,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModGlobalVolume",
|
||||
_("Game global volume"),
|
||||
_("This action modify the global volume of the game. The volume is between 0 and 100."),
|
||||
_("This action modifies the global volume of the game. The volume is between 0 and 100."),
|
||||
_("Do _PARAM1__PARAM2_ to global sound level"),
|
||||
_("Audio"),
|
||||
"res/actions/volume24.png",
|
||||
@@ -158,7 +158,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModPitchSoundChannel",
|
||||
_("Pitch of the sound of a channel"),
|
||||
_("This action modify pitch (speed) of the sound on a channel.\n1 is the default pitch."),
|
||||
_("This action modifies the pitch (speed) of the sound on a channel.\n1 is the default pitch."),
|
||||
_("Do _PARAM2__PARAM3_ to the pitch of the sound on channel _PARAM1_"),
|
||||
_("Audio/Sounds on channels"),
|
||||
"res/actions/son24.png",
|
||||
@@ -172,9 +172,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModPitchMusicChannel",
|
||||
_("Pitch of the music on a channel"),
|
||||
_("This action modify the pitch of the music on the specified channel. 1 is the default pitch"),
|
||||
_("This action modifies the pitch of the music on the specified channel. 1 is the default pitch"),
|
||||
_("Do _PARAM2__PARAM3_ to the pitch of the music on channel _PARAM1_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -186,7 +186,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModPlayingOffsetSoundChannel",
|
||||
_("Playing offset of the sound on a channel"),
|
||||
_("This action modify the playing offset of the sound on a channel"),
|
||||
_("This action modifies the playing offset of the sound on a channel"),
|
||||
_("Do _PARAM2__PARAM3_ to the playing offset of the sound on channel _PARAM1_"),
|
||||
_("Audio/Sounds on channels"),
|
||||
"res/actions/son24.png",
|
||||
@@ -200,9 +200,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddAction("ModPlayingOffsetMusicChannel",
|
||||
_("Playing offset of the music on a channel"),
|
||||
_("This action modify the playing offset of the music on the specified channel"),
|
||||
_("This action modifies the playing offset of the music on the specified channel"),
|
||||
_("Do _PARAM2__PARAM3_ to the playing offset of the music on channel _PARAM1_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -215,7 +215,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
extension.AddAction("PlaySound",
|
||||
_("Play a sound"),
|
||||
_("Play a sound."),
|
||||
_("Play the sound _PARAM1_"),
|
||||
_("Play the sound _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_)"),
|
||||
_("Audio"),
|
||||
"res/actions/son24.png",
|
||||
"res/actions/son.png")
|
||||
@@ -227,9 +227,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.MarkAsSimple();
|
||||
|
||||
extension.AddAction("PlayMusic",
|
||||
_("Play a music"),
|
||||
_("Play a music."),
|
||||
_("Play the music _PARAM1_"),
|
||||
_("Play a music file"),
|
||||
_("Play a music file."),
|
||||
_("Play the music _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_)"),
|
||||
_("Audio"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
@@ -241,10 +241,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.MarkAsSimple();
|
||||
|
||||
extension.AddCondition("MusicPlaying",
|
||||
_("A music is being played"),
|
||||
_("A music file is being played"),
|
||||
_("Test if the music on a channel is being played"),
|
||||
_("Music on channel _PARAM1_ is being played"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/conditions/musicplaying24.png",
|
||||
"res/conditions/musicplaying.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -252,10 +252,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddCondition("MusicPaused",
|
||||
_("A music is paused"),
|
||||
_("A music file is paused"),
|
||||
_("Test if the music on the specified channel is paused."),
|
||||
_("Music on channel _PARAM1_ is paused"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/conditions/musicpaused24.png",
|
||||
"res/conditions/musicpaused.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -263,10 +263,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddCondition("MusicStopped",
|
||||
_("A music is stopped"),
|
||||
_("A music file is stopped"),
|
||||
_("Test if the music on the specified channel is stopped."),
|
||||
_("Music on channel _PARAM1_ is stopped"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/conditions/musicstopped24.png",
|
||||
"res/conditions/musicstopped.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -322,9 +322,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddCondition("MusicCanalVolume",
|
||||
_("Volume of the music on a channel"),
|
||||
_("Test the volume of the music on specified channel. The volume is between 0 and 100."),
|
||||
_("Test the volume of the music on a specified channel. The volume is between 0 and 100."),
|
||||
_("The volume of the music on channel _PARAM1_ is _PARAM2__PARAM3_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/conditions/musicVolume24.png",
|
||||
"res/conditions/musicVolume.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -362,9 +362,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
|
||||
extension.AddCondition("MusicChannelPitch",
|
||||
_("Pitch of the music on a channel"),
|
||||
_("Test the pitch (speed) of the music on specified channel. 1 is the default pitch."),
|
||||
_("The volume of the music on channel _PARAM1_ is _PARAM2__PARAM3_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Test the pitch (speed) of the music on a specified channel. 1 is the default pitch."),
|
||||
_("The pitch of the music on channel _PARAM1_ is _PARAM2__PARAM3_"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/conditions/musicVolume24.png",
|
||||
"res/conditions/musicVolume.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -392,7 +392,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
_("Playing offset of the music on a channel"),
|
||||
_("Test the playing offset of the music on the specified channel."),
|
||||
_("The playing offset of the music on channel _PARAM1_ is _PARAM2__PARAM3_"),
|
||||
_("Audio/Musics on channels"),
|
||||
_("Audio/Music on channels"),
|
||||
"res/conditions/musicVolume24.png",
|
||||
"res/conditions/musicVolume.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
@@ -406,7 +406,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Channel"));
|
||||
|
||||
extension.AddExpression("MusicChannelPlayingOffset", _("Music playing offset"), _("Music playing offset"), _("Musics"), "res/actions/music.png")
|
||||
extension.AddExpression("MusicChannelPlayingOffset", _("Music playing offset"), _("Music playing offset"), _("Music"), "res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Channel"));
|
||||
|
||||
@@ -414,7 +414,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Channel"));
|
||||
|
||||
extension.AddExpression("MusicChannelVolume", _("Music volume"), _("Music volume"), _("Musics"), "res/actions/music.png")
|
||||
extension.AddExpression("MusicChannelVolume", _("Music volume"), _("Music volume"), _("Music"), "res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Channel"));
|
||||
|
||||
@@ -422,7 +422,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(gd::Plat
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Channel"));
|
||||
|
||||
extension.AddExpression("MusicChannelPitch", _("Music's pitch"), _("Music's pitch"), _("Musics"), "res/actions/music.png")
|
||||
extension.AddExpression("MusicChannelPitch", _("Music's pitch"), _("Music's pitch"), _("Music"), "res/actions/music.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Channel"));
|
||||
|
||||
|
@@ -19,11 +19,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)");
|
||||
|
||||
gd::ObjectMetadata & obj = extension.AddObject("",
|
||||
gd::ObjectMetadata & obj = extension.AddObject<gd::Object>("",
|
||||
_("Base object"),
|
||||
_("Base object"),
|
||||
"res/objeticon24.png",
|
||||
&CreateBaseObject);
|
||||
"res/objeticon24.png");
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
obj.AddCondition("PosX",
|
||||
@@ -178,7 +177,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("AddForceXY",
|
||||
_("Add a force"),
|
||||
_("Add a force to an object. The object will move according to all forces it has."),
|
||||
_("Add a force to an object. The object will move according to all of the forces it has."),
|
||||
_("Add to _PARAM0_ a force of _PARAM1_ p/s on X axis and _PARAM2_ p/s on Y axis"),
|
||||
_("Movement"),
|
||||
"res/actions/force24.png",
|
||||
@@ -192,7 +191,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("AddForceAL",
|
||||
_("Add a force (angle)"),
|
||||
_("Add a force to an object. The object will move according to all forces it has. This action creates the force using the specified angle and length."),
|
||||
_("Add a force to an object. The object will move according to all of the forces it has. This action creates the force using the specified angle and length."),
|
||||
_("Add to _PARAM0_ a force, angle: _PARAM1_ degrees and length: _PARAM2_ pixels"),
|
||||
_("Movement"),
|
||||
"res/actions/force24.png",
|
||||
@@ -222,8 +221,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("AddForceTournePos",
|
||||
_("Add a force to move around an position"),
|
||||
_("Add a force to an object to make it rotate around a position.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisly, use the actions in the category \"Position\"."),
|
||||
_("Add a force to move around a position"),
|
||||
_("Add a force to an object to make it rotate around a position.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisely, use the actions in the category \"Position\"."),
|
||||
_("Rotate _PARAM0_ around _PARAM1_;_PARAM2_ at _PARAM3_ deg/sec and _PARAM4_ pixels away"),
|
||||
_("Movement"),
|
||||
"res/actions/forceTourne24.png",
|
||||
@@ -240,7 +239,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("Arreter",
|
||||
_("Stop the object"),
|
||||
_("Stop the object by deleting all its forces."),
|
||||
_("Stop the object by deleting all of its forces."),
|
||||
_("Stop the object _PARAM0_"),
|
||||
_("Movement"),
|
||||
"res/actions/arreter24.png",
|
||||
@@ -264,7 +263,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("ChangePlan",
|
||||
_("Z order"),
|
||||
_("Modify the z order of an object"),
|
||||
_("Modify the Z-order of an object"),
|
||||
_("Do _PARAM1__PARAM2_ to z-Order of _PARAM0_"),
|
||||
_("Z order"),
|
||||
"res/actions/planicon24.png",
|
||||
@@ -277,14 +276,14 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("ChangeLayer",
|
||||
_("Layer"),
|
||||
_("Change the layer where is the object."),
|
||||
_("Move the object to a different layer."),
|
||||
_("Put _PARAM0_ on the layer _PARAM1_"),
|
||||
_("Layers and cameras"),
|
||||
"res/actions/layer24.png",
|
||||
"res/actions/layer.png")
|
||||
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("layer", _("Put on the layer (base layer if empty)")).SetDefaultValue("\"\"")
|
||||
.AddParameter("layer", _("Move it to this layer (base layer if empty)")).SetDefaultValue("\"\"")
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("ModVarObjet",
|
||||
@@ -339,6 +338,17 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
.AddParameter("string", _("Child's name"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("ObjectVariableClearChildren",
|
||||
_("Clear variable"),
|
||||
_("Remove all the children from the object variable."),
|
||||
_("Clear children from variable _PARAM1_ of _PARAM0_"),
|
||||
_("Variables/Structure"),
|
||||
"res/actions/var24.png",
|
||||
"res/actions/var.png")
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("objectvar", _("Variable"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("Cache",
|
||||
_("Hide"),
|
||||
_("Hide the specified object."),
|
||||
@@ -364,7 +374,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("Angle",
|
||||
_("Angle"),
|
||||
_("Compare angle of the specified object."),
|
||||
_("Compare the angle of the specified object."),
|
||||
_("Angle of _PARAM0_ is _PARAM1__PARAM2_ deg."),
|
||||
_("Angle"),
|
||||
"res/conditions/direction24.png",
|
||||
@@ -378,7 +388,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("Plan",
|
||||
_("Compare Z order"),
|
||||
_("Compare the z-order of the specified object."),
|
||||
_("Compare the Z-order of the specified object."),
|
||||
_("Z Order of _PARAM0_ is _PARAM1__PARAM2_"),
|
||||
_("Z order"),
|
||||
"res/conditions/planicon24.png",
|
||||
@@ -392,7 +402,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("Layer",
|
||||
_("Compare layer"),
|
||||
_("Test if the object is on the specified layer."),
|
||||
_("Check if the object is on the specified layer."),
|
||||
_("_PARAM0_ is on layer _PARAM1_"),
|
||||
_("Layer"),
|
||||
"res/conditions/layer24.png",
|
||||
@@ -404,7 +414,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("Visible",
|
||||
_("Visibility of an object"),
|
||||
_("Test if an object is not hidden."),
|
||||
_("Check if an object is visible."),
|
||||
_("The object _PARAM0_ is visible"),
|
||||
_("Visibility"),
|
||||
"res/conditions/visibilite24.png",
|
||||
@@ -415,7 +425,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("Invisible",
|
||||
_("Invisibility of an object"),
|
||||
_("Test if an object is hidden."),
|
||||
_("Check if an object is hidden."),
|
||||
_("_PARAM0_ is hidden"),
|
||||
_("Visibility"),
|
||||
"res/conditions/visibilite24.png",
|
||||
@@ -426,7 +436,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("Arret",
|
||||
_("Object is stopped"),
|
||||
_("Test if an object does not move"),
|
||||
_("Check if an object is not moving"),
|
||||
_("_PARAM0_ is stopped"),
|
||||
_("Movement"),
|
||||
"res/conditions/arret24.png",
|
||||
@@ -450,7 +460,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
.SetManipulatedType("number");
|
||||
|
||||
obj.AddCondition("AngleOfDisplacement",
|
||||
_("Angle of moving"),
|
||||
_("Angle of movement"),
|
||||
_("Compare the angle of displacement of an object"),
|
||||
_("Angle of displacement of _PARAM0_ is _PARAM1_ (tolerance : _PARAM2_ degrees)"),
|
||||
_("Movement"),
|
||||
@@ -492,7 +502,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddCondition("VarObjetDef",
|
||||
_("Variable defined"),
|
||||
_("Test "),
|
||||
_("Check if the variable is defined."),
|
||||
_("Variable _PARAM1 of _PARAM0_ is defined"),
|
||||
_("Variables"),
|
||||
"res/conditions/var24.png",
|
||||
@@ -543,7 +553,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("AddForceTourne",
|
||||
_("Add a force to move around an object"),
|
||||
_("Add a force to an object to make it rotate around another.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisly, use the actions in category \"Position\"."),
|
||||
_("Add a force to an object to make it rotate around another.\nNote that the movement is not precise, especially if the speed is high.\nTo position an object around a position more precisely, use the actions in category \"Position\"."),
|
||||
_("Rotate _PARAM0_ around _PARAM1_ at _PARAM2_ deg/sec and _PARAM3_ pixels away"),
|
||||
_("Movement"),
|
||||
"res/actions/forceTourne24.png",
|
||||
@@ -575,7 +585,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
obj.AddAction("Rebondir",
|
||||
_("Move an object away from another"),
|
||||
_("Move an object away from another, using forces."),
|
||||
_("Move _PARAM0_ away of _PARAM1_ (only _PARAM0_ will move)"),
|
||||
_("Move _PARAM0_ away from _PARAM1_ (only _PARAM0_ will move)"),
|
||||
_("Movement"),
|
||||
"res/actions/ecarter24.png",
|
||||
"res/actions/ecarter.png")
|
||||
@@ -589,7 +599,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
obj.AddAction("Ecarter",
|
||||
_("Move an object away from another"),
|
||||
_("Move an object away from another without using forces."),
|
||||
_("Move _PARAM0_ away of _PARAM2_ (only _PARAM0_ will move)"),
|
||||
_("Move _PARAM0_ away from _PARAM2_ (only _PARAM0_ will move)"),
|
||||
_("Position"),
|
||||
"res/actions/ecarter24.png",
|
||||
"res/actions/ecarter.png")
|
||||
@@ -601,8 +611,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
obj.AddAction("SeparateFromObjects",
|
||||
_("Separate two objects"),
|
||||
_("Move an object away from another using their collision masks.\nBe sure to call this action on a reasonable number of objects so as\nnot to slow down the game."),
|
||||
_("Move _PARAM0_ away of _PARAM1_ (only _PARAM0_ will move)"),
|
||||
_("Move an object away from another using their collision masks.\nBe sure to call this action on a reasonable number of objects\nto avoid slowing down the game."),
|
||||
_("Move _PARAM0_ away from _PARAM1_ (only _PARAM0_ will move)"),
|
||||
_("Position"),
|
||||
"res/actions/ecarter24.png",
|
||||
"res/actions/ecarter.png")
|
||||
@@ -670,6 +680,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("objectvar", _("Variable"));
|
||||
|
||||
obj.AddExpression("VariableChildCount", _("Object's variable number of children"), _("Get the number of children from an object"), _("Variables"), "res/actions/var.png")
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("objectvar", _("Variable"));
|
||||
|
||||
obj.AddStrExpression("VariableString", _("Object's variable"), _("Text of variable of an object"), _("Variables"), "res/actions/var.png")
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("objectvar", _("Variable"));
|
||||
@@ -690,13 +704,13 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
extension.AddAction("CreateByName",
|
||||
_("Create an object from its name"),
|
||||
_("Among the objects of the specified group, the action will create the object with the specified name."),
|
||||
_("Among the objects of the specified group, this action will create the object with the specified name."),
|
||||
_("Among objects _PARAM1_, create object named _PARAM2_ at position _PARAM3_;_PARAM4_"),
|
||||
_("Objects"),
|
||||
"res/actions/create24.png",
|
||||
"res/actions/create.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("objectListWithoutPicking", _("Groups containing objects which can be created by the action"))
|
||||
.AddParameter("objectListWithoutPicking", _("Groups containing objects that can be created by the action"))
|
||||
.AddParameter("string", _("Text representing the name of the object to create"))
|
||||
.AddParameter("expression", _("X position"))
|
||||
.AddParameter("expression", _("Y position"))
|
||||
@@ -716,7 +730,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
extension.AddAction("AjoutHasard",
|
||||
_("Pick a random object"),
|
||||
_("Pick only one object with this name among all"),
|
||||
_("Pick only one object with this name, among all"),
|
||||
_("Pick a random _PARAM1_"),
|
||||
_("Objects"),
|
||||
"res/actions/ajouthasard24.png",
|
||||
@@ -726,9 +740,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
.MarkAsSimple();
|
||||
|
||||
extension.AddAction("MoveObjects",
|
||||
_("Apply objects movement"),
|
||||
_("Moves the objects according to the forces they have. GDevelop call this action at the end of the events by default."),
|
||||
_("Apply objects movement"),
|
||||
_("Apply movement to all objects"),
|
||||
_("Moves all objects according to the forces they have. GDevelop calls this action at the end of the events by default."),
|
||||
_("Apply movement to all objects"),
|
||||
_("Movement"),
|
||||
"res/actions/doMove24.png",
|
||||
"res/actions/doMove.png")
|
||||
@@ -774,7 +788,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
extension.AddCondition("AjoutHasard",
|
||||
_("Pick a random object"),
|
||||
_("Pick only one object with this name among all"),
|
||||
_("Pick only one object with this name, among all"),
|
||||
_("Pick a random _PARAM1_"),
|
||||
_("Objects"),
|
||||
"res/conditions/ajouthasard24.png",
|
||||
@@ -811,7 +825,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
extension.AddCondition("CollisionNP", //"CollisionNP" cames from an old condition to test collision between two sprites non precisely.
|
||||
_("Collision"),
|
||||
_("Test the collision between two objects using their collision mask.\nNote that some objects may not have a collision mask.\nSome others, like Sprite, provide also more precise collision conditions."),
|
||||
_("Test the collision between two objects using their collision masks.\nNote that some objects may not have collision masks.\nSome others, like Sprite objects, also provide more precise collision conditions."),
|
||||
_("_PARAM0_ is in collision with _PARAM1_"),
|
||||
_("Collision"),
|
||||
"res/conditions/collision24.png",
|
||||
@@ -823,7 +837,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(gd:
|
||||
|
||||
extension.AddCondition("EstTourne",
|
||||
_("An object is turned toward another"),
|
||||
_("Test if an object is turned toward another"),
|
||||
_("Check if an object is turned toward another"),
|
||||
_("_PARAM0_ is rotated towards _PARAM1_"),
|
||||
_("Angle"),
|
||||
"res/conditions/estTourne24.png",
|
||||
|
@@ -14,7 +14,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
{
|
||||
extension.SetExtensionInformation("BuiltinCamera",
|
||||
_("Cameras and layers features"),
|
||||
_("Builtin camera extension"),
|
||||
_("Built-in camera extension"),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)");
|
||||
|
||||
@@ -36,8 +36,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddCondition("CameraY",
|
||||
_("Camera center Y position"),
|
||||
_("Compare the Y position of a the center of a camera."),
|
||||
_("The Y position of camera _PARAM4_ is _PARAM1__PARAM2_ (layer: _PARAM3_)"),
|
||||
_("Compare the Y position of the center of a camera."),
|
||||
_("The Y position of camera _PARAM4_ is _PARAM1__PARAM2_ (layer: _PARAM3_)"),
|
||||
_("Layers and cameras"),
|
||||
"res/conditions/camera24.png",
|
||||
"res/conditions/camera.png")
|
||||
@@ -51,7 +51,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddAction("CameraX",
|
||||
_("Camera center X position"),
|
||||
_("Change X position of the center of the specified camera."),
|
||||
_("Change the X position of the center of the specified camera."),
|
||||
_("Do _PARAM1__PARAM2_ to X position of camera _PARAM4_ (layer: _PARAM3_)"),
|
||||
_("Layers and cameras"),
|
||||
"res/conditions/camera24.png",
|
||||
@@ -66,7 +66,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddAction("CameraY",
|
||||
_("Camera center Y position"),
|
||||
_("Change Y position of the center of the specified camera."),
|
||||
_("Change the Y position of the center of the specified camera."),
|
||||
_("Do _PARAM1__PARAM2_ to Y position of camera _PARAM4_ (layer: _PARAM3_)"),
|
||||
_("Layers and cameras"),
|
||||
"res/conditions/camera24.png",
|
||||
@@ -126,7 +126,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddAction("RotateCamera",
|
||||
_("Change camera angle"),
|
||||
_("This action modify the angle of a camera of the specified layer."),
|
||||
_("This action modifies the angle of a camera in the specified layer."),
|
||||
_("Do _PARAM1__PARAM2_ to angle of camera (layer: _PARAM3_, camera: _PARAM4_)"),
|
||||
_("Layers and cameras"),
|
||||
"res/actions/camera24.png",
|
||||
@@ -140,7 +140,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddAction("AddCamera",
|
||||
_("Add a camera to a layer"),
|
||||
_("This action add a camera to a layer"),
|
||||
_("This action adds a camera to a layer"),
|
||||
_("Add a camera to layer _PARAM1_"),
|
||||
_("Layers and cameras"),
|
||||
"res/actions/camera24.png",
|
||||
@@ -169,7 +169,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddAction("CameraSize",
|
||||
_("Modify the size of a camera"),
|
||||
_("This action modify the size of a camera of the specified layer. The zoom will be reset."),
|
||||
_("This action modifies the size of a camera of the specified layer. The zoom will be reset."),
|
||||
_("Change the size of camera _PARAM2_ of _PARAM1_ to _PARAM3_*_PARAM4_"),
|
||||
_("Layers and cameras"),
|
||||
"res/actions/camera24.png",
|
||||
@@ -183,7 +183,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddAction("CameraViewport",
|
||||
_("Modify the render zone of a camera"),
|
||||
_("This action modify the render zone of a camera of the specified layer."),
|
||||
_("This action modifies the render zone of a camera of the specified layer."),
|
||||
_("Set the render zone of camera _PARAM2_ from layer _PARAM1_ to _PARAM3_;_PARAM4_ _PARAM5_;_PARAM6_"),
|
||||
_("Layers and cameras"),
|
||||
"res/actions/camera24.png",
|
||||
@@ -222,7 +222,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
.AddParameter("expression", _("Top left side of the boundary: Y Position"))
|
||||
.AddParameter("expression", _("Bottom right side of the boundary: X Position"))
|
||||
.AddParameter("expression", _("Bottom right side of the boundary: Y Position"))
|
||||
.AddParameter("yesorno", _("Anticipate the movement of the object (yes by default)"), "",true).SetDefaultValue("true")
|
||||
.AddParameter("yesorno", _("Anticipate the movement of the object (yes by default)"), "",true).SetDefaultValue("yes")
|
||||
.AddParameter("layer", _("Layer (base layer if empty)"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0")
|
||||
.MarkAsAdvanced();
|
||||
@@ -236,7 +236,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
"res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("objectPtr", _("Object"))
|
||||
.AddParameter("yesorno", _("Anticipate the movement of the object (yes by default)"), "",true).SetDefaultValue("true")
|
||||
.AddParameter("yesorno", _("Anticipate the movement of the object (yes by default)"), "",true).SetDefaultValue("yes")
|
||||
.AddParameter("layer", _("Layer (base layer if empty)"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0")
|
||||
.MarkAsSimple();
|
||||
@@ -265,7 +265,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
|
||||
extension.AddCondition("LayerVisible",
|
||||
_("Visibility of a layer"),
|
||||
_("Test if a layer is displayed"),
|
||||
_("Test if a layer is set as visible."),
|
||||
_("Layer _PARAM1_ is visible"),
|
||||
_("Layers and cameras"),
|
||||
"res/conditions/layer24.png",
|
||||
@@ -274,69 +274,111 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCameraExtension(gd::Pla
|
||||
.AddParameter("layer", _("Layer (base layer if empty)")).SetDefaultValue("\"\"")
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddExpression("CameraWidth", _("Width of a camera of a layer"), _("Width of a camera of a layer"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddAction("SetLayerEffectParameter",
|
||||
_("Effect parameter"),
|
||||
_("Change the parameter of an effect"),
|
||||
_("Set _PARAM3_ to _PARAM4_ for effect _PARAM2_ of layer _PARAM1_"),
|
||||
_("Layers and cameras/Effects"),
|
||||
"res/conditions/camera24.png",
|
||||
"res/conditions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer (base layer if empty)"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("string", _("Effect"))
|
||||
.AddParameter("string", _("Parameter name"))
|
||||
.AddParameter("expression", _("New value"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddCondition("LayerTimeScale",
|
||||
_("Layer time scale"),
|
||||
_("Compare the time scale applied to the objects of the layer."),
|
||||
_("The time scale of layer _PARAM1_ is _PARAM2__PARAM3_"),
|
||||
_("Layers and cameras/Time"),
|
||||
"res/conditions/time24.png",
|
||||
"res/conditions/time.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer (base layer if empty)"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("relationalOperator", _("Sign of the test"))
|
||||
.AddParameter("expression", _("Value to test"))
|
||||
.MarkAsAdvanced()
|
||||
.SetManipulatedType("number");
|
||||
|
||||
extension.AddAction("ChangeLayerTimeScale",
|
||||
_("Change layer time scale"),
|
||||
_("Change the time scale applied to the objects of the layer."),
|
||||
_("Set time scale of layer _PARAM1_ to _PARAM2_"),
|
||||
_("Layers and cameras/Time"),
|
||||
"res/actions/time24.png",
|
||||
"res/actions/time.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer (base layer if empty)"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Scale (1: Default, 2: 2x faster, 0.5: 2x slower...)"));
|
||||
|
||||
extension.AddExpression("CameraWidth", _("Width of a camera of a layer"), _("Width of a camera of a layer"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"))
|
||||
.AddParameter("expression", _("Camera number (default : 0)")).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraHeight", _("Height of a camera of a layer"), _("Height of a camera of a layer"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraHeight", _("Height of a camera of a layer"), _("Height of a camera of a layer"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"))
|
||||
.AddParameter("expression", _("Camera number (default : 0)")).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraViewportLeft", _("X position of the top left side point of a render zone"), _("X position of the top left side point of a render zone"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraViewportLeft", _("X position of the top left side point of a render zone"), _("X position of the top left side point of a render zone"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"))
|
||||
.AddParameter("expression", _("Camera number (default : 0)")).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraViewportTop", _("Y position of the top left side point of a render zone"), _("Y position of the top left side point of a render zone"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraViewportTop", _("Y position of the top left side point of a render zone"), _("Y position of the top left side point of a render zone"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"))
|
||||
.AddParameter("expression", _("Camera number (default : 0)")).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraViewportRight", _("X position of the bottom right side point of a render zone"), _("X position of the bottom right side point of a render zone"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraViewportRight", _("X position of the bottom right side point of a render zone"), _("X position of the bottom right side point of a render zone"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"))
|
||||
.AddParameter("expression", _("Camera number (default : 0)")).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraViewportBottom", _("Y position of the bottom right side point of a render zone"), _("Y position of the bottom right side point of a render zone"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraViewportBottom", _("Y position of the bottom right side point of a render zone"), _("Y position of the bottom right side point of a render zone"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"))
|
||||
.AddParameter("expression", _("Camera number (default : 0)")).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraX", _("Camera X position"), _("Camera X position"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraX", _("Camera X position"), _("Camera X position"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("VueX", _("Camera X position"), _("Camera X position"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("VueX", _("Camera X position"), _("Camera X position"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.SetHidden()
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraY", _("Camera Y position"), _("Camera Y position"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraY", _("Camera Y position"), _("Camera Y position"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("VueY", _("Camera Y position"), _("Camera Y position"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("VueY", _("Camera Y position"), _("Camera Y position"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.SetHidden()
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("CameraRotation", _("Angle of a camera of a layer"), _("Angle of a camera of a layer"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("CameraRotation", _("Angle of a camera of a layer"), _("Angle of a camera of a layer"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("VueRotation", _("Angle of a camera of a layer"), _("Angle of a camera of a layer"), _("Camera"), "res/actions/camera.png")
|
||||
extension.AddExpression("VueRotation", _("Angle of a camera of a layer"), _("Angle of a camera of a layer"), _("Layers and cameras"), "res/actions/camera.png")
|
||||
.SetHidden()
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"), "",true).SetDefaultValue("\"\"")
|
||||
.AddParameter("expression", _("Camera number (default : 0)"), "",true).SetDefaultValue("0");
|
||||
|
||||
extension.AddExpression("LayerTimeScale", _("Time scale"), _("Time scale"), _("Layers and cameras"), "res/actions/time.png")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("layer", _("Layer"));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -25,21 +25,21 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCommonConversionsExtens
|
||||
_("Convert the text to a number"),
|
||||
_("Conversion"),
|
||||
"res/conditions/toujours24.png")
|
||||
.AddParameter("string", _("Text to convert in a number"));
|
||||
.AddParameter("string", _("Text to convert to a number"));
|
||||
|
||||
extension.AddStrExpression("ToString",
|
||||
_("Number > Text"),
|
||||
_("Convert the result of the expression in a text"),
|
||||
_("Convert the result of the expression to text"),
|
||||
_("Conversion"),
|
||||
"res/conditions/toujours24.png")
|
||||
.AddParameter("expression", _("Expression to be converted to a text"));
|
||||
.AddParameter("expression", _("Expression to be converted to text"));
|
||||
|
||||
extension.AddStrExpression("LargeNumberToString",
|
||||
_("Number > Text ( without scientific notation )"),
|
||||
_("Convert the result of the expression in a text, without using the scientific notation"),
|
||||
_("Convert the result of the expression to text, without using the scientific notation"),
|
||||
_("Conversion"),
|
||||
"res/conditions/toujours24.png")
|
||||
.AddParameter("expression", _("Expression to be converted to a text"));
|
||||
.AddParameter("expression", _("Expression to be converted to text"));
|
||||
|
||||
extension.AddExpression("ToRad",
|
||||
_("Degrees > Radians"),
|
||||
|
@@ -70,37 +70,37 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsCommonInstructionsExten
|
||||
extension.AddEvent("Standard", _("Standard event"),
|
||||
_("Standard event: Actions are run if conditions are fulfilled."),
|
||||
"", "res/eventaddicon.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::StandardEvent));
|
||||
std::make_shared<gd::StandardEvent>());
|
||||
|
||||
extension.AddEvent("Link", _("Link"),
|
||||
_("Link to some external events"),
|
||||
"", "res/lienaddicon.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::LinkEvent));
|
||||
std::make_shared<gd::LinkEvent>());
|
||||
|
||||
extension.AddEvent("Comment", _("Comment"),
|
||||
_("Event displaying a text in the events editor"),
|
||||
"", "res/comment.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::CommentEvent));
|
||||
std::make_shared<gd::CommentEvent>());
|
||||
|
||||
extension.AddEvent("While", _("While"),
|
||||
_("The event is repeated while the conditions are true"),
|
||||
"", "res/while.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::WhileEvent));
|
||||
std::make_shared<gd::WhileEvent>());
|
||||
|
||||
extension.AddEvent("Repeat", _("Repeat"),
|
||||
_("Event repeated a number of times"),
|
||||
"", "res/repeat.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::RepeatEvent));
|
||||
std::make_shared<gd::RepeatEvent>());
|
||||
|
||||
extension.AddEvent("ForEach", _("For each object"),
|
||||
_("Repeat the event for each specified object."),
|
||||
"", "res/foreach.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::ForEachEvent));
|
||||
std::make_shared<gd::ForEachEvent>());
|
||||
|
||||
extension.AddEvent("Group", _("Group"),
|
||||
_("Group containing events"),
|
||||
"", "res/foreach.png",
|
||||
std::shared_ptr<gd::BaseEvent>(new gd::GroupEvent));
|
||||
std::make_shared<gd::GroupEvent>());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -22,7 +22,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsExternalLayoutsExtensio
|
||||
extension.AddAction("CreateObjectsFromExternalLayout",
|
||||
_("Create objects from an external layout"),
|
||||
_("Create objects from an external layout."),
|
||||
_("Create objects from the external layout _PARAM1_"),
|
||||
_("Create objects from the external layout named _PARAM1_"),
|
||||
_("External layouts"),
|
||||
"res/conditions/fichier24.png",
|
||||
"res/conditions/fichier.png")
|
||||
|
@@ -32,7 +32,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(gd::Platf
|
||||
|
||||
extension.AddAction("LoadFile",
|
||||
_("Load a structured file in memory"),
|
||||
_("This action load the structured file in memory, so as to write and read it.\nYou can open and write without using this action, but it will be slower.\nIf you use this action, do not forget to unload the file from memory.\n\nFor the native platform, the file format is XML."),
|
||||
_("This action loads the structured file in memory, so you can write and read it.\nYou can open and write without using this action, but it will be slower.\nIf you use this action, do not forget to unload the file from memory.\n\nFor the native platform, the file format is XML."),
|
||||
_("Load structured file _PARAM0_ in memory"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
@@ -42,7 +42,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(gd::Platf
|
||||
|
||||
extension.AddAction("UnloadFile",
|
||||
_("Close a structured file"),
|
||||
_("This action close the structured file previously loaded in memory, saving all changes made."),
|
||||
_("This action closes the structured file previously loaded in memory, saving all changes made."),
|
||||
_("Close structured file _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
@@ -98,7 +98,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(gd::Platf
|
||||
|
||||
extension.AddAction("DeleteGroupFichier",
|
||||
_("Delete an element"),
|
||||
_("This action delete the specified element from the structured file.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names."),
|
||||
_("This action deletes the specified element from the structured file.\nSpecify the structure leading to the element using / (example : Root/Level/Current)\nSpaces are forbidden in element names."),
|
||||
_("Delete _PARAM1_ from the file _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/delete24.png",
|
||||
@@ -127,8 +127,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(gd::Platf
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddAction("LaunchFile",
|
||||
_("Open an URL or a file"),
|
||||
_("This action launch the specified file or URL, in a browser (or in a new tab if the game is using the Web platform and is launched inside a browser)."),
|
||||
_("Open a URL or a file"),
|
||||
_("This action launches the specified file or URL, in a browser (or in a new tab if the game is using the Web platform and is launched inside a browser)."),
|
||||
_("Open URL (or file) _PARAM0_"),
|
||||
_("Files"),
|
||||
"res/actions/launchFile24.png",
|
||||
@@ -138,7 +138,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(gd::Platf
|
||||
|
||||
extension.AddAction("ExecuteCmd",
|
||||
_("Execute a command"),
|
||||
_("This action execute the specified command."),
|
||||
_("This action executes the specified command."),
|
||||
_("Execute _PARAM0_"),
|
||||
_("Files"),
|
||||
"res/actions/launchFile24.png",
|
||||
|
@@ -14,14 +14,14 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsJoystickExtension(gd::P
|
||||
{
|
||||
extension.SetExtensionInformation("BuiltinJoystick",
|
||||
_("Joysticks features"),
|
||||
_("Built-in extension allowing to use joysticks"),
|
||||
_("Built-in extension that enables the use of joysticks"),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)");
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
extension.AddCondition("JoystickButtonDown",
|
||||
_("A button of a joystick is pressed"),
|
||||
_("Test if a button of a joystick is pressed."),
|
||||
_("A button on a joystick is pressed"),
|
||||
_("Test if a button on a joystick is pressed."),
|
||||
_("The button _PARAM2_ of joystick _PARAM1_ is pressed"),
|
||||
_("Joystick"),
|
||||
"res/conditions/joystick24.png",
|
||||
@@ -46,7 +46,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsJoystickExtension(gd::P
|
||||
|
||||
extension.AddAction("GetJoystickAxis",
|
||||
_("Get the value of the axis of a joystick"),
|
||||
_("Save in the variable the value of the axis of the joystick (from -100 to 100)."),
|
||||
_("Save the value of the axis of the joystick (from -100 to 100)."),
|
||||
_("Save in _PARAM3_ the value of axis _PARAM2_ of joystick _PARAM1_"),
|
||||
_("Joystick"),
|
||||
"res/actions/joystick24.png",
|
||||
@@ -54,7 +54,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsJoystickExtension(gd::P
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("expression", _("Joystick number (first joystick: 0)"))
|
||||
.AddParameter("joyaxis", _("Axis"))
|
||||
.AddParameter("scenevar", _("Save result to scene variable"))
|
||||
.AddParameter("scenevar", _("Save the result to the scene variable"))
|
||||
.SetManipulatedType("number");
|
||||
|
||||
extension.AddExpression("GetJoystickAxis",
|
||||
|
@@ -14,7 +14,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsKeyboardExtension(gd::P
|
||||
{
|
||||
extension.SetExtensionInformation("BuiltinKeyboard",
|
||||
_("Keyboard features"),
|
||||
_("Built-in extension allowing to use keyboard"),
|
||||
_("Built-in extension that enables the use of a keyboard"),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)");
|
||||
|
||||
|
@@ -14,7 +14,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(gd::Plat
|
||||
{
|
||||
extension.SetExtensionInformation("BuiltinMouse",
|
||||
_("Mouse features"),
|
||||
_("Built-in extension allowing to use the mouse"),
|
||||
_("Built-in extension that enables the use of a mouse"),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)");
|
||||
|
||||
@@ -34,8 +34,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(gd::Plat
|
||||
.MarkAsSimple();
|
||||
|
||||
extension.AddAction("TouchSimulateMouse",
|
||||
_("De/activate moving mouse cursor with touches"),
|
||||
_("When activated, any touch made on a touchscreen will also move the mouse cursor. When deactivated, mouse and touch positions will be completely independant.\nBy default, this is activated so that you can simply use the mouse conditions to also support touchscreens. If you want to have multitouch and differentiate mouse and touches, just deactivate it with this action."),
|
||||
_("De/activate moving the mouse cursor with touches"),
|
||||
_("When activated, any touch made on a touchscreen will also move the mouse cursor. When deactivated, mouse and touch positions will be completely independent.\nBy default, this is activated so that you can simply use the mouse conditions to also support touchscreens. If you want to have multitouch and differentiate mouse movement and touches, just deactivate it with this action."),
|
||||
_("Move mouse cursor when touching screen: _PARAM1_"),
|
||||
_("Mouse and touch"),
|
||||
"res/conditions/touch24.png",
|
||||
@@ -141,8 +141,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(gd::Plat
|
||||
.SetManipulatedType("number");
|
||||
|
||||
extension.AddCondition("SourisBouton",
|
||||
_("Mouse button down or touch held"),
|
||||
_("Return true if the specified button of the mouse is down or if any touch is in contact with the screen."),
|
||||
_("Mouse button pressed or touch held"),
|
||||
_("Return true if the specified mouse button is pressed or if a touch is in contact with the screen."),
|
||||
_("Touch or _PARAM1_ mouse button is down"),
|
||||
_("Mouse and touch"),
|
||||
"res/conditions/mouse24.png",
|
||||
@@ -153,7 +153,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(gd::Plat
|
||||
|
||||
extension.AddCondition("MouseButtonReleased",
|
||||
_("Mouse button released"),
|
||||
_("Return true if the specified button of the mouse was released."),
|
||||
_("Return true if the specified mouse button was released."),
|
||||
_("_PARAM1_ mouse button was released"),
|
||||
_("Mouse and touch"),
|
||||
"res/conditions/mouse24.png",
|
||||
@@ -194,7 +194,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(gd::Plat
|
||||
|
||||
extension.AddCondition("PopStartedTouch",
|
||||
_("A new touch has started"),
|
||||
_("Return true if a touch has started. The touch identifier can be accessed using LastTouchId().\nAs more than one touch can have started, this condition is only true once for each touch: the next time you use it, it will be for a new touch or it will return false if there is no more touch that just started."),
|
||||
_("Return true if a touch has started. The touch identifier can be accessed using LastTouchId().\nAs more than one touch can be started, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just started."),
|
||||
_("A new touch has started"),
|
||||
_("Mouse and touch/Multitouch"),
|
||||
"res/conditions/touch24.png",
|
||||
@@ -203,7 +203,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(gd::Plat
|
||||
|
||||
extension.AddCondition("PopEndedTouch",
|
||||
_("A touch has ended"),
|
||||
_("Return true if a touch has ended. The touch identifier can be accessed using LastEndedTouchId().\nAs more than one touch can have ended, this condition is only true once for each touch: the next time you use it, it will be for a new touch or it will return false if there is no more touch that just ended."),
|
||||
_("Return true if a touch has ended. The touch identifier can be accessed using LastEndedTouchId().\nAs more than one touch can be ended, this condition is only true once for each touch: the next time you use it, it will be for a new touch, or it will return false if no more touches have just ended."),
|
||||
_("A touch has ended"),
|
||||
_("Mouse and touch/Multitouch"),
|
||||
"res/conditions/touch24.png",
|
||||
|
@@ -20,9 +20,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsNetworkExtension(gd::Pl
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
extension.AddAction("EnvoiDataNet",
|
||||
_("Send datas to a website"),
|
||||
_("Send datas to a specified web site.\nYou need to set up a .php page on your web site so as to receive this datas.\nEnter here a password, and enter the same in the configuration of your .php page.\nRead the help file to get more informations."),
|
||||
_("Send to _PARAM0_ the following datas : _PARAM2_, _PARAM3_,_PARAM4_,_PARAM5_,_PARAM6_,_PARAM7_"),
|
||||
_("Send data to a website"),
|
||||
_("Send data to a specified web site.\nYou need to set up a .php page on your web site to receive this data.\nEnter a password here, and enter the same password in the configuration of your .php page.\nRead the help file to get more information."),
|
||||
_("Send to _PARAM0_ the following data : _PARAM2_, _PARAM3_,_PARAM4_,_PARAM5_,_PARAM6_,_PARAM7_"),
|
||||
_("Network"),
|
||||
"res/actions/net24.png",
|
||||
"res/actions/net.png")
|
||||
@@ -63,7 +63,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsNetworkExtension(gd::Pl
|
||||
.AddParameter("string", _("Save as"));
|
||||
|
||||
extension.AddAction("JSONToVariableStructure",
|
||||
_("Convert JSON to variable"),
|
||||
_("Convert JSON to a variable"),
|
||||
_("Parse a JSON object and store it into a variable"),
|
||||
_("Parse JSON string _PARAM0_ and store it into variable _PARAM1_"),
|
||||
_("Network"),
|
||||
@@ -73,12 +73,50 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsNetworkExtension(gd::Pl
|
||||
.AddParameter("scenevar", _("Variable where store the JSON object"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddAction("JSONToGlobalVariableStructure",
|
||||
_("Convert JSON to global variable"),
|
||||
_("Parse a JSON object and store it into a global variable"),
|
||||
_("Parse JSON string _PARAM0_ and store it into global variable _PARAM1_"),
|
||||
_("Network"),
|
||||
"res/actions/net24.png",
|
||||
"res/actions/net.png")
|
||||
.AddParameter("string", _("JSON string"))
|
||||
.AddParameter("globalvar", _("Global variable where store the JSON object"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddAction("JSONToObjectVariableStructure",
|
||||
_("Convert JSON to object variable"),
|
||||
_("Parse a JSON object and store it into an object variable"),
|
||||
_("Parse JSON string _PARAM0_ and store it into variable _PARAM2_ of _PARAM1_"),
|
||||
_("Network"),
|
||||
"res/actions/net24.png",
|
||||
"res/actions/net.png")
|
||||
.AddParameter("string", _("JSON string"))
|
||||
.AddParameter("objectPtr", _("Object"))
|
||||
.AddParameter("objectvar", _("Object variable where store the JSON object"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension.AddStrExpression("ToJSON",
|
||||
_("Convert to JSON"),
|
||||
_("Convert variable to JSON"),
|
||||
_("Convert a variable to JSON"),
|
||||
_("Conversion"),
|
||||
"res/conditions/toujours24.png")
|
||||
.AddParameter("scenevar", _("The variable to be stringify"));
|
||||
.AddParameter("scenevar", _("The variable to be stringified"));
|
||||
|
||||
extension.AddStrExpression("GlobalVarToJSON",
|
||||
_("Convert global variable to JSON"),
|
||||
_("Convert a global variable to JSON"),
|
||||
_("Conversion"),
|
||||
"res/conditions/toujours24.png")
|
||||
.AddParameter("globalvar", _("The global variable to be stringified"));
|
||||
|
||||
extension.AddStrExpression("ObjectVarToJSON",
|
||||
_("Convert object variable to JSON"),
|
||||
_("Convert an object variable to JSON"),
|
||||
_("Conversion"),
|
||||
"res/conditions/toujours24.png")
|
||||
.AddParameter("objectPtr", _("The object with the variable"))
|
||||
.AddParameter("objectvar", _("The object variable to be stringified"));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -14,7 +14,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSceneExtension(gd::Plat
|
||||
{
|
||||
extension.SetExtensionInformation("BuiltinScene",
|
||||
_("Scene management features"),
|
||||
_("Built-in extension allowing to manipulate scenes"),
|
||||
_("This Built-in extension allows you to manipulate scenes"),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)");
|
||||
|
||||
@@ -50,7 +50,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSceneExtension(gd::Plat
|
||||
|
||||
extension.AddAction("PushScene",
|
||||
_("Pause and start a new scene"),
|
||||
_("Pause this scene and start the specified one.\nLater, you can use \"Stop and go back to previous scene\" action to go back to this scene."),
|
||||
_("Pause this scene and start the specified one.\nLater, you can use the \"Stop and go back to previous scene\" action to go back to this scene."),
|
||||
_("Pause the scene and start _PARAM1_"),
|
||||
_("Scene"),
|
||||
"res/actions/pushScene24.png",
|
||||
@@ -61,7 +61,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSceneExtension(gd::Plat
|
||||
|
||||
extension.AddAction("PopScene",
|
||||
_("Stop and go back to previous scene"),
|
||||
_("Stop this scene and go back to the previous paused one.\nTo pause a scene, use \"Pause and start a new scene\" action."),
|
||||
_("Stop this scene and go back to the previous paused one.\nTo pause a scene, use the \"Pause and start a new scene\" action."),
|
||||
_("Stop the scene and go back to the previous paused one"),
|
||||
_("Scene"),
|
||||
"res/actions/popScene24.png",
|
||||
@@ -92,7 +92,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSceneExtension(gd::Plat
|
||||
|
||||
extension.AddAction("DisableInputWhenFocusIsLost",
|
||||
_("Disable input when focus is lost"),
|
||||
_("Set if the keyboard and mouse buttons must be taken into account even\nif the window is not active."),
|
||||
_("Decide if the keyboard and mouse buttons must be taken into account even\nif the window is not active."),
|
||||
_("Disable input when focus is lost: _PARAM1_"),
|
||||
_("Scene"),
|
||||
"res/actions/window24.png",
|
||||
@@ -103,7 +103,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSceneExtension(gd::Plat
|
||||
|
||||
extension.AddCondition("Egal",
|
||||
_("Compare two expressions"),
|
||||
_("Test the two expression"),
|
||||
_("Test the two expressions"),
|
||||
_("_PARAM0_ _PARAM1_ _PARAM2_"),
|
||||
_("Other"),
|
||||
"res/conditions/egal24.png",
|
||||
|
@@ -7,6 +7,7 @@
|
||||
#ifndef GDCORE_ANIMATION_H
|
||||
#define GDCORE_ANIMATION_H
|
||||
#include <vector>
|
||||
#include "GDCore/String.h"
|
||||
namespace gd { class Direction; }
|
||||
|
||||
namespace gd
|
||||
@@ -25,6 +26,16 @@ public:
|
||||
Animation();
|
||||
virtual ~Animation();
|
||||
|
||||
/**
|
||||
* \brief Set the name of the animation
|
||||
*/
|
||||
const gd::String & GetName() const { return name; }
|
||||
|
||||
/**
|
||||
* \brief Change the name of the animation
|
||||
*/
|
||||
void SetName(const gd::String & name_) { name = name_; }
|
||||
|
||||
/**
|
||||
* \brief Return the n-th direction
|
||||
*/
|
||||
@@ -55,10 +66,27 @@ public:
|
||||
*/
|
||||
bool HasNoDirections() const;
|
||||
|
||||
bool useMultipleDirections;
|
||||
/**
|
||||
* \brief Return true if the animation is composed of more than one direction.
|
||||
*
|
||||
* By default, an animation is composed of a single direction, and the sprite
|
||||
* is rotated.
|
||||
*/
|
||||
bool UseMultipleDirections() const { return useMultipleDirections; }
|
||||
|
||||
/**
|
||||
* \brief Set if the animation is using more than one direction.
|
||||
*
|
||||
* By default, an animation is composed of a single direction, and the sprite
|
||||
* is rotated.
|
||||
*/
|
||||
void SetUseMultipleDirections(bool enable) { useMultipleDirections = enable; }
|
||||
|
||||
bool useMultipleDirections; ///< deprecated This should be moved to class private members
|
||||
|
||||
private:
|
||||
std::vector < Direction > directions;
|
||||
gd::String name;
|
||||
|
||||
static Direction badDirection;
|
||||
};
|
||||
|