v0.2 update

This commit is contained in:
Josef 2025-10-24 13:38:51 +02:00
parent d2ac6aced9
commit 3d008531fd
277 changed files with 5620 additions and 1325 deletions

210
Icons/Collidable.svg Normal file
View File

@ -0,0 +1,210 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="Collidable.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs8"><linearGradient
inkscape:collect="never"
id="linearGradient19861"><stop
style="stop-color:#a7ceef;stop-opacity:1;"
offset="0"
id="stop19857" /><stop
style="stop-color:#609acd;stop-opacity:1;"
offset="1"
id="stop19859" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient19830"><stop
style="stop-color:#1969cc;stop-opacity:1;"
offset="0"
id="stop19826" /><stop
style="stop-color:#237be5;stop-opacity:1;"
offset="1"
id="stop19828" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient95490"><stop
style="stop-color:#66a3e2;stop-opacity:1;"
offset="0"
id="stop95486" /><stop
style="stop-color:#66a3e2;stop-opacity:0;"
offset="1"
id="stop95488" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient91391"><stop
style="stop-color:#90c3ed;stop-opacity:1;"
offset="0"
id="stop91387" /><stop
style="stop-color:#1969cc;stop-opacity:1;"
offset="1"
id="stop91389" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient10929"><stop
style="stop-color:#1d52db;stop-opacity:1;"
offset="0"
id="stop10925" /><stop
style="stop-color:#152ebe;stop-opacity:1;"
offset="1"
id="stop10927" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient10150"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop10146" /><stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop10148" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2791"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2787" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0.14208783"
id="stop2795" /><stop
style="stop-color:#d1d1d1;stop-opacity:1;"
offset="1"
id="stop2789" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2770"><stop
style="stop-color:#cbe6ef;stop-opacity:1;"
offset="0"
id="stop2766" /><stop
style="stop-color:#5a87eb;stop-opacity:1;"
offset="0.17897609"
id="stop2774" /><stop
style="stop-color:#1b47d2;stop-opacity:1;"
offset="1"
id="stop2768" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2638"><stop
style="stop-color:#5d7dc1;stop-opacity:1;"
offset="0"
id="stop2634" /><stop
style="stop-color:#5769b2;stop-opacity:1;"
offset="1"
id="stop2636" /></linearGradient><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient2638"
id="linearGradient2640"
x1="5.5241203"
y1="10.765742"
x2="13.133284"
y2="9.9986429"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="never"
xlink:href="#linearGradient2770"
id="radialGradient2772"
cx="6.0584679"
cy="3.4481783"
fx="6.0584679"
fy="3.4481783"
r="6.1221313"
gradientTransform="matrix(5.0826908,0,0,3.6467239,-6.1662076,-17.350757)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="never"
xlink:href="#linearGradient2791"
id="radialGradient2793"
cx="8.2773142"
cy="-0.40066716"
fx="8.2773142"
fy="-0.40066716"
r="3.5763378"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3511087,0.88894441,-1.2043804,1.1301171,16.062243,-9.6517622)" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient10150"
id="linearGradient10152"
x1="9.9135351"
y1="9.4398756"
x2="13.804861"
y2="14.243992"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0751754,0,0,1.2252487,20.002377,-7.9560723)" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient10929"
id="linearGradient10931"
x1="9.6400452"
y1="10.368964"
x2="13.999562"
y2="9.1402229"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient10929"
id="linearGradient21854"
gradientUnits="userSpaceOnUse"
x1="9.6400452"
y1="10.368964"
x2="13.999562"
y2="9.1402229" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient91391"
id="linearGradient91393"
x1="8.9645748"
y1="8.594615"
x2="11.664056"
y2="18.916397"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#linearGradient91391"
id="linearGradient95492"
x1="23.753363"
y1="53.728447"
x2="4.2730064"
y2="5.2054238"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient19830"
id="linearGradient19832"
x1="5.7427268"
y1="-0.24260253"
x2="9.9340897"
y2="16.282267"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1102298,0,0,1.1102298,-0.9806513,-1.3439792)" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient19861"
id="linearGradient19863"
x1="9.7719393"
y1="0.063413613"
x2="14.320319"
y2="16.945301"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1102298,0,0,1.1102298,-0.9806513,-1.3439792)" /></defs><sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="10.363534"
inkscape:cx="4.9693473"
inkscape:cy="9.8422025"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g84165" /><g
id="g560"
transform="translate(0.08802232,0.240022)"><g
id="g2600"
transform="translate(-0.10534391,-0.05878716)"><g
id="g10886"
transform="matrix(0.94595208,0,0,0.94595208,0.43331955,0.43182955)"><g
id="g84165"
transform="translate(0,-0.15300804)"><path
id="path16907"
style="color:#000000;fill:url(#linearGradient19863);fill-opacity:1;stroke:url(#linearGradient19832);stroke-width:1.64313;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
d="m 8.1730505,1.3905012 c -0.1232363,-0.00123 -0.2454498,0.022464 -0.3592888,0.06968 l -5.8436272,1.243978 c -0.3522014,0.144687 -0.577778,0.4925955 -0.566152,0.8731805 l 0.2286381,7.2946493 c 0.010129,0.314385 0.1812183,0.601467 0.4529216,0.759951 l 5.5831295,3.248841 c 0.3026238,0.175479 0.6788703,0.162797 0.9689909,-0.03266 l 5.1628714,-3.462237 c 0.252739,-0.169412 0.404583,-0.453506 0.405014,-0.757773 l 0.0043,-7.105206 C 14.209636,3.160464 13.995223,2.8324176 13.66335,2.6867392 L 8.5301618,1.4688914 C 8.4176206,1.4189721 8.2961528,1.3923084 8.1730505,1.3905012 Z M 8.120637,2.7254708 11.341059,3.5001203 8.1144118,4.4182759 4.7697509,3.5542065 Z M 3.2766388,5.0188499 7.0191256,6.3758553 6.9653369,12.359228 3.4421295,10.308014 Z m 9.1041592,0.041373 -0.0023,5.0801241 -3.1856931,2.136134 0.053789,-5.9267558 z"
sodipodi:nodetypes="ccccccccccccccccccccccccccccc" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dg7on2hj1wbey"
path="res://.godot/imported/Collidable.svg-8482075c469ae7f520a2601ba58d7e98.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/Collidable.svg"
dest_files=["res://.godot/imported/Collidable.svg-8482075c469ae7f520a2601ba58d7e98.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

213
Icons/Collider.svg Normal file
View File

@ -0,0 +1,213 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="Collider.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs8"><linearGradient
inkscape:collect="never"
id="linearGradient95490"><stop
style="stop-color:#66a3e2;stop-opacity:1;"
offset="0"
id="stop95486" /><stop
style="stop-color:#66a3e2;stop-opacity:0;"
offset="1"
id="stop95488" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient91391"><stop
style="stop-color:#90c3ed;stop-opacity:1;"
offset="0"
id="stop91387" /><stop
style="stop-color:#1969cc;stop-opacity:1;"
offset="1"
id="stop91389" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient10929"><stop
style="stop-color:#1d52db;stop-opacity:1;"
offset="0"
id="stop10925" /><stop
style="stop-color:#152ebe;stop-opacity:1;"
offset="1"
id="stop10927" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient10150"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop10146" /><stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop10148" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2791"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2787" /><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0.14208783"
id="stop2795" /><stop
style="stop-color:#d1d1d1;stop-opacity:1;"
offset="1"
id="stop2789" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2770"><stop
style="stop-color:#cbe6ef;stop-opacity:1;"
offset="0"
id="stop2766" /><stop
style="stop-color:#5a87eb;stop-opacity:1;"
offset="0.17897609"
id="stop2774" /><stop
style="stop-color:#1b47d2;stop-opacity:1;"
offset="1"
id="stop2768" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2638"><stop
style="stop-color:#5d7dc1;stop-opacity:1;"
offset="0"
id="stop2634" /><stop
style="stop-color:#5769b2;stop-opacity:1;"
offset="1"
id="stop2636" /></linearGradient><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient2638"
id="linearGradient2640"
x1="5.5241203"
y1="10.765742"
x2="13.133284"
y2="9.9986429"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="never"
xlink:href="#linearGradient2770"
id="radialGradient2772"
cx="6.0584679"
cy="3.4481783"
fx="6.0584679"
fy="3.4481783"
r="6.1221313"
gradientTransform="matrix(5.0826908,0,0,3.6467239,-6.1662076,-17.350757)"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="never"
xlink:href="#linearGradient2791"
id="radialGradient2793"
cx="8.2773142"
cy="-0.40066716"
fx="8.2773142"
fy="-0.40066716"
r="3.5763378"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3511087,0.88894441,-1.2043804,1.1301171,16.062243,-9.6517622)" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient10150"
id="linearGradient10152"
x1="9.9135351"
y1="9.4398756"
x2="13.804861"
y2="14.243992"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0751754,0,0,1.2252487,20.002377,-7.9560723)" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient10929"
id="linearGradient10931"
x1="9.6400452"
y1="10.368964"
x2="13.999562"
y2="9.1402229"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient10929"
id="linearGradient21854"
gradientUnits="userSpaceOnUse"
x1="9.6400452"
y1="10.368964"
x2="13.999562"
y2="9.1402229" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient91391"
id="linearGradient91393"
x1="8.9645748"
y1="8.594615"
x2="11.664056"
y2="18.916397"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.96377216,0,0,0.96377216,0.26239556,0.1404646)" /><linearGradient
xlink:href="#linearGradient91391"
id="linearGradient95492"
x1="23.753363"
y1="53.728447"
x2="4.2730064"
y2="5.2054238"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.96377216,0,0,0.96377216,0.26239556,0.1404646)" /><linearGradient
xlink:href="#linearGradient19861"
id="linearGradient19863"
x1="9.7719393"
y1="0.063413613"
x2="14.320319"
y2="16.945301"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0137275,0,0,1.0137275,-0.0416865,-0.2688203)" /><linearGradient
id="linearGradient19861"><stop
style="stop-color:#a7ceef;stop-opacity:1;"
offset="0"
id="stop19857" /><stop
style="stop-color:#609acd;stop-opacity:1;"
offset="1"
id="stop19859" /></linearGradient><linearGradient
xlink:href="#linearGradient19830"
id="linearGradient19832"
x1="5.7427268"
y1="-0.24260253"
x2="9.9340897"
y2="16.282267"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0137275,0,0,1.0137275,-0.14987951,-0.48520634)" /><linearGradient
id="linearGradient19830"><stop
style="stop-color:#1969cc;stop-opacity:1;"
offset="0"
id="stop19826" /><stop
style="stop-color:#237be5;stop-opacity:1;"
offset="1"
id="stop19828" /></linearGradient></defs><sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="5.1817672"
inkscape:cx="-5.6930384"
inkscape:cy="11.772046"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g84165" /><g
id="g560"
transform="translate(0.08802232,0.240022)"><g
id="g2600"
transform="translate(-0.10534391,-0.05878716)"><g
id="g10886"
transform="matrix(0.94595208,0,0,0.94595208,0.43331955,0.43182955)"><g
id="g84165"
transform="translate(0,-0.15300804)"><circle
style="opacity:1;fill:#1b6acd;stroke:none;stroke-width:1.01304;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.569672;paint-order:stroke markers fill;fill-opacity:1"
id="path6905"
cx="8.0173216"
cy="7.9620037"
r="8.2843113" /><path
id="path16907"
style="color:#000000;fill:url(#linearGradient19863);fill-opacity:1;stroke:none;stroke-width:1.50031;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
d="M 8.3163653,2.2279763 C 8.2038411,2.2268532 8.092251,2.2484877 7.988307,2.2915996 L 2.6526132,3.4274498 C 2.3310259,3.5595606 2.1250563,3.8772281 2.1356717,4.2247322 l 0.2087655,6.6605918 c 0.00925,0.287058 0.1654663,0.549187 0.4135526,0.693895 l 5.0978386,2.966449 c 0.2763187,0.160226 0.6198619,0.148646 0.8847653,-0.02982 l 4.7141083,-2.906284 c 0.230771,-0.154687 0.369416,-0.414087 0.36981,-0.691907 l 0.0804,-6.870134 C 13.904749,3.7165857 13.708973,3.4170529 13.405946,3.2840372 L 8.6424368,2.2995527 C 8.539678,2.2539727 8.4287681,2.2296264 8.3163653,2.2279763 Z M 8.2685109,3.4469089 11.285514,4.0267185 8.262827,4.9925741 5.2088873,4.20361 Z M 3.8455582,5.5409456 7.2627443,6.7799983 7.2136298,12.24329 3.9966627,10.37037 Z m 8.3893198,-0.089733 -0.0786,5.0210744 -2.9087891,1.695446 0.049114,-5.4115965 z"
sodipodi:nodetypes="ccccccccccccccccccccccccccccc" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 8.6 KiB

43
Icons/Collider.svg.import Normal file
View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://xsgi8ucjgdbg"
path="res://.godot/imported/Collider.svg-8f5313483cb1b4b6e56ac5d4f044ae74.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/Collider.svg"
dest_files=["res://.godot/imported/Collider.svg-8f5313483cb1b4b6e56ac5d4f044ae74.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

60
Icons/GDScriptAction.svg Normal file
View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="GDScriptAction.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs8" />
<sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="19.59375"
inkscape:cy="5.125"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
id="path1741"
style="fill:#f7b200;fill-opacity:1;stroke:none;stroke-width:0.534077;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:transform-center-y="-0.68247574"
d="M 8,0.93468771 5.4928705,4.6302281 1.2031246,5.8742369 3.9413341,9.4012453 3.7988638,13.864735 8,12.349685 12.201136,13.864735 12.058666,9.4012453 14.796875,5.8742369 10.507129,4.6302281 Z M 8.2137054,4.9290682 c 0.4239975,0 0.8065835,0.041512 1.1484495,0.1233584 0.3425058,0.082089 0.578204,0.1926273 0.7054021,0.3318515 0.0059,0.048284 0.0087,0.1383351 0.0087,0.2710411 0,0.1337522 -0.04491,0.3238646 -0.1355203,0.5698811 C 9.8496947,6.4699292 9.746622,6.6531166 9.6314549,6.7742321 9.5164587,6.8956754 9.4326074,6.9549262 9.3812632,6.9549262 c -0.051585,0 -0.1059396,-0.021325 -0.1633195,-0.06776 C 9.1600756,6.8420127 9.0472101,6.7943823 8.8774049,6.742958 8.7076783,6.6910512 8.5433606,6.6647728 8.3857087,6.6647728 c -0.3752295,0 -0.6794175,0.1210509 -0.9121573,0.3631255 -0.2332233,0.242345 -0.3509634,0.6182626 -0.3509634,1.1276002 0,0.5082627 0.1199882,0.8932548 0.3596506,1.1571366 0.2391293,0.2635632 0.5149343,0.3961372 0.8270226,0.3961372 0.3116901,0 0.467372,-0.07864 0.467372,-0.236292 l 0.00695,-0.4256738 H 8.2206552 V 8.0912131 c 0,0 0.5585403,-0.1013832 1.0476778,-0.093822 0.4891082,0.00837 0.926057,0.083238 0.926057,0.2484543 L 10.1579,11.090039 c -0.1213,0.08466 -0.3647304,0.166925 -0.7314637,0.248454 -0.366364,0.08185 -0.7855063,0.123358 -1.2579083,0.123358 -0.8784476,0 -1.5869534,-0.283786 -2.1266296,-0.853084 C 5.5031827,10.039406 5.2339882,9.2025489 5.2339882,8.0999002 5.2339882,7.16076 5.4972359,6.3976773 6.024524,5.8099511 6.5514072,5.2224886 7.2806803,4.9290677 8.2137019,4.9290682 Z" />
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 0.64081552,2.8726213 V 0.66291261 H 2.7400388"
id="path46127" />
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 15.379573,2.7842329 V 0.57452426 H 13.28035"
id="path46129" />
<g
id="g46137"
transform="matrix(1,0,0,-1,0,16.042485)">
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 0.64081552,2.8726213 V 0.66291261 H 2.7400388"
id="path46131" />
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 15.379573,2.7842329 V 0.57452426 H 13.28035"
id="path46133" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dw1dtygiamsdq"
path="res://.godot/imported/GDScriptAction.svg-5229bd85d169d26c8b21208a93a35aae.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/GDScriptAction.svg"
dest_files=["res://.godot/imported/GDScriptAction.svg-5229bd85d169d26c8b21208a93a35aae.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="GDScriptSequenceAction.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs8" />
<sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="6.1650873"
inkscape:cy="6.3197669"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
id="path1741"
style="fill:none;fill-opacity:1;stroke:#f7b200;stroke-width:0.94549;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:transform-center-y="-0.64527415"
d="M 8,1.1041732 5.6288873,4.5980559 1.5736197,5.7743789 4.1626384,9.107602 4.0278321,13.329069 8,11.89606 11.972168,13.329069 11.837362,9.107602 14.42638,5.7743789 10.371112,4.5980559 Z" />
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 0.64081552,2.8726213 V 0.66291261 H 2.7400388"
id="path46127" />
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 15.379573,2.7842329 V 0.57452426 H 13.28035"
id="path46129" />
<g
id="g46137"
transform="matrix(1,0,0,-1,0,16.042485)">
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 0.64081552,2.8726213 V 0.66291261 H 2.7400388"
id="path46131" />
<path
style="fill:none;stroke:#f7b200;stroke-width:0.979;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;paint-order:stroke fill markers"
d="M 15.379573,2.7842329 V 0.57452426 H 13.28035"
id="path46133" />
</g>
<path
id="path348"
style="fill:#f7b200;fill-opacity:1;stroke:none;stroke-width:0.467468;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:transform-center-y="-0.59735854"
d="M 8.1561373,4.9694219 C 7.3394817,4.9694215 6.7026274,5.226228 6.241458,5.7404222 5.7799323,6.2548473 5.5490959,6.9219865 5.5490959,7.7439974 c 0,0.9651266 0.2345108,1.6984029 0.7060383,2.1967526 0.4723678,0.498294 1.0927957,0.745357 1.8616836,0.745358 0.4134832,-1e-6 0.7802701,-0.03606 1.1009402,-0.107701 0.3209957,-0.07136 0.5349041,-0.14301 0.6410758,-0.217111 l 0.032482,-2.4890835 c 0,-0.1446107 -0.3839214,-0.2097848 -0.8120289,-0.217111 -0.428131,-0.00662 -0.9163108,0.082058 -0.9163108,0.082058 v 0.8359627 h 0.4923461 l -0.00513,0.3726786 c 0,0.1379897 -0.1374735,0.2068538 -0.4102884,0.2068538 -0.273165,0 -0.5138282,-0.1163441 -0.7231335,-0.3470357 C 7.3069982,8.5746482 7.2022165,8.2384462 7.2022165,7.7935739 c 0,-0.4458132 0.1018705,-0.7759916 0.3060064,-0.9881113 0.2037131,-0.2118832 0.4699214,-0.3179735 0.7983534,-0.3179735 0.1379882,0 0.2822435,0.022948 0.4308025,0.068381 0.1486272,0.045011 0.2485161,0.086983 0.2991687,0.1265056 0.050224,0.040644 0.096744,0.059833 0.1418911,0.059833 0.044941,0 0.1181666,-0.05269 0.2188205,-0.1589867 C 9.4980627,6.4772127 9.5893896,6.3170497 9.6690753,6.1028434 9.7483846,5.88751 9.7870335,5.7224394 9.7870335,5.6053687 c 0,-0.116155 -0.00166,-0.1953633 -0.00683,-0.2376254 C 9.6688626,5.2458835 9.4611328,5.1489735 9.1613435,5.0771226 8.8621143,5.0054841 8.5272533,4.9694219 8.1561373,4.9694219 Z" />
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ktq8w2ep7qtj"
path="res://.godot/imported/GDScriptSequenceAction.svg-871462890bc760a2e2f4ebebacc73b30.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/GDScriptSequenceAction.svg"
dest_files=["res://.godot/imported/GDScriptSequenceAction.svg-871462890bc760a2e2f4ebebacc73b30.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

40
Icons/RJ_Action.svg Normal file
View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="RJ_Action.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs8" />
<sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="45.254834"
inkscape:cx="10.131514"
inkscape:cy="8.905126"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
id="path1741"
style="opacity:1;fill:#f7b200;fill-opacity:1;stroke:none;stroke-width:0.600376;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:transform-center-y="-0.7671971"
d="M 8,0.13580032 5.1816407,4.2900974 0.35937464,5.6885349 3.4374998,9.6533786 3.2773435,14.670957 8,12.967832 12.722656,14.670957 12.5625,9.6533786 15.640625,5.6885349 10.818359,4.2900974 Z M 8.2402344,4.6260349 c 0.4766316,0 0.9067111,0.046665 1.2910156,0.1386719 0.3850238,0.092278 0.649981,0.2165397 0.792969,0.3730468 0.0066,0.054278 0.0098,0.1555077 0.0098,0.3046876 0,0.1503559 -0.05047,0.3640685 -0.152343,0.640625 -0.102325,0.275109 -0.218193,0.4810368 -0.3476566,0.6171875 -0.1292717,0.1365189 -0.2235321,0.2031249 -0.28125,0.2031249 -0.057989,0 -0.1190909,-0.023972 -0.1835938,-0.076172 C 9.3040888,6.7764484 9.1772126,6.7229054 8.9863282,6.6650974 8.7955319,6.6067464 8.6108163,6.5772068 8.4335937,6.5772068 c -0.4218096,0 -0.7637589,0.1360779 -1.0253905,0.4082031 C 7.146028,7.2578391 7.0136719,7.6804224 7.0136719,8.252988 c 0,0.5713575 0.1348832,1.0041417 0.4042968,1.3007813 0.2688143,0.2962807 0.5788573,0.4453125 0.9296875,0.4453125 0.3503827,0 0.5253907,-0.088402 0.5253907,-0.265625 l 0.00781,-0.4785157 h -0.63281 V 8.1807224 c 0,0 0.6278763,-0.1139687 1.1777344,-0.1054687 0.549825,0.00941 1.0410157,0.093572 1.0410157,0.2792968 l -0.04102,3.1972655 c -0.136358,0.09517 -0.410007,0.187647 -0.8222653,0.279297 -0.4118438,0.09201 -0.8830176,0.138672 -1.4140626,0.138672 -0.9874962,0 -1.7839544,-0.319015 -2.3906253,-0.958984 C 5.193237,10.37076 4.8906252,9.4300173 4.8906252,8.190488 4.8906252,7.1347648 5.186552,6.2769546 5.7792965,5.6162693 6.3715863,4.9558804 7.1913899,4.6260349 8.2402344,4.6260349 Z" />
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bc02q72sijom4"
path="res://.godot/imported/RJ_Action.svg-e2ec937a63457fcfbd6e5b3d52f60bb6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/RJ_Action.svg"
dest_files=["res://.godot/imported/RJ_Action.svg-e2ec937a63457fcfbd6e5b3d52f60bb6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="RJ_SequenceAction.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs8" />
<sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="16"
inkscape:cx="12.03125"
inkscape:cy="3.5"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
id="path1741-9"
style="fill:none;fill-opacity:1;stroke:#f7b200;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:transform-center-y="-0.68247574"
d="M 8,0.93554688 5.4921875,4.6308594 1.203125,5.875 3.9414062,9.4003906 3.7988281,13.865234 8,12.349609 12.201172,13.865234 12.058594,9.4003906 14.796875,5.875 10.507812,4.6308594 Z" />
<path
id="path348"
style="fill:#f7b200;fill-opacity:1;stroke:none;stroke-width:0.467468;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke"
inkscape:transform-center-y="-0.59735854"
d="M 8.1561373,5.2345869 C 7.3394817,5.2345865 6.7026274,5.491393 6.241458,6.0055872 5.7799323,6.5200123 5.5490959,7.1871515 5.5490959,8.0091624 c 0,0.9651266 0.2345108,1.6984029 0.7060383,2.1967526 0.4723678,0.498294 1.0927957,0.745357 1.8616836,0.745358 0.4134832,-1e-6 0.7802701,-0.03606 1.1009402,-0.107701 0.3209957,-0.07136 0.5349041,-0.14301 0.6410758,-0.217111 l 0.032482,-2.4890835 c 0,-0.1446107 -0.3839214,-0.2097848 -0.8120289,-0.217111 -0.428131,-0.00662 -0.9163108,0.082058 -0.9163108,0.082058 v 0.8359627 h 0.4923461 l -0.00513,0.3726786 c 0,0.1379897 -0.1374735,0.2068538 -0.4102884,0.2068538 -0.273165,0 -0.5138282,-0.1163441 -0.7231335,-0.3470357 C 7.3069982,8.8398132 7.2022165,8.5036112 7.2022165,8.0587389 c 0,-0.4458132 0.1018705,-0.7759916 0.3060064,-0.9881113 0.2037131,-0.2118832 0.4699214,-0.3179735 0.7983534,-0.3179735 0.1379882,0 0.2822435,0.022948 0.4308025,0.068381 0.1486272,0.045011 0.2485161,0.086983 0.2991687,0.1265056 0.050224,0.040644 0.096744,0.059833 0.1418911,0.059833 0.044941,0 0.1181666,-0.05269 0.2188205,-0.1589867 C 9.4980627,6.7423777 9.5893896,6.5822147 9.6690753,6.3680084 9.7483846,6.152675 9.7870335,5.9876044 9.7870335,5.8705337 c 0,-0.116155 -0.00166,-0.1953633 -0.00683,-0.2376254 C 9.6688626,5.5110485 9.4611328,5.4141385 9.1613435,5.3422876 8.8621143,5.2706491 8.5272533,5.2345869 8.1561373,5.2345869 Z" />
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://didqgj0wwsx4l"
path="res://.godot/imported/RJ_SequenceAction.svg-1ef2c9c94a8c9f5c9dcc7af742ad00d8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/RJ_SequenceAction.svg"
dest_files=["res://.godot/imported/RJ_SequenceAction.svg-1ef2c9c94a8c9f5c9dcc7af742ad00d8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -150,9 +150,9 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="22.627417"
inkscape:cx="1.4584077"
inkscape:cy="13.34664"
inkscape:zoom="2"
inkscape:cx="-101.25"
inkscape:cy="-9.5"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

198
Icons/WindManager.svg Normal file
View File

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="16"
viewBox="0 0 16 16"
width="16"
version="1.1"
id="svg4"
sodipodi:docname="RenderingManager.svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs8"><linearGradient
inkscape:collect="never"
id="linearGradient7321"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop7317" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop7319" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient2490"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2480" /><stop
style="stop-color:#f0ece9;stop-opacity:0.15384616;"
offset="0.16326228"
id="stop2482" /><stop
style="stop-color:#9f9492;stop-opacity:0;"
offset="0.34845719"
id="stop2484" /><stop
style="stop-color:#322834;stop-opacity:0.66666675;"
offset="0.75751561"
id="stop2486" /><stop
style="stop-color:#020203;stop-opacity:1;"
offset="1"
id="stop2488" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient1031"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop1027" /><stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop1029" /></linearGradient><linearGradient
inkscape:collect="never"
id="linearGradient33765"><stop
style="stop-color:#bfe4e4;stop-opacity:1;"
offset="0"
id="stop33761" /><stop
style="stop-color:#d0dde1;stop-opacity:1;"
offset="0.19335938"
id="stop2420" /><stop
style="stop-color:#3e8ef3;stop-opacity:1;"
offset="0.41559249"
id="stop16949" /><stop
style="stop-color:#26254e;stop-opacity:1;"
offset="0.80959076"
id="stop16951" /><stop
style="stop-color:#482f55;stop-opacity:1;"
offset="1"
id="stop33763" /></linearGradient><linearGradient
id="linearGradient3074"><stop
style="stop-color:#e26708;stop-opacity:1;"
offset="0"
id="stop3070" /><stop
style="stop-color:#bb3c00;stop-opacity:1;"
offset="1"
id="stop3072" /></linearGradient><radialGradient
xlink:href="#linearGradient45008"
id="radialGradient3076"
cx="30.688875"
cy="30.069115"
fx="30.688875"
fy="30.069115"
r="14.05412"
gradientUnits="userSpaceOnUse" /><linearGradient
xlink:href="#linearGradient45008"
id="linearGradient45010"
x1="-31.87768"
y1="22.065159"
x2="-31.87768"
y2="48.78738"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(101.16951,-6.5921995)" /><linearGradient
id="linearGradient45008"><stop
style="stop-color:#e14500;stop-opacity:1;"
offset="0"
id="stop45004" /><stop
style="stop-color:#e17900;stop-opacity:1;"
offset="0.59811592"
id="stop45012" /><stop
style="stop-color:#e19c00;stop-opacity:1;"
offset="1"
id="stop45006" /></linearGradient><linearGradient
xlink:href="#linearGradient45008"
id="linearGradient46715"
x1="31.917692"
y1="47.524929"
x2="31.917692"
y2="22.632998"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(1.7923447e-6)" /><radialGradient
inkscape:collect="never"
xlink:href="#linearGradient33765"
id="radialGradient33767"
cx="28.252495"
cy="28.914215"
fx="28.252495"
fy="28.914215"
r="14.43763"
gradientTransform="matrix(2.0592515,0,0,2.0182304,-29.633594,-30.690448)"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient1031"
id="linearGradient1033"
x1="2.5040113"
y1="4.3790028"
x2="9.6209886"
y2="4.3790028"
gradientUnits="userSpaceOnUse" /><radialGradient
inkscape:collect="never"
xlink:href="#linearGradient2490"
id="radialGradient2424"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.0705199,0,0,2.0292743,-29.931333,-31.016489)"
cx="27.740032"
cy="29.716822"
fx="27.740032"
fy="29.716822"
r="14.43763" /><linearGradient
inkscape:collect="never"
xlink:href="#linearGradient7321"
id="linearGradient7323"
x1="1.9025939"
y1="4.2053886"
x2="10.222406"
y2="4.2053886"
gradientUnits="userSpaceOnUse" /></defs><sodipodi:namedview
id="namedview6"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="5.6568543"
inkscape:cx="-22.715805"
inkscape:cy="-9.8994949"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g33736" /><g
id="g2210"
transform="matrix(0.54328517,0,0,0.54328517,-9.4489315,-11.300948)"><g
id="g33736"><rect
style="fill:url(#radialGradient33767);fill-opacity:1;stroke:none;stroke-width:1.91428;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect18059"
width="28.875259"
height="28.300053"
x="17.679815"
y="21.376339"
ry="4.4076433" /><rect
style="display:inline;opacity:0.56871;fill:#618c85;fill-opacity:1;stroke:none;stroke-width:1.91428;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect5113"
width="28.875259"
height="28.300053"
x="17.679815"
y="21.347578"
ry="4.4076433" /><path
id="path2626"
style="opacity:1;fill:#ffffff;stroke-width:4.26607;stroke-linecap:round;paint-order:markers stroke fill"
inkscape:transform-center-x="-0.080997432"
inkscape:transform-center-y="1.2381837"
d="m 23.964403,24.682689 -0.897572,3.09672 6.933428,0.223474 -6.732076,0.515973 0.01041,0.04165 0.982458,2.048234 7.811737,0.07073 -7.018642,1.461205 3.283937,3.157812 0.632203,12.006936 5.303176,-4.543863 2.32028,-5.061601 -5.205466,0.814123 5.503068,-1.856547 2.097834,-3.53146 -4.222442,0.28206 6.02966,-2.764195 0.483778,-6.395539 z"
sodipodi:nodetypes="ccccccccccccccccccc" /><g
id="g2642"
transform="matrix(1.0851915,0,0,1.0851915,25.209605,-13.00707)" /><path
id="path1984"
style="opacity:0.150106;fill:#ffffff;stroke-width:4.84538;stroke-linecap:round;paint-order:markers stroke fill"
inkscape:transform-center-x="-0.10448909"
inkscape:transform-center-y="1.2381837"
d="m 21.626779,24.682689 -1.157893,3.09672 8.944313,0.223474 -8.684563,0.515973 0.01343,0.04165 1.267398,2.048234 10.077355,0.07073 -9.054241,1.461205 4.236369,3.157812 0.815559,12.006936 6.841243,-4.543863 2.993224,-5.061601 -6.715193,0.814123 7.099108,-1.856547 2.706263,-3.53146 -5.447066,0.28206 7.778427,-2.764195 0.624087,-6.395539 z"
sodipodi:nodetypes="ccccccccccccccccccc" /><path
id="path1986"
style="opacity:0.150106;fill:#ffffff;stroke-width:4.55667;stroke-linecap:round;paint-order:markers stroke fill"
inkscape:transform-center-x="-0.092409416"
inkscape:transform-center-y="1.2381837"
d="m 22.828924,24.682689 -1.02402,3.09672 7.910196,0.223474 -7.680478,0.515973 0.01188,0.04165 1.120865,2.048234 8.91224,0.07073 -8.007415,1.461205 3.746572,3.157812 0.721266,12.006936 6.050278,-4.543863 2.647156,-5.061601 -5.938802,0.814123 6.27833,-1.856547 2.393372,-3.53146 -4.817292,0.28206 6.879108,-2.764195 0.551932,-6.395539 z"
sodipodi:nodetypes="ccccccccccccccccccc" /></g></g></svg>

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cxmpmvdminoh8"
path="res://.godot/imported/WindManager.svg-af882a5a9dd0c369531b565ccd6be2fe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rokojori_action_library/Icons/WindManager.svg"
dest_files=["res://.godot/imported/WindManager.svg-af882a5a9dd0c369531b565ccd6be2fe.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@ -31,6 +31,12 @@ namespace Rokojori
static readonly string RokojoriSettingsPath = "res://.rokojori/settings";
static readonly string RokojoriCachePath = "res://.rokojori/cache";
// static RokojoriPlugin _instance;
// public static RokojoriPlugin Get()
// {
// return _instance;
// }
public override void _EnablePlugin()
{
this.LogInfo();
@ -99,6 +105,8 @@ namespace Rokojori
public override void _EnterTree()
{
// _instance = this;
EnsureHiddenProjectPath( RokojoriProjectInternalPath );
EnsureHiddenProjectPath( RokojoriSettingsPath );
EnsureHiddenProjectPath( RokojoriCachePath );

View File

@ -26,6 +26,23 @@ namespace Rokojori
NetworkNodeSlot _dataSlot = new NetworkNodeSlot();
NetworkNodeSlot _seedAndDataSlot = new NetworkNodeSlot();
public static bool IsAction( Node n )
{
if ( n == null )
{
return false;
}
return n is Action || GDScriptAction.IsRJAction( n );
}
public void LogInfoFor( Node n, string message )
{
var className = GDScriptNames.ExtractClassName( n );
RJLog.GDLog( $"{className}._onTrigger()", n, message );
}
protected override List<NetworkNodeMember> CreateNetworkNodeMembers()
{
return new List<NetworkNodeMember>()
@ -83,7 +100,7 @@ namespace Rokojori
BitView _sendingNetworkData;
BitView _receivedNetworkData;
protected bool isNetworkedTrigger => _isNetworkedTrigger;
public bool isNetworkedTrigger => _isNetworkedTrigger;
static readonly int maxNetworkSeed = Mathf.RoundToInt( Mathf.Pow( 2, 30 ) );
@ -137,7 +154,7 @@ namespace Rokojori
action.Trigger();
}
public static void TriggerAll( Action[] actions, Node target, bool triggerDirectChildren )
public static void TriggerAll( Action[] actions, Node target, bool triggerDirectChildren, Action caller = null )
{
if ( actions != null )
{
@ -152,7 +169,7 @@ namespace Rokojori
return;
}
Nodes.ForEachDirectChild<Action>( target, a => Action.Trigger( a ) );
Nodes.ForEachDirectChild<Action>( target, ( a ) => Trigger( a ) );
}
public static void TriggerAll( Action action, Node target, bool triggerDirectChildren )
@ -168,7 +185,7 @@ namespace Rokojori
return;
}
Nodes.ForEachDirectChild<Action>( target, a => Action.Trigger( a ) );
Nodes.ForEachDirectChild<Action>( target, ( a ) => Trigger( a ) );
}
}

View File

@ -12,6 +12,7 @@ namespace Rokojori
[ExportGroup("Condition")]
[Export]
public Condition condition;
[Export]
public SceneCondition sceneCondition;
@ -24,7 +25,7 @@ namespace Rokojori
protected override void _OnTrigger()
{
var conditionActive = Condition.Evaluate( condition ) && SceneCondition.Evaluate( sceneCondition );
var conditionActive = Condition.Evaluate( condition ) || SceneCondition.Evaluate( sceneCondition );
// this.LogInfo( "Condition is", conditionActive );

View File

@ -16,6 +16,19 @@ namespace Rokojori
public Duration coolDownDuration;
bool _isCoolingDown = false;
int _coolDownID = -1;
public void ResetCoolDown()
{
if ( _coolDownID == -1 )
{
return;
}
_isCoolingDown = false;
_coolDownID = -1;
}
protected override void _OnTrigger()
{
if ( _isCoolingDown )
@ -28,10 +41,21 @@ namespace Rokojori
if ( coolDownDuration != null )
{
TimeLineManager.ScheduleEventIn(
var te = TimeLineManager.ScheduleEventIn(
coolDownDuration.timeLine, coolDownDuration.GetDurationInSeconds(),
ev => _isCoolingDown = false
ev =>
{
if ( _coolDownID != ev.id )
{
return;
}
_isCoolingDown = false;
}
);
_coolDownID = te.id;
}
}

View File

@ -0,0 +1,20 @@
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/ConditionalAction.svg")]
public partial class ResetCoolDown : Action
{
[Export]
public CoolDown coolDown;
protected override void _OnTrigger()
{
coolDown.ResetCoolDown();
}
}
}

View File

@ -0,0 +1 @@
uid://d6m0k7ql0mnr

View File

@ -0,0 +1,60 @@
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/GDScriptAction.svg")]
public partial class GDScriptAction : Action
{
public static string onTriggerFunctionName = "_onTrigger";
public static string rjAction_className = "RJ_Action";
public static bool IsRJAction( Node n )
{
var extractedClass = GDScriptNames.ExtractClassName( n );
if ( extractedClass == null )
{
return false;
}
return GDScriptNames.IsOrExtendsFrom( n, rjAction_className );
}
public static void TriggerRJAction( Node n, Action caller )
{
n.Call( onTriggerFunctionName, caller );
}
protected override void _OnTrigger()
{
var firstChild = GetChild( 0 );
if ( firstChild == null || ! IsRJAction( firstChild ) )
{
return;
}
TriggerRJAction( firstChild, this );
}
public async void WrapRJAction( Node rjAction )
{
await this.RequestNextFrame();
if ( rjAction == null || rjAction.GetParent() == null )
{
return;
}
this.LogInfo( "Wrapping:", rjAction );
this.Wrap( rjAction );
this.Name = rjAction.Name + " Wrapper" ;
}
}
}

View File

@ -0,0 +1 @@
uid://c2m6vuo3nucna

View File

@ -0,0 +1,59 @@
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/GDScriptSequenceAction.svg")]
public partial class GDScriptSequenceAction : SequenceAction
{
public static string rjSequenceAction_className = "RJ_SequenceAction";
public static bool IsRJSequenceAction( Node n )
{
var extractedClass = GDScriptNames.ExtractClassName( n );
if ( extractedClass == null )
{
return false;
}
return GDScriptNames.IsOrExtendsFrom( n, rjSequenceAction_className );
}
public static void TriggerRJ_SequenceAction( Node n, Action caller )
{
n.Call( GDScriptAction.onTriggerFunctionName, caller );
}
protected override void _OnTrigger()
{
var firstChild = GetChild( 0 );
if ( firstChild == null || ! IsRJSequenceAction( firstChild ) )
{
return;
}
TriggerRJ_SequenceAction( firstChild, this );
}
public async void WrapRJSequenceAction( Node rjSequenceAction )
{
await this.RequestNextFrame();
if ( rjSequenceAction == null || rjSequenceAction.GetParent() == null )
{
return;
}
this.LogInfo( "Wrapping:", rjSequenceAction );
this.Wrap( rjSequenceAction );
this.Name = rjSequenceAction.Name + " Wrapper" ;
}
}
}

View File

@ -0,0 +1 @@
uid://cb26oih56el4s

View File

@ -13,8 +13,12 @@ namespace Rokojori
[Export]
public Node[] disable = new Node[ 0 ];
protected override void _OnTrigger()
{
CallDeferred( "SetStates" );
}
void SetStates()
{
Arrays.ForEach( enable, n => NodeState.Enable( n ) );
Arrays.ForEach( disable, n => NodeState.Disable( n ) );

View File

@ -15,6 +15,11 @@ namespace Rokojori
protected override void _OnTrigger()
{
CallDeferred( "SetNodeState" );
}
void SetNodeState()
{
NodeState.Configure( target, configuration );
}
}

View File

@ -43,7 +43,7 @@ namespace Rokojori
// this.LogInfo( "Moving:", direction );
target.LookAt( goal.GlobalPosition );
var nextRotation = target.GetGlobalQuaternion();
var nextRotation = target.GlobalQuaternion();
var rotation = Smoothing.Apply( rotationSmoothing, nextRotation, (float) delta );
target.SetGlobalQuaternion( rotation );
}

View File

@ -11,7 +11,7 @@ namespace Rokojori
public AudioStreamPlayer3D player;
[Export]
public SelectorFlag overdrivePreventionFlag;
public AudioFlag overdrivePreventionFlag;
[Export]
@ -103,7 +103,7 @@ namespace Rokojori
player.Play( offset );
this.LogInfo( "Play sound", offset, HierarchyName.Of( player ) );
// this.LogInfo( "Play sound", offset, HierarchyName.Of( player ) );
if ( overdrivePreventionFlag != null )
{

View File

@ -0,0 +1,72 @@
using Godot;
namespace Rokojori
{
[GlobalClass, Tool ]
public partial class SetTransform : Action
{
[Export]
public Node3D target;
public enum IgnoreGlobalLocal
{
Ignore, Global, Local
}
[ExportGroup( "Position" ) ]
[Export]
public IgnoreGlobalLocal positionMode = IgnoreGlobalLocal.Ignore;
[Export]
public Vector3 position = Vector3.Zero;
[ExportGroup( "Rotation" ) ]
[Export]
public IgnoreGlobalLocal rotationMode = IgnoreGlobalLocal.Ignore;
[Export]
public Vector3 rotation = Vector3.Zero;
public enum IgnoreLocal
{
Ignore, Local
}
[ExportGroup( "Scale" ) ]
[Export]
public IgnoreLocal scaleMode = IgnoreLocal.Ignore;
[Export]
public Vector3 scale = Vector3.One;
protected override void _OnTrigger()
{
if ( target == null )
{
return;
}
if ( positionMode != IgnoreGlobalLocal.Ignore )
{
target.SetLocalOrGlobalPosition( position, positionMode == IgnoreGlobalLocal.Global );
}
if ( rotationMode != IgnoreGlobalLocal.Ignore )
{
target.SetLocalOrGlobalRotation( rotation, rotationMode == IgnoreGlobalLocal.Global );
}
if ( scaleMode != IgnoreLocal.Ignore )
{
target.Scale = scale;
}
}
}
}

View File

@ -0,0 +1 @@
uid://cnp3xr8gawyi6

View File

@ -1,6 +1,6 @@
using Godot;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Rokojori
{
@ -13,17 +13,31 @@ namespace Rokojori
[Export]
public bool queue = true;
protected override void _OnTrigger()
{
if ( target == null )
if ( target == null || Engine.IsEditorHint() )
{
return;
}
// this.LogInfo( "Remove", HierarchyName.Of( target ) );
target.SelfDestroy( queue );
if ( ! IsInstanceValid( this ) || ! IsInstanceValid( target ) )
{
return;
}
CallDeferred( "SelfDestroy" );
}
void SelfDestroy()
{
if ( ! IsInstanceValid( target ) )
{
return;
}
target.SelfDestroy( queue );
}
}
}

View File

@ -20,9 +20,16 @@ namespace Rokojori
public TimeLine timeLine;
bool stopSignal = false;
public void Stop()
{
stopSignal = true;
}
protected override void _OnTrigger()
{
var id = DispatchStart();
if ( ! ( action is SequenceAction ) )
@ -62,6 +69,8 @@ namespace Rokojori
var finished = ( maxNumRepeats > 0 && executed >= maxNumRepeats ) ||
( tl != null && tl.position >= endTime );
finished = stopSignal || finished;
if ( finished )
{
DispatchEnd( id );

View File

@ -0,0 +1,18 @@
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Parallel.svg") ]
public partial class StopRepeatSequence : Action
{
[Export]
public RepeatSequence repeatSequence;
protected override void _OnTrigger()
{
repeatSequence.Stop();
}
}
}

View File

@ -0,0 +1 @@
uid://cvw0nxi8migso

View File

@ -73,7 +73,8 @@ namespace Rokojori
{
DispatchEnd( sequenceID );
}
}
},
this
);
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Text;
using Godot;
using System.Linq;
namespace Rokojori
{
@ -64,6 +65,15 @@ namespace Rokojori
OmniLight3D light = null;
// [Export]
// public Node3D debugProcessIndicator;
// [Export]
// public Vector3 debugProcessIndicatorFull = new Vector3( 5, 0, 0 );
// [Export]
// public StandardMaterial3D debugMaterial;
public override string[] _GetConfigurationWarnings()
{
var warnigns = new List<string>();
@ -186,6 +196,10 @@ namespace Rokojori
_materials = new List<Material>();
if ( Engine.IsEditorHint() )
{
_allTargets = null;
}
Arrays.ForEach( allTargets,
t =>
@ -203,22 +217,31 @@ namespace Rokojori
var end = start + duration;
animationID = TimeLineManager.ScheduleSpanIn( timeline, 0, duration,
( TimeLineSpan span, TimeLineSpanUpdateType type )=>
{
{
// debugProcessIndicator.Position = debugProcessIndicatorFull * span.phase;
if ( animationID != span.id )
{
return;
}
var phase = span.phase;
var value = flashCurve.Sample( phase );
// debugProcessIndicator.Position = debugProcessIndicatorFull * span.phase;
var phase = span.phase;
var value = flashCurve.Sample( phase );
var phaseColor = color;
phaseColor.A = value * initialAlpha;
// debugMaterial.AlbedoColor = phaseColor;
if ( light != null )
{
light.LightEnergy = value * flashEffect.lightFlashCurveScale;
@ -270,8 +293,10 @@ namespace Rokojori
CancelAction( actionID );
DispatchEnd( actionID );
}
}
},
this
).id;
@ -298,7 +323,7 @@ namespace Rokojori
void RemoveMaterials()
{
if ( _materials.Count != allTargets.Length )
if ( _materials == null || allTargets == null || _materials.Count != allTargets.Length )
{
return;
}

View File

@ -8,9 +8,7 @@
[sub_resource type="Resource" id="Resource_54hj8"]
script = ExtResource("1_ejko8")
color = Color(0.151445, 0.275065, 1, 1)
colorMultiply = 1.0
rgbMultiply = 3.0
alphaMultiply = 1.0
[sub_resource type="Curve" id="Curve_tp3r5"]
_data = [Vector2(0, 0), 0.0, -0.249925, 0, 0, Vector2(0.0955632, 0.982574), -2.27942, -2.27942, 0, 0, Vector2(0.238908, 0.442359), -1.89107, -1.89107, 0, 0, Vector2(0.982935, 0.00670242), -0.229111, 0.0, 0, 0]
@ -18,13 +16,7 @@ point_count = 4
[sub_resource type="Resource" id="Resource_pwp07"]
script = ExtResource("2_3i2og")
duration = 1.0
durationRandomRange = 0.0
delay = 0.0
delayRandomRange = 0.0
curve = SubResource("Curve_tp3r5")
scaleY = 1.0
scaleRandomRange = 0.0
[resource]
script = ExtResource("3_65ipm")

View File

@ -8,9 +8,7 @@
[sub_resource type="Resource" id="Resource_54hj8"]
script = ExtResource("1_yrhv1")
color = Color(0, 1, 0.306108, 1)
colorMultiply = 1.0
rgbMultiply = 2.0
alphaMultiply = 1.0
[sub_resource type="Curve" id="Curve_tp3r5"]
_data = [Vector2(0, 0), 0.0, 0.441476, 0, 0, Vector2(0.0957096, 0.959975), -1.01521, -1.01521, 0, 0, Vector2(0.9967, 0.0283505), -0.240285, 0.0, 0, 0]
@ -19,12 +17,7 @@ point_count = 3
[sub_resource type="Resource" id="Resource_pwp07"]
script = ExtResource("2_cdv3p")
duration = 0.6
durationRandomRange = 0.0
delay = 0.0
delayRandomRange = 0.0
curve = SubResource("Curve_tp3r5")
scaleY = 1.0
scaleRandomRange = 0.0
[resource]
script = ExtResource("3_87ql1")
@ -33,6 +26,5 @@ timeline = ExtResource("4_2na64")
color = SubResource("Resource_54hj8")
lightMode = 1
lightRange = 5.0
lightFlashCurveScale = 2.0
lightHasShadows = true
materialMode = 2

View File

@ -7,10 +7,8 @@
[sub_resource type="Resource" id="Resource_54hj8"]
script = ExtResource("1_nmdum")
color = Color(0.859799, 0.542989, 0.696896, 1)
colorMultiply = 4.0
rgbMultiply = 1.0
alphaMultiply = 1.0
color = Color(0.86, 0.12426996, 0.1118, 0.5254902)
colorMultiply = 3.0
[sub_resource type="Curve" id="Curve_tp3r5"]
_data = [Vector2(0, 1), 0.0, -1.0, 0, 1, Vector2(1, 0), -1.0, 0.0, 1, 0]
@ -18,21 +16,11 @@ point_count = 2
[sub_resource type="Resource" id="Resource_pwp07"]
script = ExtResource("2_0sgd7")
duration = 0.5
durationRandomRange = 0.0
delay = 0.0
delayRandomRange = 0.0
duration = 0.3
curve = SubResource("Curve_tp3r5")
scaleY = 1.0
scaleRandomRange = 0.0
[resource]
script = ExtResource("3_7qcuh")
flashCurve = SubResource("Resource_pwp07")
timeline = ExtResource("4_rkq1j")
color = SubResource("Resource_54hj8")
lightMode = 0
lightRange = 2.0
lightFlashCurveScale = 2.0
lightHasShadows = false
materialMode = 0

View File

@ -8,9 +8,7 @@
[sub_resource type="Resource" id="Resource_ny3sx"]
script = ExtResource("1_pp4qy")
color = Color(1, 1, 1, 1)
colorMultiply = 1.0
rgbMultiply = 2.0
alphaMultiply = 1.0
[sub_resource type="Curve" id="Curve_nqaq6"]
_data = [Vector2(0, 1), 0.0, 0.0775112, 0, 0, Vector2(0.0779661, 0), 0.0, 0.0, 0, 0, Vector2(0.227119, 0), 0.113556, 0.113556, 0, 0, Vector2(0.244068, 0.913564), 0.0, 0.0, 0, 0, Vector2(0.308475, 0), 0.0, 0.0, 0, 0, Vector2(0.505085, 0), 0.0, 0.0, 0, 0, Vector2(0.518644, 0.697473), 0.0, 0.0, 0, 0, Vector2(0.60339, 0), 0.0, 0.0, 0, 0, Vector2(0.742794, 0), 0.0, 0.0, 0, 0, Vector2(0.749153, 0.438165), 0.0, 0.0, 0, 0, Vector2(0.80678, 0), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0442571, 0.0, 0, 0]
@ -19,20 +17,10 @@ point_count = 12
[sub_resource type="Resource" id="Resource_pwp07"]
script = ExtResource("2_f6f0o")
duration = 0.7
durationRandomRange = 0.0
delay = 0.0
delayRandomRange = 0.0
curve = SubResource("Curve_nqaq6")
scaleY = 1.0
scaleRandomRange = 0.0
[resource]
script = ExtResource("3_dq1j1")
flashCurve = SubResource("Resource_pwp07")
timeline = ExtResource("4_d6hj6")
color = SubResource("Resource_ny3sx")
lightMode = 0
lightRange = 2.0
lightFlashCurveScale = 2.0
lightHasShadows = false
materialMode = 0

View File

@ -7,9 +7,6 @@
[sub_resource type="Resource" id="Resource_27v41"]
script = ExtResource("1_sk831")
color = Color(1, 1, 1, 1)
colorMultiply = 1.0
rgbMultiply = 1.0
alphaMultiply = 1.0
[sub_resource type="Curve" id="Curve_idts4"]
_data = [Vector2(0, 0), 0.0, 1.0, 0, 1, Vector2(1, 1), 1.0, 0.0, 1, 0]
@ -29,7 +26,4 @@ outCurve = SubResource("Curve_q8jgr")
color = SubResource("Resource_27v41")
opacityModulationStrength = 0.75
opacityModulationDuration = 1.0
opacityModulationTransition = 1.0
outlineMaterialMode = 0
overlayOpacity = 0.1
overlayMaterialMode = 0

View File

@ -27,7 +27,7 @@ namespace Rokojori
}
var tl = TimeLineManager.Ensure( timeline );
var rotation = target.GetGlobalQuaternion() * Quaternion.FromEuler( eulerRotation * (float)tl.delta );
var rotation = target.GlobalQuaternion() * Quaternion.FromEuler( eulerRotation * (float)tl.delta );
target.SetGlobalQuaternion( rotation );
}
}

View File

@ -2,7 +2,7 @@
[ext_resource type="Script" uid="uid://bec6skfqkb2ci" path="res://addons/rokojori_action_library/Runtime/Animation/Shake/ShakeEffect.cs" id="1_68es8"]
[ext_resource type="Script" uid="uid://c5tm02yj1bhhx" path="res://addons/rokojori_action_library/Runtime/Animation/AnimationCurve.cs" id="2_wfmv2"]
[ext_resource type="Resource" uid="uid://h6oi6vkj4c2m" path="res://addons/rokojori_action_library/Runtime/Time/TimeLines/RealTime.tres" id="3_h08aw"]
[ext_resource type="Resource" uid="uid://ch5nsa6yafs5l" path="res://addons/rokojori_action_library/Runtime/Time/TimeLines/GameTime.tres" id="3_udbmo"]
[sub_resource type="Curve" id="Curve_j2uji"]
_data = [Vector2(0, 1), 0.0, 0.0355988, 0, 0, Vector2(1, 0), -0.101636, 0.0, 0, 0]
@ -11,12 +11,7 @@ point_count = 2
[sub_resource type="Resource" id="Resource_jwnpm"]
script = ExtResource("2_wfmv2")
duration = 0.4
durationRandomRange = 0.0
delay = 0.0
delayRandomRange = 0.0
curve = SubResource("Curve_j2uji")
scaleY = 1.0
scaleRandomRange = 0.0
[sub_resource type="Curve" id="Curve_b6b7u"]
_data = [Vector2(0, 0.368339), 0.0, 3.25035, 0, 0, Vector2(0.264591, 0.73511), 0.0, 0.0, 0, 0, Vector2(1, 0.266458), -0.637268, 0.0, 1, 0]
@ -25,24 +20,17 @@ point_count = 3
[sub_resource type="Resource" id="Resource_1s2e6"]
script = ExtResource("2_wfmv2")
duration = 0.5
durationRandomRange = 0.0
delay = 0.0
delayRandomRange = 0.0
curve = SubResource("Curve_b6b7u")
scaleY = 30.0
scaleRandomRange = 0.0
[resource]
script = ExtResource("1_68es8")
shakeAmountCurve = SubResource("Resource_jwnpm")
shakeChangeFPSCurve = SubResource("Resource_1s2e6")
timeline = ExtResource("3_h08aw")
smooth = true
timeline = ExtResource("3_udbmo")
smoothingStrength = 0.325
positionShake = Vector3(0.075, 0, 0.075)
globalPosition = false
repeatAndFlipFirstPosition = true
rotationShake = Vector3(1, 1, 20)
globalRotation = false
scaleShake = Vector3(0.25, 0.25, 0.05)
scaleShakeIsRelative = true

View File

@ -179,7 +179,8 @@ namespace Rokojori
}
lastKeyFrame = keyFrame;
}
},
this
).id;
}

View File

@ -101,7 +101,8 @@ namespace Rokojori
DispatchEnd( actionID );
_running = false;
}
}
},
this
);

View File

@ -38,7 +38,7 @@ namespace Rokojori
public Vector2 scaleCenter = new Vector2( 0.5f, 0.5f );
public static readonly Texture2DPropertyName _wipeTextureProperty = Texture2DPropertyName.Create( "wipeTexture" );
public static readonly Sampler2DPropertyName _wipeTextureProperty = Sampler2DPropertyName.Create( "wipeTexture" );
public static readonly Vector2PropertyName _outputViewSizeProperty = Vector2PropertyName.Create( "outputViewSize" );
public static readonly Vector2PropertyName _wipeTextureSizeProperty = Vector2PropertyName.Create( "wipeTextureSize" );
public static readonly Vector2PropertyName _uvRotationCenterProperty = Vector2PropertyName.Create( "uvRotationCenter" );

View File

@ -0,0 +1,12 @@
using Godot;
using System.Collections.Generic;
using System.Text;
namespace Rokojori
{
[GlobalClass,Tool, Icon("res://addons/rokojori_action_library/Icons/SelecorFlag.svg") ]
public partial class AudioFlag:SelectorFlag
{
}
}

View File

@ -0,0 +1 @@
uid://cwsdhnenhdly4

View File

@ -8,11 +8,11 @@ namespace Rokojori
public partial class AudioManager:Node
{
[Export]
public AudioManagerData data;
public AudioManagerData data = new AudioManagerData();
Dictionary<SelectorFlag,float> _lastPlayTime = new Dictionary<SelectorFlag, float>();
Dictionary<AudioFlag,float> _lastPlayTime = new Dictionary<AudioFlag, float>();
public float GetLastPlayed( SelectorFlag selectorFlag )
public float GetLastPlayed( AudioFlag selectorFlag )
{
if ( ! _lastPlayTime.ContainsKey( selectorFlag ) )
{
@ -22,12 +22,12 @@ namespace Rokojori
return _lastPlayTime[ selectorFlag ];
}
public void RecordSoundPlaying( SelectorFlag selectorFlag )
public void RecordSoundPlaying( AudioFlag selectorFlag )
{
_lastPlayTime[ selectorFlag ] = TimeLine.osTime;
}
public bool CanPlay( SelectorFlag selectorFlag, float blockDuration )
public bool CanPlay( AudioFlag selectorFlag, float blockDuration )
{
if ( ! _lastPlayTime.ContainsKey( selectorFlag ) )
{

View File

@ -102,6 +102,12 @@ namespace Rokojori
if ( Sensors.IsDown( debugCameraToggle ) )
{
debugCameraActive = ! debugCameraActive;
if ( debugCameraActive )
{
Input.MouseMode = Input.MouseModeEnum.Visible;
}
this.LogInfo( debugCameraActive );
}

View File

@ -49,9 +49,9 @@ namespace Rokojori
void Rotate( float delta )
{
var currentRotation = Math3D.GetGlobalQuaternion( this );
var currentRotation = this.GlobalQuaternion();
LookAt( target.GlobalPosition, Vector3.Up, true );
var nextRotation = Math3D.GetGlobalQuaternion( this );
var nextRotation = this.GlobalQuaternion();
var smoothedRotation = smoother.SmoothWithCoefficient( currentRotation, nextRotation, rotationSmoothingCoefficient, delta );

View File

@ -278,7 +278,7 @@ namespace Rokojori
smoothDistance = smoother.SmoothWithCoefficient( smoothDistance, distance, zoomSmoothingCoefficient, delta );
GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
var forward = Math3D.GetGlobalForward( this ) * smoothDistance;
var forward = this.GlobalForward() * smoothDistance;
// this.LogInfo( forward, smoothDistance );
GlobalPosition = target + forward;

View File

@ -16,225 +16,62 @@ namespace Rokojori
public Node3D target;
[Export]
public Smoothing targetFollowSmoothing = new FrameSmoothing();
[ExportGroup("Yaw")]
[Export]
public float yawSpeed;
public float yaw;
[Export]
public Sensor yawPositiveAxis;
public float pitch;
[Export]
public Sensor yawNegativeAxis;
[Export]
public bool roundYaw = false;
[Export]
public int roundedYawResolution = 64;
[Export]
public float yaw = 0;
[Export]
public Smoothing yawSmoothing = new FrameSmoothing();
[Export]
public bool yawGoesBehindPlayer = false;
[Export]
public Smoothing yawToBehingSmoothing = new FrameSmoothing();
[Export]
public float yawBehindDelayDuration = 5;
[Export]
public float yawGoesBehindActivation = 0.1f;
[Export]
public float behindYaw = 0;
[Export]
public float currentYaw = 0;
[Export]
public float bcDelta = 0;
[ExportGroup("Pitch")]
[Export]
public float pitchSpeed;
[Export]
public Sensor pitchPositiveAxis;
[Export]
public Sensor pitchNegativeAxis;
[Export]
public bool pitchIsRelative = false;
[Export]
public float pitch = 0;
[Export]
public float minPitch = -10;
[Export]
public float maxPitch = 80;
public float normalizedPitch => MathX.NormalizeClamped( pitch, minPitch, maxPitch );
[Export]
public Smoothing pitchSmoothing = new FrameSmoothing();
[Export]
public bool pitchGoesBackToCenter = true;
[Export]
public Smoothing toCenterPitchSmoothing = new FrameSmoothing();
[Export]
public float centerPitchDelayDuration = 5;
[Export]
public float centerPitch = 30;
[Export]
public float centerPitchActivation = 0.1f;
[ExportGroup("Distance")]
[Export]
public Curve distanceForPitch = MathX.Curve( 1, 1 );
[Export]
public float distanceScale = 1;
[ExportGroup("Camera Offset")]
[Export]
public Vector3 offset;
float smoothedYaw = 0;
float smoothedPitch = 0;
float smoothedDistance = 0;
float _centerPitchActivation = 0;
float _yawBehindActivation = 0;
public ThirdPersonCameraSettings settings;
public override void _Process( double delta )
{
if ( Engine.IsEditorHint() )
{
return;
}
if ( target == null )
{
return;
}
behindYaw = Math3D.GlobalYawDegrees( target.GlobalForward() * -1 );
behindYaw = MathX.NormalizeAngle( behindYaw );
currentYaw = MathX.NormalizeAngle( yaw );
var data = settings.GetActiveDeviceData();
bcDelta = MathX.NormalizeAngle( MathX.AngleDelta( behindYaw, currentYaw ) );
var targetPosition = Smoothing.Apply( targetFollowSmoothing, target.GlobalPosition, (float) delta );
var targetPosition = Smoothing.Apply( settings.targetFollowSmoothing, target.GlobalPosition, (float) delta );
var yawAxis = Sensors.PolarAxis( yawNegativeAxis, yawPositiveAxis );
var pitchAxis = Sensors.PolarAxis( pitchNegativeAxis, pitchPositiveAxis );
var yawAxis = Sensors.PolarPowerAxis( data.yawNegativeAxis, data.yawPositiveAxis, 1f, data.yawDeadZone, data.yawPower );
var pitchAxis = Sensors.PolarPowerAxis( data.pitchNegativeAxis, data.pitchPositiveAxis, 1f, data.pitchDeadZone, data.pitchPower );
// this.LogInfo( "YAW:", yawAxis, "PITCH:", pitchAxis );
yaw += yawAxis * settings.yawSpeed * data.yawSpeed * (float)delta;
yaw += yawAxis * yawSpeed * (float)delta;
if ( yawGoesBehindPlayer )
if ( data.pitchIsRelative )
{
if ( Mathf.Abs( yawAxis ) < yawGoesBehindActivation )
{
_yawBehindActivation += (float)delta;
if ( yawGoesBehindPlayer && _yawBehindActivation > yawBehindDelayDuration )
{
yaw = Smoothing.ApplyDegreesWith( yawToBehingSmoothing, yaw, behindYaw, (float) delta );
}
}
else
{
_yawBehindActivation = 0;
}
}
// yaw = MathX.Repeat( yaw, 360f );
if ( pitchIsRelative )
{
pitch += pitchAxis * pitchSpeed * (float)delta;
pitch = Mathf.Clamp( pitch, minPitch, maxPitch );
if ( Mathf.Abs( pitchAxis ) < centerPitchActivation )
{
_centerPitchActivation += (float)delta;
if ( _centerPitchActivation > centerPitchDelayDuration )
{
pitch = Smoothing.ApplyWith( toCenterPitchSmoothing, pitch, centerPitch, (float) delta );
}
}
else
{
_centerPitchActivation = 0;
}
pitch += pitchAxis * settings.relativePitchSpeed * data.relativePitchSpeed * (float)delta;
pitch = Mathf.Clamp( pitch, settings.minPitch, settings.maxPitch );
}
else
{
pitch = Mathf.Remap( pitchAxis, -1, 1, minPitch, maxPitch );
pitch = Mathf.Remap( pitchAxis, -1, 1, settings.minPitch, settings.maxPitch );
}
// if ( Mathf.Abs( yaw - smoothedYaw ) > 180 )
// {
// if ( yaw > smoothedYaw )
// {
// smoothedYaw += 360;
// }
// else if ( yaw < smoothedYaw )
// {
// smoothedYaw -= 360;
// }
// }
var appliedYaw = yaw;
// if ( roundYaw )
// {
// appliedYaw = MathX.SnapRounded( yaw, 360f/roundedYawResolution );
// }
var smoothedYaw = Smoothing.ApplyDegrees( settings.yawSmoothing, appliedYaw, (float) delta );
smoothedYaw = Smoothing.ApplyDegrees( yawSmoothing, appliedYaw, (float) delta );
var smoothedPitch = Smoothing.Apply( settings.pitchSmoothing, pitch, (float) delta );
smoothedPitch = Smoothing.Apply( pitchSmoothing, pitch, (float) delta );
// if ( pitchGoesBackToCenter )
// {
// pitch = toCenterPitchSmoothing.Smooth( centerPitch, (float) delta );
// }
// RJLog.Log( "Pitch", smoothedPitch );
// smoothedYaw = yaw;
// smoothedPitch = pitch;
var distance = distanceForPitch.Sample( MathX.NormalizeClamped( pitch, minPitch, maxPitch ) ) * distanceScale;
var distance = settings.distanceForPitch.Sample( MathX.NormalizeClamped( pitch, settings.minPitch, settings.maxPitch ) ) * settings.distanceScale;
GlobalPosition = targetPosition + Math3D.YawPitchRotation( smoothedYaw, smoothedPitch ) * Vector3.Forward * distance;
LookAt( targetPosition, Vector3.Up, true );
GlobalPosition += this.GetOrientationBasedGlobalOffset( offset );
GlobalPosition += this.GetOrientationBasedGlobalOffset( settings.offset );
}

View File

@ -0,0 +1,56 @@
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/SensorGroup.svg")]
public partial class ThirdPersonCameraData: Resource
{
[Export]
public SensorDeviceSelector deviceSelector;
[ExportGroup("Yaw")]
[Export]
public float yawSpeed = 1.0f;
[Export]
public Sensor yawPositiveAxis;
[Export]
public Sensor yawNegativeAxis;
[Export]
public float yawDeadZone = 0.1f;
[Export]
public float yawPower = 1.5f;
[ExportGroup("Pitch")]
[Export]
public float relativePitchSpeed = 1.0f;
[Export]
public Sensor pitchPositiveAxis;
[Export]
public Sensor pitchNegativeAxis;
[Export]
public float pitchDeadZone = 0.1f;
[Export]
public float pitchPower = 1.5f;
[Export]
public bool pitchIsRelative = true;
}
}

View File

@ -0,0 +1 @@
uid://8b4s4nw4heif

View File

@ -0,0 +1,65 @@
using Godot;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/SensorGroup.svg")]
public partial class ThirdPersonCameraSettings: Resource
{
[Export]
public Smoothing targetFollowSmoothing = new FrameSmoothing();
[Export]
public Vector3 offset = Vector3.Zero;
[Export]
public Smoothing yawSmoothing = new FrameSmoothing();
[Export]
public Smoothing pitchSmoothing = new FrameSmoothing();
[Export]
public ThirdPersonCameraData[] deviceData = [];
[ExportGroup("Yaw")]
[Export]
public float yawSpeed = 1;
[ExportGroup("Pitch")]
[Export]
public float relativePitchSpeed = 1;
[Export]
public float minPitch = -10;
[Export]
public float maxPitch = 80;
[ExportGroup("Distance")]
[Export]
public Curve distanceForPitch = MathX.Curve( 1, 1 );
[Export]
public float distanceScale = 1;
public float GetNormalizedPitch( float pitch )
{
return MathX.Normalize( pitch, minPitch, maxPitch );
}
public ThirdPersonCameraData GetActiveDeviceData()
{
var sm = Unique<SensorManager>.Get();
var lastActive = sm.lastActiveDevice;
var lastActiveData = deviceData.FindNonNull( d => d.deviceSelector.Selects( lastActive ) );
return lastActiveData != null ? lastActiveData : deviceData[ 0 ];
}
}
}

View File

@ -0,0 +1 @@
uid://cguitqskambdb

View File

@ -24,7 +24,7 @@ namespace Rokojori
{
if ( pitchMultiply != null && thirdPersonCamera != null )
{
var normalizedPitch = thirdPersonCamera.normalizedPitch;
var normalizedPitch = thirdPersonCamera.settings.GetNormalizedPitch( thirdPersonCamera.pitch );
var sampledPitchMultiply = pitchMultiply.Sample( normalizedPitch );
movingForward *= sampledPitchMultiply;
}

View File

@ -138,7 +138,7 @@ namespace Rokojori
_smoothDistance = Smoothing.Apply( zoomSmoothing, distance, delta );
GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
var forward = Math3D.GetGlobalForward( this ) * _smoothDistance;
var forward = this.GlobalForward() * _smoothDistance;
target -= moveDirection * delta;
GlobalPosition = target + forward;
}

View File

@ -62,7 +62,7 @@ namespace Rokojori
#endif
d = camera.GlobalDistanceTo( n3 );
d = camera.DistanceTo( n3 );
}
fd.SetCenterDistance( d );

View File

@ -5,6 +5,16 @@ namespace Rokojori
{
public static class ColorX
{
public static float r( this Vector4 rgba )
{
return rgba.X;
}
public static Vector3 rgb( this Vector4 rgba )
{
return new Vector3( rgba.X, rgba.Y, rgba.Z );
}
public static float GetChannel( this Color color, ColorChannelType colorChannelType )
{
if ( ColorChannelType.Red == colorChannelType )
@ -243,54 +253,7 @@ namespace Rokojori
{
return new Color( vec.X, vec.Y, b, alpha);
}
public enum EdgeMode
{
Clamp,
Repeat,
TransparentBlack,
}
public static Color GetPixel( this Image image, int x, int y, EdgeMode mode )
{
if ( x < 0 || y < 0 || x >= image.GetSize().X || y >= image.GetSize().Y )
{
if ( mode == EdgeMode.TransparentBlack )
{
return new Color( 0, 0, 0, 0 );
}
if ( mode == EdgeMode.Repeat )
{
x = MathX.Repeat( x, image.GetSize().X );
y = MathX.Repeat( y, image.GetSize().Y );
}
if ( mode == EdgeMode.Clamp )
{
x = Mathf.Clamp( x, 0, image.GetSize().X );
y = Mathf.Clamp( y, 0, image.GetSize().Y );
}
}
return image.GetPixel( x, y );
}
public static Color Sample( this Image image, Vector2 uv, EdgeMode mode )
{
var pixelUV = uv * image.GetSize();
var lowUV = pixelUV.FloorToInt().Max( 0 );
var highUV = ( lowUV + Vector2I.One ).Min( image.GetSize() - Vector2I.One );
var mix = pixelUV - lowUV;
var xTop = Lerp( image.GetPixel( lowUV.X, lowUV.Y, mode ), image.GetPixel( highUV.X, lowUV.Y, mode ), mix.X );
var xLow = Lerp( image.GetPixel( highUV.X, lowUV.Y, mode ), image.GetPixel( highUV.X, highUV.Y, mode ), mix.X );
return Lerp( xTop, xLow, mix.Y );
}
public static Color Blend( Color bottom, Color top )
{

View File

@ -0,0 +1,19 @@
@tool
@icon("res://addons/rokojori_action_library/Icons/RJ_Action.svg")
@abstract class_name RJ_Action extends Node
@export_tool_button( "Create Wrapper" )
var createWrapperAction = _createWrapper;
func _createWrapper() -> void:
var wrapperClass = load( "res://addons/rokojori_action_library/Runtime/Actions/GDScriptAction.cs" );
var wrapper = wrapperClass.new();
wrapper.WrapRJAction( self );
##---
func _onTrigger( node:GDScriptAction ) -> void:
pass
##---

View File

@ -0,0 +1 @@
uid://bho0sb0lvooih

View File

@ -0,0 +1,22 @@
@tool
@icon("res://addons/rokojori_action_library/Icons/RJ_SequenceAction.svg")
@abstract class_name RJ_SequenceAction extends Node
@export_tool_button( "Create Wrapper" )
var createWrapperAction = _createWrapper
func _createWrapper() -> void:
var wrapperClass = load( "res://addons/rokojori_action_library/Runtime/Actions/GDScriptSequenceAction.cs" )
var wrapper = wrapperClass.new();
wrapper.WrapRJSequenceAction( self );
## ---
func _onTrigger( node:GDScriptSequenceAction ) -> void:
pass
## ---

View File

@ -0,0 +1 @@
uid://biyqj5eggsnqh

View File

@ -7,6 +7,72 @@ namespace Rokojori
{
public static class GDScriptNames
{
public static bool IsOrExtendsFrom( Node node, string className )
{
if ( node == null )
{
return false;
}
if ( node.IsClass( className ) )
{
return true;
}
var script = (Script) node.GetScript();
while ( script != null )
{
if ( ExtractClassName( script ) == className )
{
return true;
}
script = script.GetBaseScript();
}
return false;
}
public static string ExtractClassName( Script script )
{
if ( script != null )
{
var className = script.GetClass();
if ( className != "GDScript" )
{
if ( className == "CSharpScript" )
{
return null;
}
return className;
}
var scriptPath = script.ResourcePath;
className = System.IO.Path.GetFileNameWithoutExtension( scriptPath );
return className;
}
return "GDScript";
}
public static string ExtractClassName( Node node )
{
if ( node == null )
{
return null;
}
var script = (Script) node.GetScript();
return ExtractClassName( script );
}
public static string ToCS( string gdScriptName )
{
return gdScriptName.ToPascalCase();

View File

@ -22,7 +22,7 @@ namespace Rokojori
}
var sourceRotation = source.GetGlobalQuaternion();
var sourceRotation = source.GlobalQuaternion();
if ( rotation != sourceRotation )
{

View File

@ -0,0 +1,15 @@
using Godot;
using System.Text;
using System.Collections.Generic;
using System.Linq;
namespace Rokojori
{
public static class BasisExtensions
{
public static bool IsValid( this Basis self )
{
return self.Row0.IsValid() && self.Row1.IsValid() && self.Row2.IsValid();
}
}
}

View File

@ -0,0 +1 @@
uid://m7jq7d5if1rb

View File

@ -0,0 +1,62 @@
using Godot;
namespace Rokojori
{
public static class ImageExtensions
{
public enum EdgeMode
{
Clamp,
Repeat,
TransparentBlack,
}
public static Color GetPixel( this Image image, int x, int y, EdgeMode mode )
{
if ( x < 0 || y < 0 || x >= image.GetSize().X || y >= image.GetSize().Y )
{
if ( mode == EdgeMode.TransparentBlack )
{
return new Color( 0, 0, 0, 0 );
}
if ( mode == EdgeMode.Repeat )
{
x = MathX.Repeat( x, image.GetSize().X );
y = MathX.Repeat( y, image.GetSize().Y );
}
if ( mode == EdgeMode.Clamp )
{
x = Mathf.Clamp( x, 0, image.GetSize().X );
y = Mathf.Clamp( y, 0, image.GetSize().Y );
}
}
return image.GetPixel( x, y );
}
public static Color SampleNearest( this Image image, Vector2 uv, EdgeMode mode = EdgeMode.Clamp )
{
var pixelUV = uv * image.GetSize();
var roundedPixelUV = pixelUV.RoundToInt();
return image.GetPixel( roundedPixelUV.X, roundedPixelUV.Y, mode );
}
public static Color SampleLinear( this Image image, Vector2 uv, EdgeMode mode = EdgeMode.Clamp )
{
var pixelUV = uv * image.GetSize();
var lowUV = pixelUV.FloorToInt().Max( 0 );
var highUV = ( lowUV + Vector2I.One ).Min( image.GetSize() - Vector2I.One );
var mix = pixelUV - lowUV;
var xTop = ColorX.Lerp( image.GetPixel( lowUV.X, lowUV.Y, mode ), image.GetPixel( highUV.X, lowUV.Y, mode ), mix.X );
var xLow = ColorX.Lerp( image.GetPixel( highUV.X, lowUV.Y, mode ), image.GetPixel( highUV.X, highUV.Y, mode ), mix.X );
return ColorX.Lerp( xTop, xLow, mix.Y );
}
}
}

View File

@ -0,0 +1 @@
uid://m8jyxhsvq1kp

View File

@ -0,0 +1,310 @@
using Godot;
using System.Text;
using System.Collections.Generic;
using System.Linq;
namespace Rokojori
{
public static class Node3DExtensions
{
public static Vector3 ToLocalFromLocal( this Node3D self, Node3D from, Vector3 fromLocalPosition )
{
var world = from.ToGlobal( fromLocalPosition );
return self.ToLocal( world );
}
public static Vector3 ToLocalFromLocalDirection( this Node3D self, Node3D from, Vector3 fromLocalDirection )
{
var world = from.ToGlobalDirection( fromLocalDirection );
return self.ToLocalDirection( world );
}
public static Vector3 ToLocalDirection( this Node3D self, Vector3 globalDirection )
{
return self.GlobalTransform.Basis.Inverse() * globalDirection;
}
public static Vector3 ToGlobalDirection( this Node3D self, Vector3 localDirection )
{
return self.GlobalTransform.Basis * localDirection;
}
public static void LookTowards( this Node3D self, Vector3 direction )
{
self.LookAt( direction + self.GlobalPosition );
}
public static float DistanceTo( this Node3D self, Node3D other )
{
return self.DirectionTowards( other ).Length();
}
public static Vector3 DirectionTowards( this Node3D self, Node3D other )
{
return ( other.GlobalPosition - self.GlobalPosition );
}
public static Vector3 DirectionTowards( this Node3D self, Vector3 other )
{
return ( other - self.GlobalPosition );
}
public static bool IsInRange( this Node3D a, Node3D other, float distance )
{
return a.DistanceTo( other ) <= distance;
}
public static Vector3 GetLocalOrGlobalPosition( this Node3D node, bool global )
{
return global ? node.GlobalPosition : node.Position;
}
public static void SetLocalOrGlobalPosition( this Node3D node, Vector3 position, bool global )
{
if ( global )
{
node.GlobalPosition = position;
}
else
{
node.Position = position;
}
}
public static void SetLocalOrGlobalRotation( this Node3D node, Vector3 rotation, bool global )
{
if ( global )
{
node.GlobalRotation = rotation;
}
else
{
node.Rotation = rotation;
}
}
public static void SetGlobalPose( this Node3D node, Vector3 position, Quaternion rotation )
{
node.SetGlobalQuaternion( rotation );
node.GlobalPosition = position;
}
public static void SetGlobalPose( this Node3D node, Pose pose )
{
node.SetGlobalPose( pose.position, pose.rotation );
}
public static Pose GetGlobalPose( this Node3D node )
{
return Pose.From( node );
}
public static void CopyGlobalPoseFrom( this Node3D node, Node3D other )
{
node.SetGlobalPose( other.GetGlobalPose() );
}
public static void SetGlobalQuaternion( this Node3D node, Quaternion quaternion )
{
var localScale = node.Scale;
node.GlobalBasis = new Basis( quaternion );
node.Scale = localScale;
}
public static void SetLocalQuaternion( this Node3D node, Quaternion quaternion )
{
var localScale = node.Scale;
node.Basis = new Basis( quaternion );
node.Scale = localScale;
}
public static void LookTowards( this Node3D node, Vector3 forwardDirection, Vector3 upDirection, Quaternion rotation )
{
node.LookTowards( forwardDirection, upDirection );
node.SetGlobalQuaternion( node.GlobalQuaternion() * rotation );
}
public static void LookTowards( this Node3D node, Vector3 forward, Vector3 up, Vector3? up2 = null )
{
if ( forward == up )
{
up = up2 == null ? Vector3.Back : (Vector3)up2;
}
node.LookAt( forward + node.GlobalPosition, up );
}
public static Vector3 GetGlobalOffset( this Node3D node, Vector3 direction )
{
return direction.X * node.GlobalRight() +
direction.Y * node.GlobalUp() +
direction.Z * node.GlobalForward() ;
}
public static Vector3 GlobalForward( this Node3D node )
{
return -node.GlobalBasis.Z;
}
public static Vector3 GetPosition( this Node3D node, bool global = false )
{
return global ? node.GlobalPosition : node.Position;
}
public static Vector3 GlobalUp( this Node3D node )
{
return node.GlobalBasis.Y;
}
public static Vector3 GlobalRight( this Node3D node )
{
return node.GlobalBasis.X;
}
public static void SetGlobalX( this Node3D node, float x )
{
var gp = node.GlobalPosition;
gp.X = x;
node.GlobalPosition = gp;
}
public static void SetGlobalY( this Node3D node, float y )
{
var gp = node.GlobalPosition;
gp.Y = y;
node.GlobalPosition = gp;
}
public static void SetGlobalZ( this Node3D node, float z )
{
var gp = node.GlobalPosition;
gp.Z = z;
node.GlobalPosition = gp;
}
public static void SetLocalX( this Node3D node, float x )
{
var gp = node.Position;
gp.X = x;
node.Position = gp;
}
public static void SetLocalY( this Node3D node, float y )
{
var gp = node.Position;
gp.Y = y;
node.Position = gp;
}
public static void SetLocalZ( this Node3D node, float z )
{
var gp = node.Position;
gp.Z = z;
node.Position = gp;
}
public static Vector3 GetOrientationBasedGlobalOffset( this Node3D node, Vector3 offset )
{
return offset.X * node.GlobalRight() + offset.Y * node.GlobalUp() + offset.Z * node.GlobalForward();
}
public static Box3 GetWorldBox( this Node3D node, bool onlyVisible = true )
{
var aabb = GetWorldBounds( node, onlyVisible );
return aabb == null ? null : ( (Aabb)aabb).ToBox3();
}
public static Aabb? GetWorldBounds( this Node3D node, bool onlyVisible = true )
{
return node.GetWorldBoundsFrom( onlyVisible );
}
public static Aabb? GetWorldBoundsFrom( this Node3D node, bool onlyVisible = true )
{
Aabb? worldBounds = null;
Nodes.ForEach<VisualInstance3D>( node,
( vi )=>
{
if ( onlyVisible && ! vi.IsVisibleInTree() )
{
return;
}
var nBounds = vi.GetAabb();
nBounds.Size *= Math3D.GetGlobalUniScale( vi );
nBounds.Position += vi.GlobalPosition;
nBounds.End += vi.GlobalPosition;
worldBounds = worldBounds == null ? nBounds : ( ((Aabb)worldBounds).Merge( nBounds ) );
}
);
return worldBounds;
}
public static Quaternion GlobalQuaternion( this Node3D self )
{
return self.GlobalBasis.GetRotationQuaternion();
}
public static Quaternion GlobalYawQuaterntion( this Node3D self )
{
return Math3D.RotateY( self.GlobalYawRadians() + Mathf.Pi );
}
public static float GlobalYawDegrees( this Node3D node3D )
{
return Math3D.GlobalYawDegrees( node3D.GlobalForward() );
}
public static float GlobalYawRadians( this Node3D node3D )
{
return Math3D.GlobalYaw( node3D.GlobalForward() );
}
public static Vector2 GlobalXZ( this Node3D n )
{
var v = n.GlobalPosition;
return new Vector2( v.X, v.Z );
}
public static void SetGlobalXZ( this Node3D n, Vector2 xz )
{
var p = n.GlobalPosition;
p.X = xz.X;
p.Z = xz.Y;
n.GlobalPosition = p;
}
public static void SetGlobalYaw( this Node3D n, float yawRadians )
{
n.SetGlobalQuaternion( Math3D.RotateY( yawRadians ) );
}
public static void SetGlobalYawDegrees( this Node3D n, float yawDegrees )
{
n.SetGlobalQuaternion( Math3D.RotateY( yawDegrees * MathX.DegreesToRadians ) );
}
}
}

View File

@ -0,0 +1 @@
uid://bf32gapbxoe4x

View File

@ -0,0 +1,12 @@
using Godot;
using System.Text;
using System.Collections.Generic;
using System.Linq;
namespace Rokojori
{
public static class QuaternionExtensions
{
}
}

View File

@ -0,0 +1 @@
uid://dkcrw7m7aw6ty

View File

@ -0,0 +1,15 @@
using Godot;
using System.Text;
using System.Collections.Generic;
using System.Linq;
namespace Rokojori
{
public static class Transform3DExtensions
{
public static bool IsValid( this Transform3D self )
{
return self.Origin.IsValid() && self.Basis.IsValid();
}
}
}

View File

@ -0,0 +1 @@
uid://cdfiwablm4a6q

View File

@ -39,6 +39,14 @@ namespace Rokojori
var filesystem = EditorInterface.Singleton.GetResourceFilesystem();
filesystem.ReimportFiles( [ path ] );
filesystem.UpdateFile( path );
if ( path.ToLower().EndsWith( "gdshader" ) )
{
var shader = ResourceLoader.Load<Shader>( path, null, ResourceLoader.CacheMode.Ignore );
EditorInterface.Singleton.EditResource( shader );
}
#endif
}
}

View File

@ -116,7 +116,7 @@ namespace Rokojori
public static void Configure( Node n, bool processEnabled, bool inputEnabled, bool physicsEnabled, bool signalsEnabled,
Node.ProcessModeEnum processMode, bool visible )
{
if ( n == null )
if ( n == null || ! Node.IsInstanceValid( n ) )
{
return;
}

View File

@ -367,6 +367,22 @@ namespace Rokojori
return CreateChildIn<T>( parent, name );
}
public static T CreateChild<T>( this Node parent, PackedScene scene, string name = null ) where T:Node,new()
{
var instance = scene.Instantiate<T>();
parent.AddChild( instance );
instance.Owner = parent.Owner;
if ( name != null )
{
instance.Name = name;
}
return instance;
}
public static T GetOrCreateChild<T>( this Node parent, string name = null ) where T:Node,new()
{
var child = Nodes.GetDirectChild<T>( parent );
@ -387,7 +403,7 @@ namespace Rokojori
if ( rotation != null )
{
Math3D.SetLocalQuaternion( c, (Quaternion)rotation );
c.SetLocalQuaternion( (Quaternion)rotation );
}
return c;
@ -421,7 +437,7 @@ namespace Rokojori
if ( rotation != null )
{
Math3D.SetGlobalQuaternion( c, (Quaternion)rotation );
c.SetGlobalQuaternion( (Quaternion)rotation );
}
return c;
@ -435,7 +451,7 @@ namespace Rokojori
if ( rotation != null )
{
Math3D.SetGlobalQuaternion( c, (Quaternion)rotation );
c.SetGlobalQuaternion( (Quaternion)rotation );
}
return c;
@ -449,7 +465,7 @@ namespace Rokojori
if ( rotation != null )
{
Math3D.SetGlobalQuaternion( c, (Quaternion)rotation );
c.SetGlobalQuaternion( (Quaternion)rotation );
}
return c;
@ -677,6 +693,35 @@ namespace Rokojori
}
}
public static void CallInProcess( this Node node, System.Action action )
{
var tm = TimeLineManager.Get();
if ( ! tm.inProcess )
{
TimeLineManager.ScheduleCallback(
tm.realtimeTimeline,
( cb ) =>
{
try
{
action();
}
catch ( System.Exception e )
{
node.LogError( e );
}
cb.done = true;
}
);
}
else
{
action();
}
}
public static void SelfDestroy( this Node node, bool queue = true )
{
var parent = node.GetParent();
@ -773,6 +818,41 @@ namespace Rokojori
return list;
}
public static void AddChildAt( this Node parent, Node child, int index, bool setOwnership = true )
{
parent.AddChild( child );
parent.MoveChild( child, index );
if ( ! setOwnership )
{
return;
}
child.Owner = parent.Owner;
}
public static void AddSiblingBefore( this Node referenceSibling, Node siblingToInsert, bool includeInternal = false )
{
var parent = referenceSibling.GetParent();
var index = referenceSibling.GetIndex( includeInternal );
AddChildAt( parent, siblingToInsert, index );
}
public static void AddSiblingAfter( this Node referenceSibling, Node siblingToInsert, bool includeInternal = false )
{
var parent = referenceSibling.GetParent();
var index = referenceSibling.GetIndex( includeInternal );
AddChildAt( parent, siblingToInsert, index );
}
public static void Wrap( this Node reference, Node other )
{
other.AddSiblingBefore( reference );
other.RemoveFromParent();
reference.AddChild( other );
other.Owner = reference.Owner;
}
public static int NumDirectChildrenOf<T>( this Node parent ) where T:Node
{
@ -867,6 +947,28 @@ namespace Rokojori
}
}
public static void ForEachDirectChild( this Node parent, Predicate<Node> selector, Action<Node> action )
{
if ( parent == null || action == null )
{
return;
}
var numChildren = parent.GetChildCount();
for ( int i = 0; i < numChildren; i++ )
{
var node = parent.GetChild( i );
if ( ! selector( node ) )
{
continue;
}
action( node );
}
}
public static List<U> MapDirectChildren<T,U>( Node parent, System.Func<T,U> mapper ) where T:Node
{
var list = new List<U>();

View File

@ -56,25 +56,38 @@ namespace Rokojori
ProcessActions( (float) delta );
}
// positionSmoother.CopyPosition( graphics, body, rotationSmoothingDuration, delta );
// rotationSmoother.CopyRotation( graphics, body, positionSmoothingDuration, delta );
graphics.GlobalPosition = Smoothing.Apply( positionSmoothing, body.GlobalPosition, this.delta );
graphics.SetGlobalQuaternion( Smoothing.Apply( rotationSmoothing, body.GetGlobalQuaternion(), this.delta ) );
graphics.SetGlobalQuaternion( Smoothing.Apply( rotationSmoothing, body.GlobalQuaternion(), this.delta ) );
if ( body.IsOnFloor() )
{
lastGroundedHeight = graphics.GlobalPosition.Y;
}
var grounedPosition = graphics.GlobalPosition;
grounedPosition.Y = lastGroundedHeight;
groundedTransform.GlobalPosition = grounedPosition;
groundedTransform.SetGlobalQuaternion( graphics.GetGlobalQuaternion() );
AssignGroundedTransform();
// Pose.CopyTo( body, graphics );
}
void AssignGroundedTransform()
{
if ( groundedTransform == null )
{
return;
}
var groundedPosition = graphics.GlobalPosition;
groundedPosition.Y = lastGroundedHeight;
groundedTransform.GlobalPosition = groundedPosition;
groundedTransform.SetGlobalQuaternion( graphics.GlobalQuaternion() );
}
public override void _PhysicsProcess( double delta )
{
if ( CharacterUpdateMode.Physics_Process == characterUpdateMode )
@ -100,6 +113,8 @@ namespace Rokojori
return;
}
c.SetCharacterController( this );
Action.Trigger( c );
}
);

View File

@ -12,8 +12,8 @@ namespace Rokojori
[Export]
public bool enabled = true;
[Export]
public CharacterController controller;
CharacterController _controller;
public CharacterController controller => _controller;
[Export]
public Condition condition;
@ -21,29 +21,41 @@ namespace Rokojori
[Export]
public SceneCondition sceneCondition;
public void SetCharacterController( CharacterController cc )
{
_controller = cc;
}
public CharacterBody3D body => controller.body;
public void AddVelocity( Vector3 velocity )
public void AddVelocity( Vector3 velocity, float delta = -1 )
{
body.Velocity += velocity * controller.delta;
delta = delta < 0 ? controller.delta : delta;
body.Velocity += velocity * delta;
}
public void SetVelocity( Vector3 velocity )
public void SetScaledVelocity( float scale )
{
body.Velocity *= scale;
}
public void SetVelocity( Vector3 velocity, float delta = -1 )
{
body.Velocity = velocity * controller.delta;
delta = delta < 0 ? controller.delta : delta;
body.Velocity = velocity * delta;
}
public void Velocity( Vector3 velocity, bool replace )
public void Velocity( Vector3 velocity, bool replace, float delta = -1 )
{
if ( replace )
{
SetVelocity( velocity );
SetVelocity( velocity, delta );
}
else
{
AddVelocity( velocity );
AddVelocity( velocity, delta );
}
}

View File

@ -32,7 +32,10 @@ namespace Rokojori
[ExportGroup("Movement")]
[Export]
public float moveSpeed;
public float moveSpeed = 10f;
[Export]
public float minSpeed = 0f;
[Export]
public CharacterMovementType controllerMovementType;
@ -43,6 +46,9 @@ namespace Rokojori
[Export]
public CharacterMovementType currentMovementType;
[Export]
public CharacterMovementType[] deviceMovementTypes = [];
[Export]
public Smoothing onFloorMovementSmoothing = new FrameSmoothing();
@ -80,8 +86,15 @@ namespace Rokojori
protected CharacterMovementData characterMovementData = new CharacterMovementData();
[Export]
public bool lookAlwaysForward = false;
[Export]
public Smoothing lookAlwaysForwardSmoothing;
Vector3 _smoothedMovement;
public Vector3 smoothedMovement => _smoothedMovement;
protected override void _OnTrigger()
{
var onFloor = body.IsOnFloor();
@ -89,8 +102,19 @@ namespace Rokojori
characterMovementData.Reset( this );
var sm = Unique<SensorManager>.Get();
if ( sm == null )
{
return;
}
var activeDevice = sm.lastActiveDevice;
currentMovementType = deviceMovementTypes.FindNonNull( d => d.deviceSelector.Selects( activeDevice ) );
if ( currentMovementType == null )
{
// this.LogInfo( "No device found:", activeDevice == null ? "null" : activeDevice.GetType().Name );
return;
}
@ -109,6 +133,9 @@ namespace Rokojori
if ( adjustRotation )
{
var nextRotation = Math3D.LookRotation( characterMovementData.forwardDirection );
var speed = MathX.Clamp01( characterMovementData.movement.Length() / moveSpeed );
if ( speed > 0 )
@ -127,21 +154,29 @@ namespace Rokojori
rotation = rotationSmoothing.Smooth( nextRotation, controller.delta );
body.SetGlobalQuaternion( rotation );
}
}
var smoothedMovement = Vector3.Zero;
if ( lookAlwaysForward )
{
var nextRotation = directionSource.GlobalYawQuaterntion();
body.SetGlobalQuaternion( Smoothing.Apply( lookAlwaysForwardSmoothing, nextRotation, controller.delta ) );
}
// var smoothedMovement = Vector3.Zero;
if ( onFloor )
{
smoothedMovement = onFloorMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
_smoothedMovement = onFloorMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
}
else
{
smoothedMovement = inAirMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
_smoothedMovement = inAirMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
}
var wasMoving = _moving;
_moving = smoothedMovement.Length() > movingSpeedTreshold;
_moving = _smoothedMovement.Length() > movingSpeedTreshold;
if ( wasMoving != _moving )
{
@ -155,7 +190,7 @@ namespace Rokojori
}
}
Velocity( smoothedMovement, onFloor );
Velocity( _smoothedMovement, onFloor );
}
}

View File

@ -7,8 +7,11 @@ namespace Rokojori
{
[Tool]
[GlobalClass]
public partial class CharacterMovementType:Resource
public abstract partial class CharacterMovementType:Resource
{
[Export]
public DefaultSensorDeviceSelector deviceSelector;
public virtual void ProcessMovement( CharacterMovementData characterMovementData )
{

View File

@ -66,7 +66,7 @@ namespace Rokojori
var movement = forwardDirection * Sensors.PolarAxis( backwards, forward ) * characterMovement.moveSpeed;
movement += rightDirection * Sensors.PolarAxis( strafeLeft, strafeRight ) * characterMovement.moveSpeed * strafeSpeedMultiply ;
movement += rightDirection * Sensors.PolarAxis( strafeLeft, strafeRight ) * characterMovement.moveSpeed * strafeSpeedMultiply;
characterMovementData.movement = movement;
characterMovementData.isMovingForward = forward.isActive;

View File

@ -0,0 +1,20 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
[Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/CCMoveAndSlide.svg")]
public partial class ProcessVelocity:CharacterControllerAction
{
[Export]
public float velocityScale = 0.1f;
protected override void _OnTrigger()
{
SetScaledVelocity( velocityScale );
}
}
}

View File

@ -0,0 +1 @@
uid://ch6tcwvvw2dl1

View File

@ -0,0 +1,96 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
namespace Rokojori
{
public enum CollisionPhase
{
Entered,
Inside,
Exit
}
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/Collidable.svg")]
public partial class Collidable:Node3D
{
[Export]
public CollisionFlag[] collisionTypes;
[Export]
public Action onEntered;
[Export]
public Node3D onEnteredColliderPose;
[Export]
public Action onInside;
[Export]
public Node3D onInsideColliderPose;
[Export]
public Action onExit;
[Export]
public Node3D onExitColliderPose;
public bool IsCollidingWith( Collider collider )
{
if ( ( collisionTypes == null || collisionTypes.Length == 0 ) && collider.collisionType == null )
{
return true;
}
if ( collisionTypes == null )
{
return false;
}
return collisionTypes.IndexOf( collider.collisionType ) != -1;
}
public void Collide( Collider collider, CollisionPhase phase )
{
_Collide( collider, phase );
if ( phase == CollisionPhase.Entered )
{
if ( onEnteredColliderPose != null )
{
onEnteredColliderPose.CopyGlobalPoseFrom( collider.area );
}
Action.Trigger( collider.onEntered );
Action.Trigger( onEntered );
}
else if ( phase == CollisionPhase.Inside )
{
if ( onInsideColliderPose != null )
{
onInsideColliderPose.CopyGlobalPoseFrom( collider.area );
}
Action.Trigger( collider.onInside );
Action.Trigger( onInside );
}
else if ( phase == CollisionPhase.Exit )
{
if ( onExitColliderPose != null )
{
onExitColliderPose.CopyGlobalPoseFrom( collider.area );
}
Action.Trigger( collider.onExit );
Action.Trigger( onExit );
}
}
protected virtual void _Collide( Collider collider, CollisionPhase phase )
{
}
}
}

View File

@ -0,0 +1 @@
uid://dbgwebayabwd5

View File

@ -0,0 +1,121 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
namespace Rokojori
{
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/Collider.svg")]
public partial class Collider:Node, iNodeState
{
[Export]
public Area3D area;
[Export]
public CollisionFlag collisionType;
[Export]
public Action onEntered;
[Export]
public Action onInside;
[Export]
public Action onExit;
Dictionary<Collidable,System.Action> _inside = new Dictionary<Collidable,System.Action>();
public void OnNodeStateChanged()
{
if ( ! IsProcessing() || ! IsPhysicsProcessing() || Node.ProcessModeEnum.Disabled == this.ProcessMode )
{
// this.LogInfo( "Clearing nodes" );
_inside.Clear();
}
}
public override void _Ready()
{
if ( area == null )
{
return;
}
area.AreaEntered += TriggerOnEnter;
area.BodyEntered += TriggerOnEnter;
area.AreaExited += TriggerOnExited;
area.BodyExited += TriggerOnExited;
}
void TriggerOnEnter( Node n )
{
if ( ! Math3D.IsValid( area.GlobalPosition ) )
{
return;
}
var collidable = n.Get<Collidable>();
if ( collidable == null || ! collidable.IsCollidingWith( this ) )
{
return;
}
collidable.Collide( this, CollisionPhase.Entered );
if ( onInside == null )
{
return;
}
var tm = Unique<TimeLineManager>.Get();
if ( tm == null )
{
return;
}
var callback = ()=>
{
collidable.Collide( this, CollisionPhase.Inside );
};
_inside[ collidable ] = callback;
tm.AddProcessCallback( callback );
}
void TriggerOnExited( Node n )
{
var collidable = n.Get<Collidable>();
if ( collidable == null || ! collidable.IsCollidingWith( this ) )
{
return;
}
collidable.Collide( this, CollisionPhase.Exit );
if ( ! _inside.ContainsKey( collidable ) )
{
return;
}
var tm = Unique<TimeLineManager>.Get();
var callback = _inside[ collidable ];
_inside.Remove( collidable );
if ( tm == null )
{
return;
}
tm.RemoveProcessCallback( callback );
}
}
}

View File

@ -0,0 +1 @@
uid://xnupkyu3042b

View File

@ -0,0 +1,15 @@
using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
using System.Drawing;
namespace Rokojori
{
[Tool]
[GlobalClass,Icon("res://addons/rokojori_action_library/Icons/SelectorFlag.svg")]
public partial class CollisionFlag:SelectorFlag
{
}
}

View File

@ -0,0 +1 @@
uid://crk6vntm10let

View File

@ -86,18 +86,18 @@ namespace Rokojori
grabbable.SetGrabber( this );
_callback = TimeLineManager.ScheduleCallback( timeLine,
( cb )=>
_callback = TimeLineManager.ScheduleCallback(timeLine,
(System.Action<TimeLineCallback>)(( cb )=>
{
if ( cb != _callback )
if ( cb != _callback)
{
return;
}
positionSmoothing.SetCurrent( grabbable.grabTarget.GlobalPosition );
rotationSmoothing.SetCurrent( grabbable.grabTarget.GetGlobalQuaternion() );
positionSmoothing.SetCurrent(grabbable.grabTarget.GlobalPosition );
rotationSmoothing.SetCurrent(Node3DExtensions.GlobalQuaternion(grabbable.grabTarget));
UpdateGrabbable();
}
})
);
Action.Trigger( onGrab );
@ -121,7 +121,7 @@ namespace Rokojori
{
// this.LogInfo( "Grabbing", HierarchyName.Of( grabbable ) );
grabbable.grabTarget.GlobalPosition = Smoothing.Apply( positionSmoothing, grabOffset.GlobalPosition, timeLine.delta );
grabbable.grabTarget.SetGlobalQuaternion( Smoothing.Apply( rotationSmoothing, grabOffset.GetGlobalQuaternion(), timeLine.delta ) );
grabbable.grabTarget.SetGlobalQuaternion( Smoothing.Apply( rotationSmoothing, grabOffset.GlobalQuaternion(), timeLine.delta ) );
grabbable.rigidBody3D.LinearVelocity = Vector3.Zero;
grabbable.rigidBody3D.AngularVelocity = Vector3.Zero;
}

View File

@ -132,7 +132,7 @@ namespace Rokojori
var excludes = new Array<Rid>();
var from = GlobalPosition;
var to = from + Math3D.GetGlobalForward( this ) * rayLength;
var to = from + this.GlobalForward() * rayLength;
this.to = to;

View File

@ -2,6 +2,7 @@ using Godot;
using System.Collections;
using System.Collections.Generic;
using Godot.Collections;
using System.Drawing;
namespace Rokojori
{
@ -19,6 +20,10 @@ namespace Rokojori
[Export]
public Pointable pointable;
public readonly EventSlot<Pointable> onPointerChange = new EventSlot<Pointable>();
[Export]
public bool printPointables = false;
@ -56,6 +61,8 @@ namespace Rokojori
Highlight( HighlightActionType.Start, pointable );
}
onPointerChange.DispatchEvent( currentPointable );
if ( printPointables )
{
this.LogInfo( pointable );

View File

@ -91,7 +91,7 @@ namespace Rokojori.PointClouds
}
sampler.materials = Materials.GetAll<Material>( mesh );
sampler.albedoTexture = sampler.materials.Map( m => Texture2DPropertyName.albedoTexture );
sampler.albedoTexture = sampler.materials.Map( m => Sampler2DPropertyName.albedoTexture );
sampler.albedo = sampler.materials.Map( m => ColorPropertyName.albedo ); ;
var cloud = await sampler.SampleFromMesh( sampleMode, (ArrayMesh) mesh.Mesh, this );

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace Rokojori.PointClouds
{
public class PointCloudOcTree:OcTree<Point>
public class PointCloudOcTree:OcTree<Point,Null>
{
List<Vector3> compressedNormals = new List<Vector3>()
{

View File

@ -19,7 +19,7 @@ namespace Rokojori.PointClouds
}
public List<Material> materials;
public List<Texture2DPropertyName> albedoTexture;
public List<Sampler2DPropertyName> albedoTexture;
public List<ColorPropertyName> albedo;
public float densityResolution = 0.2f;
@ -286,7 +286,7 @@ namespace Rokojori.PointClouds
if ( image != null )
{
color = image.Sample( uv, ColorX.EdgeMode.Repeat );
color = image.SampleLinear( uv, ImageExtensions.EdgeMode.Repeat );
}
@ -360,7 +360,7 @@ namespace Rokojori.PointClouds
if ( image != null )
{
color = image.Sample( uv, ColorX.EdgeMode.Repeat );
color = image.SampleLinear( uv, ImageExtensions.EdgeMode.Repeat );
}

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