v0.2 update
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -150,9 +150,9 @@
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0"
|
||||||
inkscape:deskcolor="#505050"
|
inkscape:deskcolor="#505050"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="22.627417"
|
inkscape:zoom="2"
|
||||||
inkscape:cx="1.4584077"
|
inkscape:cx="-101.25"
|
||||||
inkscape:cy="13.34664"
|
inkscape:cy="-9.5"
|
||||||
inkscape:window-width="1920"
|
inkscape:window-width="1920"
|
||||||
inkscape:window-height="1017"
|
inkscape:window-height="1017"
|
||||||
inkscape:window-x="-8"
|
inkscape:window-x="-8"
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
|
@ -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 |
|
|
@ -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
|
||||||
|
|
@ -31,6 +31,12 @@ namespace Rokojori
|
||||||
static readonly string RokojoriSettingsPath = "res://.rokojori/settings";
|
static readonly string RokojoriSettingsPath = "res://.rokojori/settings";
|
||||||
static readonly string RokojoriCachePath = "res://.rokojori/cache";
|
static readonly string RokojoriCachePath = "res://.rokojori/cache";
|
||||||
|
|
||||||
|
// static RokojoriPlugin _instance;
|
||||||
|
// public static RokojoriPlugin Get()
|
||||||
|
// {
|
||||||
|
// return _instance;
|
||||||
|
// }
|
||||||
|
|
||||||
public override void _EnablePlugin()
|
public override void _EnablePlugin()
|
||||||
{
|
{
|
||||||
this.LogInfo();
|
this.LogInfo();
|
||||||
|
|
@ -99,6 +105,8 @@ namespace Rokojori
|
||||||
|
|
||||||
public override void _EnterTree()
|
public override void _EnterTree()
|
||||||
{
|
{
|
||||||
|
// _instance = this;
|
||||||
|
|
||||||
EnsureHiddenProjectPath( RokojoriProjectInternalPath );
|
EnsureHiddenProjectPath( RokojoriProjectInternalPath );
|
||||||
EnsureHiddenProjectPath( RokojoriSettingsPath );
|
EnsureHiddenProjectPath( RokojoriSettingsPath );
|
||||||
EnsureHiddenProjectPath( RokojoriCachePath );
|
EnsureHiddenProjectPath( RokojoriCachePath );
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,23 @@ namespace Rokojori
|
||||||
NetworkNodeSlot _dataSlot = new NetworkNodeSlot();
|
NetworkNodeSlot _dataSlot = new NetworkNodeSlot();
|
||||||
NetworkNodeSlot _seedAndDataSlot = 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()
|
protected override List<NetworkNodeMember> CreateNetworkNodeMembers()
|
||||||
{
|
{
|
||||||
return new List<NetworkNodeMember>()
|
return new List<NetworkNodeMember>()
|
||||||
|
|
@ -83,7 +100,7 @@ namespace Rokojori
|
||||||
BitView _sendingNetworkData;
|
BitView _sendingNetworkData;
|
||||||
BitView _receivedNetworkData;
|
BitView _receivedNetworkData;
|
||||||
|
|
||||||
protected bool isNetworkedTrigger => _isNetworkedTrigger;
|
public bool isNetworkedTrigger => _isNetworkedTrigger;
|
||||||
|
|
||||||
static readonly int maxNetworkSeed = Mathf.RoundToInt( Mathf.Pow( 2, 30 ) );
|
static readonly int maxNetworkSeed = Mathf.RoundToInt( Mathf.Pow( 2, 30 ) );
|
||||||
|
|
||||||
|
|
@ -137,7 +154,7 @@ namespace Rokojori
|
||||||
action.Trigger();
|
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 )
|
if ( actions != null )
|
||||||
{
|
{
|
||||||
|
|
@ -152,7 +169,7 @@ namespace Rokojori
|
||||||
return;
|
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 )
|
public static void TriggerAll( Action action, Node target, bool triggerDirectChildren )
|
||||||
|
|
@ -168,7 +185,7 @@ namespace Rokojori
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Nodes.ForEachDirectChild<Action>( target, a => Action.Trigger( a ) );
|
Nodes.ForEachDirectChild<Action>( target, ( a ) => Trigger( a ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ namespace Rokojori
|
||||||
[ExportGroup("Condition")]
|
[ExportGroup("Condition")]
|
||||||
[Export]
|
[Export]
|
||||||
public Condition condition;
|
public Condition condition;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public SceneCondition sceneCondition;
|
public SceneCondition sceneCondition;
|
||||||
|
|
||||||
|
|
@ -24,7 +25,7 @@ namespace Rokojori
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
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 );
|
// this.LogInfo( "Condition is", conditionActive );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,19 @@ namespace Rokojori
|
||||||
public Duration coolDownDuration;
|
public Duration coolDownDuration;
|
||||||
|
|
||||||
bool _isCoolingDown = false;
|
bool _isCoolingDown = false;
|
||||||
|
int _coolDownID = -1;
|
||||||
|
|
||||||
|
public void ResetCoolDown()
|
||||||
|
{
|
||||||
|
if ( _coolDownID == -1 )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_isCoolingDown = false;
|
||||||
|
_coolDownID = -1;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
protected override void _OnTrigger()
|
||||||
{
|
{
|
||||||
if ( _isCoolingDown )
|
if ( _isCoolingDown )
|
||||||
|
|
@ -28,10 +41,21 @@ namespace Rokojori
|
||||||
|
|
||||||
if ( coolDownDuration != null )
|
if ( coolDownDuration != null )
|
||||||
{
|
{
|
||||||
TimeLineManager.ScheduleEventIn(
|
var te = TimeLineManager.ScheduleEventIn(
|
||||||
coolDownDuration.timeLine, coolDownDuration.GetDurationInSeconds(),
|
coolDownDuration.timeLine, coolDownDuration.GetDurationInSeconds(),
|
||||||
ev => _isCoolingDown = false
|
ev =>
|
||||||
|
{
|
||||||
|
if ( _coolDownID != ev.id )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_isCoolingDown = false;
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
_coolDownID = te.id;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://d6m0k7ql0mnr
|
||||||
|
|
@ -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" ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://c2m6vuo3nucna
|
||||||
|
|
@ -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" ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cb26oih56el4s
|
||||||
|
|
@ -13,8 +13,12 @@ namespace Rokojori
|
||||||
[Export]
|
[Export]
|
||||||
public Node[] disable = new Node[ 0 ];
|
public Node[] disable = new Node[ 0 ];
|
||||||
|
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
protected override void _OnTrigger()
|
||||||
|
{
|
||||||
|
CallDeferred( "SetStates" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetStates()
|
||||||
{
|
{
|
||||||
Arrays.ForEach( enable, n => NodeState.Enable( n ) );
|
Arrays.ForEach( enable, n => NodeState.Enable( n ) );
|
||||||
Arrays.ForEach( disable, n => NodeState.Disable( n ) );
|
Arrays.ForEach( disable, n => NodeState.Disable( n ) );
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,11 @@ namespace Rokojori
|
||||||
public NodeStateConfiguration configuration;
|
public NodeStateConfiguration configuration;
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
protected override void _OnTrigger()
|
||||||
|
{
|
||||||
|
CallDeferred( "SetNodeState" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetNodeState()
|
||||||
{
|
{
|
||||||
NodeState.Configure( target, configuration );
|
NodeState.Configure( target, configuration );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ namespace Rokojori
|
||||||
// this.LogInfo( "Moving:", direction );
|
// this.LogInfo( "Moving:", direction );
|
||||||
|
|
||||||
target.LookAt( goal.GlobalPosition );
|
target.LookAt( goal.GlobalPosition );
|
||||||
var nextRotation = target.GetGlobalQuaternion();
|
var nextRotation = target.GlobalQuaternion();
|
||||||
var rotation = Smoothing.Apply( rotationSmoothing, nextRotation, (float) delta );
|
var rotation = Smoothing.Apply( rotationSmoothing, nextRotation, (float) delta );
|
||||||
target.SetGlobalQuaternion( rotation );
|
target.SetGlobalQuaternion( rotation );
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ namespace Rokojori
|
||||||
public AudioStreamPlayer3D player;
|
public AudioStreamPlayer3D player;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public SelectorFlag overdrivePreventionFlag;
|
public AudioFlag overdrivePreventionFlag;
|
||||||
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
|
|
@ -103,7 +103,7 @@ namespace Rokojori
|
||||||
|
|
||||||
player.Play( offset );
|
player.Play( offset );
|
||||||
|
|
||||||
this.LogInfo( "Play sound", offset, HierarchyName.Of( player ) );
|
// this.LogInfo( "Play sound", offset, HierarchyName.Of( player ) );
|
||||||
|
|
||||||
if ( overdrivePreventionFlag != null )
|
if ( overdrivePreventionFlag != null )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cnp3xr8gawyi6
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
using Godot;
|
using Godot;
|
||||||
using System.Collections.Generic;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Rokojori
|
namespace Rokojori
|
||||||
{
|
{
|
||||||
|
|
@ -13,17 +13,31 @@ namespace Rokojori
|
||||||
[Export]
|
[Export]
|
||||||
public bool queue = true;
|
public bool queue = true;
|
||||||
|
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
protected override void _OnTrigger()
|
||||||
{
|
{
|
||||||
if ( target == null )
|
if ( target == null || Engine.IsEditorHint() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this.LogInfo( "Remove", HierarchyName.Of( target ) );
|
if ( ! IsInstanceValid( this ) || ! IsInstanceValid( target ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CallDeferred( "SelfDestroy" );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SelfDestroy()
|
||||||
|
{
|
||||||
|
if ( ! IsInstanceValid( target ) )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
target.SelfDestroy( queue );
|
target.SelfDestroy( queue );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -20,9 +20,16 @@ namespace Rokojori
|
||||||
public TimeLine timeLine;
|
public TimeLine timeLine;
|
||||||
|
|
||||||
|
|
||||||
|
bool stopSignal = false;
|
||||||
|
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
stopSignal = true;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
protected override void _OnTrigger()
|
||||||
{
|
{
|
||||||
|
|
||||||
var id = DispatchStart();
|
var id = DispatchStart();
|
||||||
|
|
||||||
if ( ! ( action is SequenceAction ) )
|
if ( ! ( action is SequenceAction ) )
|
||||||
|
|
@ -62,6 +69,8 @@ namespace Rokojori
|
||||||
var finished = ( maxNumRepeats > 0 && executed >= maxNumRepeats ) ||
|
var finished = ( maxNumRepeats > 0 && executed >= maxNumRepeats ) ||
|
||||||
( tl != null && tl.position >= endTime );
|
( tl != null && tl.position >= endTime );
|
||||||
|
|
||||||
|
finished = stopSignal || finished;
|
||||||
|
|
||||||
if ( finished )
|
if ( finished )
|
||||||
{
|
{
|
||||||
DispatchEnd( id );
|
DispatchEnd( id );
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cvw0nxi8migso
|
||||||
|
|
@ -73,7 +73,8 @@ namespace Rokojori
|
||||||
{
|
{
|
||||||
DispatchEnd( sequenceID );
|
DispatchEnd( sequenceID );
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
this
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Rokojori
|
namespace Rokojori
|
||||||
{
|
{
|
||||||
|
|
@ -64,6 +65,15 @@ namespace Rokojori
|
||||||
|
|
||||||
OmniLight3D light = null;
|
OmniLight3D light = null;
|
||||||
|
|
||||||
|
// [Export]
|
||||||
|
// public Node3D debugProcessIndicator;
|
||||||
|
|
||||||
|
// [Export]
|
||||||
|
// public Vector3 debugProcessIndicatorFull = new Vector3( 5, 0, 0 );
|
||||||
|
|
||||||
|
// [Export]
|
||||||
|
// public StandardMaterial3D debugMaterial;
|
||||||
|
|
||||||
public override string[] _GetConfigurationWarnings()
|
public override string[] _GetConfigurationWarnings()
|
||||||
{
|
{
|
||||||
var warnigns = new List<string>();
|
var warnigns = new List<string>();
|
||||||
|
|
@ -186,6 +196,10 @@ namespace Rokojori
|
||||||
|
|
||||||
_materials = new List<Material>();
|
_materials = new List<Material>();
|
||||||
|
|
||||||
|
if ( Engine.IsEditorHint() )
|
||||||
|
{
|
||||||
|
_allTargets = null;
|
||||||
|
}
|
||||||
|
|
||||||
Arrays.ForEach( allTargets,
|
Arrays.ForEach( allTargets,
|
||||||
t =>
|
t =>
|
||||||
|
|
@ -203,22 +217,31 @@ namespace Rokojori
|
||||||
var end = start + duration;
|
var end = start + duration;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
animationID = TimeLineManager.ScheduleSpanIn( timeline, 0, duration,
|
animationID = TimeLineManager.ScheduleSpanIn( timeline, 0, duration,
|
||||||
( TimeLineSpan span, TimeLineSpanUpdateType type )=>
|
( TimeLineSpan span, TimeLineSpanUpdateType type )=>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// debugProcessIndicator.Position = debugProcessIndicatorFull * span.phase;
|
||||||
|
|
||||||
if ( animationID != span.id )
|
if ( animationID != span.id )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// debugProcessIndicator.Position = debugProcessIndicatorFull * span.phase;
|
||||||
|
|
||||||
var phase = span.phase;
|
var phase = span.phase;
|
||||||
|
|
||||||
|
|
||||||
var value = flashCurve.Sample( phase );
|
var value = flashCurve.Sample( phase );
|
||||||
|
|
||||||
|
|
||||||
var phaseColor = color;
|
var phaseColor = color;
|
||||||
phaseColor.A = value * initialAlpha;
|
phaseColor.A = value * initialAlpha;
|
||||||
|
|
||||||
|
// debugMaterial.AlbedoColor = phaseColor;
|
||||||
|
|
||||||
if ( light != null )
|
if ( light != null )
|
||||||
{
|
{
|
||||||
light.LightEnergy = value * flashEffect.lightFlashCurveScale;
|
light.LightEnergy = value * flashEffect.lightFlashCurveScale;
|
||||||
|
|
@ -271,7 +294,9 @@ namespace Rokojori
|
||||||
DispatchEnd( actionID );
|
DispatchEnd( actionID );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
},
|
||||||
|
this
|
||||||
).id;
|
).id;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -298,7 +323,7 @@ namespace Rokojori
|
||||||
|
|
||||||
void RemoveMaterials()
|
void RemoveMaterials()
|
||||||
{
|
{
|
||||||
if ( _materials.Count != allTargets.Length )
|
if ( _materials == null || allTargets == null || _materials.Count != allTargets.Length )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,7 @@
|
||||||
[sub_resource type="Resource" id="Resource_54hj8"]
|
[sub_resource type="Resource" id="Resource_54hj8"]
|
||||||
script = ExtResource("1_ejko8")
|
script = ExtResource("1_ejko8")
|
||||||
color = Color(0.151445, 0.275065, 1, 1)
|
color = Color(0.151445, 0.275065, 1, 1)
|
||||||
colorMultiply = 1.0
|
|
||||||
rgbMultiply = 3.0
|
rgbMultiply = 3.0
|
||||||
alphaMultiply = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_tp3r5"]
|
[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]
|
_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"]
|
[sub_resource type="Resource" id="Resource_pwp07"]
|
||||||
script = ExtResource("2_3i2og")
|
script = ExtResource("2_3i2og")
|
||||||
duration = 1.0
|
|
||||||
durationRandomRange = 0.0
|
|
||||||
delay = 0.0
|
|
||||||
delayRandomRange = 0.0
|
|
||||||
curve = SubResource("Curve_tp3r5")
|
curve = SubResource("Curve_tp3r5")
|
||||||
scaleY = 1.0
|
|
||||||
scaleRandomRange = 0.0
|
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("3_65ipm")
|
script = ExtResource("3_65ipm")
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,7 @@
|
||||||
[sub_resource type="Resource" id="Resource_54hj8"]
|
[sub_resource type="Resource" id="Resource_54hj8"]
|
||||||
script = ExtResource("1_yrhv1")
|
script = ExtResource("1_yrhv1")
|
||||||
color = Color(0, 1, 0.306108, 1)
|
color = Color(0, 1, 0.306108, 1)
|
||||||
colorMultiply = 1.0
|
|
||||||
rgbMultiply = 2.0
|
rgbMultiply = 2.0
|
||||||
alphaMultiply = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_tp3r5"]
|
[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]
|
_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"]
|
[sub_resource type="Resource" id="Resource_pwp07"]
|
||||||
script = ExtResource("2_cdv3p")
|
script = ExtResource("2_cdv3p")
|
||||||
duration = 0.6
|
duration = 0.6
|
||||||
durationRandomRange = 0.0
|
|
||||||
delay = 0.0
|
|
||||||
delayRandomRange = 0.0
|
|
||||||
curve = SubResource("Curve_tp3r5")
|
curve = SubResource("Curve_tp3r5")
|
||||||
scaleY = 1.0
|
|
||||||
scaleRandomRange = 0.0
|
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("3_87ql1")
|
script = ExtResource("3_87ql1")
|
||||||
|
|
@ -33,6 +26,5 @@ timeline = ExtResource("4_2na64")
|
||||||
color = SubResource("Resource_54hj8")
|
color = SubResource("Resource_54hj8")
|
||||||
lightMode = 1
|
lightMode = 1
|
||||||
lightRange = 5.0
|
lightRange = 5.0
|
||||||
lightFlashCurveScale = 2.0
|
|
||||||
lightHasShadows = true
|
lightHasShadows = true
|
||||||
materialMode = 2
|
materialMode = 2
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,8 @@
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_54hj8"]
|
[sub_resource type="Resource" id="Resource_54hj8"]
|
||||||
script = ExtResource("1_nmdum")
|
script = ExtResource("1_nmdum")
|
||||||
color = Color(0.859799, 0.542989, 0.696896, 1)
|
color = Color(0.86, 0.12426996, 0.1118, 0.5254902)
|
||||||
colorMultiply = 4.0
|
colorMultiply = 3.0
|
||||||
rgbMultiply = 1.0
|
|
||||||
alphaMultiply = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_tp3r5"]
|
[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]
|
_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"]
|
[sub_resource type="Resource" id="Resource_pwp07"]
|
||||||
script = ExtResource("2_0sgd7")
|
script = ExtResource("2_0sgd7")
|
||||||
duration = 0.5
|
duration = 0.3
|
||||||
durationRandomRange = 0.0
|
|
||||||
delay = 0.0
|
|
||||||
delayRandomRange = 0.0
|
|
||||||
curve = SubResource("Curve_tp3r5")
|
curve = SubResource("Curve_tp3r5")
|
||||||
scaleY = 1.0
|
|
||||||
scaleRandomRange = 0.0
|
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("3_7qcuh")
|
script = ExtResource("3_7qcuh")
|
||||||
flashCurve = SubResource("Resource_pwp07")
|
flashCurve = SubResource("Resource_pwp07")
|
||||||
timeline = ExtResource("4_rkq1j")
|
timeline = ExtResource("4_rkq1j")
|
||||||
color = SubResource("Resource_54hj8")
|
color = SubResource("Resource_54hj8")
|
||||||
lightMode = 0
|
|
||||||
lightRange = 2.0
|
|
||||||
lightFlashCurveScale = 2.0
|
|
||||||
lightHasShadows = false
|
|
||||||
materialMode = 0
|
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,7 @@
|
||||||
[sub_resource type="Resource" id="Resource_ny3sx"]
|
[sub_resource type="Resource" id="Resource_ny3sx"]
|
||||||
script = ExtResource("1_pp4qy")
|
script = ExtResource("1_pp4qy")
|
||||||
color = Color(1, 1, 1, 1)
|
color = Color(1, 1, 1, 1)
|
||||||
colorMultiply = 1.0
|
|
||||||
rgbMultiply = 2.0
|
rgbMultiply = 2.0
|
||||||
alphaMultiply = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_nqaq6"]
|
[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]
|
_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"]
|
[sub_resource type="Resource" id="Resource_pwp07"]
|
||||||
script = ExtResource("2_f6f0o")
|
script = ExtResource("2_f6f0o")
|
||||||
duration = 0.7
|
duration = 0.7
|
||||||
durationRandomRange = 0.0
|
|
||||||
delay = 0.0
|
|
||||||
delayRandomRange = 0.0
|
|
||||||
curve = SubResource("Curve_nqaq6")
|
curve = SubResource("Curve_nqaq6")
|
||||||
scaleY = 1.0
|
|
||||||
scaleRandomRange = 0.0
|
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("3_dq1j1")
|
script = ExtResource("3_dq1j1")
|
||||||
flashCurve = SubResource("Resource_pwp07")
|
flashCurve = SubResource("Resource_pwp07")
|
||||||
timeline = ExtResource("4_d6hj6")
|
timeline = ExtResource("4_d6hj6")
|
||||||
color = SubResource("Resource_ny3sx")
|
color = SubResource("Resource_ny3sx")
|
||||||
lightMode = 0
|
|
||||||
lightRange = 2.0
|
|
||||||
lightFlashCurveScale = 2.0
|
|
||||||
lightHasShadows = false
|
|
||||||
materialMode = 0
|
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,6 @@
|
||||||
[sub_resource type="Resource" id="Resource_27v41"]
|
[sub_resource type="Resource" id="Resource_27v41"]
|
||||||
script = ExtResource("1_sk831")
|
script = ExtResource("1_sk831")
|
||||||
color = Color(1, 1, 1, 1)
|
color = Color(1, 1, 1, 1)
|
||||||
colorMultiply = 1.0
|
|
||||||
rgbMultiply = 1.0
|
|
||||||
alphaMultiply = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_idts4"]
|
[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]
|
_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")
|
color = SubResource("Resource_27v41")
|
||||||
opacityModulationStrength = 0.75
|
opacityModulationStrength = 0.75
|
||||||
opacityModulationDuration = 1.0
|
opacityModulationDuration = 1.0
|
||||||
opacityModulationTransition = 1.0
|
|
||||||
outlineMaterialMode = 0
|
|
||||||
overlayOpacity = 0.1
|
overlayOpacity = 0.1
|
||||||
overlayMaterialMode = 0
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ namespace Rokojori
|
||||||
}
|
}
|
||||||
|
|
||||||
var tl = TimeLineManager.Ensure( timeline );
|
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 );
|
target.SetGlobalQuaternion( rotation );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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://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="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"]
|
[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]
|
_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"]
|
[sub_resource type="Resource" id="Resource_jwnpm"]
|
||||||
script = ExtResource("2_wfmv2")
|
script = ExtResource("2_wfmv2")
|
||||||
duration = 0.4
|
duration = 0.4
|
||||||
durationRandomRange = 0.0
|
|
||||||
delay = 0.0
|
|
||||||
delayRandomRange = 0.0
|
|
||||||
curve = SubResource("Curve_j2uji")
|
curve = SubResource("Curve_j2uji")
|
||||||
scaleY = 1.0
|
|
||||||
scaleRandomRange = 0.0
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_b6b7u"]
|
[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]
|
_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"]
|
[sub_resource type="Resource" id="Resource_1s2e6"]
|
||||||
script = ExtResource("2_wfmv2")
|
script = ExtResource("2_wfmv2")
|
||||||
duration = 0.5
|
duration = 0.5
|
||||||
durationRandomRange = 0.0
|
|
||||||
delay = 0.0
|
|
||||||
delayRandomRange = 0.0
|
|
||||||
curve = SubResource("Curve_b6b7u")
|
curve = SubResource("Curve_b6b7u")
|
||||||
scaleY = 30.0
|
scaleY = 30.0
|
||||||
scaleRandomRange = 0.0
|
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_68es8")
|
script = ExtResource("1_68es8")
|
||||||
shakeAmountCurve = SubResource("Resource_jwnpm")
|
shakeAmountCurve = SubResource("Resource_jwnpm")
|
||||||
shakeChangeFPSCurve = SubResource("Resource_1s2e6")
|
shakeChangeFPSCurve = SubResource("Resource_1s2e6")
|
||||||
timeline = ExtResource("3_h08aw")
|
timeline = ExtResource("3_udbmo")
|
||||||
smooth = true
|
|
||||||
smoothingStrength = 0.325
|
smoothingStrength = 0.325
|
||||||
positionShake = Vector3(0.075, 0, 0.075)
|
positionShake = Vector3(0.075, 0, 0.075)
|
||||||
globalPosition = false
|
globalPosition = false
|
||||||
repeatAndFlipFirstPosition = true
|
|
||||||
rotationShake = Vector3(1, 1, 20)
|
rotationShake = Vector3(1, 1, 20)
|
||||||
globalRotation = false
|
globalRotation = false
|
||||||
scaleShake = Vector3(0.25, 0.25, 0.05)
|
scaleShake = Vector3(0.25, 0.25, 0.05)
|
||||||
scaleShakeIsRelative = true
|
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,8 @@ namespace Rokojori
|
||||||
}
|
}
|
||||||
|
|
||||||
lastKeyFrame = keyFrame;
|
lastKeyFrame = keyFrame;
|
||||||
}
|
},
|
||||||
|
this
|
||||||
).id;
|
).id;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,8 @@ namespace Rokojori
|
||||||
DispatchEnd( actionID );
|
DispatchEnd( actionID );
|
||||||
_running = false;
|
_running = false;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
this
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ namespace Rokojori
|
||||||
public Vector2 scaleCenter = new Vector2( 0.5f, 0.5f );
|
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 _outputViewSizeProperty = Vector2PropertyName.Create( "outputViewSize" );
|
||||||
public static readonly Vector2PropertyName _wipeTextureSizeProperty = Vector2PropertyName.Create( "wipeTextureSize" );
|
public static readonly Vector2PropertyName _wipeTextureSizeProperty = Vector2PropertyName.Create( "wipeTextureSize" );
|
||||||
public static readonly Vector2PropertyName _uvRotationCenterProperty = Vector2PropertyName.Create( "uvRotationCenter" );
|
public static readonly Vector2PropertyName _uvRotationCenterProperty = Vector2PropertyName.Create( "uvRotationCenter" );
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cwsdhnenhdly4
|
||||||
|
|
@ -8,11 +8,11 @@ namespace Rokojori
|
||||||
public partial class AudioManager:Node
|
public partial class AudioManager:Node
|
||||||
{
|
{
|
||||||
[Export]
|
[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 ) )
|
if ( ! _lastPlayTime.ContainsKey( selectorFlag ) )
|
||||||
{
|
{
|
||||||
|
|
@ -22,12 +22,12 @@ namespace Rokojori
|
||||||
return _lastPlayTime[ selectorFlag ];
|
return _lastPlayTime[ selectorFlag ];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RecordSoundPlaying( SelectorFlag selectorFlag )
|
public void RecordSoundPlaying( AudioFlag selectorFlag )
|
||||||
{
|
{
|
||||||
_lastPlayTime[ selectorFlag ] = TimeLine.osTime;
|
_lastPlayTime[ selectorFlag ] = TimeLine.osTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanPlay( SelectorFlag selectorFlag, float blockDuration )
|
public bool CanPlay( AudioFlag selectorFlag, float blockDuration )
|
||||||
{
|
{
|
||||||
if ( ! _lastPlayTime.ContainsKey( selectorFlag ) )
|
if ( ! _lastPlayTime.ContainsKey( selectorFlag ) )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,12 @@ namespace Rokojori
|
||||||
if ( Sensors.IsDown( debugCameraToggle ) )
|
if ( Sensors.IsDown( debugCameraToggle ) )
|
||||||
{
|
{
|
||||||
debugCameraActive = ! debugCameraActive;
|
debugCameraActive = ! debugCameraActive;
|
||||||
|
|
||||||
|
if ( debugCameraActive )
|
||||||
|
{
|
||||||
|
Input.MouseMode = Input.MouseModeEnum.Visible;
|
||||||
|
}
|
||||||
|
|
||||||
this.LogInfo( debugCameraActive );
|
this.LogInfo( debugCameraActive );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,9 +49,9 @@ namespace Rokojori
|
||||||
|
|
||||||
void Rotate( float delta )
|
void Rotate( float delta )
|
||||||
{
|
{
|
||||||
var currentRotation = Math3D.GetGlobalQuaternion( this );
|
var currentRotation = this.GlobalQuaternion();
|
||||||
LookAt( target.GlobalPosition, Vector3.Up, true );
|
LookAt( target.GlobalPosition, Vector3.Up, true );
|
||||||
var nextRotation = Math3D.GetGlobalQuaternion( this );
|
var nextRotation = this.GlobalQuaternion();
|
||||||
|
|
||||||
var smoothedRotation = smoother.SmoothWithCoefficient( currentRotation, nextRotation, rotationSmoothingCoefficient, delta );
|
var smoothedRotation = smoother.SmoothWithCoefficient( currentRotation, nextRotation, rotationSmoothingCoefficient, delta );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,7 @@ namespace Rokojori
|
||||||
smoothDistance = smoother.SmoothWithCoefficient( smoothDistance, distance, zoomSmoothingCoefficient, delta );
|
smoothDistance = smoother.SmoothWithCoefficient( smoothDistance, distance, zoomSmoothingCoefficient, delta );
|
||||||
GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
|
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 );
|
// this.LogInfo( forward, smoothDistance );
|
||||||
GlobalPosition = target + forward;
|
GlobalPosition = target + forward;
|
||||||
|
|
|
||||||
|
|
@ -16,225 +16,62 @@ namespace Rokojori
|
||||||
public Node3D target;
|
public Node3D target;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Smoothing targetFollowSmoothing = new FrameSmoothing();
|
public float yaw;
|
||||||
|
|
||||||
[ExportGroup("Yaw")]
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public float yawSpeed;
|
public float pitch;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Sensor yawPositiveAxis;
|
public ThirdPersonCameraSettings settings;
|
||||||
|
|
||||||
[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 override void _Process( double delta )
|
public override void _Process( double delta )
|
||||||
{
|
{
|
||||||
|
if ( Engine.IsEditorHint() )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( target == null )
|
if ( target == null )
|
||||||
{
|
{
|
||||||
return;
|
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( settings.targetFollowSmoothing, target.GlobalPosition, (float) delta );
|
||||||
|
|
||||||
var targetPosition = Smoothing.Apply( targetFollowSmoothing, target.GlobalPosition, (float) delta );
|
|
||||||
|
|
||||||
|
|
||||||
var yawAxis = Sensors.PolarAxis( yawNegativeAxis, yawPositiveAxis );
|
var yawAxis = Sensors.PolarPowerAxis( data.yawNegativeAxis, data.yawPositiveAxis, 1f, data.yawDeadZone, data.yawPower );
|
||||||
var pitchAxis = Sensors.PolarAxis( pitchNegativeAxis, pitchPositiveAxis );
|
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 ( data.pitchIsRelative )
|
||||||
|
|
||||||
if ( yawGoesBehindPlayer )
|
|
||||||
{
|
{
|
||||||
if ( Mathf.Abs( yawAxis ) < yawGoesBehindActivation )
|
pitch += pitchAxis * settings.relativePitchSpeed * data.relativePitchSpeed * (float)delta;
|
||||||
{
|
pitch = Mathf.Clamp( pitch, settings.minPitch, settings.maxPitch );
|
||||||
_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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
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;
|
var appliedYaw = yaw;
|
||||||
|
|
||||||
// if ( roundYaw )
|
var smoothedYaw = Smoothing.ApplyDegrees( settings.yawSmoothing, appliedYaw, (float) delta );
|
||||||
// {
|
|
||||||
// appliedYaw = MathX.SnapRounded( yaw, 360f/roundedYawResolution );
|
|
||||||
// }
|
|
||||||
|
|
||||||
smoothedYaw = Smoothing.ApplyDegrees( yawSmoothing, appliedYaw, (float) delta );
|
var smoothedPitch = Smoothing.Apply( settings.pitchSmoothing, pitch, (float) delta );
|
||||||
|
|
||||||
|
var distance = settings.distanceForPitch.Sample( MathX.NormalizeClamped( pitch, settings.minPitch, settings.maxPitch ) ) * settings.distanceScale;
|
||||||
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;
|
|
||||||
|
|
||||||
GlobalPosition = targetPosition + Math3D.YawPitchRotation( smoothedYaw, smoothedPitch ) * Vector3.Forward * distance;
|
GlobalPosition = targetPosition + Math3D.YawPitchRotation( smoothedYaw, smoothedPitch ) * Vector3.Forward * distance;
|
||||||
|
|
||||||
LookAt( targetPosition, Vector3.Up, true );
|
LookAt( targetPosition, Vector3.Up, true );
|
||||||
|
|
||||||
GlobalPosition += this.GetOrientationBasedGlobalOffset( offset );
|
GlobalPosition += this.GetOrientationBasedGlobalOffset( settings.offset );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://8b4s4nw4heif
|
||||||
|
|
@ -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 ];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cguitqskambdb
|
||||||
|
|
@ -24,7 +24,7 @@ namespace Rokojori
|
||||||
{
|
{
|
||||||
if ( pitchMultiply != null && thirdPersonCamera != null )
|
if ( pitchMultiply != null && thirdPersonCamera != null )
|
||||||
{
|
{
|
||||||
var normalizedPitch = thirdPersonCamera.normalizedPitch;
|
var normalizedPitch = thirdPersonCamera.settings.GetNormalizedPitch( thirdPersonCamera.pitch );
|
||||||
var sampledPitchMultiply = pitchMultiply.Sample( normalizedPitch );
|
var sampledPitchMultiply = pitchMultiply.Sample( normalizedPitch );
|
||||||
movingForward *= sampledPitchMultiply;
|
movingForward *= sampledPitchMultiply;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ namespace Rokojori
|
||||||
_smoothDistance = Smoothing.Apply( zoomSmoothing, distance, delta );
|
_smoothDistance = Smoothing.Apply( zoomSmoothing, distance, delta );
|
||||||
GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
|
GlobalRotation = new Vector3( Mathf.DegToRad( pitch ), Mathf.DegToRad( yaw ), 0 );
|
||||||
|
|
||||||
var forward = Math3D.GetGlobalForward( this ) * _smoothDistance;
|
var forward = this.GlobalForward() * _smoothDistance;
|
||||||
target -= moveDirection * delta;
|
target -= moveDirection * delta;
|
||||||
GlobalPosition = target + forward;
|
GlobalPosition = target + forward;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ namespace Rokojori
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
d = camera.GlobalDistanceTo( n3 );
|
d = camera.DistanceTo( n3 );
|
||||||
}
|
}
|
||||||
|
|
||||||
fd.SetCenterDistance( d );
|
fd.SetCenterDistance( d );
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,16 @@ namespace Rokojori
|
||||||
{
|
{
|
||||||
public static class ColorX
|
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 )
|
public static float GetChannel( this Color color, ColorChannelType colorChannelType )
|
||||||
{
|
{
|
||||||
if ( ColorChannelType.Red == colorChannelType )
|
if ( ColorChannelType.Red == colorChannelType )
|
||||||
|
|
@ -244,53 +254,6 @@ namespace Rokojori
|
||||||
return new Color( vec.X, vec.Y, b, alpha);
|
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 )
|
public static Color Blend( Color bottom, Color top )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
##---
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bho0sb0lvooih
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
## ---
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://biyqj5eggsnqh
|
||||||
|
|
@ -7,6 +7,72 @@ namespace Rokojori
|
||||||
{
|
{
|
||||||
public static class GDScriptNames
|
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 )
|
public static string ToCS( string gdScriptName )
|
||||||
{
|
{
|
||||||
return gdScriptName.ToPascalCase();
|
return gdScriptName.ToPascalCase();
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ namespace Rokojori
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var sourceRotation = source.GetGlobalQuaternion();
|
var sourceRotation = source.GlobalQuaternion();
|
||||||
|
|
||||||
if ( rotation != sourceRotation )
|
if ( rotation != sourceRotation )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://m7jq7d5if1rb
|
||||||
|
|
@ -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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://m8jyxhsvq1kp
|
||||||
|
|
@ -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 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bf32gapbxoe4x
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
using Godot;
|
||||||
|
using System.Text;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Rokojori
|
||||||
|
{
|
||||||
|
public static class QuaternionExtensions
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://dkcrw7m7aw6ty
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://cdfiwablm4a6q
|
||||||
|
|
@ -39,6 +39,14 @@ namespace Rokojori
|
||||||
var filesystem = EditorInterface.Singleton.GetResourceFilesystem();
|
var filesystem = EditorInterface.Singleton.GetResourceFilesystem();
|
||||||
filesystem.ReimportFiles( [ path ] );
|
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
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ namespace Rokojori
|
||||||
public static void Configure( Node n, bool processEnabled, bool inputEnabled, bool physicsEnabled, bool signalsEnabled,
|
public static void Configure( Node n, bool processEnabled, bool inputEnabled, bool physicsEnabled, bool signalsEnabled,
|
||||||
Node.ProcessModeEnum processMode, bool visible )
|
Node.ProcessModeEnum processMode, bool visible )
|
||||||
{
|
{
|
||||||
if ( n == null )
|
if ( n == null || ! Node.IsInstanceValid( n ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -367,6 +367,22 @@ namespace Rokojori
|
||||||
return CreateChildIn<T>( parent, name );
|
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()
|
public static T GetOrCreateChild<T>( this Node parent, string name = null ) where T:Node,new()
|
||||||
{
|
{
|
||||||
var child = Nodes.GetDirectChild<T>( parent );
|
var child = Nodes.GetDirectChild<T>( parent );
|
||||||
|
|
@ -387,7 +403,7 @@ namespace Rokojori
|
||||||
|
|
||||||
if ( rotation != null )
|
if ( rotation != null )
|
||||||
{
|
{
|
||||||
Math3D.SetLocalQuaternion( c, (Quaternion)rotation );
|
c.SetLocalQuaternion( (Quaternion)rotation );
|
||||||
}
|
}
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
|
|
@ -421,7 +437,7 @@ namespace Rokojori
|
||||||
|
|
||||||
if ( rotation != null )
|
if ( rotation != null )
|
||||||
{
|
{
|
||||||
Math3D.SetGlobalQuaternion( c, (Quaternion)rotation );
|
c.SetGlobalQuaternion( (Quaternion)rotation );
|
||||||
}
|
}
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
|
|
@ -435,7 +451,7 @@ namespace Rokojori
|
||||||
|
|
||||||
if ( rotation != null )
|
if ( rotation != null )
|
||||||
{
|
{
|
||||||
Math3D.SetGlobalQuaternion( c, (Quaternion)rotation );
|
c.SetGlobalQuaternion( (Quaternion)rotation );
|
||||||
}
|
}
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
|
|
@ -449,7 +465,7 @@ namespace Rokojori
|
||||||
|
|
||||||
if ( rotation != null )
|
if ( rotation != null )
|
||||||
{
|
{
|
||||||
Math3D.SetGlobalQuaternion( c, (Quaternion)rotation );
|
c.SetGlobalQuaternion( (Quaternion)rotation );
|
||||||
}
|
}
|
||||||
|
|
||||||
return c;
|
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 )
|
public static void SelfDestroy( this Node node, bool queue = true )
|
||||||
{
|
{
|
||||||
var parent = node.GetParent();
|
var parent = node.GetParent();
|
||||||
|
|
@ -773,6 +818,41 @@ namespace Rokojori
|
||||||
return list;
|
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
|
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
|
public static List<U> MapDirectChildren<T,U>( Node parent, System.Func<T,U> mapper ) where T:Node
|
||||||
{
|
{
|
||||||
var list = new List<U>();
|
var list = new List<U>();
|
||||||
|
|
|
||||||
|
|
@ -56,25 +56,38 @@ namespace Rokojori
|
||||||
ProcessActions( (float) delta );
|
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.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() )
|
if ( body.IsOnFloor() )
|
||||||
{
|
{
|
||||||
lastGroundedHeight = graphics.GlobalPosition.Y;
|
lastGroundedHeight = graphics.GlobalPosition.Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
var grounedPosition = graphics.GlobalPosition;
|
|
||||||
grounedPosition.Y = lastGroundedHeight;
|
AssignGroundedTransform();
|
||||||
groundedTransform.GlobalPosition = grounedPosition;
|
|
||||||
groundedTransform.SetGlobalQuaternion( graphics.GetGlobalQuaternion() );
|
|
||||||
|
|
||||||
// Pose.CopyTo( body, graphics );
|
// 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 )
|
public override void _PhysicsProcess( double delta )
|
||||||
{
|
{
|
||||||
if ( CharacterUpdateMode.Physics_Process == characterUpdateMode )
|
if ( CharacterUpdateMode.Physics_Process == characterUpdateMode )
|
||||||
|
|
@ -100,6 +113,8 @@ namespace Rokojori
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.SetCharacterController( this );
|
||||||
|
|
||||||
Action.Trigger( c );
|
Action.Trigger( c );
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ namespace Rokojori
|
||||||
[Export]
|
[Export]
|
||||||
public bool enabled = true;
|
public bool enabled = true;
|
||||||
|
|
||||||
[Export]
|
CharacterController _controller;
|
||||||
public CharacterController controller;
|
public CharacterController controller => _controller;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Condition condition;
|
public Condition condition;
|
||||||
|
|
@ -21,29 +21,41 @@ namespace Rokojori
|
||||||
[Export]
|
[Export]
|
||||||
public SceneCondition sceneCondition;
|
public SceneCondition sceneCondition;
|
||||||
|
|
||||||
|
public void SetCharacterController( CharacterController cc )
|
||||||
|
{
|
||||||
|
_controller = cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public CharacterBody3D body => controller.body;
|
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 = velocity * controller.delta;
|
body.Velocity *= scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Velocity( Vector3 velocity, bool replace )
|
public void SetVelocity( Vector3 velocity, float delta = -1 )
|
||||||
|
{
|
||||||
|
delta = delta < 0 ? controller.delta : delta;
|
||||||
|
body.Velocity = velocity * delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Velocity( Vector3 velocity, bool replace, float delta = -1 )
|
||||||
{
|
{
|
||||||
if ( replace )
|
if ( replace )
|
||||||
{
|
{
|
||||||
SetVelocity( velocity );
|
SetVelocity( velocity, delta );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AddVelocity( velocity );
|
AddVelocity( velocity, delta );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,10 @@ namespace Rokojori
|
||||||
[ExportGroup("Movement")]
|
[ExportGroup("Movement")]
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public float moveSpeed;
|
public float moveSpeed = 10f;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public float minSpeed = 0f;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public CharacterMovementType controllerMovementType;
|
public CharacterMovementType controllerMovementType;
|
||||||
|
|
@ -43,6 +46,9 @@ namespace Rokojori
|
||||||
[Export]
|
[Export]
|
||||||
public CharacterMovementType currentMovementType;
|
public CharacterMovementType currentMovementType;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public CharacterMovementType[] deviceMovementTypes = [];
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Smoothing onFloorMovementSmoothing = new FrameSmoothing();
|
public Smoothing onFloorMovementSmoothing = new FrameSmoothing();
|
||||||
|
|
||||||
|
|
@ -81,6 +87,13 @@ namespace Rokojori
|
||||||
protected CharacterMovementData characterMovementData = new CharacterMovementData();
|
protected CharacterMovementData characterMovementData = new CharacterMovementData();
|
||||||
|
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public bool lookAlwaysForward = false;
|
||||||
|
[Export]
|
||||||
|
public Smoothing lookAlwaysForwardSmoothing;
|
||||||
|
|
||||||
|
Vector3 _smoothedMovement;
|
||||||
|
public Vector3 smoothedMovement => _smoothedMovement;
|
||||||
|
|
||||||
protected override void _OnTrigger()
|
protected override void _OnTrigger()
|
||||||
{
|
{
|
||||||
|
|
@ -89,8 +102,19 @@ namespace Rokojori
|
||||||
|
|
||||||
characterMovementData.Reset( this );
|
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 )
|
if ( currentMovementType == null )
|
||||||
{
|
{
|
||||||
|
// this.LogInfo( "No device found:", activeDevice == null ? "null" : activeDevice.GetType().Name );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,6 +133,9 @@ namespace Rokojori
|
||||||
if ( adjustRotation )
|
if ( adjustRotation )
|
||||||
{
|
{
|
||||||
var nextRotation = Math3D.LookRotation( characterMovementData.forwardDirection );
|
var nextRotation = Math3D.LookRotation( characterMovementData.forwardDirection );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var speed = MathX.Clamp01( characterMovementData.movement.Length() / moveSpeed );
|
var speed = MathX.Clamp01( characterMovementData.movement.Length() / moveSpeed );
|
||||||
|
|
||||||
if ( speed > 0 )
|
if ( speed > 0 )
|
||||||
|
|
@ -127,21 +154,29 @@ namespace Rokojori
|
||||||
rotation = rotationSmoothing.Smooth( nextRotation, controller.delta );
|
rotation = rotationSmoothing.Smooth( nextRotation, controller.delta );
|
||||||
body.SetGlobalQuaternion( rotation );
|
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 )
|
if ( onFloor )
|
||||||
{
|
{
|
||||||
smoothedMovement = onFloorMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
|
_smoothedMovement = onFloorMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
smoothedMovement = inAirMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
|
_smoothedMovement = inAirMovementSmoothing.Smooth( characterMovementData.movement, controller.delta );
|
||||||
}
|
}
|
||||||
|
|
||||||
var wasMoving = _moving;
|
var wasMoving = _moving;
|
||||||
_moving = smoothedMovement.Length() > movingSpeedTreshold;
|
_moving = _smoothedMovement.Length() > movingSpeedTreshold;
|
||||||
|
|
||||||
if ( wasMoving != _moving )
|
if ( wasMoving != _moving )
|
||||||
{
|
{
|
||||||
|
|
@ -155,7 +190,7 @@ namespace Rokojori
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Velocity( smoothedMovement, onFloor );
|
Velocity( _smoothedMovement, onFloor );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,11 @@ namespace Rokojori
|
||||||
{
|
{
|
||||||
[Tool]
|
[Tool]
|
||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class CharacterMovementType:Resource
|
public abstract partial class CharacterMovementType:Resource
|
||||||
{
|
{
|
||||||
|
[Export]
|
||||||
|
public DefaultSensorDeviceSelector deviceSelector;
|
||||||
|
|
||||||
public virtual void ProcessMovement( CharacterMovementData characterMovementData )
|
public virtual void ProcessMovement( CharacterMovementData characterMovementData )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ namespace Rokojori
|
||||||
|
|
||||||
var movement = forwardDirection * Sensors.PolarAxis( backwards, forward ) * characterMovement.moveSpeed;
|
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.movement = movement;
|
||||||
characterMovementData.isMovingForward = forward.isActive;
|
characterMovementData.isMovingForward = forward.isActive;
|
||||||
|
|
|
||||||
|
|
@ -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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://ch6tcwvvw2dl1
|
||||||
|
|
@ -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 )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://dbgwebayabwd5
|
||||||
|
|
@ -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 );
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://xnupkyu3042b
|
||||||
|
|
@ -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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
uid://crk6vntm10let
|
||||||
|
|
@ -86,18 +86,18 @@ namespace Rokojori
|
||||||
|
|
||||||
grabbable.SetGrabber( this );
|
grabbable.SetGrabber( this );
|
||||||
|
|
||||||
_callback = TimeLineManager.ScheduleCallback( timeLine,
|
_callback = TimeLineManager.ScheduleCallback(timeLine,
|
||||||
( cb )=>
|
(System.Action<TimeLineCallback>)(( cb )=>
|
||||||
{
|
{
|
||||||
if ( cb != _callback )
|
if ( cb != _callback)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
positionSmoothing.SetCurrent( grabbable.grabTarget.GlobalPosition );
|
positionSmoothing.SetCurrent(grabbable.grabTarget.GlobalPosition );
|
||||||
rotationSmoothing.SetCurrent( grabbable.grabTarget.GetGlobalQuaternion() );
|
rotationSmoothing.SetCurrent(Node3DExtensions.GlobalQuaternion(grabbable.grabTarget));
|
||||||
UpdateGrabbable();
|
UpdateGrabbable();
|
||||||
}
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
Action.Trigger( onGrab );
|
Action.Trigger( onGrab );
|
||||||
|
|
@ -121,7 +121,7 @@ namespace Rokojori
|
||||||
{
|
{
|
||||||
// this.LogInfo( "Grabbing", HierarchyName.Of( grabbable ) );
|
// this.LogInfo( "Grabbing", HierarchyName.Of( grabbable ) );
|
||||||
grabbable.grabTarget.GlobalPosition = Smoothing.Apply( positionSmoothing, grabOffset.GlobalPosition, timeLine.delta );
|
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.LinearVelocity = Vector3.Zero;
|
||||||
grabbable.rigidBody3D.AngularVelocity = Vector3.Zero;
|
grabbable.rigidBody3D.AngularVelocity = Vector3.Zero;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ namespace Rokojori
|
||||||
var excludes = new Array<Rid>();
|
var excludes = new Array<Rid>();
|
||||||
|
|
||||||
var from = GlobalPosition;
|
var from = GlobalPosition;
|
||||||
var to = from + Math3D.GetGlobalForward( this ) * rayLength;
|
var to = from + this.GlobalForward() * rayLength;
|
||||||
|
|
||||||
this.to = to;
|
this.to = to;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ using Godot;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Godot.Collections;
|
using Godot.Collections;
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
namespace Rokojori
|
namespace Rokojori
|
||||||
{
|
{
|
||||||
|
|
@ -19,6 +20,10 @@ namespace Rokojori
|
||||||
[Export]
|
[Export]
|
||||||
public Pointable pointable;
|
public Pointable pointable;
|
||||||
|
|
||||||
|
|
||||||
|
public readonly EventSlot<Pointable> onPointerChange = new EventSlot<Pointable>();
|
||||||
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public bool printPointables = false;
|
public bool printPointables = false;
|
||||||
|
|
||||||
|
|
@ -56,6 +61,8 @@ namespace Rokojori
|
||||||
Highlight( HighlightActionType.Start, pointable );
|
Highlight( HighlightActionType.Start, pointable );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onPointerChange.DispatchEvent( currentPointable );
|
||||||
|
|
||||||
if ( printPointables )
|
if ( printPointables )
|
||||||
{
|
{
|
||||||
this.LogInfo( pointable );
|
this.LogInfo( pointable );
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@ namespace Rokojori.PointClouds
|
||||||
}
|
}
|
||||||
|
|
||||||
sampler.materials = Materials.GetAll<Material>( mesh );
|
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 ); ;
|
sampler.albedo = sampler.materials.Map( m => ColorPropertyName.albedo ); ;
|
||||||
|
|
||||||
var cloud = await sampler.SampleFromMesh( sampleMode, (ArrayMesh) mesh.Mesh, this );
|
var cloud = await sampler.SampleFromMesh( sampleMode, (ArrayMesh) mesh.Mesh, this );
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Rokojori.PointClouds
|
namespace Rokojori.PointClouds
|
||||||
{
|
{
|
||||||
public class PointCloudOcTree:OcTree<Point>
|
public class PointCloudOcTree:OcTree<Point,Null>
|
||||||
{
|
{
|
||||||
List<Vector3> compressedNormals = new List<Vector3>()
|
List<Vector3> compressedNormals = new List<Vector3>()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ namespace Rokojori.PointClouds
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Material> materials;
|
public List<Material> materials;
|
||||||
public List<Texture2DPropertyName> albedoTexture;
|
public List<Sampler2DPropertyName> albedoTexture;
|
||||||
public List<ColorPropertyName> albedo;
|
public List<ColorPropertyName> albedo;
|
||||||
public float densityResolution = 0.2f;
|
public float densityResolution = 0.2f;
|
||||||
|
|
||||||
|
|
@ -286,7 +286,7 @@ namespace Rokojori.PointClouds
|
||||||
|
|
||||||
if ( image != null )
|
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 )
|
if ( image != null )
|
||||||
{
|
{
|
||||||
color = image.Sample( uv, ColorX.EdgeMode.Repeat );
|
color = image.SampleLinear( uv, ImageExtensions.EdgeMode.Repeat );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||