Core Export Update

This commit is contained in:
Rokojori 2026-05-22 14:25:02 +02:00
parent 107614bcb7
commit 96d39db4b1
1600 changed files with 8257 additions and 5229 deletions

View File

@ -3,15 +3,15 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://bujyx7ltsi40k" uid="uid://bujyx7ltsi40k"
path="res://.godot/imported/TimeLineManager.svg-dd6b4ada11f698cccbfe51b895d69a3b.ctex" path="res://.godot/imported/TimelineManager.svg-deb996f134b015aad25457e6b0de530f.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://addons/rokojori_action_library/Icons/TimeLineManager.svg" source_file="res://addons/rokojori_action_library/Icons/TimelineManager.svg"
dest_files=["res://.godot/imported/TimeLineManager.svg-dd6b4ada11f698cccbfe51b895d69a3b.ctex"] dest_files=["res://.godot/imported/TimelineManager.svg-deb996f134b015aad25457e6b0de530f.ctex"]
[params] [params]

254
Icons/Timeline.svg Normal file
View File

@ -0,0 +1,254 @@
<?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="Timeline.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="linearGradient33765"><stop
style="stop-color:#cccfd5;stop-opacity:1;"
offset="0"
id="stop33761" /><stop
style="stop-color:#a9aeb6;stop-opacity:1;"
offset="0.41559249"
id="stop16949" /><stop
style="stop-color:#b2b3b9;stop-opacity:1;"
offset="0.80959076"
id="stop16951" /><stop
style="stop-color:#8a8a8a;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" /></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="11.313709"
inkscape:cx="5.3033009"
inkscape:cy="2.4748737"
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="14.006492" /><g
id="g17763"
style="opacity:0.2769556;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
inkscape:transform-center-x="-1.2719054"
inkscape:transform-center-y="-1.2220245"
transform="matrix(1.1286242,0,0,1.1286242,-4.0892676,-4.3982168)"><g
id="g17761"
transform="matrix(0.69923898,0,0,0.69923898,9.3325793,10.29016)"
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"><rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.91428;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect17757"
width="3.2538471"
height="14.88635"
x="30.488947"
y="23.89229"
ry="1.6269236" /><rect
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.91428;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="rect17759"
width="3.2766507"
height="10.920136"
x="3.4293973"
y="-58.743446"
ry="1.6269236"
inkscape:transform-center-y="1.5929503"
transform="rotate(133.35838)"
inkscape:transform-center-x="-1.6869533" /></g></g><g
id="g32999"
style="fill:#353a3d;fill-opacity:1"
inkscape:transform-center-x="-1.2719054"
inkscape:transform-center-y="-1.2220245"
transform="matrix(1.1286242,0,0,1.1286242,-4.0892676,-4.3982168)"><g
id="g33729"
transform="matrix(0.69923898,0,0,0.69923898,9.3325793,10.29016)"
style="fill:#353a3d;fill-opacity:1"><rect
style="fill:#353a3d;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="rect32993"
width="3.2538471"
height="14.88635"
x="30.488947"
y="23.89229"
ry="1.6269236" /><rect
style="fill:#353a3d;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="rect32995"
width="3.2766507"
height="10.920136"
x="3.4293973"
y="-58.743446"
ry="1.6269236"
inkscape:transform-center-y="1.5929503"
transform="rotate(133.35838)"
inkscape:transform-center-x="-1.6869533" /></g></g><g
id="g44470"><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect40748"
width="2.1857765"
height="1.8981743"
x="18.830223"
y="34.318436"
ry="0.80296504" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect40750"
width="2.1857765"
height="1.8981743"
x="42.873764"
y="34.318436"
ry="0.80296504" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect40756"
width="2.1857765"
height="1.8981743"
x="22.447657"
y="-32.89397"
ry="0.80296504"
transform="rotate(90)" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect40758"
width="2.1857765"
height="1.8981743"
x="46.491196"
y="-32.89397"
ry="0.80296504"
transform="rotate(90)" /></g><g
id="g44490"
transform="rotate(31.072797,31.949858,35.560981)"><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44482"
width="2.1857765"
height="1.8981743"
x="18.830223"
y="34.318436"
ry="0.80296504" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44484"
width="2.1857765"
height="1.8981743"
x="42.873764"
y="34.318436"
ry="0.80296504" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44486"
width="2.1857765"
height="1.8981743"
x="22.447657"
y="-32.89397"
ry="0.80296504"
transform="rotate(90)" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44488"
width="2.1857765"
height="1.8981743"
x="46.491196"
y="-32.89397"
ry="0.80296504"
transform="rotate(90)" /></g><g
id="g44500"
transform="rotate(59.678732,31.945314,35.562358)"><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44492"
width="2.1857765"
height="1.8981743"
x="18.830223"
y="34.318436"
ry="0.80296504" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44494"
width="2.1857765"
height="1.8981743"
x="42.873764"
y="34.318436"
ry="0.80296504" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44496"
width="2.1857765"
height="1.8981743"
x="22.447657"
y="-32.89397"
ry="0.80296504"
transform="rotate(90)" /><rect
style="opacity:0.437632;fill:#000000;fill-opacity:1;stroke:none;stroke-width:184.065;stroke-linecap:square;stroke-opacity:1;paint-order:markers stroke fill"
id="rect44498"
width="2.1857765"
height="1.8981743"
x="46.491196"
y="-32.89397"
ry="0.80296504"
transform="rotate(90)" /></g></g></g></svg>

After

Width:  |  Height:  |  Size: 11 KiB

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

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

View File

@ -5,17 +5,58 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System; using System;
using System.Data; using System.Data;
#if ! ROKOJORI_ACTION_CORE
using Rokojori.Tools; using Rokojori.Tools;
#endif
namespace Rokojori namespace Rokojori
{ {
#if ! TOOLS #if ! TOOLS
[Tool]
public partial class RokojoriPlugin:Node
{
} #if ROKOJORI_ACTION_CORE
#else [Tool][RokojoriActionCoreExport]
public partial class RokojoriPlugin:EditorPlugin
{
#if ROKOJORI_ACTION_CORE_GD
public static readonly string _path = "res://addons/rokojori_action_code_gd";
#else
public static readonly string _path = "res://addons/rokojori_action_code_cs";
#endif
public static string Path( string path )
{
return RokojoriPlugin._path + "/" + path;
}
public static string GlobalizedPath( string path )
{
return ProjectSettings.GlobalizePath( Path( path ) );
}
static readonly string RokojoriRootAutoLoad = "RokojoriRootAutoLoad";
#if ROKOJORI_ACTION_CORE_GD
public static readonly string RokojoriRootAutoLoadPath = Path( "Runtime/Godot/RJ_Root.cs" );
#else
public static readonly string RokojoriRootAutoLoadPath = Path( "Runtime/Godot/Root.cs" );
#endif
public override void _EnablePlugin()
{
AddAutoloadSingleton( RokojoriRootAutoLoad, RokojoriRootAutoLoadPath );
}
public override void _DisablePlugin()
{
RemoveAutoloadSingleton( RokojoriRootAutoLoad );
}
}
#endif
#elif ! ROKOJORI_ACTION_CORE
[Tool] [Tool]
public partial class RokojoriPlugin: EditorPlugin public partial class RokojoriPlugin: EditorPlugin
{ {
@ -109,12 +150,9 @@ namespace Rokojori
} }
static readonly string ProblemsExplorerPath = "res://addons/rokojori_action_library/Tools/Messages/Messages.tscn";
static Control messages;
public override void _EnterTree() public override void _EnterTree()
{ {
// _instance = this;
EnsureHiddenProjectPath( RokojoriProjectInternalPath ); EnsureHiddenProjectPath( RokojoriProjectInternalPath );
EnsureHiddenProjectPath( RokojoriSettingsPath ); EnsureHiddenProjectPath( RokojoriSettingsPath );
@ -126,39 +164,12 @@ namespace Rokojori
inspectorTools.rokojoriPlugin = this; inspectorTools.rokojoriPlugin = this;
inspectorTools.AddPlugins(); inspectorTools.AddPlugins();
// var pePackedScene = GD.Load<PackedScene>( ProblemsExplorerPath );
// if ( pePackedScene != null )
// {
// // this.LogInfo( "Problems Explorer found: ", pePackedScene );
// messages = ((PackedScene)pePackedScene).Instantiate<Control>();
// var ui = messages.Get<UI>();
// ui.BindOwnChildren();
// var shortCut = new Shortcut();
// shortCut.Events = [ new InputEventKey{ CtrlPressed = true, Keycode = Key.U } ];
// AddControlToDock( DockSlot.RightBr, messages, shortCut );
// }
// else
// {
// this.LogInfo( "Problems Explorer not found: ", ProblemsExplorerPath );
// }
} }
public override void _ExitTree() public override void _ExitTree()
{ {
this.LogInfo(); this.LogInfo();
if ( messages != null )
{
RemoveControlFromDocks( messages );
}
RemoveNode3DGizmoPlugin( gizmoDrawerPlugin ); RemoveNode3DGizmoPlugin( gizmoDrawerPlugin );
inspectorTools.rokojoriPlugin = this; inspectorTools.rokojoriPlugin = this;
@ -234,10 +245,6 @@ namespace Rokojori
editingScene.ForEach<IAssemblyReload>( ar => ar.OnAssemblyReloaded() ); editingScene.ForEach<IAssemblyReload>( ar => ar.OnAssemblyReloaded() );
if ( messages != null )
{
messages.ForEach<IAssemblyReload>( ar => ar.OnAssemblyReloaded() );
}
} }
} }

View File

@ -3,13 +3,19 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using Rokojori.Extensions;
namespace Rokojori; namespace Rokojori;
[Tool] [Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Action.svg")] [GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Action.svg")]
[RokojoriActionCoreExport] [RokojoriActionCoreExport]
public partial class Action : NetworkNode public abstract partial class Action : NetworkNode
{ {
#if ROKOJORI_ACTION_CORE
protected int networkSeed => 0;
#endif
public enum ActionTriggerMode public enum ActionTriggerMode
{ {
Only_When_Processing_In_Hierarchy, Only_When_Processing_In_Hierarchy,
@ -33,7 +39,7 @@ public partial class Action : NetworkNode
#endif #endif
[ExportToolButton( "Trigger Action in Editor")] [ExportToolButton( "Trigger Action in Editor")]
public Callable TriggerActionButton => Callable.From( ()=> Trigger() ); public Callable triggerActionButton => Callable.From( ()=> Trigger() );
#if !ROKOJORI_ACTION_CORE #if !ROKOJORI_ACTION_CORE
@ -194,7 +200,7 @@ public partial class Action : NetworkNode
return _sendingNetworkSeed; return _sendingNetworkSeed;
} }
_sendingNetworkSeed = GodotRandom.Get().IntegerExclusive( 0, maxNetworkSeed ); _sendingNetworkSeed = GodotRandom.Get().IntegerExclusiveInRange( 0, maxNetworkSeed );
_sendsSeed = true; _sendsSeed = true;
return _sendingNetworkSeed; return _sendingNetworkSeed;

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
/** <summary> /** <summary>

View File

@ -2,33 +2,34 @@
using Godot; using Godot;
namespace Rokojori using Rokojori.Extensions;
namespace Rokojori;
[RokojoriActionCoreExport]
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/ActionReference.svg")]
public partial class ActionReference : Action
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/ActionReference.svg")] [Export]
public partial class ActionReference : Action public Action referencedAction;
{
[Export]
public Action referencedAction;
[ExportToolButton( "Set Reference Name" )] [ExportToolButton( "Set Reference Name" )]
public Callable setReferencedNameButton => Callable.From( public Callable setReferencedNameButton => Callable.From(
()=> ()=>
{
if ( referencedAction == null )
{
this.Name = "* (nothing)";
}
else
{
this.Name = "* " + referencedAction.Name;
}
}
);
protected override void _OnTrigger()
{ {
Action.TriggerSafe( referencedAction ); if ( referencedAction == null )
{
this.Name = "* (nothing)";
}
else
{
this.Name = "* " + referencedAction.Name;
}
} }
} );
protected override void _OnTrigger()
{
Action.TriggerSafe( referencedAction );
}
} }

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori; namespace Rokojori;
[Tool] [Tool]

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori; namespace Rokojori;
[Tool] [Tool]
@ -19,11 +20,11 @@ public partial class MusicChannelPlayer:Node
public void TweenVolume( AudioStreamPlayer target, float duration, float toVolume, bool clear, System.Action onReady = null ) public void TweenVolume( AudioStreamPlayer target, float duration, float toVolume, bool clear, System.Action onReady = null )
{ {
var tl = TimeLineManager.Ensure( null ); var tl = TimelineManager.Ensure( null );
var start = tl.position; var start = tl.position;
var fromVolume = target.VolumeLinear; var fromVolume = target.VolumeLinear;
TimeLineManager.ScheduleSpanIn( tl, 0, duration, TimelineManager.ScheduleSpanIn( tl, 0, duration,
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( target ) ) if ( ! GodotObject.IsInstanceValid( target ) )
@ -34,7 +35,7 @@ public partial class MusicChannelPlayer:Node
var lerpedVolume = Mathf.Lerp( fromVolume, toVolume, span.phase ); var lerpedVolume = Mathf.Lerp( fromVolume, toVolume, span.phase );
target.VolumeLinear = lerpedVolume; target.VolumeLinear = lerpedVolume;
if ( type == TimeLineSpanUpdateType.End && clear ) if ( type == TimelineSpanUpdateType.End && clear )
{ {
if ( clear ) if ( clear )
{ {
@ -71,7 +72,7 @@ public partial class MusicChannelPlayer:Node
this.LogInfo( "Playing:", nextMusic ); this.LogInfo( "Playing:", nextMusic );
var name = FilePath.Absolute( nextMusic.audio.ResourcePath ).fileName; var name = nextMusic.audio.ResourcePath.ExtractFileName();
var nextPlayer = this.CreateChild<AudioStreamPlayer>( "Player " + name ); var nextPlayer = this.CreateChild<AudioStreamPlayer>( "Player " + name );
nextPlayer.VolumeLinear = 0f; nextPlayer.VolumeLinear = 0f;
nextPlayer.Stream = nextMusic.audio; nextPlayer.Stream = nextMusic.audio;

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori; namespace Rokojori;
[Tool] [Tool]
@ -19,7 +20,8 @@ public partial class MusicData: Resource
public override string ToString() public override string ToString()
{ {
var prefix = pitchSemitonesOffset == 0 ? "+/-" : pitchSemitonesOffset > 0 ? "+" : ""; var prefix = pitchSemitonesOffset == 0 ? "+/-" : pitchSemitonesOffset > 0 ? "+" : "";
return "MusicData: " + (100 * volume)._FF() + "% (" + prefix + pitchSemitonesOffset + " st) " + audio.ResourcePath; var volumeString = ( int) ( 100 * volume);
return "MusicData: " + volumeString+ "% (" + prefix + pitchSemitonesOffset + " st) " + audio.ResourcePath;
} }
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass] [Tool][GlobalClass]

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori; namespace Rokojori;
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -31,7 +32,7 @@ namespace Rokojori
public bool cacheEndPositionOnStart = true; public bool cacheEndPositionOnStart = true;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
@ -41,7 +42,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -57,7 +58,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( target ) ) if ( ! GodotObject.IsInstanceValid( target ) )
@ -80,7 +81,7 @@ namespace Rokojori
target.VolumeDb = lerpedVolume; target.VolumeDb = lerpedVolume;
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass] [Tool][GlobalClass]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -35,7 +36,7 @@ namespace Rokojori
{ {
_isCoolingDown = coolDownDuration != null; _isCoolingDown = coolDownDuration != null;
var te = TimeLineManager.ScheduleEventIn( var te = TimelineManager.ScheduleEventIn(
coolDownDuration.timeLine, coolDownDuration.timeLine,
coolDownDuration.GetDurationInSeconds(), coolDownDuration.GetDurationInSeconds(),
ev => ev =>

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori; namespace Rokojori;
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]
@ -21,7 +22,7 @@ namespace Rokojori
return; return;
} }
iterationIndex = MathX.Repeat( iterationIndex, num ); iterationIndex = MathX.RepeatInt( iterationIndex, num );
Action.TriggerSafe( this.GetNthDirectChild<Action>( iterationIndex ) ); Action.TriggerSafe( this.GetNthDirectChild<Action>( iterationIndex ) );

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass] [Tool][GlobalClass]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")]
@ -20,7 +21,7 @@ namespace Rokojori
void SetNodeState() void SetNodeState()
{ {
NodeState.Configure( target, configuration ); NodeState.ConfigureWith( target, configuration );
} }
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SetNodeState.svg")]
@ -60,7 +61,7 @@ namespace Rokojori
var enbled = state == PhysicsState.Physics_Enabled; var enbled = state == PhysicsState.Physics_Enabled;
var trillian = enbled ? Trillean.True : Trillean.False; var trillian = enbled ? Trillean.True : Trillean.False;
NodeState.Configure( physicsBody, NodeState.PartialConfigure( physicsBody,
trillian, trillian, trillian, trillian, trillian, trillian,
trillian, Trillean.Any, false, ProcessModeEnum.Inherit ); trillian, Trillean.Any, false, ProcessModeEnum.Inherit );

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]
@ -36,8 +37,8 @@ namespace Rokojori
var startPosition = target.GlobalPosition; var startPosition = target.GlobalPosition;
_currentSpanAnimationID = TimeLineManager.ScheduleSpanIn( duration.timeLine, 0, duration.GetDurationInSeconds(), _currentSpanAnimationID = TimelineManager.ScheduleSpanIn( duration.timeLine, 0, duration.GetDurationInSeconds(),
( TimeLineSpan span, TimeLineSpanUpdateType type )=> ( TimelineSpan span, TimelineSpanUpdateType type )=>
{ {
if ( span.id != _currentSpanAnimationID ) if ( span.id != _currentSpanAnimationID )
{ {
@ -52,7 +53,7 @@ namespace Rokojori
target.GlobalPosition = startPosition.Lerp( goal.GlobalPosition, span.phase );; target.GlobalPosition = startPosition.Lerp( goal.GlobalPosition, span.phase );;
if ( TimeLineSpanUpdateType.End == type ) if ( TimelineSpanUpdateType.End == type )
{ {
AnimationManager.EndAnimation( this, target, AnimationMember.Position ); AnimationManager.EndAnimation( this, target, AnimationMember.Position );

View File

@ -1,6 +1,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using Godot; using Godot;
using Rokojori; using Rokojori;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -93,7 +94,7 @@ namespace Rokojori
return; return;
} }
var tm = Unique<TimeLineManager>.Get(); var tm = Unique<TimelineManager>.Get();
if ( tm == null ) if ( tm == null )
{ {
@ -129,7 +130,7 @@ namespace Rokojori
return; return;
} }
var tm = Unique<TimeLineManager>.Get(); var tm = Unique<TimelineManager>.Get();
if ( tm == null ) if ( tm == null )
{ {

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/PlayParticles.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/PlayParticles.svg")]
@ -17,7 +18,7 @@ namespace Rokojori
public float godotFinishedReporingBugOffset = 0.2f; public float godotFinishedReporingBugOffset = 0.2f;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
List<GpuParticles3D> _pool = new List<GpuParticles3D>(); List<GpuParticles3D> _pool = new List<GpuParticles3D>();
List<bool> _emitting = new List<bool>(); List<bool> _emitting = new List<bool>();
@ -60,7 +61,7 @@ namespace Rokojori
return; return;
} }
TimeLineManager.ScheduleEventIn( TimelineManager.ScheduleEventIn(
timeLine, timeLine,
godotFinishedReporingBugOffset, godotFinishedReporingBugOffset,
t => _emitting[ index ] = false t => _emitting[ index ] = false

View File

@ -2,8 +2,10 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[RokojoriActionCoreExport]
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/PlaySound.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/PlaySound.svg")]
public partial class PlaySound:Action public partial class PlaySound:Action
{ {
@ -48,7 +50,7 @@ namespace Rokojori
public bool generatePools = true; public bool generatePools = true;
List<AudioStreamPlayer3D> players = new List<AudioStreamPlayer3D>(); List<AudioStreamPlayer3D> players = [];
AudioStreamPlayer3D _cached = null; AudioStreamPlayer3D _cached = null;
@ -126,7 +128,7 @@ namespace Rokojori
var length = player.Stream.GetLength(); var length = player.Stream.GetLength();
var numOffsets = Mathf.FloorToInt( length / durationPerSound.GetDurationInSeconds() ); var numOffsets = Mathf.FloorToInt( length / durationPerSound.GetDurationInSeconds() );
var randomIndex = random.IntegerExclusive( numOffsets ); var randomIndex = random.IntegerExclusivePositive( numOffsets );
offset = randomIndex * durationPerSound.GetDurationInSeconds(); offset = randomIndex * durationPerSound.GetDurationInSeconds();
// this.LogInfo( "Offset", numOffsets, randomIndex, offset ); // this.LogInfo( "Offset", numOffsets, randomIndex, offset );
@ -143,12 +145,12 @@ namespace Rokojori
if ( audioManager != null && randomizePlaybackPosition ) if ( audioManager != null && randomizePlaybackPosition )
{ {
var tl = TimeLineManager.Ensure( durationPerSound.timeLine ); var tl = TimelineManager.Ensure( durationPerSound.timeLine );
var start = tl.position; var start = tl.position;
var stopDuration = ( durationPerSound.GetDurationInSeconds() - audioManager.data.bufferCutDuration * cutBufferLengths ) / player.PitchScale; var stopDuration = ( durationPerSound.GetDurationInSeconds() - audioManager.data.bufferCutDuration * cutBufferLengths ) / player.PitchScale;
TimeLineManager.ScheduleSpanIn( durationPerSound.timeLine, 0, stopDuration, TimelineManager.ScheduleSpanIn( durationPerSound.timeLine, 0, stopDuration,
( span, type )=> ( span, type )=>
{ {
var timeNow = tl.position; var timeNow = tl.position;
@ -156,7 +158,7 @@ namespace Rokojori
var phase = span.phase; var phase = span.phase;
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
player.Stop(); player.Stop();
player.Playing = false; player.Playing = false;

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass, Tool ] [GlobalClass, Tool ]

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -33,7 +34,7 @@ namespace Rokojori
public bool cacheEndVolumeOnStart = true; public bool cacheEndVolumeOnStart = true;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
public void OnAnimatorStart(){} public void OnAnimatorStart(){}
@ -69,7 +70,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -95,7 +96,7 @@ namespace Rokojori
AnimationManager.StartAnimation( this, target, AnimationMember.VolumeDB ); AnimationManager.StartAnimation( this, target, AnimationMember.VolumeDB );
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! AnimationManager.IsAnimating( this, target, AnimationMember.VolumeDB ) ) if ( ! AnimationManager.IsAnimating( this, target, AnimationMember.VolumeDB ) )
@ -119,7 +120,7 @@ namespace Rokojori
// this.LogInfo( "Volume", lerpedVolume ); // this.LogInfo( "Volume", lerpedVolume );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );

View File

@ -2,22 +2,23 @@
using Godot; using Godot;
namespace Rokojori using Rokojori.Extensions;
namespace Rokojori;
[RokojoriActionCoreExport]
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ]
public partial class OnPhysicsProcess : Node
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ] /** <summary for="field actions">Actions to execute</summary>*/
public partial class OnPhysicsProcess : Node [Export]
public Action[] actions = new Action[ 0 ];
/** <summary for="field triggerDirectChildren">Whether to execute Action child nodes</summary>*/
[Export]
public bool triggerDirectChildren = true;
public override void _PhysicsProcess( double delta )
{ {
/** <summary for="field actions">Actions to execute</summary>*/ Action.TriggerAllActions( actions, this, triggerDirectChildren );
[Export]
public Action[] actions = new Action[ 0 ];
/** <summary for="field triggerDirectChildren">Whether to execute Action child nodes</summary>*/
[Export]
public bool triggerDirectChildren = true;
public override void _PhysicsProcess( double delta )
{
Action.TriggerAllActions( actions, this, triggerDirectChildren );
}
} }
} }

View File

@ -2,30 +2,31 @@
using Godot; using Godot;
namespace Rokojori using Rokojori.Extensions;
namespace Rokojori;
[RokojoriActionCoreExport]
[GlobalClass, Tool, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ]
public partial class OnProcess : Node
{ {
[GlobalClass, Tool, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ] /** <summary for="field actions">Actions to execute</summary>*/
public partial class OnProcess : Node [Export]
public Action[] actions = new Action[ 0 ];
/** <summary for="field triggerDirectChildren">Whether to execute Action child nodes</summary>*/
[Export]
public bool triggerDirectChildren = true;
[Export]
public bool executeInEditor = false;
public override void _Process( double delta )
{ {
/** <summary for="field actions">Actions to execute</summary>*/ if ( Engine.IsEditorHint() && ! executeInEditor )
[Export]
public Action[] actions = new Action[ 0 ];
/** <summary for="field triggerDirectChildren">Whether to execute Action child nodes</summary>*/
[Export]
public bool triggerDirectChildren = true;
[Export]
public bool executeInEditor = false;
public override void _Process( double delta )
{ {
if ( Engine.IsEditorHint() && ! executeInEditor ) return;
{
return;
}
Action.TriggerAllActions( actions, this, triggerDirectChildren );
} }
Action.TriggerAllActions( actions, this, triggerDirectChildren );
} }
} }

View File

@ -2,30 +2,38 @@
using Godot; using Godot;
namespace Rokojori using Rokojori.Extensions;
namespace Rokojori;
[RokojoriActionCoreExport]
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ]
public partial class OnReady : Node
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ] /** <summary for="field actions">Actions to execute</summary>*/
public partial class OnReady : Node [Export]
public Action[] actions = new Action[ 0 ];
/** <summary for="field triggerDirectChildren">Whether to execute Action child nodes</summary>*/
[Export]
public bool triggerDirectChildren = true;
[Export]
public bool triggerInsideEditor = false;
public Action.ActionTriggerMode additionalMode = Action.ActionTriggerMode.Always;
public Trillean someTrillean = Trillean.False;
public override void _Ready()
{ {
/** <summary for="field actions">Actions to execute</summary>*/ additionalMode = Action.ActionTriggerMode.Only_When_Processing_In_Hierarchy;
[Export]
public Action[] actions = new Action[ 0 ];
/** <summary for="field triggerDirectChildren">Whether to execute Action child nodes</summary>*/ var nas = Trillean.Any;
[Export]
public bool triggerDirectChildren = true;
[Export] if ( Engine.IsEditorHint() && ! triggerInsideEditor )
public bool triggerInsideEditor = false;
public override void _Ready()
{ {
if ( Engine.IsEditorHint() && ! triggerInsideEditor ) return;
{
return;
}
Action.TriggerAllActions( actions, this, triggerDirectChildren );
} }
Action.TriggerAllActions( actions, this, triggerDirectChildren );
} }
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -66,10 +67,10 @@ namespace Rokojori
if ( _eventID != -1 ) if ( _eventID != -1 )
{ {
TimeLineManager.RemoveEvent( timeLine, _eventID ); TimelineManager.RemoveEvent( timeLine, _eventID );
} }
var tle = TimeLineManager.ScheduleLoopEvent( timeLine, duration, offset, tle => Action.TriggerSafe( action ) ); var tle = TimelineManager.ScheduleLoopEvent( timeLine, duration, offset, tle => Action.TriggerSafe( action ) );
_eventID = tle.id; _eventID = tle.id;
} }
@ -83,7 +84,7 @@ namespace Rokojori
} }
TimeLineManager.RemoveEvent( timeLine, _eventID ); TimelineManager.RemoveEvent( timeLine, _eventID );
_eventID = -1; _eventID = -1;

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Godot.Collections; using Godot.Collections;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[GlobalClass,Tool] [GlobalClass,Tool]

View File

@ -2,15 +2,16 @@
using Godot; using Godot;
namespace Rokojori using Rokojori.Extensions;
namespace Rokojori;
[RokojoriActionCoreExport]
[Tool][GlobalClass]
public partial class QuitApp : Action
{ {
[Tool][GlobalClass] protected override void _OnTrigger()
public partial class QuitApp : Action
{ {
protected override void _OnTrigger() this.LogInfo( "Quitting" );
{ GetTree().Quit();
this.LogInfo( "Quitting" );
GetTree().Quit();
}
} }
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass] [Tool][GlobalClass]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Threading.Tasks; using System.Threading.Tasks;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/RemoveNode.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/RemoveNode.svg")]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Parallel.svg") ] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Parallel.svg") ]
@ -30,31 +31,36 @@ namespace Rokojori
public bool errorsCountAsFinished = false; public bool errorsCountAsFinished = false;
Dictionary<int,int> numFinished = new Dictionary<int, int>();
Dictionary<int,bool> running = new Dictionary<int, bool>();
protected override void _OnTrigger() protected override void _OnTrigger()
{ {
var actions = new List<Action>( this.actions ); var allActions = new List<Action>( this.actions );
if ( triggerDirectChildren ) if ( triggerDirectChildren )
{ {
Nodes.ForEachDirectChild<Action>( this, a => actions.Add( a ) ); Nodes.ForEachDirectChild<Action>( this, a => allActions.Add( a ) );
} }
var sequenceActions = Lists.FilterAndMap( actions, ( a, i ) => a is SequenceAction, a => (SequenceAction) a ); var sequenceActions = ListExtensions.FilterType<Action,SequenceAction>( allActions);
var sequenceID = DispatchStart(); var sequenceID = DispatchStart();
if ( ! ignoreNonSequenceActions && sequenceActions.Count != actions.Count && Mode.First_Finishes_Sequence == mode ) if ( ! ignoreNonSequenceActions && sequenceActions.Count != allActions.Count && Mode.First_Finishes_Sequence == mode )
{ {
actions.ForEach( a => Action.TriggerSafe( a ) ); allActions.ForEach( a => Action.TriggerSafe( a ) );
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
return; return;
} }
numFinished[ sequenceID ] = 0;
running[ sequenceID ] = true;
var numFinished = 0; // var numFinished = 0;
var running = true; // var running = true;
sequenceActions.ForEach( sequenceActions.ForEach(
sa => sa =>
@ -64,27 +70,27 @@ namespace Rokojori
{ {
// this.LogInfo( "Sequence Action finished:", HierarchyName.Of( sa ) ); // this.LogInfo( "Sequence Action finished:", HierarchyName.Of( sa ) );
if ( ! running ) if ( ! running.ContainsKey( sequenceID ) )
{ {
return; return;
} }
if ( fe.success || errorsCountAsFinished ) if ( fe.success || errorsCountAsFinished )
{ {
numFinished ++; numFinished[ sequenceID ] = numFinished[ sequenceID ] + 1;
if ( Mode.First_Finishes_Sequence == mode ) if ( Mode.First_Finishes_Sequence == mode )
{ {
running = false; running.Remove( sequenceID );
// this.LogInfo( "DispatchEnd for First_Finishes_Sequence" ); // this.LogInfo( "DispatchEnd for First_Finishes_Sequence" );
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }
else if ( Mode.Wait_For_All_To_Finish == mode ) else if ( Mode.Wait_For_All_To_Finish == mode )
{ {
if ( numFinished == sequenceActions.Count ) if ( numFinished[ sequenceID ] == sequenceActions.Count )
{ {
running = false; running.Remove( sequenceID );
// this.LogInfo( "DispatchEnd for Wait_For_All_To_Finish" ); // this.LogInfo( "DispatchEnd for Wait_For_All_To_Finish" );
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }
@ -92,7 +98,7 @@ namespace Rokojori
} }
else else
{ {
running = false; running.Remove( sequenceID );
// this.LogInfo( "DispatchCancelled for Wait_For_All_To_Finish" ); // this.LogInfo( "DispatchCancelled for Wait_For_All_To_Finish" );
DispatchCancelled( sequenceID ); DispatchCancelled( sequenceID );
} }
@ -101,7 +107,7 @@ namespace Rokojori
} }
); );
actions.ForEach( a => Action.TriggerSafe( a ) ); allActions.ForEach( a => Action.TriggerSafe( a ) );
} }
} }
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
@ -19,7 +20,7 @@ namespace Rokojori
public float maxRepeatDuration = 60; public float maxRepeatDuration = 60;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
bool stopSignal = false; bool stopSignal = false;
@ -43,7 +44,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
if ( maxNumRepeats <= 0 && ( tl == null || maxRepeatDuration <= 0 ) ) if ( maxNumRepeats <= 0 && ( tl == null || maxRepeatDuration <= 0 ) )
{ {
@ -63,7 +64,7 @@ namespace Rokojori
public class RepeatSequenceRunner public class RepeatSequenceRunner
{ {
public RepeatSequence repeatSequence; public RepeatSequence repeatSequence;
public TimeLine timeLine; public Timeline timeLine;
public int sequenceID; public int sequenceID;
public int maxRepeats = 0; public int maxRepeats = 0;
public int started = 0; public int started = 0;
@ -74,7 +75,7 @@ namespace Rokojori
{ {
this.repeatSequence = repeatSequence; this.repeatSequence = repeatSequence;
this.sequenceID = id; this.sequenceID = id;
timeLine = TimeLineManager.Ensure( repeatSequence.timeLine ); timeLine = TimelineManager.Ensure( repeatSequence.timeLine );
startTime = timeLine.position; startTime = timeLine.position;
endTime = startTime + repeatSequence.maxRepeatDuration; endTime = startTime + repeatSequence.maxRepeatDuration;
maxRepeats = repeatSequence.maxNumRepeats; maxRepeats = repeatSequence.maxNumRepeats;

View File

@ -6,6 +6,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
@ -227,7 +228,7 @@ namespace Rokojori
Nodes.ForEachDirectChild<Action>( this, a => run.actions.Add( a ) ); Nodes.ForEachDirectChild<Action>( this, a => run.actions.Add( a ) );
} }
run.sequencables = Lists.FilterType<Action,SequenceAction>( run.actions ); run.sequencables = ListExtensions.FilterType<Action,SequenceAction>( run.actions );

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
@ -11,12 +12,6 @@ namespace Rokojori
[RokojoriActionCoreExport] [RokojoriActionCoreExport]
public abstract partial class SequenceAction : Action public abstract partial class SequenceAction : Action
{ {
public class FinishedEvent
{
public int id;
public bool success;
}
[ExportGroup("Debugging")] [ExportGroup("Debugging")]
[ExportToolButton("Clear Listeners")] [ExportToolButton("Clear Listeners")]
public Callable clearListeners => Callable.From( public Callable clearListeners => Callable.From(
@ -41,10 +36,13 @@ namespace Rokojori
return _dispatchCounter; return _dispatchCounter;
} }
public readonly EventSlot<SequenceAction.FinishedEvent> onSequenceDone = new EventSlot<SequenceAction.FinishedEvent>(); public readonly EventSlot<SequenceActionFinishedEvent> onSequenceDone = new EventSlot<SequenceActionFinishedEvent>();
public int DispatchStart() public int DispatchStart()
{ {
_dispatchCounter ++; _dispatchCounter ++;
if ( showRunningSequences ) if ( showRunningSequences )
@ -61,7 +59,7 @@ namespace Rokojori
{ {
_running.Remove( id ); _running.Remove( id );
var ev = new SequenceAction.FinishedEvent{ id = id, success = true }; var ev = new SequenceActionFinishedEvent{ id = id, success = true };
onSequenceDone.DispatchEvent( ev ); onSequenceDone.DispatchEvent( ev );
if ( showRunningSequences ) if ( showRunningSequences )
@ -76,7 +74,7 @@ namespace Rokojori
{ {
_running.Remove( id ); _running.Remove( id );
var ev = new SequenceAction.FinishedEvent{ id = id, success = true }; var ev = new SequenceActionFinishedEvent{ id = id, success = true };
onSequenceDone.DispatchEvent( ev ); onSequenceDone.DispatchEvent( ev );
if ( showRunningSequences ) if ( showRunningSequences )
@ -89,14 +87,10 @@ namespace Rokojori
public virtual void CancelAllRunning() public virtual void CancelAllRunning()
{ {
var runningList = _running.ToArray(); foreach ( var r in _running )
{
runningList.ForEach( CancelAction( r );
( id )=> }
{
CancelAction( id );
}
);
} }
public virtual void CancelAction( int id ) public virtual void CancelAction( int id )

View File

@ -0,0 +1,13 @@
using Godot;
using System.Collections.Generic;
using System.Linq;
using Rokojori.Extensions;
namespace Rokojori;
public class SequenceActionFinishedEvent
{
public int id;
public bool success;
}

View File

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

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SequenceActionReference.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/SequenceActionReference.svg")]
@ -35,7 +36,7 @@ namespace Rokojori
var ownID = DispatchStart(); var ownID = DispatchStart();
var referenceID = -1; var referenceID = -1;
System.Action<SequenceAction.FinishedEvent> callback = ( se )=> System.Action<SequenceActionFinishedEvent> callback = ( se )=>
{ {
if ( se.id != referenceID ) if ( se.id != referenceID )
{ {

View File

@ -6,187 +6,187 @@ using System;
using Godot; using Godot;
namespace Rokojori using Rokojori.Extensions;
namespace Rokojori;
public class SequenceRunner
{ {
public class SequenceRunner public Sequence sequence;
public List<Action> actions;
public List<SequenceAction> sequencables;
public int sequencablesIndex = 0;
bool cancelled = false;
bool cancelledSequence = false;
int _runID = -1;
SequenceAction _runningAction;
int _runningActionID = -1;
public void Cancel()
{ {
public Sequence sequence; if ( cancelled || _runningAction == null )
public List<Action> actions;
public List<SequenceAction> sequencables;
public int sequencablesIndex = 0;
bool cancelled = false;
bool cancelledSequence = false;
int _runID = -1;
SequenceAction _runningAction;
int _runningActionID = -1;
public void Cancel()
{ {
if ( cancelled || _runningAction == null ) return;
{ }
return;
}
cancelled = true;
_runningAction.CancelAction( _runningActionID );
}
void CancelRun()
{
if ( cancelledSequence )
{
return;
}
if ( ! cancelled )
{
cancelled = true; cancelled = true;
_runningAction.CancelAction( _runningActionID );
} }
void CancelRun() cancelledSequence = true;
sequence.DispatchCancelled( _runID );
sequence.ClearRun( this );
}
public void ProcessNext()
{
// RJLog.Log( "@" + sequence.Name, "Index:", sequencablesIndex );
if ( sequencablesIndex == 0 )
{ {
if ( cancelledSequence ) _runID = sequence.DispatchStart();
if ( sequencables.Count == 0 )
{ {
return; actions.ForEach( a => Action.TriggerSafe( a ) );
}
if ( ! cancelled )
{
cancelled = true;
}
cancelledSequence = true;
sequence.DispatchCancelled( _runID );
sequence.ClearRun( this );
}
public void ProcessNext()
{
// RJLog.Log( "@" + sequence.Name, "Index:", sequencablesIndex );
if ( sequencablesIndex == 0 )
{
_runID = sequence.DispatchStart();
if ( sequencables.Count == 0 )
{
actions.ForEach( a => Action.TriggerSafe( a ) );
sequence.DispatchEnd( _runID );
sequence.ClearRun( this );
return;
}
}
if ( sequencablesIndex >= sequencables.Count )
{
TriggerAllAfter( sequencables[ sequencables.Count -1 ] );
sequence.DispatchEnd( _runID ); sequence.DispatchEnd( _runID );
sequence.ClearRun( this ); sequence.ClearRun( this );
return; return;
} }
}
if ( cancelled ) if ( sequencablesIndex >= sequencables.Count )
{
TriggerAllAfter( sequencables[ sequencables.Count -1 ] );
sequence.DispatchEnd( _runID );
sequence.ClearRun( this );
return;
}
if ( cancelled )
{
CancelRun();
return;
}
var sequenceAction = sequencables[ sequencablesIndex ];
StartAction( sequenceAction );
}
Dictionary<SequenceAction,System.Action<SequenceActionFinishedEvent>> callbacks =
new Dictionary<SequenceAction, System.Action<SequenceActionFinishedEvent>>();
void StartAction( SequenceAction action )
{
var capturedAction = action;
System.Action<SequenceActionFinishedEvent> callback =
( SequenceActionFinishedEvent ev ) =>
{
//RJLog.Log( "On Done", id, success );
if ( ev.id != _runningActionID )
{
// RJLog.Error( "Invalid ID", id, "!=", _runningActionID );
return;
}
_runningActionID = -1;
if ( ev.success )
{
sequencablesIndex ++;
ProcessNext();
}
else
{
sequence.DispatchCancelled( _runID );
sequence.ClearRun( this );
}
var callbackReference = callbacks[ capturedAction ];
capturedAction.onSequenceDone.RemoveAction( callbackReference );
callbacks.Remove( capturedAction );
};
RunNext( action, callback );
/*
_runningAction = action;
callbacks[ _runningAction ] = callback;
_runningAction.OnSequenceDone += callback;
TriggerAllBefore( _runningAction );
Action.Trigger( _runningAction );
_runningActionID = _runningAction.GetLastSequenceActionID();
*/
}
void RunNext( SequenceAction action, System.Action<SequenceActionFinishedEvent> callback )
{
_runningAction = action;
callbacks[ _runningAction ] = callback;
_runningAction.onSequenceDone.AddAction( callback );
TriggerAllBefore( _runningAction );
Action.TriggerSafe( _runningAction );
_runningActionID = _runningAction.GetLastSequenceActionID();
}
void TriggerAllBefore( SequenceAction action )
{
var actionIndex = actions.IndexOf( action );
for ( int i = actionIndex - 1; i >= 0; i -- )
{
if ( TypeTools.IsOfType<SequenceAction>( actions[ i ] ) )
{ {
CancelRun();
return; return;
} }
// RJLog.Log( _runID, "Triggering Actions Before", i, actions[ i ].Name, HierarchyName.Of( action ) );
var sequenceAction = sequencables[ sequencablesIndex ]; Action.TriggerSafe( actions[ i ] );
StartAction( sequenceAction );
} }
Dictionary<SequenceAction,System.Action<SequenceAction.FinishedEvent>> callbacks =
new Dictionary<SequenceAction, System.Action<SequenceAction.FinishedEvent>>();
void StartAction( SequenceAction action )
{
var capturedAction = action;
System.Action<SequenceAction.FinishedEvent> callback =
( SequenceAction.FinishedEvent ev ) =>
{
//RJLog.Log( "On Done", id, success );
if ( ev.id != _runningActionID )
{
// RJLog.Error( "Invalid ID", id, "!=", _runningActionID );
return;
}
_runningActionID = -1;
if ( ev.success )
{
sequencablesIndex ++;
ProcessNext();
}
else
{
sequence.DispatchCancelled( _runID );
sequence.ClearRun( this );
}
var callbackReference = callbacks[ capturedAction ];
capturedAction.onSequenceDone.RemoveAction( callbackReference );
callbacks.Remove( capturedAction );
};
RunNext( action, callback );
/*
_runningAction = action;
callbacks[ _runningAction ] = callback;
_runningAction.OnSequenceDone += callback;
TriggerAllBefore( _runningAction );
Action.Trigger( _runningAction );
_runningActionID = _runningAction.GetLastSequenceActionID();
*/
}
void RunNext( SequenceAction action, System.Action<SequenceAction.FinishedEvent> callback )
{
_runningAction = action;
callbacks[ _runningAction ] = callback;
_runningAction.onSequenceDone.AddAction( callback );
TriggerAllBefore( _runningAction );
Action.TriggerSafe( _runningAction );
_runningActionID = _runningAction.GetLastSequenceActionID();
}
void TriggerAllBefore( SequenceAction action )
{
var actionIndex = actions.IndexOf( action );
for ( int i = actionIndex - 1; i >= 0; i -- )
{
if ( typeof( SequenceAction ).IsAssignableFrom( actions[ i ].GetType() ) )
{
return;
}
// RJLog.Log( _runID, "Triggering Actions Before", i, actions[ i ].Name, HierarchyName.Of( action ) );
Action.TriggerSafe( actions[ i ] );
}
}
void TriggerAllAfter( SequenceAction action )
{
var actionIndex = actions.IndexOf( action );
for ( int i = actionIndex + 1; i < actions.Count; i ++ )
{
if ( typeof( SequenceAction ).IsAssignableFrom( actions[ i ].GetType() ) )
{
return;
}
// RJLog.Log( "Triggering Action", actions[ i ].Name );
Action.TriggerSafe( actions[ i ] );
}
}
} }
void TriggerAllAfter( SequenceAction action )
{
var actionIndex = actions.IndexOf( action );
for ( int i = actionIndex + 1; i < actions.Count; i ++ )
{
if ( TypeTools.IsOfType<SequenceAction>( actions[ i ] ) )
{
return;
}
// RJLog.Log( "Triggering Action", actions[ i ].Name );
Action.TriggerSafe( actions[ i ] );
}
}
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Parallel.svg") ] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Parallel.svg") ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using System.Linq;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass ] [Tool][GlobalClass ]
@ -38,7 +39,7 @@ namespace Rokojori
} }
var configuration = soloNode == n ? soloConfig : muteConfig; var configuration = soloNode == n ? soloConfig : muteConfig;
NodeState.Configure( n, configuration ); NodeState.ConfigureWith( n, configuration );
} }
); );
} }

View File

@ -2,8 +2,10 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[RokojoriActionCoreExport]
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Delay.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Delay.svg")]
public partial class Delay : SequenceAction public partial class Delay : SequenceAction
{ {
@ -11,7 +13,7 @@ namespace Rokojori
public float duration; public float duration;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
@ -22,13 +24,13 @@ namespace Rokojori
if ( Engine.IsEditorHint() ) if ( Engine.IsEditorHint() )
{ {
TimeLineManager.ScheduleSpanIn( timeLine, 0, duration , TimelineManager.ScheduleSpanIn(timeLine, 0, duration,
( span, type )=> ( span, type )=>
{ {
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
this.LogInfo( "time:", Time.GetTicksMsec() / 1000f ); this.LogInfo( "time:", Godot.Time.GetTicksMsec() / 1000f );
} }
}, },
this this
@ -36,7 +38,7 @@ namespace Rokojori
} }
else else
{ {
var eventID = TimeLineManager.ScheduleEventIn( timeLine, duration, var eventID = TimelineManager.ScheduleEventIn( timeLine, duration,
( tle ) => ( tle ) =>
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using System.Threading.Tasks; using System.Threading.Tasks;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Delay.svg")] [Tool][GlobalClass, Icon("res://addons/rokojori_action_library/Icons/Delay.svg")]
@ -18,15 +19,15 @@ namespace Rokojori
if ( Engine.IsEditorHint() ) if ( Engine.IsEditorHint() )
{ {
var timeLine = TimeLineManager.Ensure( null ); var timeLine = TimelineManager.Ensure( null );
TimeLineManager.ScheduleSpanIn( timeLine, 0, numFrames * 1f/60f , TimelineManager.ScheduleSpanIn( timeLine, 0, numFrames * 1f/60f ,
( span, type )=> ( span, type )=>
{ {
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
this.LogInfo( "time:", Time.GetTicksMsec() / 1000f ); this.LogInfo( "time:", Godot.Time.GetTicksMsec() / 1000f );
} }
}, },
this this

View File

@ -3,6 +3,7 @@ using Godot;
using System.Collections.Generic; using System.Collections.Generic;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -16,7 +17,7 @@ namespace Rokojori
public float growDuration = 0.0f; public float growDuration = 0.0f;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
[Export] [Export]
public Action[] actions = new Action[ 0 ]; public Action[] actions = new Action[ 0 ];
@ -41,7 +42,7 @@ namespace Rokojori
for ( int i = 0; i < list.Count; i++ ) for ( int i = 0; i < list.Count; i++ )
{ {
TimeLineManager.ScheduleEventIn( timeLine, offset, TimelineManager.ScheduleEventIn( timeLine, offset,
id => id =>
{ {
Action.TriggerSafe( list[ i ] ); Action.TriggerSafe( list[ i ] );

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -16,7 +17,7 @@ namespace Rokojori
public int numRepeats; public int numRepeats;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
[Export] [Export]
public Action action; public Action action;
@ -32,7 +33,7 @@ namespace Rokojori
{ {
for ( int i = 0; i < numRepeats; i++ ) for ( int i = 0; i < numRepeats; i++ )
{ {
TimeLineManager.ScheduleEventIn( timeLine, i * duration, TimelineManager.ScheduleEventIn( timeLine, i * duration,
id => id =>
{ {
if ( i == 0 ) if ( i == 0 )

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -10,7 +11,7 @@ namespace Rokojori
public partial class TweenTimeLineSpeed:SequenceAction public partial class TweenTimeLineSpeed:SequenceAction
{ {
[Export] [Export]
public TimeLine targetTimeLine; public Timeline targetTimeLine;
[Export] [Export]
public float timeLineSpeed; public float timeLineSpeed;
@ -22,7 +23,7 @@ namespace Rokojori
public bool cacheSpeedOnStart = true; public bool cacheSpeedOnStart = true;
[Export] [Export]
public TimeLine tweenTimeLine; public Timeline tweenTimeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
{ {
@ -31,7 +32,7 @@ namespace Rokojori
return; return;
} }
var tl = tweenTimeLine == null ? TimeLineManager.Get().realtimeTimeline : tweenTimeLine; var tl = tweenTimeLine == null ? TimelineManager.Get().realtimeTimeline : tweenTimeLine;
var start = targetTimeLine.position; var start = targetTimeLine.position;
@ -48,7 +49,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
var timeNow = tl.position; var timeNow = tl.position;
@ -65,7 +66,7 @@ namespace Rokojori
targetTimeLine.runner.speed = lerpedSpeed; targetTimeLine.runner.speed = lerpedSpeed;
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -40,7 +41,7 @@ namespace Rokojori
_actionID = _id; _actionID = _id;
_animationID = TimeLineManager.ScheduleSpanWith( duration, _animationID = TimelineManager.ScheduleSpanWith( duration,
( s, t ) => ( s, t ) =>
{ {
if ( _animationID != s.id ) if ( _animationID != s.id )
@ -53,7 +54,7 @@ namespace Rokojori
target.Set( intNumber + "" ); target.Set( intNumber + "" );
if ( TimeLineSpanUpdateType.End == t ) if ( TimelineSpanUpdateType.End == t )
{ {
target.Set( endValue + "" ); target.Set( endValue + "" );
DispatchEnd( _id ); DispatchEnd( _id );

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -2,6 +2,7 @@
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -83,7 +84,7 @@ namespace Rokojori
this.LogInfo( "Start Value Float Tween", HierarchyName.OfAny( target ), target.GetType().Name, targetMemberPath, ">>", startValue ); this.LogInfo( "Start Value Float Tween", HierarchyName.OfAny( target ), target.GetType().Name, targetMemberPath, ">>", startValue );
_timeID = TimeLineManager.ScheduleSpanWith( duration, _timeID = TimelineManager.ScheduleSpanWith( duration,
( span, type )=> ( span, type )=>
{ {
@ -113,7 +114,7 @@ namespace Rokojori
// target._Set( targetMember, value ); // target._Set( targetMember, value );
SetTargetValue( target, targetMemberPath, value ); SetTargetValue( target, targetMemberPath, value );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
// this.LogInfo( "End Float Tween", endValue ); // this.LogInfo( "End Float Tween", endValue );

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -67,7 +68,7 @@ namespace Rokojori
AnimationManager.StartAnimation( this, compositorVFX, "driverValue" ); AnimationManager.StartAnimation( this, compositorVFX, "driverValue" );
_timeID = TimeLineManager.ScheduleSpanWith( duration, _timeID = TimelineManager.ScheduleSpanWith( duration,
( span, type )=> ( span, type )=>
{ {
@ -93,7 +94,7 @@ namespace Rokojori
compositorVFX.driverValue = value; compositorVFX.driverValue = value;
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
compositorVFX.driverValue = value; compositorVFX.driverValue = value;
AnimationManager.EndAnimation( this, compositorVFX, "driverValue" ); AnimationManager.EndAnimation( this, compositorVFX, "driverValue" );

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -120,7 +121,7 @@ namespace Rokojori
this.LogInfo( "Start Value Float Tween", HierarchyName.OfAny( target ), target.GetType().Name, targetMemberPath, ">>", startValue ); this.LogInfo( "Start Value Float Tween", HierarchyName.OfAny( target ), target.GetType().Name, targetMemberPath, ">>", startValue );
_timeID = TimeLineManager.ScheduleSpanWith( duration, _timeID = TimelineManager.ScheduleSpanWith( duration,
( span, type )=> ( span, type )=>
{ {
@ -150,7 +151,7 @@ namespace Rokojori
// target._Set( targetMember, value ); // target._Set( targetMember, value );
SetTargetValue( target, targetMemberPath, value ); SetTargetValue( target, targetMemberPath, value );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
// this.LogInfo( "End Float Tween", endValue ); // this.LogInfo( "End Float Tween", endValue );

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -109,7 +110,7 @@ namespace Rokojori
// this.LogInfo( "Get Float Tween", startValue ); // this.LogInfo( "Get Float Tween", startValue );
_timeID = TimeLineManager.ScheduleSpanWith( duration, _timeID = TimelineManager.ScheduleSpanWith( duration,
( span, type )=> ( span, type )=>
{ {
@ -138,7 +139,7 @@ namespace Rokojori
propertyName.Set( material, value ); propertyName.Set( material, value );
// ReflectionHelper.SetValue( material, propertyName , value ); // ReflectionHelper.SetValue( material, propertyName , value );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
// this.LogInfo( "End Float Tween", endValue ); // this.LogInfo( "End Float Tween", endValue );

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -19,7 +20,7 @@ namespace Rokojori
public TweenType tweenType = new TweenTimeCurve(); public TweenType tweenType = new TweenTimeCurve();
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
@ -34,7 +35,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -51,7 +52,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( light3D ) ) if ( ! GodotObject.IsInstanceValid( light3D ) )
@ -69,7 +70,7 @@ namespace Rokojori
lerpData.CopyTo( light3D ); lerpData.CopyTo( light3D );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -23,7 +24,7 @@ namespace Rokojori
public TweenType tweenType = new TweenTimeCurve(); public TweenType tweenType = new TweenTimeCurve();
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
ColorProperty[] colors = []; ColorProperty[] colors = [];
@ -90,7 +91,7 @@ namespace Rokojori
SetAssignedMaterial( fromMaterial ); SetAssignedMaterial( fromMaterial );
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -136,7 +137,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
var timeNow = tl.position; var timeNow = tl.position;
@ -167,7 +168,7 @@ namespace Rokojori
elementIndex ++; elementIndex ++;
} }
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
foreach ( var c in colors ) foreach ( var c in colors )
{ {

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -19,7 +20,7 @@ namespace Rokojori
public TweenType tweenType = new TweenTimeCurve(); public TweenType tweenType = new TweenTimeCurve();
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
@ -34,7 +35,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -51,7 +52,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( particles3D ) ) if ( ! GodotObject.IsInstanceValid( particles3D ) )
@ -69,7 +70,7 @@ namespace Rokojori
lerpData.CopyTo( particles3D ); lerpData.CopyTo( particles3D );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -2,6 +2,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -39,7 +40,7 @@ namespace Rokojori
public bool cacheEndPositionOnStart = true; public bool cacheEndPositionOnStart = true;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
Vector3 GetToPosition() Vector3 GetToPosition()
@ -63,7 +64,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -79,7 +80,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( target ) ) if ( ! GodotObject.IsInstanceValid( target ) )
@ -109,7 +110,7 @@ namespace Rokojori
target.Position = lerpedPosition; target.Position = lerpedPosition;
} }
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -22,7 +23,7 @@ namespace Rokojori
public bool cacheEndPositionOnStart = true; public bool cacheEndPositionOnStart = true;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
@ -32,7 +33,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -48,7 +49,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( activeVolume ) ) if ( ! GodotObject.IsInstanceValid( activeVolume ) )
@ -71,7 +72,7 @@ namespace Rokojori
activeVolume.weight = lerpedWeight; activeVolume.weight = lerpedWeight;
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -3,6 +3,7 @@ using System;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -25,7 +26,7 @@ namespace Rokojori
public bool cacheEndPositionOnStart = true; public bool cacheEndPositionOnStart = true;
[Export] [Export]
public TimeLine timeLine; public Timeline timeLine;
protected override void _OnTrigger() protected override void _OnTrigger()
@ -35,7 +36,7 @@ namespace Rokojori
return; return;
} }
var tl = TimeLineManager.Ensure( timeLine ); var tl = TimelineManager.Ensure( timeLine );
var start = tl.position; var start = tl.position;
@ -51,7 +52,7 @@ namespace Rokojori
tweenType = TweenTimeCurve.defaultCurve; tweenType = TweenTimeCurve.defaultCurve;
} }
TimeLineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(), TimelineManager.ScheduleSpanIn( tl, 0, tweenType.GetTweenDuration(),
( span, type )=> ( span, type )=>
{ {
if ( ! GodotObject.IsInstanceValid( target ) ) if ( ! GodotObject.IsInstanceValid( target ) )
@ -74,7 +75,7 @@ namespace Rokojori
target.Scale = lerpedScale; target.Scale = lerpedScale;
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
DispatchEnd( sequenceID ); DispatchEnd( sequenceID );
} }

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -57,9 +58,9 @@ namespace Rokojori
random = random == null ? GodotRandom.Get() : random; random = random == null ? GodotRandom.Get() : random;
return new Vector3( return new Vector3(
random.Polar() * durationRandomRange, random.Polar1() * durationRandomRange,
random.Polar() * delayRandomRange, random.Polar1() * delayRandomRange,
random.Polar() * scaleRandomRange random.Polar1() * scaleRandomRange
); );
} }
@ -72,7 +73,7 @@ namespace Rokojori
return curve.Sample( phase ) * ( scaleY + scaleOffset ); return curve.Sample( phase ) * ( scaleY + scaleOffset );
} }
public float Sample( float time, Vector3 randomization ) public float SampleRandomized( float time, Vector3 randomization )
{ {
return Sample( time, randomization.X, randomization.Y, randomization.Z ); return Sample( time, randomization.X, randomization.Y, randomization.Z );
} }

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -64,9 +65,9 @@ namespace Rokojori
random = random == null ? GodotRandom.Get() : random; random = random == null ? GodotRandom.Get() : random;
return new Vector3( return new Vector3(
random.Polar() * durationRandomRange, random.Polar1() * durationRandomRange,
random.Polar() * delayRandomRange, random.Polar1() * delayRandomRange,
random.Polar() * scaleAllRandomRange random.Polar1() * scaleAllRandomRange
); );
} }

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
public interface Animator public interface Animator

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
public interface IFloatDriver public interface IFloatDriver

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -4,6 +4,7 @@ using System.Text.RegularExpressions;
using System.Text; using System.Text;
using Godot; using Godot;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]

View File

@ -5,6 +5,7 @@ using System.Text;
using Godot; using Godot;
using System.Linq; using System.Linq;
using Rokojori.Extensions;
namespace Rokojori namespace Rokojori
{ {
[Tool] [Tool]
@ -127,7 +128,7 @@ namespace Rokojori
allTargets.AddRange( targets ); allTargets.AddRange( targets );
} }
allTargets = Lists.Filter( Lists.From( allTargets ), t => t as GeometryInstance3D != null ); allTargets = ListExtensions.Filter( ListExtensions.From( allTargets ), t => t as GeometryInstance3D != null );
return allTargets; return allTargets;
} }
@ -164,7 +165,7 @@ namespace Rokojori
var flashCurve = flashEffect.flashCurve; var flashCurve = flashEffect.flashCurve;
var color = flashEffect.color.GetHDRColor(); var color = flashEffect.color.GetHDRColor();
var timeline = TimeLineManager.Ensure( flashEffect.timeline ); var timeline = TimelineManager.Ensure( flashEffect.timeline );
runner.randomization = flashCurve.Randomize( random ); runner.randomization = flashCurve.Randomize( random );
var duration = flashCurve.GetRandomizedDuration( runner.randomization ); var duration = flashCurve.GetRandomizedDuration( runner.randomization );
@ -257,8 +258,8 @@ namespace Rokojori
runner.animationID = TimeLineManager.ScheduleSpanIn( timeline, 0, duration, runner.animationID = TimelineManager.ScheduleSpanIn( timeline, 0, duration,
( TimeLineSpan span, TimeLineSpanUpdateType type )=> ( TimelineSpan span, TimelineSpanUpdateType type )=>
{ {
// debugProcessIndicator.Position = debugProcessIndicatorFull * span.phase; // debugProcessIndicator.Position = debugProcessIndicatorFull * span.phase;
@ -325,7 +326,7 @@ namespace Rokojori
); );
if ( type == TimeLineSpanUpdateType.End ) if ( type == TimelineSpanUpdateType.End )
{ {
if ( runner.light != null ) if ( runner.light != null )
{ {

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