Compare commits
141 Commits
v5.0.0-bet
...
v5.0.0-bet
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2b40f57189 | ||
![]() |
fc3f8a945b | ||
![]() |
ed24871130 | ||
![]() |
e416fb0586 | ||
![]() |
5778131deb | ||
![]() |
8e81f78596 | ||
![]() |
1abdcaf0c0 | ||
![]() |
4af867ba3a | ||
![]() |
f75c2297d7 | ||
![]() |
72c4f88936 | ||
![]() |
34bcfdfee7 | ||
![]() |
7e78d4de5a | ||
![]() |
971b7a2322 | ||
![]() |
9a95aabc87 | ||
![]() |
53dcfa1cbf | ||
![]() |
0ed7ccfb72 | ||
![]() |
0fcd5cbbb9 | ||
![]() |
fb6b959636 | ||
![]() |
1d7f0f9f94 | ||
![]() |
4be527c18a | ||
![]() |
5e770d460d | ||
![]() |
73daf0e940 | ||
![]() |
58d88835c5 | ||
![]() |
0aa66837d4 | ||
![]() |
11349086c7 | ||
![]() |
d3d636744e | ||
![]() |
5baf2d9735 | ||
![]() |
d0daf0b5a8 | ||
![]() |
21841e0bce | ||
![]() |
417ab2ff3d | ||
![]() |
caee5fdcc7 | ||
![]() |
1fbd58fa75 | ||
![]() |
389deadac5 | ||
![]() |
7d52165a82 | ||
![]() |
5e3e7e25fc | ||
![]() |
56afb11e2c | ||
![]() |
b6a0cfef32 | ||
![]() |
37c3a6d38a | ||
![]() |
30f830589c | ||
![]() |
5f8546c3b9 | ||
![]() |
4c2997b2d9 | ||
![]() |
2338b5bfd6 | ||
![]() |
8a07e9b6c5 | ||
![]() |
61303c7cf9 | ||
![]() |
43eaf30750 | ||
![]() |
db278485fc | ||
![]() |
3f5b42dc90 | ||
![]() |
cd285b5676 | ||
![]() |
509ac8966e | ||
![]() |
bda2a10b5f | ||
![]() |
841e1a66b6 | ||
![]() |
3fc588b6e3 | ||
![]() |
50ebf6e5a2 | ||
![]() |
cbe33d2bd1 | ||
![]() |
8c8c297adb | ||
![]() |
a8d927994b | ||
![]() |
1fb3231f98 | ||
![]() |
70a58f1bd4 | ||
![]() |
302bcb718f | ||
![]() |
857c706f48 | ||
![]() |
5b5f91c1f9 | ||
![]() |
0652e19190 | ||
![]() |
5feb4caa31 | ||
![]() |
1cd5519b93 | ||
![]() |
96761c461d | ||
![]() |
1a82663968 | ||
![]() |
9111b56eb3 | ||
![]() |
d7f22bcf26 | ||
![]() |
b9b0ed812d | ||
![]() |
6734644df4 | ||
![]() |
ddeff6bfae | ||
![]() |
8f10eac512 | ||
![]() |
162524f779 | ||
![]() |
1da347b08b | ||
![]() |
01b7f81507 | ||
![]() |
5a3d2cc2b9 | ||
![]() |
cb659eee6d | ||
![]() |
0f24410a2e | ||
![]() |
a31ea1475d | ||
![]() |
0cecf685ca | ||
![]() |
f39af51fda | ||
![]() |
704eaacc7e | ||
![]() |
1f7bec0ff1 | ||
![]() |
69ffa45ea9 | ||
![]() |
2558052a61 | ||
![]() |
abf40200cb | ||
![]() |
2fd4459364 | ||
![]() |
2ed9088b58 | ||
![]() |
f69b9132ad | ||
![]() |
fb7d3d589d | ||
![]() |
87acba5105 | ||
![]() |
2d314ff51b | ||
![]() |
5054678193 | ||
![]() |
aaf9d318a9 | ||
![]() |
cc92445d4c | ||
![]() |
1649591442 | ||
![]() |
77faff3919 | ||
![]() |
873280d818 | ||
![]() |
238b6a2a09 | ||
![]() |
98d0d5102e | ||
![]() |
47818846e7 | ||
![]() |
8276eda243 | ||
![]() |
ca2e00bd91 | ||
![]() |
6177b0197e | ||
![]() |
fb65b56cb7 | ||
![]() |
6f780f79e9 | ||
![]() |
d31f0793d5 | ||
![]() |
88c88ad1eb | ||
![]() |
4202e2672d | ||
![]() |
f29cc503bf | ||
![]() |
1aa81949ce | ||
![]() |
4593f09131 | ||
![]() |
782ea0e0af | ||
![]() |
8e893e660b | ||
![]() |
384346c54e | ||
![]() |
df3920cce3 | ||
![]() |
6e9ff4b682 | ||
![]() |
df161c48fd | ||
![]() |
ee6a337e71 | ||
![]() |
d5146a0c65 | ||
![]() |
eae4683c4f | ||
![]() |
dec96a2f3a | ||
![]() |
9610eeb6e5 | ||
![]() |
213cd0a8c7 | ||
![]() |
8a117c1813 | ||
![]() |
73ff10bb1f | ||
![]() |
300efbbd5c | ||
![]() |
2e240643a2 | ||
![]() |
aa16e90aac | ||
![]() |
137ffc2b84 | ||
![]() |
34b460e968 | ||
![]() |
30cb0bcfb3 | ||
![]() |
1b7a667c79 | ||
![]() |
9a4655eefc | ||
![]() |
ca9a0d3d37 | ||
![]() |
10d8d6c4a8 | ||
![]() |
a7f4da8e40 | ||
![]() |
40b3c688d1 | ||
![]() |
fc340b9477 | ||
![]() |
cc810b3e9f | ||
![]() |
7d165660a5 |
@@ -69,6 +69,7 @@ script:
|
||||
- cd newIDE/app
|
||||
- npm test
|
||||
- npm run flow
|
||||
- npm run check-format
|
||||
- cd ../..
|
||||
#GDJS game engine tests, disabled on Travis CI because ChromeHeadless can't be started.
|
||||
#See them running on Semaphore-CI instead: https://semaphoreci.com/4ian/gd
|
||||
|
1
.vscode/settings.json
vendored
@@ -97,6 +97,7 @@
|
||||
// Support for Flowtype:
|
||||
"javascript.validate.enable": false,
|
||||
"flow.useNPMPackagedFlow": true,
|
||||
"flow.useLSP": false, // As we are in a monorepo, see https://github.com/flowtype/flow-for-vscode/issues/301
|
||||
|
||||
// Clang format styling (duplicated in scripts/CMakeClangUtils.txt)
|
||||
"C_Cpp.clang_format_style": "{BasedOnStyle: Google, BinPackParameters: false, BinPackArguments: false}"
|
||||
|
After Width: | Height: | Size: 462 B |
After Width: | Height: | Size: 722 B |
After Width: | Height: | Size: 935 B |
@@ -0,0 +1,194 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_create_folder.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/create_folder16.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.919596"
|
||||
inkscape:cx="-14.99721"
|
||||
inkscape:cy="14.343353"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-midpoints="false"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<path
|
||||
style="opacity:1;fill:#80bbdb;fill-opacity:1;fill-rule:nonzero;stroke:#548dad;stroke-width:0.97142506;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 10.44448,1025.9309 c 0.65513,0 1.18165,0.5595 1.18165,1.2556 l 0,1.2733 16.256617,0 c 1.376723,0 2.484776,1.1774 2.484776,2.6403 l 0,13.0531 c 0,1.4629 -1.108053,2.6403 -2.484776,2.6403 l -23.7654964,0 c -1.3767228,0 -2.4847757,-1.1774 -2.4847757,-2.6403 l 0,-10.7551 0,-2.298 0,-3.9136 c 0,-0.6961 0.5265186,-1.2556 1.1816486,-1.2556 z"
|
||||
id="rect4901"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sscssssssccsss" />
|
||||
<path
|
||||
style="opacity:1;fill:#5fa1c7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2.1084458,1031.4784 0,0.7321 0,11.4039 c 0,1.5514 1.0713447,2.7998 2.4024592,2.7998 l 22.978188,0 c 1.331114,0 2.40246,-1.2484 2.40246,-2.7998 l 0,-12.136 -27.7831072,0 z"
|
||||
id="path4919"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="opacity:1;fill:#d9db30;fill-opacity:1;fill-rule:nonzero;stroke:#bec021;stroke-width:1.38540256;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4939"
|
||||
sodipodi:sides="5"
|
||||
sodipodi:cx="24.252151"
|
||||
sodipodi:cy="1028.8562"
|
||||
sodipodi:r1="7.8899426"
|
||||
sodipodi:r2="3.9449718"
|
||||
sodipodi:arg1="0.79249024"
|
||||
sodipodi:arg2="1.4208088"
|
||||
inkscape:flatsided="false"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 29.791477,1034.4747 -4.949845,-1.7178 -4.221206,3.1037 0.104117,-5.2384 -4.256247,-3.0555 5.014193,-1.5197 1.590701,-4.9922 2.994825,4.2992 5.239353,-0.03 -3.163289,4.1767 z"
|
||||
inkscape:transform-center-x="0.36431952"
|
||||
inkscape:transform-center-y="-0.39846334" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 545 B |
After Width: | Height: | Size: 771 B |
After Width: | Height: | Size: 944 B |
@@ -0,0 +1,206 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_file_delete.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/filesystem_file_delete32.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6"
|
||||
inkscape:cx="56.026486"
|
||||
inkscape:cy="-2.8092946"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-midpoints="false"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px"
|
||||
inkscape:snap-grids="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
id="g4225"
|
||||
transform="matrix(1.1128183,0,0,1.1128183,55.344213,-128.05315)">
|
||||
<path
|
||||
id="rect4177"
|
||||
transform="translate(-9.5367432e-7,1020.3622)"
|
||||
d="m -43.681641,13.882812 c -0.563451,0 -1.017578,0.452174 -1.017578,1.015626 l 0,22.210937 c 0,0.563451 0.454127,1.015625 1.017578,1.015625 l 16.652344,0 c 0.563451,0 1.017578,-0.452174 1.017578,-1.015625 l 0,-15.246094 -6.05664,-7.980469 -11.613282,0 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4218"
|
||||
d="m -31.837816,1034.2449 0,7.043 c 0,0.3498 0.283047,0.6328 0.632812,0.6328 l 5.19336,0 -5.826172,-7.6758 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<rect
|
||||
style="opacity:1;fill:#a6a6a6;fill-opacity:1;fill-rule:nonzero;stroke:#5a5a5a;stroke-width:0.99999934;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4158"
|
||||
width="8.9121208"
|
||||
height="8.7162371"
|
||||
x="10.293939"
|
||||
y="1038.0229" />
|
||||
<rect
|
||||
style="opacity:1;fill:#a6a6a6;fill-opacity:1;fill-rule:nonzero;stroke:#5a5a5a;stroke-width:0.99999934;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4160"
|
||||
width="8.9631233"
|
||||
height="2.6948419"
|
||||
x="-516.44586"
|
||||
y="897.6803"
|
||||
inkscape:transform-center-x="-3.1829089"
|
||||
inkscape:transform-center-y="-3.4427076"
|
||||
transform="matrix(0.86246101,-0.50612351,0.50612351,0.86246101,0,0)" />
|
||||
<rect
|
||||
y="1044.6921"
|
||||
x="8.1238213"
|
||||
height="1.985044"
|
||||
width="2.0916421"
|
||||
id="rect4162"
|
||||
style="opacity:1;fill:#a6a6a6;fill-opacity:1;fill-rule:nonzero;stroke:#5a5a5a;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 556 B |
After Width: | Height: | Size: 741 B |
After Width: | Height: | Size: 974 B |
@@ -0,0 +1,181 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_file.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/filesystem_file16.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.959798"
|
||||
inkscape:cx="-51.539982"
|
||||
inkscape:cy="23.000437"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-midpoints="false"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
id="g4225"
|
||||
transform="matrix(1.1128183,0,0,1.1128183,55.344213,-128.05315)">
|
||||
<path
|
||||
id="rect4177"
|
||||
transform="translate(-9.5367432e-7,1020.3622)"
|
||||
d="m -43.681641,13.882812 c -0.563451,0 -1.017578,0.452174 -1.017578,1.015626 l 0,22.210937 c 0,0.563451 0.454127,1.015625 1.017578,1.015625 l 16.652344,0 c 0.563451,0 1.017578,-0.452174 1.017578,-1.015625 l 0,-15.246094 -6.05664,-7.980469 -11.613282,0 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4218"
|
||||
d="m -31.837816,1034.2449 0,7.043 c 0,0.3498 0.283047,0.6328 0.632812,0.6328 l 5.19336,0 -5.826172,-7.6758 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 376 B |
After Width: | Height: | Size: 482 B |
After Width: | Height: | Size: 612 B |
@@ -0,0 +1,177 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_folder.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/filesystem_folder16.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.919596"
|
||||
inkscape:cx="3.5385856"
|
||||
inkscape:cy="13.013876"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-midpoints="false"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<path
|
||||
style="opacity:1;fill:#80bbdb;fill-opacity:1;fill-rule:nonzero;stroke:#548dad;stroke-width:0.97142506;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 10.44448,1025.9309 c 0.65513,0 1.18165,0.5595 1.18165,1.2556 l 0,1.2733 16.256617,0 c 1.376723,0 2.484776,1.1774 2.484776,2.6403 l 0,13.0531 c 0,1.4629 -1.108053,2.6403 -2.484776,2.6403 l -23.7654964,0 c -1.3767228,0 -2.4847757,-1.1774 -2.4847757,-2.6403 l 0,-10.7551 0,-2.298 0,-3.9136 c 0,-0.6961 0.5265186,-1.2556 1.1816486,-1.2556 z"
|
||||
id="rect4901"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sscssssssccsss" />
|
||||
<path
|
||||
style="opacity:1;fill:#5fa1c7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2.1084458,1031.4784 0,0.7321 0,11.4039 c 0,1.5514 1.0713447,2.7998 2.4024592,2.7998 l 22.978188,0 c 1.331114,0 2.40246,-1.2484 2.40246,-2.7998 l 0,-12.136 -27.7831072,0 z"
|
||||
id="path4919"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 356 B |
After Width: | Height: | Size: 465 B |
After Width: | Height: | Size: 488 B |
@@ -0,0 +1,203 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_load_file.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/filesystem_load_file16.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6"
|
||||
inkscape:cx="-15.256846"
|
||||
inkscape:cy="-4.5327826"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
id="g4206">
|
||||
<path
|
||||
id="rect4177"
|
||||
d="m 6.7344825,1022.8736 c -0.6270186,0 -1.1323794,0.5032 -1.1323794,1.1303 l 0,24.7167 c 0,0.627 0.5053608,1.1302 1.1323794,1.1302 l 18.5310335,0 c 0.627018,0 1.132379,-0.5032 1.132379,-1.1302 l 0,-16.9661 -6.73994,-8.8809 -12.9234725,0 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.66922748;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4218"
|
||||
d="m 19.914509,1022.8735 0,7.8376 c 0,0.3892 0.31498,0.7042 0.704204,0.7042 l 5.779267,0 -6.483471,-8.5418 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.66922748;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
id="g4202"
|
||||
transform="translate(-0.22767735,0)">
|
||||
<ellipse
|
||||
style="opacity:1;fill:#d4d68c;fill-opacity:1;fill-rule:nonzero;stroke:#c8cb6c;stroke-width:0.69685775;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="ellipse4194"
|
||||
cx="16.227676"
|
||||
cy="1044.2556"
|
||||
rx="7.8167491"
|
||||
ry="1.7860432" />
|
||||
<ellipse
|
||||
ry="0.47607893"
|
||||
rx="3.9621422"
|
||||
cy="1044.1664"
|
||||
cx="16.227676"
|
||||
id="ellipse4198"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.45964342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#368fac;fill-opacity:1;fill-rule:evenodd;stroke:#2b7188;stroke-width:0.81720334;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 15.999999,1032.9608 -4.451864,5.7416 2.225932,0 0,5.1577 4.451864,0 0,-5.1577 2.225932,0 z"
|
||||
id="path4210"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 544 B |
After Width: | Height: | Size: 795 B |
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,189 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_path_exists.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/filesystem_path_exists16.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.919596"
|
||||
inkscape:cx="3.5385856"
|
||||
inkscape:cy="13.013876"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-midpoints="false"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<path
|
||||
style="opacity:1;fill:#80bbdb;fill-opacity:1;fill-rule:nonzero;stroke:#548dad;stroke-width:0.97142506;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 10.44448,1025.9309 c 0.65513,0 1.18165,0.5595 1.18165,1.2556 l 0,1.2733 16.256617,0 c 1.376723,0 2.484776,1.1774 2.484776,2.6403 l 0,13.0531 c 0,1.4629 -1.108053,2.6403 -2.484776,2.6403 l -23.7654964,0 c -1.3767228,0 -2.4847757,-1.1774 -2.4847757,-2.6403 l 0,-10.7551 0,-2.298 0,-3.9136 c 0,-0.6961 0.5265186,-1.2556 1.1816486,-1.2556 z"
|
||||
id="rect4901"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sscssssssccsss" />
|
||||
<path
|
||||
style="opacity:1;fill:#5fa1c7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 2.1084458,1031.4784 0,0.7321 0,11.4039 c 0,1.5514 1.0713447,2.7998 2.4024592,2.7998 l 22.978188,0 c 1.331114,0 2.40246,-1.2484 2.40246,-2.7998 l 0,-12.136 -27.7831072,0 z"
|
||||
id="path4919"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:33.25431824px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#9b80db;fill-opacity:1;stroke:#6e6f5e;stroke-width:1.19503343;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="5.8434677"
|
||||
y="1048.4673"
|
||||
id="text4229"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4231"
|
||||
x="5.8434677"
|
||||
y="1048.4673"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, ';fill:#9b80db;fill-opacity:1;stroke:#6e6f5e;stroke-width:1.19503343;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">?</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 680 B |
After Width: | Height: | Size: 984 B |
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,203 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="filesystem_save_file.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/filesystem_save_file32.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6"
|
||||
inkscape:cx="30.546725"
|
||||
inkscape:cy="-3.8184969"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
id="g4206">
|
||||
<path
|
||||
id="rect4177"
|
||||
d="m 6.7344825,1022.8736 c -0.6270186,0 -1.1323794,0.5032 -1.1323794,1.1303 l 0,24.7167 c 0,0.627 0.5053608,1.1302 1.1323794,1.1302 l 18.5310335,0 c 0.627018,0 1.132379,-0.5032 1.132379,-1.1302 l 0,-16.9661 -6.73994,-8.8809 -12.9234725,0 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.66922748;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4218"
|
||||
d="m 19.914509,1022.8735 0,7.8376 c 0,0.3892 0.31498,0.7042 0.704204,0.7042 l 5.779267,0 -6.483471,-8.5418 z"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:#6e6f5e;stroke-width:1.66922748;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
id="g4202"
|
||||
transform="translate(-0.22767735,0)">
|
||||
<ellipse
|
||||
style="opacity:1;fill:#d4d68c;fill-opacity:1;fill-rule:nonzero;stroke:#c8cb6c;stroke-width:0.69685775;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="ellipse4194"
|
||||
cx="16.227676"
|
||||
cy="1044.2556"
|
||||
rx="7.8167491"
|
||||
ry="1.7860432" />
|
||||
<ellipse
|
||||
ry="0.47607893"
|
||||
rx="3.9621422"
|
||||
cy="1044.1664"
|
||||
cx="16.227676"
|
||||
id="ellipse4198"
|
||||
style="opacity:1;fill:#fcfdf1;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.45964342;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#6aac36;fill-opacity:1;fill-rule:evenodd;stroke:#54882b;stroke-width:0.81720334;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 15.999999,1043.6019 -4.451864,-5.7416 2.225932,0 0,-5.1577 4.451864,0 0,5.1577 2.225932,0 z"
|
||||
id="path4210"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 545 B |
After Width: | Height: | Size: 788 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 835 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 644 B |
After Width: | Height: | Size: 997 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 636 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 485 B |
After Width: | Height: | Size: 752 B |
After Width: | Height: | Size: 899 B |
After Width: | Height: | Size: 629 B |
After Width: | Height: | Size: 931 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 521 B |
After Width: | Height: | Size: 814 B |
After Width: | Height: | Size: 1011 B |
After Width: | Height: | Size: 701 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 560 B |
After Width: | Height: | Size: 898 B |
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,224 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 31.999999 32.000001"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="take_screenshot.svg"
|
||||
inkscape:export-filename="/home/matthias/Programme/GD_MyFork/GDevelop/Binaries/Output/Release_Windows/JsPlatform/Extensions/take_screenshot16.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6933"
|
||||
is_visible="true"
|
||||
pattern="m -9.5367432e-7,1025.3622 c 0,-2.76 2.23999995367432,-5 4.99999995367432,-5 2.76,0 5,2.24 5,5 0,2.76 -2.24,5 -5,5 -2.76,0 -4.99999995367432,-2.24 -4.99999995367432,-5 z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6855"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect6842"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<inkscape:path-effect
|
||||
effect="skeletal"
|
||||
id="path-effect4583"
|
||||
is_visible="true"
|
||||
pattern="M 0,5 C 0,2.24 2.24,0 5,0 7.76,0 10,2.24 10,5 10,7.76 7.76,10 5,10 2.24,10 0,7.76 0,5 Z"
|
||||
copytype="single_stretched"
|
||||
prop_scale="1"
|
||||
scale_y_rel="false"
|
||||
spacing="0"
|
||||
normal_offset="0"
|
||||
tang_offset="0"
|
||||
prop_units="false"
|
||||
vertical_pattern="false"
|
||||
fuse_tolerance="0" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4234"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#617da1;fill-opacity:1;fill-rule:evenodd;stroke:#617da1;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4231"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313709"
|
||||
inkscape:cx="0.48062283"
|
||||
inkscape:cy="15.066705"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1026"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:snap-intersection-paths="false"
|
||||
inkscape:object-nodes="false"
|
||||
inkscape:snap-smooth-nodes="false"
|
||||
inkscape:snap-midpoints="false"
|
||||
inkscape:snap-nodes="true"
|
||||
units="px">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid6838" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="bg"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="opacity:0"
|
||||
sodipodi:insensitive="true"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.48900003;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5d3b0b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4136"
|
||||
width="537.14288"
|
||||
height="537.14288"
|
||||
x="108.57143"
|
||||
y="232.3622"
|
||||
ry="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="vg"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#535353;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
id="rect4139"
|
||||
width="31.889814"
|
||||
height="20.333548"
|
||||
x="0.055091862"
|
||||
y="1026.1954"
|
||||
ry="2.8092401" />
|
||||
<circle
|
||||
style="opacity:1;fill:#8c8c8c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path4208"
|
||||
cx="15.999999"
|
||||
cy="1038.0809"
|
||||
r="6.34375" />
|
||||
<rect
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4210"
|
||||
width="5.0598979"
|
||||
height="5.2740483"
|
||||
x="2.8781402"
|
||||
y="1028.0603"
|
||||
ry="2.6370242" />
|
||||
<rect
|
||||
style="opacity:1;fill:#535353;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4212"
|
||||
width="11.124999"
|
||||
height="4.3597975"
|
||||
x="19.03125"
|
||||
y="1023.6198"
|
||||
ry="1.2027028" />
|
||||
<rect
|
||||
ry="0.59375"
|
||||
y="1024.6122"
|
||||
x="20.748579"
|
||||
height="2.375"
|
||||
width="7.6903405"
|
||||
id="rect4214"
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<circle
|
||||
r="4.75"
|
||||
cy="1038.0809"
|
||||
cx="15.999999"
|
||||
id="circle4216"
|
||||
style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 500 B |
After Width: | Height: | Size: 684 B |
After Width: | Height: | Size: 909 B |
After Width: | Height: | Size: 567 B |
After Width: | Height: | Size: 840 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 696 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.5 KiB |
@@ -257,7 +257,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(
|
||||
.AddAction("PlaySound",
|
||||
_("Play a sound"),
|
||||
_("Play a sound."),
|
||||
_("Play the sound _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_)"),
|
||||
_("Play the sound _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_"),
|
||||
_("Audio"),
|
||||
"res/actions/son24.png",
|
||||
"res/actions/son.png")
|
||||
@@ -276,7 +276,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsAudioExtension(
|
||||
.AddAction("PlayMusic",
|
||||
_("Play a music file"),
|
||||
_("Play a music file."),
|
||||
_("Play the music _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_)"),
|
||||
_("Play the music _PARAM1_, vol.: _PARAM3_, loop: _PARAM2_"),
|
||||
_("Audio"),
|
||||
"res/actions/music24.png",
|
||||
"res/actions/music.png")
|
||||
|
@@ -176,27 +176,28 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("AddForceXY",
|
||||
_("Add a force"),
|
||||
_("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",
|
||||
"res/actions/force.png")
|
||||
obj.AddAction(
|
||||
"AddForceXY",
|
||||
_("Add a force"),
|
||||
_("Add a force to an object. The object will move according to "
|
||||
"all of the forces it has."),
|
||||
_("Add to _PARAM0_ _PARAM3_ force of _PARAM1_ p/s on X axis and "
|
||||
"_PARAM2_ p/s on Y axis"),
|
||||
_("Movement"),
|
||||
"res/actions/force24.png",
|
||||
"res/actions/force.png")
|
||||
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("expression", _("Speed on X axis (in pixels per second)"))
|
||||
.AddParameter("expression", _("Speed on Y axis (in pixels per second)"))
|
||||
.AddParameter("expression", _("Damping (Default: 0)"));
|
||||
.AddParameter("forceMultiplier", _("Force multiplier"));
|
||||
|
||||
obj.AddAction("AddForceAL",
|
||||
_("Add a force (angle)"),
|
||||
_("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 "
|
||||
_("Add to _PARAM0_ _PARAM3_ force, angle: _PARAM1_ degrees and "
|
||||
"length: _PARAM2_ pixels"),
|
||||
_("Movement"),
|
||||
"res/actions/force24.png",
|
||||
@@ -205,14 +206,14 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("expression", _("Angle"))
|
||||
.AddParameter("expression", _("Speed (in pixels per second)"))
|
||||
.AddParameter("expression", _("Damping (Default: 0)"))
|
||||
.AddParameter("forceMultiplier", _("Force multiplier"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction(
|
||||
"AddForceVersPos",
|
||||
_("Add a force to move toward a position"),
|
||||
_("Add a force to an object to make it move toward a position."),
|
||||
_("Move _PARAM0_ to _PARAM1_;_PARAM2_ with a force of _PARAM3_ "
|
||||
_("Move _PARAM0_ to _PARAM1_;_PARAM2_ with _PARAM4_ force of _PARAM3_ "
|
||||
"pixels"),
|
||||
_("Movement"),
|
||||
"res/actions/force24.png",
|
||||
@@ -222,7 +223,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("expression", _("X position"))
|
||||
.AddParameter("expression", _("Y position"))
|
||||
.AddParameter("expression", _("Speed (in pixels per second)"))
|
||||
.AddParameter("expression", _("Damping (Default: 0)"))
|
||||
.AddParameter("forceMultiplier", _("Force multiplier"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction(
|
||||
@@ -243,13 +244,13 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("expression", _("Y position of the center"))
|
||||
.AddParameter("expression", _("Speed (in Degrees per seconds)"))
|
||||
.AddParameter("expression", _("Distance (in pixels)"))
|
||||
.AddParameter("expression", _("Damping (Default: 0)"))
|
||||
.AddParameter("forceMultiplier", _("Force multiplier"))
|
||||
.SetHidden();
|
||||
|
||||
obj.AddAction("Arreter",
|
||||
_("Stop the object"),
|
||||
_("Stop the object by deleting all of its forces."),
|
||||
_("Stop the object _PARAM0_"),
|
||||
_("Stop object _PARAM0_"),
|
||||
_("Movement"),
|
||||
"res/actions/arreter24.png",
|
||||
"res/actions/arreter.png")
|
||||
@@ -272,7 +273,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
obj.AddAction("ChangePlan",
|
||||
_("Z order"),
|
||||
_("Modify the Z-order of an object"),
|
||||
_("Do _PARAM1__PARAM2_ to z-Order of _PARAM0_"),
|
||||
_("Do _PARAM1__PARAM2_ to Z-order of _PARAM0_"),
|
||||
_("Z order"),
|
||||
"res/actions/planicon24.png",
|
||||
"res/actions/planicon.png")
|
||||
@@ -551,18 +552,19 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("yesorno", _("Activate?"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("AddForceVers",
|
||||
_("Add a force to move toward an object"),
|
||||
_("Add a force to an object to make it move toward another."),
|
||||
_("Move _PARAM0_ to _PARAM1_ with a force of _PARAM2_ pixels"),
|
||||
_("Movement"),
|
||||
"res/actions/forceVers24.png",
|
||||
"res/actions/forceVers.png")
|
||||
obj.AddAction(
|
||||
"AddForceVers",
|
||||
_("Add a force to move toward an object"),
|
||||
_("Add a force to an object to make it move toward another."),
|
||||
_("Move _PARAM0_ to _PARAM1_ with _PARAM3_ force of _PARAM2_ pixels"),
|
||||
_("Movement"),
|
||||
"res/actions/forceVers24.png",
|
||||
"res/actions/forceVers.png")
|
||||
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("objectPtr", _("Target Object"))
|
||||
.AddParameter("expression", _("Speed (in pixels per second)"))
|
||||
.AddParameter("expression", _("Damping (Default: 0)"))
|
||||
.AddParameter("forceMultiplier", _("Force multiplier"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction(
|
||||
@@ -582,7 +584,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("objectPtr", _("Rotate around this object"))
|
||||
.AddParameter("expression", _("Speed (in degrees per second)"))
|
||||
.AddParameter("expression", _("Distance (in pixels)"))
|
||||
.AddParameter("expression", _("Damping (Default: 0)"))
|
||||
.AddParameter("forceMultiplier", _("Force multiplier"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
obj.AddAction("MettreAutour",
|
||||
@@ -640,6 +642,12 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("objectList", _("Objects"))
|
||||
.AddParameter("yesorno",
|
||||
_("Ignore objects that are touching each other on their "
|
||||
"edges, but are not overlapping (default: no)"),
|
||||
"",
|
||||
true)
|
||||
.SetDefaultValue("no")
|
||||
.MarkAsSimple();
|
||||
|
||||
obj.AddCondition("CollisionPoint",
|
||||
@@ -654,13 +662,14 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("expression", _("Y position of the point"))
|
||||
.MarkAsSimple();
|
||||
|
||||
obj.AddCondition("ObjectTimer",
|
||||
_("Value of a timer"),
|
||||
_("Test the elapsed time of a timer."),
|
||||
_("The timer _PARAM1_ of _PARAM0_ is greater than _PARAM2_ seconds"),
|
||||
_("Timers"),
|
||||
"res/conditions/timer24.png",
|
||||
"res/conditions/timer.png")
|
||||
obj.AddCondition(
|
||||
"ObjectTimer",
|
||||
_("Value of a timer"),
|
||||
_("Test the elapsed time of a timer."),
|
||||
_("The timer _PARAM1_ of _PARAM0_ is greater than _PARAM2_ seconds"),
|
||||
_("Timers"),
|
||||
"res/conditions/timer24.png",
|
||||
"res/conditions/timer.png")
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("string", _("Timer's name"))
|
||||
.AddParameter("expression", _("Time in seconds"));
|
||||
@@ -863,10 +872,10 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("objectvar", _("Variable"));
|
||||
|
||||
obj.AddExpression("ObjectTimerElapsedTime",
|
||||
_("Timer value"),
|
||||
_("Value of a timer"),
|
||||
_("Timers"),
|
||||
"res/actions/time.png")
|
||||
_("Timer value"),
|
||||
_("Value of a timer"),
|
||||
_("Timers"),
|
||||
"res/actions/time.png")
|
||||
.AddParameter("object", _("Object"))
|
||||
.AddParameter("string", _("Timer's name"));
|
||||
|
||||
@@ -1046,6 +1055,13 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsBaseObjectExtension(
|
||||
.AddParameter("objectList", _("Object"))
|
||||
.AddParameter("objectList", _("Object"))
|
||||
.AddCodeOnlyParameter("conditionInverted", "")
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("yesorno",
|
||||
_("Ignore objects that are touching each other on their "
|
||||
"edges, but are not overlapping (default: no)"),
|
||||
"",
|
||||
true)
|
||||
.SetDefaultValue("no")
|
||||
.MarkAsSimple();
|
||||
|
||||
extension
|
||||
|
@@ -13,9 +13,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
|
||||
gd::PlatformExtension& extension) {
|
||||
extension
|
||||
.SetExtensionInformation("BuiltinFile",
|
||||
_("Storage and files"),
|
||||
_("Storage"),
|
||||
_("Built-in extension providing functions "
|
||||
"to store data and manipulate files."),
|
||||
"to store data."),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)")
|
||||
.SetExtensionHelpPath("/all-features/storage");
|
||||
@@ -26,55 +26,55 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
|
||||
"GroupExists",
|
||||
_("Existence of a group"),
|
||||
_("Check if an element (example : PlayerState/CurrentLevel) exists "
|
||||
"in the file.\nSpaces are forbidden in element names."),
|
||||
_("_PARAM1_ exists in file _PARAM0_"),
|
||||
"in the stored data.\nSpaces are forbidden in element names."),
|
||||
_("_PARAM1_ exists in storage _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/conditions/fichier24.png",
|
||||
"res/conditions/fichier.png")
|
||||
.AddParameter("file", _("Filename"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.AddParameter("string", _("Group"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension
|
||||
.AddAction(
|
||||
"LoadFile",
|
||||
_("Load a structured file in memory"),
|
||||
_("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"),
|
||||
_("Load a storage in memory"),
|
||||
_("This action loads the specified storage 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 storage from memory."),
|
||||
_("Load storage _PARAM0_ in memory"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("file", _("File"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension
|
||||
.AddAction("UnloadFile",
|
||||
_("Close a structured file"),
|
||||
_("This action closes the structured file previously loaded "
|
||||
_("Close a storage"),
|
||||
_("This action closes the structured data previously loaded "
|
||||
"in memory, saving all changes made."),
|
||||
_("Close structured file _PARAM0_"),
|
||||
_("Close structured data _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("file", _("File"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension
|
||||
.AddAction("EcrireFichierExp",
|
||||
_("Write a value"),
|
||||
_("Write the result of the expression in the file, in the "
|
||||
"specified element.\nSpecify the structure leading to the "
|
||||
"element using / (example : Root/Level/Current)\nSpaces are "
|
||||
"forbidden in element names."),
|
||||
_("Write _PARAM2_ in _PARAM1_ of file _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("file", _("File"))
|
||||
.AddAction(
|
||||
"EcrireFichierExp",
|
||||
_("Write a value"),
|
||||
_("Write the result of the expression in the stored data, in the "
|
||||
"specified element.\nSpecify the structure leading to the "
|
||||
"element using / (example : Root/Level/Current)\nSpaces are "
|
||||
"forbidden in element names."),
|
||||
_("Write _PARAM2_ in _PARAM1_ of storage _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.AddParameter("string", _("Group"))
|
||||
.AddParameter("expression", _("Expression"));
|
||||
|
||||
@@ -82,14 +82,15 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
|
||||
.AddAction(
|
||||
"EcrireFichierTxt",
|
||||
_("Write a text"),
|
||||
_("Write the text in the file, in the specified element.\nSpecify "
|
||||
_("Write the text in the specified storage, in the specified "
|
||||
"element.\nSpecify "
|
||||
"the structure leading to the element using / (example : "
|
||||
"Root/Level/Current)\nSpaces are forbidden in element names."),
|
||||
_("Write _PARAM2_ in _PARAM1_ of file _PARAM0_"),
|
||||
_("Write _PARAM2_ in _PARAM1_ of storage _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("file", _("File"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.AddParameter("string", _("Group"))
|
||||
.AddParameter("string", _("Text"));
|
||||
|
||||
@@ -101,11 +102,11 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
|
||||
"variable.\nSpecify the structure leading to the element using / "
|
||||
"(example : Root/Level/Current)\nSpaces are forbidden in element "
|
||||
"names."),
|
||||
_("Read _PARAM1_ from file _PARAM0_ and store value in _PARAM3_"),
|
||||
_("Read _PARAM1_ from storage _PARAM0_ and store value in _PARAM3_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("file", _("File"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.AddParameter("string", _("Group"))
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("scenevar", _("Scene variables"));
|
||||
@@ -118,11 +119,12 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
|
||||
"variable.\nSpecify the structure leading to the element using / "
|
||||
"(example : Root/Level/Current)\nSpaces are forbidden in element "
|
||||
"names."),
|
||||
_("Read _PARAM1_ from file _PARAM0_ and store as text in _PARAM3_"),
|
||||
_("Read _PARAM1_ from storage _PARAM0_ and store as text in "
|
||||
"_PARAM3_"),
|
||||
_("Storage"),
|
||||
"res/actions/fichier24.png",
|
||||
"res/actions/fichier.png")
|
||||
.AddParameter("file", _("File"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.AddParameter("string", _("Group"))
|
||||
.AddCodeOnlyParameter("currentScene", "")
|
||||
.AddParameter("scenevar", _("Scene variables"));
|
||||
@@ -131,36 +133,37 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsFileExtension(
|
||||
.AddAction("DeleteGroupFichier",
|
||||
_("Delete an element"),
|
||||
_("This action deletes the specified element from the "
|
||||
"structured file.\nSpecify the structure leading to the "
|
||||
"specified storage.\nSpecify the structure leading to the "
|
||||
"element using / (example : Root/Level/Current)\nSpaces are "
|
||||
"forbidden in element names."),
|
||||
_("Delete _PARAM1_ from the file _PARAM0_"),
|
||||
_("Delete _PARAM1_ from storage _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/delete24.png",
|
||||
"res/actions/delete.png")
|
||||
.AddParameter("file", _("Filename"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.AddParameter("string", _("Group"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension
|
||||
.AddAction("DeleteFichier",
|
||||
_("Delete a file"),
|
||||
_("Delete the file."),
|
||||
_("Delete the file _PARAM0_"),
|
||||
_("Files"),
|
||||
"res/actions/delete24.png",
|
||||
"res/actions/delete.png")
|
||||
.AddParameter("file", _("Filename"));
|
||||
.AddAction(
|
||||
"DeleteFichier",
|
||||
_("Clear a storage"),
|
||||
_("Clear the specified storage, removing all data saved in it."),
|
||||
_("Delete storage _PARAM0_"),
|
||||
_("Storage"),
|
||||
"res/actions/delete24.png",
|
||||
"res/actions/delete.png")
|
||||
.AddParameter("string", _("Storage name"));
|
||||
|
||||
extension
|
||||
.AddCondition("FileExists",
|
||||
_("A file exists"),
|
||||
_("Test if the file exists."),
|
||||
_("File _PARAM0_ exists"),
|
||||
_("Files"),
|
||||
_("A storage exists"),
|
||||
_("Test if the specified storage exists."),
|
||||
_("Storage _PARAM0_ exists"),
|
||||
_("Storage"),
|
||||
"res/conditions/fichier24.png",
|
||||
"res/conditions/fichier.png")
|
||||
.AddParameter("file", _("Filename"))
|
||||
.AddParameter("string", _("Storage name"))
|
||||
.MarkAsAdvanced();
|
||||
|
||||
extension
|
||||
|
@@ -18,7 +18,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsMouseExtension(
|
||||
_("Built-in extension that enables the use of a mouse"),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)")
|
||||
.SetExtensionHelpPath("/events/mouse-touch");
|
||||
.SetExtensionHelpPath("/all-features/mouse-touch");
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
extension
|
||||
|
@@ -15,7 +15,7 @@ using namespace std;
|
||||
|
||||
namespace gd {
|
||||
|
||||
Direction::Direction() : loop(false), timeBetweenFrame(1) {}
|
||||
Direction::Direction() : loop(false), timeBetweenFrame(0.08) {}
|
||||
|
||||
Direction::~Direction(){};
|
||||
|
||||
|
@@ -17,7 +17,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSpriteExtension(
|
||||
extension
|
||||
.SetExtensionInformation("Sprite",
|
||||
_("Sprite"),
|
||||
_("Sprite are animated object which can be used for most elements of a game."),
|
||||
_("Sprite are animated object which can be used "
|
||||
"for most elements of a game."),
|
||||
"Florian Rival",
|
||||
"Open source (MIT License)")
|
||||
.SetExtensionHelpPath("/objects/sprite");
|
||||
@@ -30,8 +31,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSpriteExtension(
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
obj.AddAction("Opacity",
|
||||
_("Change object's opacity"),
|
||||
_("Change the opacity of an object."),
|
||||
_("Change Sprite opacity"),
|
||||
_("Change the opacity of a Sprite. 0 is fully transparent, 255 "
|
||||
"is opaque (default)."),
|
||||
_("Do _PARAM1__PARAM2_ to the opacity of _PARAM0_"),
|
||||
_("Visibility"),
|
||||
"res/actions/opacity24.png",
|
||||
@@ -39,7 +41,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSpriteExtension(
|
||||
|
||||
.AddParameter("object", _("Object"), "Sprite")
|
||||
.AddParameter("operator", _("Modification's sign"))
|
||||
.AddParameter("expression", _("Value"))
|
||||
.AddParameter("expression", _("Value (between 0 and 255)"))
|
||||
.MarkAsSimple()
|
||||
.SetManipulatedType("number");
|
||||
|
||||
@@ -198,6 +200,34 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSpriteExtension(
|
||||
.MarkAsAdvanced()
|
||||
.SetManipulatedType("number");
|
||||
|
||||
obj.AddAction("ChangeWidth",
|
||||
_("Width"),
|
||||
_("Change the width of a Sprite object."),
|
||||
_("Do _PARAM1__PARAM2_ to the width of _PARAM0_"),
|
||||
_("Size"),
|
||||
"res/actions/scale24.png",
|
||||
"res/actions/scale.png")
|
||||
|
||||
.AddParameter("object", _("Object"), "Sprite")
|
||||
.AddParameter("operator", _("Modification's sign"))
|
||||
.AddParameter("expression", _("Value"))
|
||||
.MarkAsAdvanced()
|
||||
.SetManipulatedType("number");
|
||||
|
||||
obj.AddAction("ChangeHeight",
|
||||
_("Height"),
|
||||
_("Change the height of a Sprite object."),
|
||||
_("Do _PARAM1__PARAM2_ to the height of _PARAM0_"),
|
||||
_("Size"),
|
||||
"res/actions/scale24.png",
|
||||
"res/actions/scale.png")
|
||||
|
||||
.AddParameter("object", _("Object"), "Sprite")
|
||||
.AddParameter("operator", _("Modification's sign"))
|
||||
.AddParameter("expression", _("Value"))
|
||||
.MarkAsAdvanced()
|
||||
.SetManipulatedType("number");
|
||||
|
||||
obj.AddCondition(
|
||||
"Animation",
|
||||
_("Current animation"),
|
||||
@@ -309,8 +339,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsSpriteExtension(
|
||||
|
||||
obj.AddCondition("Opacity",
|
||||
_("Opacity"),
|
||||
_("Compare the opacity of an object, between 0 (fully "
|
||||
"transparent) to 255 (opaque)"),
|
||||
_("Compare the opacity of a Sprite, between 0 (fully "
|
||||
"transparent) to 255 (opaque)."),
|
||||
_("The opacity of _PARAM0_ is _PARAM1__PARAM2_"),
|
||||
_("Visibility"),
|
||||
"res/conditions/opacity24.png",
|
||||
|
@@ -23,9 +23,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
#if defined(GD_IDE_ONLY)
|
||||
extension
|
||||
.AddCondition("VarScene",
|
||||
_("Value of a variable"),
|
||||
_("Value of a scene variable"),
|
||||
_("Compare the value of a scene variable."),
|
||||
_("Variable _PARAM0_ is _PARAM1__PARAM2_"),
|
||||
_("Scene variable _PARAM0_ is _PARAM1__PARAM2_"),
|
||||
_("Variables"),
|
||||
"res/conditions/var24.png",
|
||||
"res/conditions/var.png")
|
||||
@@ -36,9 +36,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddCondition("VarSceneTxt",
|
||||
_("Text of a variable"),
|
||||
_("Text of a scene variable"),
|
||||
_("Compare the text of a scene variable."),
|
||||
_("The text of variable _PARAM0_ is _PARAM1__PARAM2_"),
|
||||
_("The text of scene variable _PARAM0_ is _PARAM1__PARAM2_"),
|
||||
_("Variables"),
|
||||
"res/conditions/var24.png",
|
||||
"res/conditions/var.png")
|
||||
@@ -51,8 +51,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
.AddCondition(
|
||||
"VariableChildExists",
|
||||
_("Child existence"),
|
||||
_("Return true if the specified child of the variable exists."),
|
||||
_("Child _PARAM1_ of variable _PARAM0_ exists"),
|
||||
_("Return true if the specified child of the scene variable exists."),
|
||||
_("Child _PARAM1_ of scene variable _PARAM0_ exists"),
|
||||
_("Variables/Structures"),
|
||||
"res/conditions/var24.png",
|
||||
"res/conditions/var.png")
|
||||
@@ -76,8 +76,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
extension
|
||||
.AddCondition("VarSceneDef",
|
||||
_("Test if a scene variable is defined"),
|
||||
_("Test if the scene variable exist."),
|
||||
_("Variable _PARAM0_ is defined"),
|
||||
_("Test if the scene variable exists."),
|
||||
_("Scene variable _PARAM0_ is defined"),
|
||||
_("Variables"),
|
||||
"res/conditions/var24.png",
|
||||
"res/conditions/var.png")
|
||||
@@ -129,9 +129,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddAction("ModVarScene",
|
||||
_("Value of a variable"),
|
||||
_("Value of a scene variable"),
|
||||
_("Modify the value of a scene variable."),
|
||||
_("Do _PARAM1__PARAM2_ to variable _PARAM0_"),
|
||||
_("Do _PARAM1__PARAM2_ to scene variable _PARAM0_"),
|
||||
_("Variables"),
|
||||
"res/actions/var24.png",
|
||||
"res/actions/var.png")
|
||||
@@ -142,9 +142,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddAction("ModVarSceneTxt",
|
||||
_("String of a variable"),
|
||||
_("String of a scene variable"),
|
||||
_("Modify the text of a scene variable."),
|
||||
_("Do _PARAM1__PARAM2_ to the text of variable _PARAM0_"),
|
||||
_("Do _PARAM1__PARAM2_ to the text of scene variable _PARAM0_"),
|
||||
_("Variables"),
|
||||
"res/actions/var24.png",
|
||||
"res/actions/var.png")
|
||||
@@ -185,8 +185,8 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
extension
|
||||
.AddAction("VariableRemoveChild",
|
||||
_("Remove a child"),
|
||||
_("Remove a child from a variable."),
|
||||
_("Remove child _PARAM1_ from variable _PARAM0_"),
|
||||
_("Remove a child from a scene variable."),
|
||||
_("Remove child _PARAM1_ from scene variable _PARAM0_"),
|
||||
_("Variables/Structure"),
|
||||
"res/actions/var24.png",
|
||||
"res/actions/var.png")
|
||||
@@ -208,9 +208,9 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddAction("VariableClearChildren",
|
||||
_("Clear variable"),
|
||||
_("Remove all the children from the variable."),
|
||||
_("Clear children from variable _PARAM0_"),
|
||||
_("Clear scene variable"),
|
||||
_("Remove all the children from the scene variable."),
|
||||
_("Clear children from scene variable _PARAM0_"),
|
||||
_("Variables/Structure"),
|
||||
"res/actions/var24.png",
|
||||
"res/actions/var.png")
|
||||
@@ -230,7 +230,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddExpression("GlobalVariableChildCount",
|
||||
_("Global variable number of children"),
|
||||
_("Number of children of a global variable"),
|
||||
_("Get the number of children of a global variable"),
|
||||
_("Variables"),
|
||||
"res/actions/var.png")
|
||||
@@ -238,7 +238,7 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddExpression("VariableChildCount",
|
||||
_("Scene variable number of children"),
|
||||
_("Number of children of a scene variable"),
|
||||
_("Get the number of children of a scene variable"),
|
||||
_("Variables"),
|
||||
"res/actions/var.png")
|
||||
@@ -246,15 +246,15 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddExpression("Variable",
|
||||
_("Scene variables"),
|
||||
_("Scene variables"),
|
||||
_("Value of a scene variable"),
|
||||
_("Value of a scene variable"),
|
||||
_("Variables"),
|
||||
"res/actions/var.png")
|
||||
.AddParameter("scenevar", _("Variable"));
|
||||
|
||||
extension
|
||||
.AddStrExpression("VariableString",
|
||||
_("Scene variables"),
|
||||
_("Text of a scene variable"),
|
||||
_("Text of a scene variable"),
|
||||
_("Variables"),
|
||||
"res/actions/var.png")
|
||||
@@ -262,15 +262,15 @@ void GD_CORE_API BuiltinExtensionsImplementer::ImplementsVariablesExtension(
|
||||
|
||||
extension
|
||||
.AddExpression("GlobalVariable",
|
||||
_("Global variables"),
|
||||
_("Global variable"),
|
||||
_("Value of a global variable"),
|
||||
_("Value of a global variable"),
|
||||
_("Variables"),
|
||||
"res/actions/var.png")
|
||||
.AddParameter("globalvar", _("Name of the global variable"));
|
||||
|
||||
extension
|
||||
.AddStrExpression("GlobalVariableString",
|
||||
_("Global variables"),
|
||||
_("Text of a global variable"),
|
||||
_("Text of a global variable"),
|
||||
_("Variables"),
|
||||
"res/actions/var.png")
|
||||
|
@@ -54,17 +54,19 @@ class GD_CORE_API ParameterMetadata {
|
||||
|
||||
/**
|
||||
* \brief Return the name of the parameter.
|
||||
*
|
||||
*
|
||||
* Name is optional, and won't be filled for most parameters of extensions.
|
||||
* It is useful when generating a function from events, where parameters must be named.
|
||||
* It is useful when generating a function from events, where parameters must
|
||||
* be named.
|
||||
*/
|
||||
const gd::String &GetName() const { return name; }
|
||||
|
||||
/**
|
||||
* \brief Set the name of the parameter.
|
||||
*
|
||||
*
|
||||
* Name is optional, and won't be filled for most parameters of extensions.
|
||||
* It is useful when generating a function from events, where parameters must be named.
|
||||
* It is useful when generating a function from events, where parameters must
|
||||
* be named.
|
||||
*/
|
||||
ParameterMetadata &SetName(const gd::String &name_) {
|
||||
name = name_;
|
||||
@@ -159,7 +161,8 @@ class GD_CORE_API ParameterMetadata {
|
||||
static bool IsExpression(const gd::String &type,
|
||||
const gd::String ¶meterType) {
|
||||
if (type == "number") {
|
||||
return parameterType == "expression" || parameterType == "camera";
|
||||
return parameterType == "expression" || parameterType == "camera" ||
|
||||
parameterType == "forceMultiplier";
|
||||
} else if (type == "string") {
|
||||
return parameterType == "string" || parameterType == "layer" ||
|
||||
parameterType == "color" || parameterType == "file" ||
|
||||
@@ -174,12 +177,12 @@ class GD_CORE_API ParameterMetadata {
|
||||
/**
|
||||
* \brief Serialize the ParameterMetadata to the specified element
|
||||
*/
|
||||
void SerializeTo(gd::SerializerElement& element) const;
|
||||
void SerializeTo(gd::SerializerElement &element) const;
|
||||
|
||||
/**
|
||||
* \brief Load the ParameterMetadata from the specified element
|
||||
*/
|
||||
void UnserializeFrom(const gd::SerializerElement& element);
|
||||
void UnserializeFrom(const gd::SerializerElement &element);
|
||||
///@}
|
||||
|
||||
// TODO: Deprecated public fields. Any direct using should be moved to
|
||||
@@ -193,8 +196,9 @@ class GD_CORE_API ParameterMetadata {
|
||||
///< i.e. must not be shown in editor
|
||||
gd::String defaultValue; ///< Used as a default value in editor or if an
|
||||
///< optional parameter is empty.
|
||||
private:
|
||||
gd::String name; ///< The name of the parameter to be used in code generation. Optional.
|
||||
private:
|
||||
gd::String name; ///< The name of the parameter to be used in code
|
||||
///< generation. Optional.
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -219,9 +223,7 @@ class GD_CORE_API InstructionMetadata {
|
||||
const gd::String &GetDescription() const { return description; }
|
||||
const gd::String &GetSentence() const { return sentence; }
|
||||
const gd::String &GetGroup() const { return group; }
|
||||
ParameterMetadata &GetParameter(size_t i) {
|
||||
return parameters[i];
|
||||
}
|
||||
ParameterMetadata &GetParameter(size_t i) { return parameters[i]; }
|
||||
const ParameterMetadata &GetParameter(size_t i) const {
|
||||
return parameters[i];
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ class GD_CORE_API PropertyDescriptor {
|
||||
* value. \param propertyValue The value of the property.
|
||||
*/
|
||||
PropertyDescriptor(gd::String propertyValue)
|
||||
: currentValue(propertyValue), type("string") {}
|
||||
: currentValue(propertyValue), type("string"), label("") {}
|
||||
|
||||
/**
|
||||
* \brief Empty constructor creating an empty property to be displayed.
|
||||
@@ -51,6 +51,14 @@ class GD_CORE_API PropertyDescriptor {
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Change the label displayed in the property grid.
|
||||
*/
|
||||
PropertyDescriptor& SetLabel(gd::String label_) {
|
||||
label = label_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Add an information about the property.
|
||||
* \note The information are arbitrary and are interpreted by the class
|
||||
@@ -65,6 +73,7 @@ class GD_CORE_API PropertyDescriptor {
|
||||
|
||||
const gd::String& GetValue() const { return currentValue; }
|
||||
const gd::String& GetType() const { return type; }
|
||||
const gd::String& GetLabel() const { return label; }
|
||||
const std::vector<gd::String>& GetExtraInfo() const {
|
||||
return extraInformation;
|
||||
}
|
||||
@@ -74,6 +83,7 @@ class GD_CORE_API PropertyDescriptor {
|
||||
gd::String
|
||||
type; ///< The type of the property. This is arbitrary and interpreted by
|
||||
///< the class responsible for updating the property grid.
|
||||
gd::String label; //< The user-friendly property name
|
||||
std::vector<gd::String>
|
||||
extraInformation; ///< Can be used to store for example the available
|
||||
///< choices, if a property is a displayed as a combo
|
||||
|
@@ -22,8 +22,8 @@
|
||||
#include "GDCore/IDE/PlatformManager.h"
|
||||
#include "GDCore/IDE/Project/ArbitraryResourceWorker.h"
|
||||
#include "GDCore/IDE/wxTools/SafeYield.h"
|
||||
#include "GDCore/Project/EventsFunctionsExtension.h"
|
||||
#include "GDCore/Project/ChangesNotifier.h"
|
||||
#include "GDCore/Project/EventsFunctionsExtension.h"
|
||||
#include "GDCore/Project/ExternalEvents.h"
|
||||
#include "GDCore/Project/ExternalLayout.h"
|
||||
#include "GDCore/Project/ImageManager.h"
|
||||
@@ -73,6 +73,7 @@ Project::Project()
|
||||
maxFPS(60),
|
||||
minFPS(10),
|
||||
verticalSync(false),
|
||||
scaleMode("linear"),
|
||||
sizeOnStartupMode("adaptWidth"),
|
||||
imageManager(std::make_shared<ImageManager>())
|
||||
#if defined(GD_IDE_ONLY)
|
||||
@@ -636,6 +637,7 @@ void Project::UnserializeFrom(const SerializerElement& element) {
|
||||
propElement.GetChild("minFPS", 0, "FPSmin").GetValue().GetInt());
|
||||
SetVerticalSyncActivatedByDefault(
|
||||
propElement.GetChild("verticalSync").GetValue().GetBool());
|
||||
SetScaleMode(propElement.GetStringAttribute("scaleMode", "linear"));
|
||||
SetSizeOnStartupMode(propElement.GetStringAttribute("sizeOnStartupMode", ""));
|
||||
#if defined(GD_IDE_ONLY)
|
||||
SetAuthor(propElement.GetChild("author", 0, "Auteur").GetValue().GetString());
|
||||
@@ -913,6 +915,7 @@ void Project::SerializeTo(SerializerElement& element) const {
|
||||
propElement.AddChild("minFPS").SetValue(GetMinimumFPS());
|
||||
propElement.AddChild("verticalSync")
|
||||
.SetValue(IsVerticalSynchronizationEnabledByDefault());
|
||||
propElement.SetAttribute("scaleMode", scaleMode);
|
||||
propElement.SetAttribute("sizeOnStartupMode", sizeOnStartupMode);
|
||||
propElement.SetAttribute("projectFile", gameFile);
|
||||
propElement.SetAttribute("folderProject", folderProject);
|
||||
@@ -1006,9 +1009,9 @@ gd::String Project::GetBadObjectNameWarning() {
|
||||
}
|
||||
|
||||
void Project::ExposeResources(gd::ArbitraryResourceWorker& worker) {
|
||||
// See also gd::WholeProjectRefactorer::ExposeProjectEvents for a method that traverse the whole
|
||||
// project (this time for events).
|
||||
// Ideally, this method could be moved outside of gd::Project.
|
||||
// See also gd::WholeProjectRefactorer::ExposeProjectEvents for a method that
|
||||
// traverse the whole project (this time for events). Ideally, this method
|
||||
// could be moved outside of gd::Project.
|
||||
|
||||
// Add project resources
|
||||
worker.ExposeResources(&GetResourcesManager());
|
||||
@@ -1033,7 +1036,8 @@ void Project::ExposeResources(gd::ArbitraryResourceWorker& worker) {
|
||||
// Add events functions extensions resources
|
||||
for (std::size_t e = 0; e < GetEventsFunctionsExtensionsCount(); e++) {
|
||||
auto& eventsFunctionsExtension = GetEventsFunctionsExtension(e);
|
||||
for (auto&& eventsFunction : eventsFunctionsExtension.GetEventsFunctions()) {
|
||||
for (auto&& eventsFunction :
|
||||
eventsFunctionsExtension.GetEventsFunctions()) {
|
||||
LaunchResourceWorkerOnEvents(*this, eventsFunction->GetEvents(), worker);
|
||||
}
|
||||
}
|
||||
@@ -1248,6 +1252,7 @@ void Project::Init(const gd::Project& game) {
|
||||
maxFPS = game.maxFPS;
|
||||
minFPS = game.minFPS;
|
||||
verticalSync = game.verticalSync;
|
||||
scaleMode = game.scaleMode;
|
||||
sizeOnStartupMode = game.sizeOnStartupMode;
|
||||
|
||||
#if defined(GD_IDE_ONLY)
|
||||
|
@@ -125,7 +125,7 @@ class GD_CORE_API Project : public ObjectsContainer {
|
||||
adMobAppId = adMobAppId_;
|
||||
};
|
||||
|
||||
/**
|
||||
/**
|
||||
* \brief Get the project AdMob application ID.
|
||||
*/
|
||||
const gd::String& GetAdMobAppId() const { return adMobAppId; }
|
||||
@@ -268,6 +268,16 @@ class GD_CORE_API Project : public ObjectsContainer {
|
||||
*/
|
||||
void SetVerticalSyncActivatedByDefault(bool enable) { verticalSync = enable; }
|
||||
|
||||
/**
|
||||
* Return the scale mode used by the game (usually "linear" or "nearest").
|
||||
*/
|
||||
const gd::String& GetScaleMode() const { return scaleMode; }
|
||||
|
||||
/**
|
||||
* Set the scale mode used by the game (usually "linear" or "nearest").
|
||||
*/
|
||||
void SetScaleMode(const gd::String& scaleMode_) { scaleMode = scaleMode_; }
|
||||
|
||||
/**
|
||||
* Return a reference to the vector containing the names of extensions used by
|
||||
* the project.
|
||||
@@ -816,7 +826,7 @@ class GD_CORE_API Project : public ObjectsContainer {
|
||||
* resources, sometimes update their filename or any other work or resources.
|
||||
*
|
||||
* See WholeProjectRefactorer for the same thing for events.
|
||||
*
|
||||
*
|
||||
* \see WholeProjectRefactorer
|
||||
* \see ArbitraryResourceWorker
|
||||
*/
|
||||
@@ -948,6 +958,7 @@ class GD_CORE_API Project : public ObjectsContainer {
|
||||
unsigned int minFPS; ///< Minimum Frame Per Seconds ( slow down game if FPS
|
||||
///< are below this number )
|
||||
bool verticalSync; ///< If true, must activate vertical synchronization.
|
||||
gd::String scaleMode;
|
||||
gd::String
|
||||
sizeOnStartupMode; ///< How to adapt the game size to the screen. Can be
|
||||
///< "adaptWidth", "adaptHeight" or empty
|
||||
@@ -976,7 +987,7 @@ class GD_CORE_API Project : public ObjectsContainer {
|
||||
gd::String packageName; ///< Game package name
|
||||
gd::String orientation; ///< Lock game orientation (on mobile devices).
|
||||
///< "default", "landscape" or "portrait".
|
||||
gd::String adMobAppId; ///< AdMob application ID.
|
||||
gd::String adMobAppId; ///< AdMob application ID.
|
||||
bool
|
||||
folderProject; ///< True if folder project, false if single file project.
|
||||
gd::String gameFile; ///< File of the game
|
||||
|
@@ -193,7 +193,7 @@ gd::String ValueToJSON(const SerializerValue& val) {
|
||||
|
||||
gd::String Serializer::ToJSON(const SerializerElement& element) {
|
||||
if (element.IsValueUndefined()) {
|
||||
if (!element.ConsideredAsArrayOf().empty()) {
|
||||
if (element.ConsideredAsArray()) {
|
||||
// Store the element as an array in JSON:
|
||||
gd::String str = "[";
|
||||
bool firstChild = true;
|
||||
@@ -201,7 +201,9 @@ gd::String Serializer::ToJSON(const SerializerElement& element) {
|
||||
if (element.GetAllAttributes().size() > 0) {
|
||||
std::cout
|
||||
<< "WARNING: A SerializerElement is considered as an array of "
|
||||
<< element.ConsideredAsArrayOf()
|
||||
<< (element.ConsideredAsArrayOf().empty()
|
||||
? "[unnamed elements]"
|
||||
: element.ConsideredAsArrayOf())
|
||||
<< " but has attributes. These attributes won't be saved!"
|
||||
<< std::endl;
|
||||
}
|
||||
@@ -215,9 +217,11 @@ gd::String Serializer::ToJSON(const SerializerElement& element) {
|
||||
if (children[i].first != element.ConsideredAsArrayOf()) {
|
||||
std::cout
|
||||
<< "WARNING: A SerializerElement is considered as an array of "
|
||||
<< element.ConsideredAsArrayOf() << " but has a children called "
|
||||
<< children[i].first << ". This children won't be saved!"
|
||||
<< std::endl;
|
||||
<< (element.ConsideredAsArrayOf().empty()
|
||||
? "[unnamed elements]"
|
||||
: element.ConsideredAsArrayOf())
|
||||
<< " but has a child called \"" << children[i].first
|
||||
<< "\". This child won't be saved!" << std::endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -422,6 +426,7 @@ size_t ParseJSONObject(const std::string& jsonStr,
|
||||
return pos + 1;
|
||||
} else if (jsonStr[pos] == '[') // Array
|
||||
{
|
||||
element.ConsiderAsArray();
|
||||
unsigned int index = 0;
|
||||
while (index == 0 || jsonStr[pos] == ',') {
|
||||
pos++;
|
||||
@@ -456,7 +461,7 @@ size_t ParseJSONObject(const std::string& jsonStr,
|
||||
{
|
||||
std::string str;
|
||||
size_t endPos = pos;
|
||||
const std::string separators = " \n,}";
|
||||
const std::string separators = " \n,}]";
|
||||
while (endPos < jsonStr.length() &&
|
||||
separators.find_first_of(jsonStr[endPos]) == std::string::npos) {
|
||||
endPos++;
|
||||
|
@@ -6,10 +6,10 @@ namespace gd {
|
||||
|
||||
SerializerElement SerializerElement::nullElement;
|
||||
|
||||
SerializerElement::SerializerElement() : valueUndefined(true) {}
|
||||
SerializerElement::SerializerElement() : valueUndefined(true), isArray(false) {}
|
||||
|
||||
SerializerElement::SerializerElement(const SerializerValue& value)
|
||||
: valueUndefined(false), elementValue(value) {}
|
||||
: valueUndefined(false), elementValue(value), isArray(false) {}
|
||||
|
||||
SerializerElement::~SerializerElement() {}
|
||||
|
||||
|
@@ -23,7 +23,7 @@ namespace gd {
|
||||
class GD_CORE_API SerializerElement {
|
||||
public:
|
||||
SerializerElement();
|
||||
SerializerElement(const SerializerValue & value);
|
||||
SerializerElement(const SerializerValue &value);
|
||||
virtual ~SerializerElement();
|
||||
|
||||
/** \name Value
|
||||
@@ -178,18 +178,37 @@ class GD_CORE_API SerializerElement {
|
||||
* Methods related to the children elements
|
||||
*/
|
||||
///@{
|
||||
/**
|
||||
* \brief Consider that the element is an array of elements, without specific
|
||||
* name for the children element.
|
||||
*
|
||||
* When serialized to a format accepting arrays (like JSON), the element will
|
||||
* be serialized to an array.
|
||||
*/
|
||||
void ConsiderAsArray() const { isArray = true; };
|
||||
|
||||
/**
|
||||
* \brief Check if the element is considered as an array containing its
|
||||
* children.
|
||||
*
|
||||
* As possible, this should be serialized to an array (possible JSON, but not
|
||||
* in XML).
|
||||
*/
|
||||
bool ConsideredAsArray() const { return isArray; };
|
||||
|
||||
/**
|
||||
* \brief Consider that the element is an array for elements with the given
|
||||
* name.
|
||||
*
|
||||
* In this case, no child with a different name should be added. When
|
||||
* serialized to format accepting arrays, the element will be serialized to an
|
||||
* array.
|
||||
* serialized to a format accepting arrays (like JSON), the element will be
|
||||
* serialized to an array.
|
||||
*
|
||||
* \param name The name of the children.
|
||||
*/
|
||||
void ConsiderAsArrayOf(const gd::String &name,
|
||||
const gd::String &deprecatedName = "") const {
|
||||
ConsiderAsArray();
|
||||
arrayOf = name;
|
||||
deprecatedArrayOf = deprecatedName;
|
||||
};
|
||||
@@ -261,8 +280,10 @@ class GD_CORE_API SerializerElement {
|
||||
std::map<gd::String, SerializerValue> attributes;
|
||||
std::vector<std::pair<gd::String, std::shared_ptr<SerializerElement> > >
|
||||
children;
|
||||
mutable gd::String arrayOf;
|
||||
mutable gd::String deprecatedArrayOf;
|
||||
mutable bool isArray; ///< true if element is considered as an array
|
||||
mutable gd::String arrayOf; ///< The name of the children (was useful for XML
|
||||
///< parsed elements).
|
||||
mutable gd::String deprecatedArrayOf; ///< Alternate name for children
|
||||
};
|
||||
|
||||
} // namespace gd
|
||||
|
@@ -1,21 +1,26 @@
|
||||
GDevelop Core
|
||||
=================
|
||||
# GDevelop Core (library to create, manipulate and export games)
|
||||
|
||||
This is the core library used to build platforms, extensions, tools for GDevelop. The IDE is also based on classes and tools offered by this library.
|
||||
This is the core library used to handle games, build platforms, extensions and tools for GDevelop. The editor is based on classes and tools offered by this library.
|
||||
|
||||
Getting started
|
||||
---------------
|
||||
GDevelop Core is a portable C++ library, compiled to be used in JavaScript in the editor.
|
||||
|
||||
## 1) Getting started 🤓
|
||||
|
||||
First, take a look at the *Readme.md* at the root of the repository and the [developer documentation](http://4ian.github.io/GD-Documentation/).
|
||||
|
||||
Contributing
|
||||
------------
|
||||
## 2) How to contribute 😎
|
||||
|
||||
Any contribution is welcome! Whether you want to submit a bug report, a feature request
|
||||
or any pull request so as to add a nice feature, do not hesitate to get in touch.
|
||||
|
||||
* Check the [the **roadmap** for ideas and features planned](https://trello.com/b/qf0lM7k8/gdevelop-roadmap).
|
||||
|
||||
* Follow the [Development](https://github.com/4ian/GDevelop/tree/master/newIDE#development) section of the README to set up GDevelop and start modifying either **the editor** or **[the game engine/extensions](https://github.com/4ian/GDevelop/tree/master/newIDE#development-of-the-game-engine-or-extensions)**.
|
||||
|
||||
* To submit your changes, you have first to create a Fork on GitHub (use the Fork button on the top right), then [create a Pull Request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/).
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
GDevelop Core is distributed under the MIT license: See license.txt for
|
||||
GDevelop Core is distributed under the MIT license: see license.txt for
|
||||
more information.
|
||||
|
@@ -65,6 +65,44 @@ TEST_CASE("Serializer", "[common]") {
|
||||
REQUIRE(json == originalJSON);
|
||||
}
|
||||
|
||||
SECTION("Idempotency of unserializing and serializing again") {
|
||||
auto unserializeAndSerializeToJSON = [](const gd::String& originalJSON) {
|
||||
SerializerElement element = Serializer::FromJSON(originalJSON);
|
||||
return Serializer::ToJSON(element);
|
||||
};
|
||||
|
||||
SECTION("Strings and numbers") {
|
||||
gd::String test1 = "\"\"";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test1) == test1);
|
||||
gd::String test2 = "123.455";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test2) == test2);
|
||||
}
|
||||
SECTION("Objects") {
|
||||
gd::String test1 = "{}";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test1) == test1);
|
||||
gd::String test2 = "{\"a\": 1}";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test2) == test2);
|
||||
gd::String test3 = "{\"a\": 1,\"b\": {\"c\": 2}}";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test3) == test3);
|
||||
}
|
||||
SECTION("Arrays") {
|
||||
gd::String test1 = "[]";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test1) == test1);
|
||||
gd::String test2 = "[1,2]";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test2) == test2);
|
||||
}
|
||||
SECTION("Mixed") {
|
||||
gd::String test1 =
|
||||
"{\"hello\": {\"world\": [{},[],3,\"4\"],\"world2\": [-1,\"-2\","
|
||||
"{\"-3\": [-4]}]}}";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test1) == test1);
|
||||
gd::String test2 =
|
||||
"{\"hello\": {\"world\": [{},[],3,4],\"world2\": [-1,\"-2\","
|
||||
"{\"-3\": [-4]}]}}";
|
||||
REQUIRE(unserializeAndSerializeToJSON(test2) == test2);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("Splitter") {
|
||||
SECTION("Split elements") {
|
||||
// Create some elements
|
||||
|
@@ -14,348 +14,348 @@ module.exports = {
|
||||
createExtension: function(t, gd) {
|
||||
const extension = new gd.PlatformExtension();
|
||||
extension.setExtensionInformation(
|
||||
"AdMob",
|
||||
t("AdMob"),
|
||||
'AdMob',
|
||||
t('AdMob'),
|
||||
t(
|
||||
"Allow the game to display AdMob banner, interstitial and reward video ads"
|
||||
'Allow the game to display AdMob banner, interstitial and reward video ads'
|
||||
),
|
||||
"Franco Maciel",
|
||||
"MIT"
|
||||
'Franco Maciel',
|
||||
'MIT'
|
||||
);
|
||||
|
||||
// Banner
|
||||
extension
|
||||
.addCondition(
|
||||
"BannerLoading",
|
||||
t("Banner loading"),
|
||||
t("Check if a banner is currently loading."),
|
||||
t("Banner is loading"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'BannerLoading',
|
||||
t('Banner loading'),
|
||||
t('Check if a banner is currently loading.'),
|
||||
t('Banner is loading'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isBannerLoading");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isBannerLoading');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"BannerReady",
|
||||
t("Banner ready"),
|
||||
t("Check if a banner is ready to be displayed."),
|
||||
t("Banner is ready"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'BannerReady',
|
||||
t('Banner ready'),
|
||||
t('Check if a banner is ready to be displayed.'),
|
||||
t('Banner is ready'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isBannerReady");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isBannerReady');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"BannerShowing",
|
||||
t("Banner showing"),
|
||||
t("Check if there is a banner being displayed."),
|
||||
t("Banner is showing"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'BannerShowing',
|
||||
t('Banner showing'),
|
||||
t('Check if there is a banner being displayed.'),
|
||||
t('Banner is showing'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isBannerShowing");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isBannerShowing');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"BannerExists",
|
||||
t("Banner exists"),
|
||||
t("Check if there is a banner in memory (visible or hidden)."),
|
||||
t("Banner exists"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'BannerExists',
|
||||
t('Banner exists'),
|
||||
t('Check if there is a banner in memory (visible or hidden).'),
|
||||
t('Banner exists'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.existBanner");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.existBanner');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"LoadBanner",
|
||||
t("Load banner"),
|
||||
'LoadBanner',
|
||||
t('Load banner'),
|
||||
t(
|
||||
"Start loading a banner, you can display it automatically when finish loading.\nIf test mode is set to true a test banner will be displayed."
|
||||
'Start loading a banner, you can display it automatically when finish loading.\nIf test mode is set to true a test banner will be displayed.'
|
||||
),
|
||||
t(
|
||||
"Load banner (at top: _PARAM2_, overlap: _PARAM3_, show on load: _PARAM4_, test mode: _PARAM5_)"
|
||||
'Load banner (at top: _PARAM2_, overlap: _PARAM3_, show on load: _PARAM4_, test mode: _PARAM5_)'
|
||||
),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.addParameter("string", t("Android banner ID"), "", false)
|
||||
.addParameter("string", t("iOS banner ID"), "", false)
|
||||
.addParameter('string', t('Android banner ID'), '', false)
|
||||
.addParameter('string', t('iOS banner ID'), '', false)
|
||||
.addParameter(
|
||||
"yesorno",
|
||||
t("Display at top? (bottom otherwise)"),
|
||||
"",
|
||||
'yesorno',
|
||||
t('Display at top? (bottom otherwise)'),
|
||||
'',
|
||||
false
|
||||
)
|
||||
.setDefaultValue("false")
|
||||
.addParameter("yesorno", t("Overlap webview?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter("yesorno", t("Display on load complete?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter("yesorno", t("Test mode?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.setDefaultValue('false')
|
||||
.addParameter('yesorno', t('Overlap webview?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.addParameter('yesorno', t('Display on load complete?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.addParameter('yesorno', t('Test mode?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.loadBanner");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.loadBanner');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"ShowBanner",
|
||||
t("Show banner"),
|
||||
t("Show the banner, will work only when the banner is fully loaded."),
|
||||
t("Show banner"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'ShowBanner',
|
||||
t('Show banner'),
|
||||
t('Show the banner, will work only when the banner is fully loaded.'),
|
||||
t('Show banner'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.showBanner");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.showBanner');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"HideBanner",
|
||||
t("Hide banner"),
|
||||
'HideBanner',
|
||||
t('Hide banner'),
|
||||
t(
|
||||
"Hide the banner. You can show it again with the corresponding action."
|
||||
'Hide the banner. You can show it again with the corresponding action.'
|
||||
),
|
||||
t("Hide banner"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Hide banner'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.hideBanner");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.hideBanner');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"RemoveBanner",
|
||||
t("Remove banner"),
|
||||
'RemoveBanner',
|
||||
t('Remove banner'),
|
||||
t(
|
||||
"Remove the banner. You have to load another banner to show it again."
|
||||
'Remove the banner. You have to load another banner to show it again.'
|
||||
),
|
||||
t("Remove banner"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Remove banner'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.removeBanner");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.removeBanner');
|
||||
|
||||
// Interstitial
|
||||
extension
|
||||
.addCondition(
|
||||
"InterstitialLoading",
|
||||
t("Interstitial loading"),
|
||||
t("Check if an interstitial is currently loading."),
|
||||
t("Interstitial is loading"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'InterstitialLoading',
|
||||
t('Interstitial loading'),
|
||||
t('Check if an interstitial is currently loading.'),
|
||||
t('Interstitial is loading'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isInterstitialLoading");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isInterstitialLoading');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"InterstitialReady",
|
||||
t("Interstitial ready"),
|
||||
t("Check if an interstitial is ready to be displayed."),
|
||||
t("Interstitial is ready"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'InterstitialReady',
|
||||
t('Interstitial ready'),
|
||||
t('Check if an interstitial is ready to be displayed.'),
|
||||
t('Interstitial is ready'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isInterstitialReady");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isInterstitialReady');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"InterstitialShowing",
|
||||
t("Interstitial showing"),
|
||||
t("Check if there is an interstitial being displayed."),
|
||||
t("Interstitial is showing"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'InterstitialShowing',
|
||||
t('Interstitial showing'),
|
||||
t('Check if there is an interstitial being displayed.'),
|
||||
t('Interstitial is showing'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isInterstitialShowing");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isInterstitialShowing');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"LoadInterstitial",
|
||||
t("Load interstitial"),
|
||||
'LoadInterstitial',
|
||||
t('Load interstitial'),
|
||||
t(
|
||||
"Start loading an interstitial, you can display it automatically when finish loading.\nIf test mode is set to true a test interstitial will be displayed."
|
||||
'Start loading an interstitial, you can display it automatically when finish loading.\nIf test mode is set to true a test interstitial will be displayed.'
|
||||
),
|
||||
t("Load interstitial (show on load: _PARAM2_, test mode: _PARAM3_)"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Load interstitial (show on load: _PARAM2_, test mode: _PARAM3_)'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.addParameter("string", t("Android interstitial ID"), "", false)
|
||||
.addParameter("string", t("iOS interstitial ID"), "", false)
|
||||
.addParameter("yesorno", t("Display on load complete?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter("yesorno", t("Test mode?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter('string', t('Android interstitial ID'), '', false)
|
||||
.addParameter('string', t('iOS interstitial ID'), '', false)
|
||||
.addParameter('yesorno', t('Display on load complete?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.addParameter('yesorno', t('Test mode?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.loadInterstitial");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.loadInterstitial');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"ShowInterstitial",
|
||||
t("Show interstitial"),
|
||||
'ShowInterstitial',
|
||||
t('Show interstitial'),
|
||||
t(
|
||||
"Show the interstitial, will work only when the interstitial is fully loaded."
|
||||
'Show the interstitial, will work only when the interstitial is fully loaded.'
|
||||
),
|
||||
t("Show interstitial"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Show interstitial'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.showInterstitial");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.showInterstitial');
|
||||
|
||||
// Reward video
|
||||
extension
|
||||
.addCondition(
|
||||
"VideoLoading",
|
||||
t("Video loading"),
|
||||
t("Check if a reward video is currently loading."),
|
||||
t("Reward video is loading"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'VideoLoading',
|
||||
t('Video loading'),
|
||||
t('Check if a reward video is currently loading.'),
|
||||
t('Reward video is loading'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isVideoLoading");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isVideoLoading');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"VideoReady",
|
||||
t("Video ready"),
|
||||
t("Check if a reward video is ready to be displayed."),
|
||||
t("Reward video is ready"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'VideoReady',
|
||||
t('Video ready'),
|
||||
t('Check if a reward video is ready to be displayed.'),
|
||||
t('Reward video is ready'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isVideoReady");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isVideoReady');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"VideoShowing",
|
||||
t("Video showing"),
|
||||
t("Check if there is a reward video being displayed."),
|
||||
t("Reward video is showing"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'VideoShowing',
|
||||
t('Video showing'),
|
||||
t('Check if there is a reward video being displayed.'),
|
||||
t('Reward video is showing'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.isVideoShowing");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.isVideoShowing');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"VideoReward",
|
||||
t("Video reward"),
|
||||
'VideoReward',
|
||||
t('Video reward'),
|
||||
t(
|
||||
"Check if there is a video reward.\nYou can mark it as non-claimed yet, so you can check this reward in other events."
|
||||
'Check if there is a video reward.\nYou can mark it as non-claimed yet, so you can check this reward in other events.'
|
||||
),
|
||||
t("Video reward given"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Video reward given'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.addParameter("yesorno", t("Mark as claimed"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter('yesorno', t('Mark as claimed'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.existVideoReward");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.existVideoReward');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"LoadVideo",
|
||||
t("Load video"),
|
||||
'LoadVideo',
|
||||
t('Load video'),
|
||||
t(
|
||||
"Start loading a reward video, you can display it automatically when finish loading.\nIf test mode is set to true a test video will be displayed."
|
||||
'Start loading a reward video, you can display it automatically when finish loading.\nIf test mode is set to true a test video will be displayed.'
|
||||
),
|
||||
t("Load reward video (show on load: _PARAM2_, test mode: _PARAM3_)"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Load reward video (show on load: _PARAM2_, test mode: _PARAM3_)'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.addParameter("string", t("Android reward video ID"), "", false)
|
||||
.addParameter("string", t("iOS reward video ID"), "", false)
|
||||
.addParameter("yesorno", t("Display on load complete?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter("yesorno", t("Test mode?"), "", false)
|
||||
.setDefaultValue("true")
|
||||
.addParameter('string', t('Android reward video ID'), '', false)
|
||||
.addParameter('string', t('iOS reward video ID'), '', false)
|
||||
.addParameter('yesorno', t('Display on load complete?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.addParameter('yesorno', t('Test mode?'), '', false)
|
||||
.setDefaultValue('true')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.loadVideo");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.loadVideo');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"ShowVideo",
|
||||
t("Show video"),
|
||||
'ShowVideo',
|
||||
t('Show video'),
|
||||
t(
|
||||
"Show the reward video, will work only when the video is fully loaded."
|
||||
'Show the reward video, will work only when the video is fully loaded.'
|
||||
),
|
||||
t("Show reward video"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
t('Show reward video'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.showVideo");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.showVideo');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"ClaimReward",
|
||||
t("Claim reward"),
|
||||
t("Mark the video reward as claimed."),
|
||||
t("Claim video reward"),
|
||||
t("AdMob"),
|
||||
"JsPlatform/Extensions/admobicon24.png",
|
||||
"JsPlatform/Extensions/admobicon16.png"
|
||||
'ClaimReward',
|
||||
t('Claim reward'),
|
||||
t('Mark the video reward as claimed.'),
|
||||
t('Claim video reward'),
|
||||
t('AdMob'),
|
||||
'JsPlatform/Extensions/admobicon24.png',
|
||||
'JsPlatform/Extensions/admobicon16.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile("Extensions/AdMob/admobtools.js")
|
||||
.setFunctionName("gdjs.adMob.claimVideoReward");
|
||||
.setIncludeFile('Extensions/AdMob/admobtools.js')
|
||||
.setFunctionName('gdjs.adMob.claimVideoReward');
|
||||
|
||||
return extension;
|
||||
},
|
||||
runExtensionSanityTests: function(gd, extension) {
|
||||
return [];
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@@ -19,16 +19,16 @@ gdjs.adMob = {
|
||||
videoLoading: false,
|
||||
videoReady: false,
|
||||
videoShowing: false,
|
||||
videoReward: false
|
||||
videoReward: false,
|
||||
};
|
||||
|
||||
gdjs.adMob._getPlatformName = function() {
|
||||
if (/(android)/i.test(navigator.userAgent)) {
|
||||
return "android";
|
||||
return 'android';
|
||||
} else if (/(ipod|iphone|ipad)/i.test(navigator.userAgent)) {
|
||||
return "ios";
|
||||
return 'ios';
|
||||
} else {
|
||||
return "windowsPhone";
|
||||
return 'windowsPhone';
|
||||
}
|
||||
};
|
||||
|
||||
@@ -78,14 +78,21 @@ gdjs.adMob.loadBanner = function(
|
||||
displayOnLoading,
|
||||
testMode
|
||||
) {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
if (
|
||||
gdjs.adMob.bannerLoading ||
|
||||
gdjs.adMob.bannerReady ||
|
||||
gdjs.adMob.bannerExists
|
||||
)
|
||||
return;
|
||||
|
||||
admob.banner.config({
|
||||
id: gdjs.adMob._getPlatformName() === "android" ? androidID : iosID, // Support Android & iOS
|
||||
id: gdjs.adMob._getPlatformName() === 'android' ? androidID : iosID, // Support Android & iOS
|
||||
bannerAtTop: atTop,
|
||||
overlap: overlap,
|
||||
autoShow: displayOnLoading,
|
||||
isTesting: testMode
|
||||
isTesting: testMode,
|
||||
});
|
||||
admob.banner.prepare();
|
||||
|
||||
@@ -99,7 +106,7 @@ gdjs.adMob.loadBanner = function(
|
||||
};
|
||||
|
||||
gdjs.adMob.showBanner = function() {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
// This block is needed because the banner event listeners bug
|
||||
if (gdjs.adMob.bannerReady) {
|
||||
@@ -113,7 +120,7 @@ gdjs.adMob.showBanner = function() {
|
||||
};
|
||||
|
||||
gdjs.adMob.hideBanner = function() {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
if (gdjs.adMob.bannerExists) gdjs.adMob.bannerShowing = false;
|
||||
|
||||
@@ -121,7 +128,7 @@ gdjs.adMob.hideBanner = function() {
|
||||
};
|
||||
|
||||
gdjs.adMob.removeBanner = function() {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
// These lines are needed because the banner event listeners bug
|
||||
gdjs.adMob.bannerExists = false;
|
||||
@@ -149,12 +156,19 @@ gdjs.adMob.loadInterstitial = function(
|
||||
displayOnLoading,
|
||||
testMode
|
||||
) {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
if (
|
||||
gdjs.adMob.interstitialLoading ||
|
||||
gdjs.adMob.interstitialReady ||
|
||||
gdjs.adMob.interstitialShowing
|
||||
)
|
||||
return;
|
||||
|
||||
admob.interstitial.config({
|
||||
id: gdjs.adMob._getPlatformName() === "android" ? androidID : iosID, // Support Android & iOS
|
||||
id: gdjs.adMob._getPlatformName() === 'android' ? androidID : iosID, // Support Android & iOS
|
||||
autoShow: displayOnLoading,
|
||||
isTesting: testMode
|
||||
isTesting: testMode,
|
||||
});
|
||||
admob.interstitial.prepare();
|
||||
|
||||
@@ -163,7 +177,7 @@ gdjs.adMob.loadInterstitial = function(
|
||||
};
|
||||
|
||||
gdjs.adMob.showInterstitial = function() {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
admob.interstitial.show();
|
||||
};
|
||||
@@ -189,12 +203,19 @@ gdjs.adMob.existVideoReward = function(markAsClaimed) {
|
||||
};
|
||||
|
||||
gdjs.adMob.loadVideo = function(androidID, iosID, displayOnLoading, testMode) {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
if (
|
||||
gdjs.adMob.videoLoading ||
|
||||
gdjs.adMob.videoReady ||
|
||||
gdjs.adMob.videoShowing
|
||||
)
|
||||
return;
|
||||
|
||||
admob.rewardvideo.config({
|
||||
id: gdjs.adMob._getPlatformName() === "android" ? androidID : iosID, // Support Android & iOS
|
||||
id: gdjs.adMob._getPlatformName() === 'android' ? androidID : iosID, // Support Android & iOS
|
||||
autoShow: displayOnLoading,
|
||||
isTesting: testMode
|
||||
isTesting: testMode,
|
||||
});
|
||||
admob.rewardvideo.prepare();
|
||||
|
||||
@@ -203,7 +224,7 @@ gdjs.adMob.loadVideo = function(androidID, iosID, displayOnLoading, testMode) {
|
||||
};
|
||||
|
||||
gdjs.adMob.showVideo = function() {
|
||||
if (typeof admob === "undefined") return;
|
||||
if (typeof admob === 'undefined') return;
|
||||
|
||||
admob.rewardvideo.show();
|
||||
};
|
||||
@@ -214,7 +235,7 @@ gdjs.adMob.claimVideoReward = function() {
|
||||
|
||||
// Banner event listeners
|
||||
document.addEventListener(
|
||||
"admob.banner.events.LOAD",
|
||||
'admob.banner.events.LOAD',
|
||||
function() {
|
||||
gdjs.adMob.bannerReady = true;
|
||||
gdjs.adMob.bannerLoading = false;
|
||||
@@ -223,7 +244,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.banner.events.LOAD_FAIL",
|
||||
'admob.banner.events.LOAD_FAIL',
|
||||
function() {
|
||||
gdjs.adMob.bannerLoading = false;
|
||||
},
|
||||
@@ -254,7 +275,7 @@ document.addEventListener(
|
||||
|
||||
// Interstitial event listeners
|
||||
document.addEventListener(
|
||||
"admob.interstitial.events.LOAD",
|
||||
'admob.interstitial.events.LOAD',
|
||||
function() {
|
||||
gdjs.adMob.interstitialReady = true;
|
||||
gdjs.adMob.interstitialLoading = false;
|
||||
@@ -263,7 +284,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.interstitial.events.LOAD_FAIL",
|
||||
'admob.interstitial.events.LOAD_FAIL',
|
||||
function() {
|
||||
gdjs.adMob.interstitialLoading = false;
|
||||
},
|
||||
@@ -271,7 +292,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.interstitial.events.OPEN",
|
||||
'admob.interstitial.events.OPEN',
|
||||
function() {
|
||||
gdjs.adMob.interstitialShowing = true;
|
||||
gdjs.adMob.interstitialReady = false;
|
||||
@@ -280,7 +301,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.interstitial.events.CLOSE",
|
||||
'admob.interstitial.events.CLOSE',
|
||||
function() {
|
||||
gdjs.adMob.interstitialShowing = false;
|
||||
},
|
||||
@@ -289,7 +310,7 @@ document.addEventListener(
|
||||
|
||||
// Reward video event listeners
|
||||
document.addEventListener(
|
||||
"admob.rewardvideo.events.LOAD",
|
||||
'admob.rewardvideo.events.LOAD',
|
||||
function() {
|
||||
gdjs.adMob.videoReady = true;
|
||||
gdjs.adMob.videoLoading = false;
|
||||
@@ -298,7 +319,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.rewardvideo.events.LOAD_FAIL",
|
||||
'admob.rewardvideo.events.LOAD_FAIL',
|
||||
function() {
|
||||
gdjs.adMob.videoLoading = false;
|
||||
},
|
||||
@@ -306,7 +327,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.rewardvideo.events.OPEN",
|
||||
'admob.rewardvideo.events.OPEN',
|
||||
function() {
|
||||
gdjs.adMob.videoShowing = true;
|
||||
gdjs.adMob.videoReady = false;
|
||||
@@ -315,7 +336,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.rewardvideo.events.CLOSE",
|
||||
'admob.rewardvideo.events.CLOSE',
|
||||
function() {
|
||||
gdjs.adMob.videoShowing = false;
|
||||
},
|
||||
@@ -323,7 +344,7 @@ document.addEventListener(
|
||||
);
|
||||
|
||||
document.addEventListener(
|
||||
"admob.rewardvideo.events.REWARD",
|
||||
'admob.rewardvideo.events.REWARD',
|
||||
function() {
|
||||
gdjs.adMob.videoReward = true;
|
||||
},
|
||||
|
@@ -45,9 +45,6 @@ gdjs.AnchorRuntimeBehavior.prototype.onActivate = function() {
|
||||
};
|
||||
|
||||
gdjs.AnchorRuntimeBehavior.prototype.doStepPreEvents = function(runtimeScene) {
|
||||
};
|
||||
|
||||
gdjs.AnchorRuntimeBehavior.prototype.doStepPostEvents = function(runtimeScene) {
|
||||
var game = runtimeScene.getGame();
|
||||
var rendererWidth = game.getRenderer().getCurrentWidth();
|
||||
var rendererHeight = game.getRenderer().getCurrentHeight();
|
||||
@@ -160,3 +157,6 @@ gdjs.AnchorRuntimeBehavior.prototype.doStepPostEvents = function(runtimeScene) {
|
||||
this.owner.setY(topLeftCoord[1] + this.owner.getY() - this.owner.getDrawableY());
|
||||
}
|
||||
};
|
||||
|
||||
gdjs.AnchorRuntimeBehavior.prototype.doStepPostEvents = function(runtimeScene) {
|
||||
};
|
||||
|
@@ -24,7 +24,7 @@ void DeclareDestroyOutsideBehaviorExtension(gd::PlatformExtension& extension) {
|
||||
_("Destroy when outside of the screen"),
|
||||
_("DestroyOutside"),
|
||||
_("Automatically destroy the object when it goes "
|
||||
"outside of the screen's borders"),
|
||||
"outside of the screen's borders."),
|
||||
"",
|
||||
"CppPlatform/Extensions/destroyoutsideicon.png",
|
||||
"DestroyOutsideBehavior",
|
||||
|
@@ -33,7 +33,7 @@ module.exports = {
|
||||
"JsPlatform/Extensions/vibration_start24.png",
|
||||
"JsPlatform/Extensions/vibration_start32.png"
|
||||
)
|
||||
.addParameter("number", t("Duration"), "", false)
|
||||
.addParameter("expression", t("Duration"), "", false)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/DeviceVibration/devicevibrationtools.js"
|
||||
|
@@ -22,7 +22,7 @@ void DeclareDraggableBehaviorExtension(gd::PlatformExtension& extension) {
|
||||
extension.AddBehavior("Draggable",
|
||||
_("Draggable object"),
|
||||
_("Draggable"),
|
||||
_("Allows objects to be moved using the mouse."),
|
||||
_("Allows objects to be moved using the mouse (or touch)."),
|
||||
"",
|
||||
"CppPlatform/Extensions/draggableicon.png",
|
||||
"DraggableBehavior",
|
||||
|
@@ -29,6 +29,10 @@ gdjs.DraggableRuntimeBehavior.prototype.onDeActivate = function() {
|
||||
this._endDrag();
|
||||
};
|
||||
|
||||
gdjs.DraggableRuntimeBehavior.prototype.ownerRemovedFromScene = function() {
|
||||
this.onDeActivate();
|
||||
};
|
||||
|
||||
gdjs.DraggableRuntimeBehavior.prototype._endDrag = function() {
|
||||
if ( this._dragged && this._mouse ) gdjs.DraggableRuntimeBehavior.mouseDraggingSomething = false;
|
||||
if ( this._dragged && this._touchId !== null ) gdjs.DraggableRuntimeBehavior.touchDraggingSomething[this._touchId] = false;
|
||||
|
@@ -21,11 +21,11 @@ describe('gdjs.DraggableRuntimeBehavior', function() {
|
||||
//Drag'n'drop
|
||||
runtimeScene.renderAndStep();
|
||||
runtimeGame.getInputManager().onMouseMove(450, 500);
|
||||
runtimeGame.getInputManager().onMouseButtonPressed(0);
|
||||
runtimeGame.getInputManager().onMouseButtonPressed(gdjs.InputManager.MOUSE_LEFT_BUTTON);
|
||||
runtimeScene.renderAndStep();
|
||||
runtimeGame.getInputManager().onMouseMove(750, 600);
|
||||
runtimeScene.renderAndStep();
|
||||
runtimeGame.getInputManager().onMouseButtonReleased(0);
|
||||
runtimeGame.getInputManager().onMouseButtonReleased(gdjs.InputManager.MOUSE_LEFT_BUTTON);
|
||||
runtimeScene.renderAndStep();
|
||||
|
||||
expect(object.getX()).to.be(750);
|
||||
@@ -40,11 +40,11 @@ describe('gdjs.DraggableRuntimeBehavior', function() {
|
||||
|
||||
//Start dragging again
|
||||
runtimeGame.getInputManager().onMouseMove(750, 600);
|
||||
runtimeGame.getInputManager().onMouseButtonPressed(0);
|
||||
runtimeGame.getInputManager().onMouseButtonPressed(gdjs.InputManager.MOUSE_LEFT_BUTTON);
|
||||
runtimeScene.renderAndStep();
|
||||
runtimeGame.getInputManager().onMouseMove(850, 700);
|
||||
runtimeScene.renderAndStep();
|
||||
runtimeGame.getInputManager().onMouseButtonReleased(0);
|
||||
runtimeGame.getInputManager().onMouseButtonReleased(gdjs.InputManager.MOUSE_LEFT_BUTTON);
|
||||
runtimeScene.renderAndStep();
|
||||
|
||||
expect(object.getX()).to.be(850);
|
||||
|
@@ -262,7 +262,7 @@ module.exports = {
|
||||
};
|
||||
dummyObject.setRawJSONContent(
|
||||
JSON.stringify({
|
||||
property1: "Initial value",
|
||||
property1: "Hello world",
|
||||
property2: true,
|
||||
property3: 123
|
||||
})
|
||||
@@ -311,13 +311,18 @@ module.exports = {
|
||||
return instanceProperties;
|
||||
};
|
||||
|
||||
extension.addObject(
|
||||
"DummyObject",
|
||||
t("Dummy object for testing"),
|
||||
t("This dummy object does nothing"),
|
||||
"CppPlatform/Extensions/topdownmovementicon.png",
|
||||
dummyObject
|
||||
);
|
||||
extension
|
||||
.addObject(
|
||||
"DummyObject",
|
||||
t("Dummy object for testing"),
|
||||
t("This dummy object does nothing"),
|
||||
"CppPlatform/Extensions/topdownmovementicon.png",
|
||||
dummyObject
|
||||
)
|
||||
.setIncludeFile("Extensions/ExampleJsExtension/dummyruntimeobject.js")
|
||||
.addIncludeFile(
|
||||
"Extensions/ExampleJsExtension/dummyruntimeobject-pixi-renderer.js"
|
||||
);
|
||||
|
||||
return extension;
|
||||
},
|
||||
@@ -325,10 +330,10 @@ module.exports = {
|
||||
* You can optionally add sanity tests that will check the basic working
|
||||
* of your extension behaviors/objects by instanciating behaviors/objects
|
||||
* and setting the property to a given value.
|
||||
*
|
||||
*
|
||||
* If you don't have any tests, you can simply return an empty array like this:
|
||||
* `runExtensionSanityTests: function(gd, extension) { return []; }`
|
||||
*
|
||||
*
|
||||
* But it is recommended to create tests for the behaviors/objects properties you created
|
||||
* to avoid mistakes.
|
||||
*/
|
||||
@@ -351,5 +356,116 @@ module.exports = {
|
||||
"Testing value"
|
||||
)
|
||||
];
|
||||
},
|
||||
/**
|
||||
* Register editors for objects.
|
||||
*
|
||||
* ℹ️ Run `node import-GDJS-Runtime.js` (in newIDE/app/scripts) if you make any change.
|
||||
*/
|
||||
registerEditorConfigurations: function(objectsEditorService) {
|
||||
objectsEditorService.registerEditorConfiguration(
|
||||
"MyDummyExtension::DummyObject",
|
||||
objectsEditorService.getDefaultObjectJsImplementationPropertiesEditor()
|
||||
);
|
||||
},
|
||||
/**
|
||||
* Register renderers for instance of objects on the scene editor.
|
||||
*
|
||||
* ℹ️ Run `node import-GDJS-Runtime.js` (in newIDE/app/scripts) if you make any change.
|
||||
*/
|
||||
registerInstanceRenderers: function(objectsRenderingService) {
|
||||
const RenderedInstance = objectsRenderingService.RenderedInstance;
|
||||
const PIXI = objectsRenderingService.PIXI;
|
||||
|
||||
/**
|
||||
* Renderer for instances of DummyObject inside the IDE.
|
||||
*
|
||||
* @extends RenderedInstance
|
||||
* @class RenderedDummyObjectInstance
|
||||
* @constructor
|
||||
*/
|
||||
function RenderedDummyObjectInstance(
|
||||
project,
|
||||
layout,
|
||||
instance,
|
||||
associatedObject,
|
||||
pixiContainer,
|
||||
pixiResourcesLoader
|
||||
) {
|
||||
RenderedInstance.call(
|
||||
this,
|
||||
project,
|
||||
layout,
|
||||
instance,
|
||||
associatedObject,
|
||||
pixiContainer,
|
||||
pixiResourcesLoader
|
||||
);
|
||||
|
||||
//Setup the PIXI object:
|
||||
this._pixiObject = new PIXI.Text("This is a dummy object", {
|
||||
align: "left"
|
||||
});
|
||||
this._pixiObject.anchor.x = 0.5;
|
||||
this._pixiObject.anchor.y = 0.5;
|
||||
this._pixiContainer.addChild(this._pixiObject);
|
||||
this.update();
|
||||
}
|
||||
RenderedDummyObjectInstance.prototype = Object.create(
|
||||
RenderedInstance.prototype
|
||||
);
|
||||
|
||||
/**
|
||||
* Return the path to the thumbnail of the specified object.
|
||||
*/
|
||||
RenderedDummyObjectInstance.getThumbnail = function(
|
||||
project,
|
||||
resourcesLoader,
|
||||
object
|
||||
) {
|
||||
return "CppPlatform/Extensions/texticon24.png";
|
||||
};
|
||||
|
||||
/**
|
||||
* This is called to update the PIXI object on the scene editor
|
||||
*/
|
||||
RenderedDummyObjectInstance.prototype.update = function() {
|
||||
// Read a property from the object
|
||||
const property1Value = this._associatedObject
|
||||
.getProperties(this.project)
|
||||
.get("My first property")
|
||||
.getValue();
|
||||
this._pixiObject.text = property1Value;
|
||||
|
||||
// Read position and angle from the instance
|
||||
this._pixiObject.position.x =
|
||||
this._instance.getX() + this._pixiObject.width / 2;
|
||||
this._pixiObject.position.y =
|
||||
this._instance.getY() + this._pixiObject.height / 2;
|
||||
this._pixiObject.rotation = RenderedInstance.toRad(
|
||||
this._instance.getAngle()
|
||||
);
|
||||
// Custom size can be read in instance.getCustomWidth() and
|
||||
// instance.getCustomHeight()
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the width of the instance, when it's not resized.
|
||||
*/
|
||||
RenderedDummyObjectInstance.prototype.getDefaultWidth = function() {
|
||||
return this._pixiObject.width;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the height of the instance, when it's not resized.
|
||||
*/
|
||||
RenderedDummyObjectInstance.prototype.getDefaultHeight = function() {
|
||||
return this._pixiObject.height;
|
||||
};
|
||||
|
||||
objectsRenderingService.registerInstanceRenderer(
|
||||
"MyDummyExtension::DummyObject",
|
||||
RenderedDummyObjectInstance
|
||||
);
|
||||
}
|
||||
};
|
||||
|
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
* The PIXI.js renderer for the DummyRuntimeObject.
|
||||
*
|
||||
* @class DummyRuntimeObjectPixiRenderer
|
||||
* @constructor
|
||||
* @param {gdjs.DummyRuntimeObject} runtimeObject The object to render
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The gdjs.RuntimeScene in which the object is
|
||||
*/
|
||||
gdjs.DummyRuntimeObjectPixiRenderer = function(runtimeObject, runtimeScene)
|
||||
{
|
||||
this._object = runtimeObject; // Keep a reference to the object to read from it later.
|
||||
|
||||
// Here we're going to create a dummy text as an example.
|
||||
if ( this._text === undefined ) {
|
||||
this._text = new PIXI.Text(runtimeObject.getText(), {align:"left"});
|
||||
}
|
||||
|
||||
// You can also create a PIXI sprite or other PIXI object
|
||||
// this._imageManager = runtimeScene.getGame().getImageManager();
|
||||
// if ( this._sprite === undefined )
|
||||
// this._sprite = new PIXI.Sprite(this._imageManager.getInvalidPIXITexture());
|
||||
|
||||
this._text.anchor.x = 0.5;
|
||||
this._text.anchor.y = 0.5;
|
||||
runtimeScene.getLayer("").getRenderer().addRendererObject(this._text, runtimeObject.getZOrder());
|
||||
|
||||
this.updatePosition();
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectRenderer = gdjs.DummyRuntimeObjectPixiRenderer; //Register the class to let the engine use it.
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.getRendererObject = function() {
|
||||
// Mandatory, return the internal PIXI object used for your object:
|
||||
return this._text;
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.ensureUpToDate = function() {
|
||||
this.updatePosition();
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.updatePosition = function() {
|
||||
this._text.position.x = this._object.x+this._text.width/2;
|
||||
this._text.position.y = this._object.y+this._text.height/2;
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.updateAngle = function() {
|
||||
this._text.rotation = gdjs.toRad(this._object.angle);
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.updateOpacity = function() {
|
||||
this._text.alpha = this._object.opacity / 255;
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.getWidth = function() {
|
||||
return this._text.width;
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObjectPixiRenderer.prototype.getHeight = function() {
|
||||
return this._text.height;
|
||||
};
|
108
Extensions/ExampleJsExtension/dummyruntimeobject.js
Normal file
@@ -0,0 +1,108 @@
|
||||
/**
|
||||
* A dummy object doing showing a text on screen
|
||||
*
|
||||
* @memberof gdjs
|
||||
* @class DummyRuntimeObject
|
||||
* @extends RuntimeObject
|
||||
*/
|
||||
gdjs.DummyRuntimeObject = function(runtimeScene, objectData) {
|
||||
// Always call the base gdjs.RuntimeObject constructor.
|
||||
gdjs.RuntimeObject.call(this, runtimeScene, objectData);
|
||||
|
||||
// Load any required data from the object properties.
|
||||
this._property1 = objectData.content.property1;
|
||||
|
||||
// Create the renderer (see dummyruntimeobject-pixi-renderer.js)
|
||||
if (this._renderer)
|
||||
gdjs.DummyRuntimeObjectRenderer.call(this._renderer, this, runtimeScene);
|
||||
else this._renderer = new gdjs.DummyRuntimeObjectRenderer(this, runtimeScene);
|
||||
};
|
||||
|
||||
gdjs.DummyRuntimeObject.prototype = Object.create(gdjs.RuntimeObject.prototype);
|
||||
gdjs.DummyRuntimeObject.thisIsARuntimeObjectConstructor =
|
||||
"MyDummyExtension::DummyObject"; //Replace by your extension + object name.
|
||||
|
||||
gdjs.DummyRuntimeObject.prototype.getRendererObject = function() {
|
||||
return this._renderer.getRendererObject();
|
||||
};
|
||||
|
||||
/**
|
||||
* Called once during the game loop, before events and rendering.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The gdjs.RuntimeScene the object belongs to.
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.update = function(runtimeScene) {
|
||||
// This is an example: typically you want to make sure the renderer
|
||||
// is up to date with the object.
|
||||
this._renderer.ensureUpToDate();
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize the extra parameters that could be set for an instance.
|
||||
* @private
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.extraInitializationFromInitialInstance = function(
|
||||
initialInstanceData
|
||||
) {
|
||||
// For example:
|
||||
// this.setSomething(initialInstanceData.something);
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the object position.
|
||||
* @private
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype._updatePosition = function() {
|
||||
// This is an example: typically you want to tell the renderer to update
|
||||
// the position of the object.
|
||||
this._renderer.updatePosition();
|
||||
};
|
||||
|
||||
/**
|
||||
* Set object position on X axis.
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.setX = function(x) {
|
||||
gdjs.RuntimeObject.prototype.setX.call(this, x); // Always call the parent method first.
|
||||
this._updatePosition();
|
||||
};
|
||||
|
||||
/**
|
||||
* Set object position on Y axis.
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.setY = function(y) {
|
||||
gdjs.RuntimeObject.prototype.setY.call(this, y); // Always call the parent method first.
|
||||
this._updatePosition();
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the angle of the object.
|
||||
* @param {number} angle The new angle of the object
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.setAngle = function(angle) {
|
||||
gdjs.RuntimeObject.prototype.setAngle.call(this, angle); // Always call the parent method first.
|
||||
this._renderer.updateAngle(); // Tell the renderer to update the rendered object
|
||||
};
|
||||
|
||||
/**
|
||||
* Set object opacity.
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.setOpacity = function(opacity) {
|
||||
if (opacity < 0) opacity = 0;
|
||||
if (opacity > 255) opacity = 255;
|
||||
|
||||
this.opacity = opacity;
|
||||
this._renderer.updateOpacity(); // Tell the renderer to update the rendered object
|
||||
};
|
||||
|
||||
/**
|
||||
* Get object opacity.
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.getOpacity = function() {
|
||||
return this.opacity;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the text that must be displayed by the dummy object.
|
||||
*/
|
||||
gdjs.DummyRuntimeObject.prototype.getText = function() {
|
||||
return this._property1;
|
||||
};
|
@@ -33,7 +33,7 @@ module.exports = {
|
||||
"Save the content of the given variable in the player data, stored on Facebook Instant Games servers"
|
||||
),
|
||||
t(
|
||||
"Save the content of _PARAM1_ in key _PARAM1_ of player data (store success message in _PARAM2_ or error in _PARAM3_)"
|
||||
"Save the content of _PARAM1_ in key _PARAM0_ of player data (store success message in _PARAM2_ or error in _PARAM3_)"
|
||||
),
|
||||
t("Facebook Instant Games/Player data"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
@@ -183,6 +183,154 @@ module.exports = {
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.getPlayerEntry");
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"AreAdsSupported",
|
||||
t("Check if ads are supported"),
|
||||
t("Check if showind ads is supported on this device (only mobile phones can show ads)"),
|
||||
t("Ads can be shown on this device"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.areAdsSupported");
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"IsInterstitialAdReady",
|
||||
t("Is the interstitial ad ready"),
|
||||
t("Check if the interstitial ad requested from Facebook is loaded and ready to be shown."),
|
||||
t("The interstitial ad is loaded and ready to be shown"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.isInterstitialAdReady");
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"LoadInterstitialAd",
|
||||
t("Load and prepare an interstitial ad"),
|
||||
t("Request and load an interstitial ad from Facebook, so that it is ready to be shown."),
|
||||
t("Request and load an interstitial ad from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.addParameter(
|
||||
"string",
|
||||
t("The Ad Placement id (can be found while setting up the ad on Facebook)"),
|
||||
"",
|
||||
false
|
||||
)
|
||||
.addParameter(
|
||||
"scenevar",
|
||||
t("Variable where to error message (optional, if an error occurs)"),
|
||||
"",
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.loadInterstitialAd");
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"ShowInterstitialAd",
|
||||
t("Show the loaded interstitial ad"),
|
||||
t("Show the interstitial ad previously loaded in memory. This won't work if you did not load the interstitial before."),
|
||||
t("Show the interstitial ad previously loaded in memory (if any error, store it in _PARAM0_)"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.addParameter(
|
||||
"scenevar",
|
||||
t("Variable where to error message (optional, if an error occurs)"),
|
||||
"",
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.showInterstitialAd");
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
"IsRewardedVideoReady",
|
||||
t("Is the rewarded video ready"),
|
||||
t("Check if the rewarded video requested from Facebook is loaded and ready to be shown."),
|
||||
t("The rewarded video is loaded and ready to be shown"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.isRewardedVideoReady");
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"LoadRewardedVideo",
|
||||
t("Load and prepare a rewarded video"),
|
||||
t("Request and load a rewarded video from Facebook, so that it is ready to be shown."),
|
||||
t("Request and load a rewarded video from Facebook (ad placement id: _PARAM0_, error in _PARAM1_)"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.addParameter(
|
||||
"string",
|
||||
t("The Ad Placement id (can be found while setting up the ad on Facebook)"),
|
||||
"",
|
||||
false
|
||||
)
|
||||
.addParameter(
|
||||
"scenevar",
|
||||
t("Variable where to error message (optional, if an error occurs)"),
|
||||
"",
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.loadRewardedVideo");
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
"ShowRewardedVideo",
|
||||
t("Show the loaded rewarded video"),
|
||||
t("Show the rewarded video previously loaded in memory. This won't work if you did not load the video before."),
|
||||
t("Show the rewarded video previously loaded in memory (if any error, store it in _PARAM0_)"),
|
||||
t("Facebook Instant Games/Ads"),
|
||||
"JsPlatform/Extensions/facebookicon24.png",
|
||||
"JsPlatform/Extensions/facebookicon16.png"
|
||||
)
|
||||
.addParameter(
|
||||
"scenevar",
|
||||
t("Variable where to error message (optional, if an error occurs)"),
|
||||
"",
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile(
|
||||
"Extensions/FacebookInstantGames/facebookinstantgamestools.js"
|
||||
)
|
||||
.setFunctionName("gdjs.evtTools.facebookInstantGames.showRewardedVideo");
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
"PlayerId",
|
||||
|
@@ -4,7 +4,24 @@
|
||||
* @static
|
||||
* @private
|
||||
*/
|
||||
gdjs.evtTools.facebookInstantGames = {};
|
||||
gdjs.evtTools.facebookInstantGames = {
|
||||
_preloadedInterstitial: null,
|
||||
_preloadedInterstitialLoading: false,
|
||||
_preloadedInterstitialLoaded: false,
|
||||
_preloadedRewardedVideo: null,
|
||||
_preloadedRewardedVideoLoading: false,
|
||||
_preloadedRewardedVideoLoaded: false
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.areAdsSupported = function() {
|
||||
if (typeof FBInstant === "undefined") return false;
|
||||
|
||||
var supportedAPIs = FBInstant.getSupportedAPIs();
|
||||
return (
|
||||
supportedAPIs.indexOf("getInterstitialAdAsync") !== -1 &&
|
||||
supportedAPIs.indexOf("getRewardedVideoAsync") !== -1
|
||||
);
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.getPlayerId = function() {
|
||||
if (typeof FBInstant === "undefined") return "";
|
||||
@@ -102,7 +119,9 @@ gdjs.evtTools.facebookInstantGames.getPlayerEntry = function(
|
||||
})
|
||||
.then(function(entry) {
|
||||
rankVariable.setNumber(entry.getRank() === null ? -1 : entry.getRank());
|
||||
scoreVariable.setNumber(entry.getScore() === null ? -1 : entry.getScore());
|
||||
scoreVariable.setNumber(
|
||||
entry.getScore() === null ? -1 : entry.getScore()
|
||||
);
|
||||
gdjs.evtTools.network.jsonToVariableStructure(
|
||||
entry.getExtraData(),
|
||||
extraDataVariable
|
||||
@@ -113,9 +132,123 @@ gdjs.evtTools.facebookInstantGames.getPlayerEntry = function(
|
||||
});
|
||||
};
|
||||
|
||||
if (typeof FBInstant === "undefined" && typeof window !== "undefined") {
|
||||
console.log("Creating a mocked version of Facebook Instant Games");
|
||||
gdjs.evtTools.facebookInstantGames.loadInterstitialAd = function(
|
||||
adPlacementId,
|
||||
errorVariable
|
||||
) {
|
||||
if (typeof FBInstant === "undefined") return;
|
||||
|
||||
if (
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoading ||
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoaded
|
||||
)
|
||||
return;
|
||||
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoading = true;
|
||||
FBInstant.getInterstitialAdAsync(adPlacementId)
|
||||
.then(function(interstitial) {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitial = interstitial;
|
||||
return interstitial.loadAsync();
|
||||
})
|
||||
.then(function() {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoading = false;
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoaded = true;
|
||||
console.info("Facebook Instant Games interstitial preloaded.");
|
||||
})
|
||||
.catch(function(err) {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoading = false;
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoaded = false;
|
||||
console.error("Interstitial failed to preload: " + err.message);
|
||||
errorVariable.setString(error.message || "Unknown error");
|
||||
});
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.showInterstitialAd = function(
|
||||
errorVariable
|
||||
) {
|
||||
if (typeof FBInstant === "undefined") return;
|
||||
|
||||
if (!gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoaded) return;
|
||||
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitial
|
||||
.showAsync()
|
||||
.then(function() {
|
||||
console.info("Facebook Instant Games interstitial shown.");
|
||||
})
|
||||
.catch(function(err) {
|
||||
console.error("Interstitial failed to show: " + err.message);
|
||||
errorVariable.setString(error.message || "Unknown error");
|
||||
})
|
||||
.then(function() {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoaded = false;
|
||||
});
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.isInterstitialAdReady = function() {
|
||||
return gdjs.evtTools.facebookInstantGames._preloadedInterstitialLoaded;
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.loadRewardedVideo = function(
|
||||
adPlacementId,
|
||||
errorVariable
|
||||
) {
|
||||
if (typeof FBInstant === "undefined") return;
|
||||
|
||||
if (
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoading ||
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoaded
|
||||
)
|
||||
return;
|
||||
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoading = true;
|
||||
FBInstant.getRewardedVideoAsync(adPlacementId)
|
||||
.then(function(rewardedVideo) {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideo = rewardedVideo;
|
||||
return rewardedVideo.loadAsync();
|
||||
})
|
||||
.then(function() {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoading = false;
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoaded = true;
|
||||
console.info("Facebook Instant Games rewarded video preloaded.");
|
||||
})
|
||||
.catch(function(err) {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoading = false;
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoaded = false;
|
||||
console.error("Rewarded video failed to preload: " + err.message);
|
||||
errorVariable.setString(error.message || "Unknown error");
|
||||
});
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.showRewardedVideo = function(errorVariable) {
|
||||
if (typeof FBInstant === "undefined") return;
|
||||
|
||||
if (!gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoaded) return;
|
||||
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideo
|
||||
.showAsync()
|
||||
.then(function() {
|
||||
console.info("Facebook Instant Games rewarded video shown.");
|
||||
})
|
||||
.catch(function(err) {
|
||||
console.error("Rewarded video failed to show: " + err.message);
|
||||
errorVariable.setString(error.message || "Unknown error");
|
||||
})
|
||||
.then(function() {
|
||||
gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoaded = false;
|
||||
});
|
||||
};
|
||||
|
||||
gdjs.evtTools.facebookInstantGames.isRewardedVideoReady = function() {
|
||||
return gdjs.evtTools.facebookInstantGames._preloadedRewardedVideoLoaded;
|
||||
};
|
||||
|
||||
if (typeof FBInstant === "undefined" && typeof window !== "undefined") {
|
||||
console.log("Creating a mocked version of Facebook Instant Games.");
|
||||
|
||||
/**
|
||||
* A mocked Leaderboard, part of the mock of FBInstant.
|
||||
* @class MockedLeaderboard
|
||||
*/
|
||||
function MockedLeaderboard() {
|
||||
this._playerScore = null;
|
||||
this._playerRank = null;
|
||||
@@ -147,6 +280,49 @@ if (typeof FBInstant === "undefined" && typeof window !== "undefined") {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* A mocked RewardedVideo, part of the mock of FBInstant.
|
||||
* @class RewardedVideo
|
||||
*/
|
||||
function MockedRewardedVideo() {
|
||||
this._isLoaded = false;
|
||||
}
|
||||
MockedRewardedVideo.prototype.loadAsync = function() {
|
||||
this._isLoaded = true;
|
||||
return Promise.resolve();
|
||||
};
|
||||
MockedRewardedVideo.prototype.showAsync = function() {
|
||||
if (this._isLoaded) {
|
||||
console.info(
|
||||
"In a real Instant Game, a video reward should have been shown to the user."
|
||||
);
|
||||
return Promise.resolve();
|
||||
}
|
||||
return Promise.reject(new Error("Rewarded video is not loaded."));
|
||||
};
|
||||
|
||||
/**
|
||||
* A mocked MockedInterstitial, part of the mock of FBInstant.
|
||||
* @class MockedInterstitial
|
||||
*/
|
||||
function MockedInterstitial() {
|
||||
this._isLoaded = false;
|
||||
}
|
||||
MockedInterstitial.prototype.loadAsync = function() {
|
||||
this._isLoaded = true;
|
||||
return Promise.resolve();
|
||||
};
|
||||
MockedInterstitial.prototype.showAsync = function() {
|
||||
if (this._isLoaded) {
|
||||
console.info(
|
||||
"In a real Instant Game, an interstitial should have been shown to the user."
|
||||
);
|
||||
return Promise.resolve();
|
||||
}
|
||||
return Promise.reject(new Error("Interstitial is not loaded."));
|
||||
};
|
||||
|
||||
var supportedAPIs = [];
|
||||
var FBInstantMock = {
|
||||
_mockedPlayerData: {},
|
||||
_mockedLeaderboards: {},
|
||||
@@ -176,8 +352,30 @@ if (typeof FBInstant === "undefined" && typeof window !== "undefined") {
|
||||
new MockedLeaderboard();
|
||||
resolve(FBInstantMock._mockedLeaderboards[leaderboardName]);
|
||||
});
|
||||
},
|
||||
getInterstitialAdAsync: function() {
|
||||
return Promise.resolve(new MockedInterstitial());
|
||||
},
|
||||
getRewardedVideoAsync: function() {
|
||||
return Promise.resolve(new MockedRewardedVideo());
|
||||
},
|
||||
getSupportedAPIs: function() {
|
||||
return supportedAPIs;
|
||||
}
|
||||
};
|
||||
|
||||
// Retrieve the name of the supported APIs in our mock.
|
||||
for (var property in FBInstantMock) {
|
||||
if (typeof FBInstantMock[property] == "object") {
|
||||
for (var subProperty in FBInstantMock[property]) {
|
||||
if (typeof FBInstantMock[property][subProperty] == "function") {
|
||||
supportedAPIs.push(property + "." + subProperty);
|
||||
}
|
||||
}
|
||||
} else if (typeof FBInstantMock[property] == "function") {
|
||||
supportedAPIs.push(property);
|
||||
}
|
||||
}
|
||||
|
||||
window.FBInstant = FBInstantMock;
|
||||
}
|
||||
|
420
Extensions/FileSystem/JsExtension.js
Normal file
@@ -0,0 +1,420 @@
|
||||
/**
|
||||
* This is a declaration of an extension for GDevelop 5.
|
||||
*
|
||||
* ℹ️ Run `node import-GDJS-Runtime.js` (in newIDE/app/scripts) if you make any change
|
||||
* to this extension file or to any other *.js file that you reference inside.
|
||||
*
|
||||
* The file must be named "JsExtension.js", otherwise GDevelop won't load it.
|
||||
* ⚠️ If you make a change and the extension is not loaded, open the developer console
|
||||
* and search for any errors.
|
||||
*
|
||||
* More information on https://github.com/4ian/GDevelop/blob/master/newIDE/README-extensions.md
|
||||
*/
|
||||
module.exports = {
|
||||
createExtension: function(t, gd) {
|
||||
const extension = new gd.PlatformExtension();
|
||||
extension
|
||||
.setExtensionInformation(
|
||||
'FileSystem',
|
||||
t('Filesystem'),
|
||||
t('Access the filesystem of the operating system.'),
|
||||
'Matthias Meike',
|
||||
'Open source (MIT License)'
|
||||
)
|
||||
.setExtensionHelpPath('/all-features/filesystem');
|
||||
|
||||
extension
|
||||
.addCondition(
|
||||
'PathExists',
|
||||
t('File or directory exists'),
|
||||
t('Check if the file or directory exists.'),
|
||||
t('The path _PARAM0_ exists'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_path_exists24.png',
|
||||
'JsPlatform/Extensions/filesystem_path_exists32.png'
|
||||
)
|
||||
.addParameter('string', t('Path to file or directory'), '', false)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.pathExists');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'MakeDirectory',
|
||||
t('Create a directory'),
|
||||
t('Create a new directory at the specified path.'),
|
||||
t('Create directory _PARAM0_'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_create_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_create_folder32.png'
|
||||
)
|
||||
.addParameter('string', t('Directory'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.makeDirectory');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'SaveStringToFileSync',
|
||||
t('Save a text into a file'),
|
||||
t(
|
||||
'Save a text into a file. Only use this on small files to avoid any lag or freeze during the the game execution.'
|
||||
),
|
||||
t('Save _PARAM0_ into file _PARAM1_'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_save_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_save_file32.png'
|
||||
)
|
||||
.addParameter('string', t('String (text)'), '', false)
|
||||
.addParameter('string', t('Save path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.saveStringToFile');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'SaveStringToFileAsync',
|
||||
t('Save a text into a file (Async)'),
|
||||
t(
|
||||
"Save a text into a file asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished."
|
||||
),
|
||||
t('Save _PARAM0_ into file _PARAM1_'),
|
||||
t('Filesystem/Windows, Linux, MacOS/Asynchronous'),
|
||||
'JsPlatform/Extensions/filesystem_save_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_save_file32.png'
|
||||
)
|
||||
.addParameter('string', t('String (text)'), '', false)
|
||||
.addParameter('string', t('Save path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.saveStringToFileAsync');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'SaveVariableToJSONFileSync',
|
||||
t('Save a scene variable into a JSON file'),
|
||||
t(
|
||||
'Save a scene variable (including, for structure, all the children) into a file in JSON format. Only use this on small files to avoid any lag or freeze during the the game execution.'
|
||||
),
|
||||
t('Save scene variable _PARAM0_ into file PARAM1 as JSON'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_save_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_save_file32.png'
|
||||
)
|
||||
.addParameter('scenevar', t('Scene variable'), '', false)
|
||||
.addParameter('string', t('Save path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.saveVariableToJSONFile');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'SaveVariableToJSONFileAsync',
|
||||
t('Save a scene variable into a JSON file (Async)'),
|
||||
t(
|
||||
"Save the scene variable (including, for structures, all the children) into a file in JSON format, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The 'result' variable gets updated when the operation has finished."
|
||||
),
|
||||
t('Save scene variable _PARAM0_ into file PARAM1 as JSON'),
|
||||
t('Filesystem/Windows, Linux, MacOS/Asynchronous'),
|
||||
'JsPlatform/Extensions/filesystem_save_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_save_file32.png'
|
||||
)
|
||||
.addParameter('scenevar', t('Scene variable'), '', false)
|
||||
.addParameter('string', t('Save path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.saveVariableToJSONFileAsync');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'LoadStringFromFileAsync',
|
||||
t('Load a text from a file (Async)'),
|
||||
t(
|
||||
"Load a text from a file, asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available in the scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished."
|
||||
),
|
||||
t('Load text from _PARAM1_ into scene variable _PARAM0_ (Async)'),
|
||||
t('Filesystem/Windows, Linux, MacOS/Asynchronous'),
|
||||
'JsPlatform/Extensions/filesystem_load_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_load_file32.png'
|
||||
)
|
||||
.addParameter('scenevar', t('Scene variable'), '', false)
|
||||
.addParameter('string', t('Load path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.loadStringFromFileAsync');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'LoadStringFromFileSync',
|
||||
t('Load a text from a file'),
|
||||
t(
|
||||
'Load a text from a file. Only use this on small files to avoid any lag or freeze during the the game execution.'
|
||||
),
|
||||
t('Load text from _PARAM1_ into scene variable _PARAM0_'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_load_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_load_file32.png'
|
||||
)
|
||||
.addParameter('scenevar', t('Scene variable'), '', false)
|
||||
.addParameter('string', t('Load path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.loadStringFromFile');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'LoadVariableFromJSONFileSync',
|
||||
t('Load a scene variable from a JSON file'),
|
||||
t(
|
||||
'Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children). Only use this on small files to avoid any lag or freeze during the the game execution.'
|
||||
),
|
||||
t('Load JSON from _PARAM1_ into scene variable _PARAM0_'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_save_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_save_file32.png'
|
||||
)
|
||||
.addParameter('scenevar', t('Scene variable'), '', false)
|
||||
.addParameter('string', t('Load path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.loadVariableFromJSONFile');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'LoadVariableFromJSONFileAsync',
|
||||
t('Load a scene variable from a JSON file (Async)'),
|
||||
t(
|
||||
"Load a JSON formatted text from a file and convert it to a scene variable (potentially a structure variable with children), asynchronously. Use this for large files to avoid any lag or freeze during game execution. The content of the file will be available as a scene variable after a small delay (usually a few milliseconds). The 'result' variable gets updated when the operation has finished."
|
||||
),
|
||||
t('Load JSON from _PARAM1_ into scene variable _PARAM0_'),
|
||||
t('Filesystem/Windows, Linux, MacOS/Asynchronous'),
|
||||
'JsPlatform/Extensions/filesystem_save_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_save_file32.png'
|
||||
)
|
||||
.addParameter('scenevar', t('Scene variable'), '', false)
|
||||
.addParameter('string', t('Load path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.loadVariableFromJSONFileAsync');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'DeleteFile',
|
||||
t('Delete a file'),
|
||||
t('Delete a file from the filesystem.'),
|
||||
t('Delete the file _PARAM0_'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_delete_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_delete_file32.png'
|
||||
)
|
||||
.addParameter('string', t('File path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.deleteFile');
|
||||
|
||||
extension
|
||||
.addAction(
|
||||
'DeleteFileAsync',
|
||||
t('Delete a file (Async)'),
|
||||
t('Delete a file from the filesystem asyncrounouse.'),
|
||||
t('Delete the file _PARAM0_'),
|
||||
t('Filesystem/Windows, Linux, MacOS/Asynchronous'),
|
||||
'JsPlatform/Extensions/filesystem_delete_file24.png',
|
||||
'JsPlatform/Extensions/filesystem_delete_file32.png'
|
||||
)
|
||||
.addParameter('string', t('File path'), '', false)
|
||||
.addParameter(
|
||||
'scenevar',
|
||||
t(
|
||||
"(Optional) Variable to store the result. 'ok': task was successful, 'error': an error occured."
|
||||
),
|
||||
'',
|
||||
true
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.deleteFileAsync');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'DesktopPath',
|
||||
t('Desktop folder'),
|
||||
t('Get the path to the desktop folder.'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.addCodeOnlyParameter('currentScene', '')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getDesktopPath');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'DocumentsPath',
|
||||
t('Documents folder'),
|
||||
t('Get the path to the documents folder.'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.addCodeOnlyParameter('currentScene', '')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getDocumentsPath');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'PicturesPath',
|
||||
t('Pictures folder'),
|
||||
t('Get the path to the pictures folder.'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.addCodeOnlyParameter('currentScene', '')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getPicturesPath');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'ExecutablePath',
|
||||
t('This games executable folder'),
|
||||
t('Get the path to this games executable folder.'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.addCodeOnlyParameter('currentScene', '')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getExecutablePath');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'UserdataPath',
|
||||
t('Userdata folder (For application settings)'),
|
||||
t('Get the path to userdata folder. (For application settings)'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.addCodeOnlyParameter('currentScene', '')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getUserdataPath');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'TempPath',
|
||||
t('Temp folder'),
|
||||
t('Get the path to temp folder.'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.addCodeOnlyParameter('currentScene', '')
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getTempPath');
|
||||
|
||||
extension
|
||||
.addStrExpression(
|
||||
'PathDelimiter',
|
||||
t('Path delimiter'),
|
||||
t('Get the operating system agnostic path delimiter.'),
|
||||
t('Filesystem/Windows, Linux, MacOS'),
|
||||
'JsPlatform/Extensions/filesystem_folder24.png',
|
||||
'JsPlatform/Extensions/filesystem_folder32.png'
|
||||
)
|
||||
.getCodeExtraInformation()
|
||||
.setIncludeFile('Extensions/FileSystem/filesystemtools.js')
|
||||
.setFunctionName('gdjs.fileSystem.getPathDelimiter');
|
||||
|
||||
return extension;
|
||||
},
|
||||
runExtensionSanityTests: function(gd, extension) {
|
||||
return [];
|
||||
},
|
||||
};
|
442
Extensions/FileSystem/filesystemtools.js
Normal file
@@ -0,0 +1,442 @@
|
||||
/**
|
||||
* @memberof gdjs
|
||||
* @class fileSystem
|
||||
* @static
|
||||
* @private
|
||||
*/
|
||||
|
||||
gdjs.fileSystem = {};
|
||||
|
||||
/**
|
||||
* Get the path to 'Desktop' folder.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The current scene
|
||||
* @return {string} The path to the desktop folder
|
||||
*/
|
||||
gdjs.fileSystem.getDesktopPath = function(runtimeScene) {
|
||||
const electron = runtimeScene
|
||||
.getGame()
|
||||
.getRenderer()
|
||||
.getElectron();
|
||||
|
||||
if (electron) {
|
||||
return electron.remote.app.getPath('desktop') || '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path to 'Documents' folder.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The current scene
|
||||
* @return {string} The path to the documents folder
|
||||
*/
|
||||
gdjs.fileSystem.getDocumentsPath = function(runtimeScene) {
|
||||
const electron = runtimeScene
|
||||
.getGame()
|
||||
.getRenderer()
|
||||
.getElectron();
|
||||
|
||||
if (electron) {
|
||||
return electron.remote.app.getPath('documents') || '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path to 'Pictures' folder.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The current scene
|
||||
* @return {string} The path to the pictures folder
|
||||
*/
|
||||
gdjs.fileSystem.getPicturesPath = function(runtimeScene) {
|
||||
const electron = runtimeScene
|
||||
.getGame()
|
||||
.getRenderer()
|
||||
.getElectron();
|
||||
|
||||
if (electron) {
|
||||
return electron.remote.app.getPath('pictures') || '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path to this application 'Executable' folder.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The current scene
|
||||
* @return {string} The path to this applications executable folder
|
||||
*/
|
||||
gdjs.fileSystem.getExecutablePath = function(runtimeScene) {
|
||||
const electron = runtimeScene
|
||||
.getGame()
|
||||
.getRenderer()
|
||||
.getElectron();
|
||||
|
||||
if (electron) {
|
||||
return electron.remote.app.getPath('exe') || '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path to 'UserData' folder.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The current scene
|
||||
* @return {string} The path to userdata folder
|
||||
*/
|
||||
gdjs.fileSystem.getUserdataPath = function(runtimeScene) {
|
||||
const electron = runtimeScene
|
||||
.getGame()
|
||||
.getRenderer()
|
||||
.getElectron();
|
||||
|
||||
if (electron) {
|
||||
return electron.remote.app.getPath('userData') || '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path to 'Temp' folder.
|
||||
* @param {gdjs.RuntimeScene} runtimeScene The current scene
|
||||
* @return {string} The path to temp folder
|
||||
*/
|
||||
gdjs.fileSystem.getTempPath = function(runtimeScene) {
|
||||
const electron = runtimeScene
|
||||
.getGame()
|
||||
.getRenderer()
|
||||
.getElectron();
|
||||
|
||||
if (electron) {
|
||||
return electron.remote.app.getPath('temp') || '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the path delimiter specific to the operating system.
|
||||
* @return {string} The path delimiter
|
||||
*/
|
||||
gdjs.fileSystem.getPathDelimiter = function() {
|
||||
const path = typeof require !== 'undefined' ? require('path') : null;
|
||||
|
||||
if (path) {
|
||||
return path.sep || '/';
|
||||
} else {
|
||||
return '/';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a new directory at the given path.
|
||||
* @param {string} directory The path to create a new directory
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.makeDirectory = function(directory, resultVar) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
let result = 'error';
|
||||
|
||||
if (fileSystem) {
|
||||
try {
|
||||
fileSystem.mkdirSync(directory);
|
||||
result = 'ok';
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"Unable to create directory at: '" + directory + "': ",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
resultVar.setString(result);
|
||||
};
|
||||
|
||||
/**
|
||||
* Save a string into a file, asynchronously.
|
||||
* @param {string} text The string to be saved
|
||||
* @param {string} savePath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.saveStringToFileAsync = function(text, savePath, resultVar) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
|
||||
if (fileSystem) {
|
||||
fileSystem.writeFile(savePath, text, 'utf8', err => {
|
||||
resultVar.setString('ok');
|
||||
if (err) {
|
||||
console.error(
|
||||
"Unable to save the text to path: '" + savePath + "': ",
|
||||
err
|
||||
);
|
||||
resultVar.setString('error');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Save a string into a file.
|
||||
* @param {string} text The string to be saved
|
||||
* @param {string} savePath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.saveStringToFile = function(text, savePath, resultVar) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
let result = 'error';
|
||||
|
||||
if (fileSystem) {
|
||||
try {
|
||||
fileSystem.writeFileSync(savePath, text, 'utf8');
|
||||
result = 'ok';
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"Unable to save the text to path: '" + savePath + "': ",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
resultVar.setString(result);
|
||||
};
|
||||
|
||||
/**
|
||||
* Save a variable into a file in JSON format.
|
||||
* @param {gdjs.Variable} variable The variable to be saved
|
||||
* @param {string} savePath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.saveVariableToJSONFile = function(
|
||||
variable,
|
||||
savePath,
|
||||
resultVar
|
||||
) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
const network = gdjs.evtTools.network;
|
||||
let result = 'error';
|
||||
|
||||
if (fileSystem && network) {
|
||||
try {
|
||||
fileSystem.writeFileSync(
|
||||
savePath,
|
||||
network.variableStructureToJSON(variable),
|
||||
'utf8'
|
||||
);
|
||||
result = 'ok';
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"Unable to save the variable to path: '" + savePath + "': ",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
resultVar.setString(result);
|
||||
};
|
||||
|
||||
/**
|
||||
* Save a variable into a file in JSON format, asynchronously.
|
||||
* @param {string} text The variable to be saved
|
||||
* @param {string} savePath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.saveVariableToJSONFileAsync = function(
|
||||
variable,
|
||||
savePath,
|
||||
resultVar
|
||||
) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
const network = gdjs.evtTools.network;
|
||||
|
||||
if (fileSystem && network) {
|
||||
fileSystem.writeFile(
|
||||
savePath,
|
||||
network.variableStructureToJSON(variable),
|
||||
'utf8',
|
||||
err => {
|
||||
resultVar.setString('ok');
|
||||
if (err) {
|
||||
console.error(
|
||||
"Unable to save the variable to path: '" + savePath + "': ",
|
||||
err
|
||||
);
|
||||
resultVar.setString('error');
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Load a string from a file into a scene variable.
|
||||
* @param {gdjs.Variable} stringVar Variable where to store the content
|
||||
* @param {string} loadPath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.loadStringFromFile = function(stringVar, loadPath, resultVar) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
let result = 'error';
|
||||
|
||||
if (fileSystem) {
|
||||
try {
|
||||
const data = fileSystem.readFileSync(loadPath, 'utf8');
|
||||
|
||||
if (data) {
|
||||
stringVar.setString(data);
|
||||
result = 'ok';
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"Unable to load the file at path: '" + loadPath + "': ",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
resultVar.setString(result);
|
||||
};
|
||||
|
||||
/**
|
||||
* Load a JSON file and convert it into a variable.
|
||||
* @param {gdjs.Variable} variable Variable to store the variable
|
||||
* @param {string} loadPath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.loadVariableFromJSONFile = function(
|
||||
variable,
|
||||
loadPath,
|
||||
resultVar
|
||||
) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
const network = gdjs.evtTools.network;
|
||||
let result = 'error';
|
||||
|
||||
if (fileSystem && network) {
|
||||
try {
|
||||
const data = fileSystem.readFileSync(loadPath, 'utf8');
|
||||
if (data) {
|
||||
network.jsonToVariableStructure(data, variable);
|
||||
result = 'ok';
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"Unable to load variable from the file at path: '" + loadPath + "': ",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
resultVar.setString(result);
|
||||
};
|
||||
|
||||
/**
|
||||
* Load a JSON file and convert it into a variable, asynchronously.
|
||||
* @param {gdjs.Variable} variable Variable to store the variable
|
||||
* @param {string} loadPath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.loadVariableFromJSONFileAsync = function(
|
||||
variable,
|
||||
loadPath,
|
||||
resultVar
|
||||
) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
const network = gdjs.evtTools.network;
|
||||
|
||||
if (fileSystem && network) {
|
||||
fileSystem.readFile(loadPath, 'utf8', (err, data) => {
|
||||
if (data) {
|
||||
network.jsonToVariableStructure(data, variable);
|
||||
resultVar.setString('ok');
|
||||
}
|
||||
if (err) {
|
||||
console.error(
|
||||
"Unable to load variable from the file at path: '" + loadPath + "': ",
|
||||
err
|
||||
);
|
||||
resultVar.setString('error');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Load a string from a file into a scene variable, asynchronously.
|
||||
* @param {gdjs.Variable} stringVar Variable where to store the content
|
||||
* @param {string} loadPath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.loadStringFromFileAsync = function(
|
||||
stringVar,
|
||||
loadPath,
|
||||
resultVar
|
||||
) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
|
||||
if (fileSystem) {
|
||||
fileSystem.readFile(loadPath, 'utf8', (err, data) => {
|
||||
if (data) {
|
||||
stringVar.setString(data);
|
||||
resultVar.setString('ok');
|
||||
}
|
||||
if (err) {
|
||||
console.error(
|
||||
"Unable to load the file at path: '" + loadPath + "': ",
|
||||
err
|
||||
);
|
||||
resultVar.setString('error');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete a file from the filesystem.
|
||||
* @param {string} filePath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.deleteFile = function(filePath, resultVar) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
let result = 'error';
|
||||
|
||||
if (fileSystem) {
|
||||
try {
|
||||
fileSystem.unlinkSync(filePath);
|
||||
result = 'ok';
|
||||
} catch (err) {
|
||||
console.error("Unable to delete the file: '" + filePath + "': ", err);
|
||||
result = 'error';
|
||||
}
|
||||
}
|
||||
resultVar.setString(result);
|
||||
};
|
||||
|
||||
/**
|
||||
* Delete a file from the filesystem, asynchronously.
|
||||
* @param {string} filePath Path to the file
|
||||
* @param {gdjs.Variable} resultVar The variable where to store the result of the operation
|
||||
*/
|
||||
gdjs.fileSystem.deleteFileAsync = function(filePath, resultVar) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
|
||||
if (fileSystem) {
|
||||
fileSystem.unlink(filePath, err => {
|
||||
resultVar.setString('ok');
|
||||
if (err) {
|
||||
console.error("Unable to delete the file: '" + filePath + "': ", err);
|
||||
resultVar.setString('error');
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the file or directory exists.
|
||||
* @param {string} filePath The path to the file or directory
|
||||
* @return {boolean} true if fhe file or directory exists
|
||||
*/
|
||||
gdjs.fileSystem.pathExists = function(filePath) {
|
||||
const fileSystem = typeof require !== 'undefined' ? require('fs') : null;
|
||||
|
||||
if (fileSystem) {
|
||||
return fileSystem.existsSync(filePath);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
@@ -9,7 +9,7 @@ This project is released under the MIT License.
|
||||
gdjs.ParticleEmitterObject = function(runtimeScene, objectData){
|
||||
gdjs.RuntimeObject.call(this, runtimeScene, objectData);
|
||||
|
||||
this.renderer = new gdjs.ParticleEmitterObjectRenderer(runtimeScene, this, objectData);
|
||||
this._renderer = new gdjs.ParticleEmitterObjectRenderer(runtimeScene, this, objectData);
|
||||
|
||||
this.singleAngle = objectData.emissionEditionSimpleMode;
|
||||
this.angleA = objectData.emitterAngleA;
|
||||
@@ -71,64 +71,64 @@ gdjs.ParticleEmitterObject.prototype.setAngle = function(angle){
|
||||
};
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.getRendererObject = function(){
|
||||
return this.renderer.getRendererObject();
|
||||
return this._renderer.getRendererObject();
|
||||
};
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.update = function(runtimeScene){
|
||||
if(this._posDirty){
|
||||
this.renderer.setPosition(this.getX(), this.getY());
|
||||
this._renderer.setPosition(this.getX(), this.getY());
|
||||
}
|
||||
if(this._angleDirty){
|
||||
var angle = this.getAngle();
|
||||
if(this.singleAngle) this.renderer.setAngle(this.angle - this.angleB/2.0, this.angle + this.angleB/2.0);
|
||||
else this.renderer.setAngle(this.angle + this.angleA, this.angle + this.angleB);
|
||||
if(this.singleAngle) this._renderer.setAngle(this.angle - this.angleB/2.0, this.angle + this.angleB/2.0);
|
||||
else this._renderer.setAngle(this.angle + this.angleA, this.angle + this.angleB);
|
||||
}
|
||||
if(this._forceDirty){
|
||||
this.renderer.setForce(this.forceMin, this.forceMax);
|
||||
this._renderer.setForce(this.forceMin, this.forceMax);
|
||||
}
|
||||
if(this._zoneRadiusDirty){
|
||||
this.renderer.setZoneRadius(this.zoneRadius);
|
||||
this._renderer.setZoneRadius(this.zoneRadius);
|
||||
}
|
||||
if(this._lifeTimeDirty){
|
||||
this.renderer.setLifeTime(this.lifeTimeMin, this.lifeTimeMax);
|
||||
this._renderer.setLifeTime(this.lifeTimeMin, this.lifeTimeMax);
|
||||
}
|
||||
if(this._gravityDirty){
|
||||
this.renderer.setGravity(this.gravityX, this.gravityY);
|
||||
this._renderer.setGravity(this.gravityX, this.gravityY);
|
||||
}
|
||||
if(this._colorDirty){
|
||||
this.renderer.setColor(this.colorR1, this.colorG1, this.colorB1,
|
||||
this._renderer.setColor(this.colorR1, this.colorG1, this.colorB1,
|
||||
this.colorR2, this.colorG2, this.colorB2);
|
||||
}
|
||||
if(this._sizeDirty && this.sizeParam === "Mutable"){
|
||||
this.renderer.setSize(this.size1, this.size2);
|
||||
this._renderer.setSize(this.size1, this.size2);
|
||||
}
|
||||
if(this._alphaDirty){
|
||||
this.renderer.setAlpha(this.alpha1, this.alpha2);
|
||||
this._renderer.setAlpha(this.alpha1, this.alpha2);
|
||||
}
|
||||
if(this._flowDirty){
|
||||
this.renderer.setFlow(this.flow, this.tank);
|
||||
this._renderer.setFlow(this.flow, this.tank);
|
||||
}
|
||||
if(this._textureDirty){
|
||||
this.renderer.setTexture(this.texture, runtimeScene);
|
||||
this._renderer.setTexture(this.texture, runtimeScene);
|
||||
}
|
||||
|
||||
this._posDirty = this._angleDirty = this._forceDirty = this._zoneRadiusDirty = false;
|
||||
this._lifeTimeDirty = this._gravityDirty = this._colorDirty = this._sizeDirty = false;
|
||||
this._alphaDirty = this._flowDirty = this._textureDirty = false;
|
||||
|
||||
this.renderer.update(this.getElapsedTime(runtimeScene)/1000.0);
|
||||
this._renderer.update(this.getElapsedTime(runtimeScene)/1000.0);
|
||||
|
||||
if(this.tank > 0 && this.renderer.getTotalParticleCount() > this.tank){
|
||||
this.renderer.stop();
|
||||
if(this.tank > 0 && this._renderer.getTotalParticleCount() > this.tank){
|
||||
this._renderer.stop();
|
||||
}
|
||||
|
||||
if(this.renderer.hasStarted() && this.renderer.getParticleCount() === 0 && this.destroyWhenNoParticles){
|
||||
if(this._renderer.hasStarted() && this._renderer.getParticleCount() === 0 && this.destroyWhenNoParticles){
|
||||
this.deleteFromScene(runtimeScene);
|
||||
}
|
||||
};
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.onDeletedFromScene = function(runtimeScene){
|
||||
this.renderer.destroy();
|
||||
this._renderer.destroy();
|
||||
gdjs.RuntimeObject.prototype.onDeletedFromScene.call(this, runtimeScene);
|
||||
};
|
||||
|
||||
@@ -446,11 +446,11 @@ gdjs.ParticleEmitterObject.prototype.setParticleAlpha2 = function(alpha){
|
||||
};
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.noMoreParticles = function(){
|
||||
this.renderer.stop();
|
||||
this._renderer.stop();
|
||||
};
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.recreateParticleSystem = function(){
|
||||
this.renderer.recreate();
|
||||
this._renderer.recreate();
|
||||
};
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.getFlow = function(){
|
||||
@@ -478,7 +478,7 @@ gdjs.ParticleEmitterObject.prototype.getTexture = function(){
|
||||
|
||||
gdjs.ParticleEmitterObject.prototype.setTexture = function(texture, runtimeScene){
|
||||
if(this.texture !== texture){
|
||||
if(this.renderer.isTextureValid(texture, runtimeScene)){
|
||||
if(this._renderer.isTextureValid(texture, runtimeScene)){
|
||||
this.texture = texture;
|
||||
this._textureDirty = true;
|
||||
}
|
||||
|