diff --git a/Assets/Research/rokojori-base-floor-4x4m.svg b/Assets/Research/rokojori-base-floor-4x4m.svg
index e326526..edb9d58 100644
--- a/Assets/Research/rokojori-base-floor-4x4m.svg
+++ b/Assets/Research/rokojori-base-floor-4x4m.svg
@@ -25,9 +25,9 @@
inkscape:deskcolor="#333333"
inkscape:document-units="px"
showgrid="false"
- inkscape:zoom="0.20890503"
- inkscape:cx="1081.8313"
- inkscape:cy="1830.9756"
+ inkscape:zoom="0.10445251"
+ inkscape:cx="1503.0754"
+ inkscape:cy="2149.3021"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
@@ -37,10 +37,10 @@
id="defs2">
{
@@ -150,9 +151,7 @@ namespace Rokojori
if ( animationID != id )
{
return;
- }
-
-
+ }
var phase = TimeLineManager.GetRangePhase( timeline, start, end );
var value = flashCurve.Sample( phase );
diff --git a/Runtime/Animation/Highlight/Highlight.cs b/Runtime/Animation/Highlight/Highlight.cs
new file mode 100644
index 0000000..78d44cc
--- /dev/null
+++ b/Runtime/Animation/Highlight/Highlight.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using System.Text;
+using Godot;
+
+namespace Rokojori
+{
+
+ [Tool]
+ [GlobalClass]
+ public partial class Highlight:Action
+ {
+ [Export]
+ public HighlightActionType type;
+
+ [Export]
+ public Highlighter highlighter;
+
+ [Export]
+ public Node3D[] targets;
+
+ protected override void _OnTrigger()
+ {
+ highlighter.Highlight( type, targets );
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Animation/Highlight/HighlightEffect.cs b/Runtime/Animation/Highlight/HighlightEffect.cs
new file mode 100644
index 0000000..964682b
--- /dev/null
+++ b/Runtime/Animation/Highlight/HighlightEffect.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using System.Text;
+using Godot;
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass]
+ public partial class HighlightEffect:Resource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Animation/Highlight/HighlightFlag.cs b/Runtime/Animation/Highlight/HighlightFlag.cs
new file mode 100644
index 0000000..68630ea
--- /dev/null
+++ b/Runtime/Animation/Highlight/HighlightFlag.cs
@@ -0,0 +1,17 @@
+
+using System.Diagnostics;
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using Godot;
+
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass]
+ public partial class HighlightFlag:SelectorFlag
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Animation/Highlight/Highlighter.cs b/Runtime/Animation/Highlight/Highlighter.cs
new file mode 100644
index 0000000..43c5c66
--- /dev/null
+++ b/Runtime/Animation/Highlight/Highlighter.cs
@@ -0,0 +1,65 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using System.Text;
+using Godot;
+
+namespace Rokojori
+{
+
+ public enum HighlightActionType
+ {
+ Start,
+ End
+ }
+
+ public class HighlightTargets
+ {
+ public Node3D[] targets;
+ public int activeAnimationTarget = -1;
+
+ public List originalMaterial;
+ public List animationMaterial;
+
+ }
+
+ [Tool]
+ [GlobalClass]
+ public partial class Highlighter:Node
+ {
+ [Export]
+ public HighlightFlag flag;
+
+ [Export]
+ public Material material;
+
+ List _activeTargets = new List();
+
+ public void Highlight( HighlightActionType type, Node3D[] targets )
+ {
+ if ( HighlightActionType.End == type )
+ {
+ var t = _activeTargets.Find( a => a.targets == targets );
+
+ if ( t == null )
+ {
+ return;
+ }
+
+ // Get materials
+ // Animate
+ // Swap Original Material;
+ // Remove Materials;
+
+ }
+ else if ( HighlightActionType.Start == type )
+ {
+ // Create target
+ // Create materials
+ // Swap animation materials
+ // Animate
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Interactions/Interactable.cs b/Runtime/Interactions/Interactable.cs
new file mode 100644
index 0000000..1fc8488
--- /dev/null
+++ b/Runtime/Interactions/Interactable.cs
@@ -0,0 +1,15 @@
+using Godot;
+using System.Collections;
+using System.Collections.Generic;
+using Godot.Collections;
+
+namespace Rokojori
+{
+
+ [GlobalClass]
+ public partial class Interactable:Node3D
+ {
+ [Export]
+ public Action onInteraction;
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Interactions/Interactor.cs b/Runtime/Interactions/Interactor.cs
new file mode 100644
index 0000000..d322f40
--- /dev/null
+++ b/Runtime/Interactions/Interactor.cs
@@ -0,0 +1,35 @@
+using Godot;
+using System.Collections;
+using System.Collections.Generic;
+using Godot.Collections;
+
+namespace Rokojori
+{
+
+ [GlobalClass]
+ public partial class Interactor:Node3D, SensorInputHandler
+ {
+ [Export]
+ public Pointer pointer;
+
+ [Export]
+ public Sensor button;
+
+ public void _OnSensor( SensorEvent se )
+ {
+ if ( pointer == null || pointer.pointable == null )
+ {
+ return;
+ }
+
+ var interactable = Nodes.Find( pointer.pointable.GetParent() );
+
+ if ( interactable == null )
+ {
+ return;
+ }
+
+ Action.Trigger( interactable.onInteraction );
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Interactions/Pointable.cs b/Runtime/Interactions/Pointable.cs
index 7c5c86d..1e9ad9f 100644
--- a/Runtime/Interactions/Pointable.cs
+++ b/Runtime/Interactions/Pointable.cs
@@ -24,6 +24,16 @@ namespace Rokojori
[Export]
public Action onPointerRemoved;
+ [ExportGroup("Highlighting")]
+ [Export]
+ public HighlightFlag highlightFlag;
+
+ [Export]
+ public Node3D[] highlightTargets;
+
+
+
+
List _pointers = new List();
public int numPointing => _pointers.Count;
diff --git a/Runtime/Interactions/Pointer.cs b/Runtime/Interactions/Pointer.cs
index 9ebccd6..ac17d1f 100644
--- a/Runtime/Interactions/Pointer.cs
+++ b/Runtime/Interactions/Pointer.cs
@@ -15,6 +15,9 @@ namespace Rokojori
[Export]
public Caster caster;
+ [Export]
+ public Highlighter[] highlighters;
+
public override void _Process( double delta )
{
if ( caster == null )
@@ -36,7 +39,8 @@ namespace Rokojori
if ( pointable != null )
- {
+ {
+ Highlight( HighlightActionType.End, pointable );
pointable.UpdatePointerState( this, false );
}
@@ -45,7 +49,28 @@ namespace Rokojori
if ( pointable != null )
{
pointable.UpdatePointerState( this, true );
+ Highlight( HighlightActionType.Start, pointable );
}
}
+
+ void Highlight( HighlightActionType type, Pointable p )
+ {
+ if ( p.highlightFlag == null || p.highlightTargets == null || p.highlightTargets.Length == 0 )
+ {
+ return;
+ }
+
+ var highlighterIndex = Arrays.FindIndex( highlighters, ( h )=> h.flag == pointable.highlightFlag );
+
+ if ( highlighterIndex == -1 )
+ {
+ return;
+ }
+
+ var highlighter = highlighters[ highlighterIndex ];
+
+ highlighter.Highlight( type, p.highlightTargets );
+
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Selectors/SelectorFlag.cs b/Runtime/Selectors/SelectorFlag.cs
new file mode 100644
index 0000000..f662537
--- /dev/null
+++ b/Runtime/Selectors/SelectorFlag.cs
@@ -0,0 +1,17 @@
+
+using System.Diagnostics;
+using System.Collections;
+using System.Collections.Generic;
+using System;
+using Godot;
+
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass]
+ public partial class SelectorFlag:Resource
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Sensors/Default-Sensors/PC/Default-Sensors-PC.tres b/Runtime/Sensors/Default-Sensors/PC/Default-Sensors-PC.tres
new file mode 100644
index 0000000..c97d32f
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Default-Sensors-PC.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="SensorGroup" load_steps=11 format=3 uid="uid://c5rvf5v86ybks"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/SensorGroup.cs" id="1_eh8lb"]
+[ext_resource type="Resource" uid="uid://ci42d04kv03yx" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Button Left.tres" id="2_7ixeu"]
+[ext_resource type="Resource" uid="uid://b8u374emi528p" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Button Middle.tres" id="3_03o43"]
+[ext_resource type="Resource" uid="uid://cbqyav0cnehoq" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Button Right.tres" id="4_v0fjp"]
+[ext_resource type="Resource" uid="uid://chwstub7bnlpp" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Down.tres" id="5_dks5x"]
+[ext_resource type="Resource" uid="uid://b52horrdbgyaa" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Up.tres" id="6_l4cqu"]
+[ext_resource type="Resource" uid="uid://c73afpa00tr65" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Forward.tres" id="7_0kr2e"]
+[ext_resource type="Resource" uid="uid://cwoisyc1in6ew" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Back.tres" id="8_iju1w"]
+[ext_resource type="Resource" uid="uid://dfrnedeefk0qk" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Left.tres" id="9_d7wj5"]
+[ext_resource type="Resource" uid="uid://cbsltqawsp4yy" path="res://addons/rokojori_action_library/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Right.tres" id="10_3fc02"]
+
+[resource]
+script = ExtResource("1_eh8lb")
+sensors = [ExtResource("2_7ixeu"), ExtResource("3_03o43"), ExtResource("4_v0fjp"), ExtResource("5_dks5x"), ExtResource("6_l4cqu"), ExtResource("7_0kr2e"), ExtResource("8_iju1w"), ExtResource("9_d7wj5"), ExtResource("10_3fc02")]
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Button Left.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Button Left.tres
new file mode 100644
index 0000000..ccc4e2d
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Button Left.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="MouseButtonSensor" load_steps=2 format=3 uid="uid://ci42d04kv03yx"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/MouseButtonSensor.cs" id="1_45faa"]
+
+[resource]
+script = ExtResource("1_45faa")
+button = 1
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Button Middle.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Button Middle.tres
new file mode 100644
index 0000000..1abc20c
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Button Middle.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="MouseButtonSensor" load_steps=2 format=3 uid="uid://b8u374emi528p"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/MouseButtonSensor.cs" id="1_baalg"]
+
+[resource]
+script = ExtResource("1_baalg")
+button = 3
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Button Right.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Button Right.tres
new file mode 100644
index 0000000..a66cdc2
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Button Right.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="MouseButtonSensor" load_steps=2 format=3 uid="uid://cbqyav0cnehoq"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/MouseButtonSensor.cs" id="1_4clle"]
+
+[resource]
+script = ExtResource("1_4clle")
+button = 2
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Back.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Back.tres
new file mode 100644
index 0000000..4a9c278
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Back.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="KeySensor" load_steps=2 format=3 uid="uid://cwoisyc1in6ew"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/KeySensor.cs" id="1_iw8mv"]
+
+[resource]
+script = ExtResource("1_iw8mv")
+key = 83
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Forward.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Forward.tres
new file mode 100644
index 0000000..788bae1
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Forward.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="KeySensor" load_steps=2 format=3 uid="uid://c73afpa00tr65"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/KeySensor.cs" id="1_jess7"]
+
+[resource]
+script = ExtResource("1_jess7")
+key = 68
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Left.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Left.tres
new file mode 100644
index 0000000..026c7ab
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Left.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="KeySensor" load_steps=2 format=3 uid="uid://dfrnedeefk0qk"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/KeySensor.cs" id="1_1s7kb"]
+
+[resource]
+script = ExtResource("1_1s7kb")
+key = 0
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Right.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Right.tres
new file mode 100644
index 0000000..cea9e7a
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Editor Camera/Move Right.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="KeySensor" load_steps=2 format=3 uid="uid://cbsltqawsp4yy"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/KeySensor.cs" id="1_41mmi"]
+
+[resource]
+script = ExtResource("1_41mmi")
+key = 68
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Down.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Down.tres
new file mode 100644
index 0000000..873159f
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Down.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="MouseButtonSensor" load_steps=2 format=3 uid="uid://chwstub7bnlpp"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/MouseButtonSensor.cs" id="1_uh7gk"]
+
+[resource]
+script = ExtResource("1_uh7gk")
+button = 5
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Up.tres b/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Up.tres
new file mode 100644
index 0000000..ece283f
--- /dev/null
+++ b/Runtime/Sensors/Default-Sensors/PC/Mouse Wheel Up.tres
@@ -0,0 +1,16 @@
+[gd_resource type="Resource" script_class="MouseButtonSensor" load_steps=2 format=3 uid="uid://b52horrdbgyaa"]
+
+[ext_resource type="Script" path="res://addons/rokojori_action_library/Runtime/Sensors/MouseButtonSensor.cs" id="1_0v7by"]
+
+[resource]
+script = ExtResource("1_0v7by")
+button = 4
+ctrlHold = 2
+altHold = 2
+shiftHold = 2
+modifiersMode = 0
+continous = false
+_value = 0.0
+_wasActive = false
+_active = false
+_activeTreshold = 0.5
diff --git a/Runtime/Sensors/MouseButtonSensor.cs b/Runtime/Sensors/MouseButtonSensor.cs
new file mode 100644
index 0000000..69c8bdf
--- /dev/null
+++ b/Runtime/Sensors/MouseButtonSensor.cs
@@ -0,0 +1,114 @@
+
+using Godot;
+
+
+namespace Rokojori
+{
+
+ [Tool]
+ [GlobalClass,Icon("res://addons/rokojori_action_library/Icons/RJSensor.svg")]
+ public partial class MouseButtonSensor : Sensor, iOnInputSensor
+ {
+ [Export]
+ public MouseButton button;
+
+ [ExportGroup( "Modifiers")]
+ [Export]
+ public Trillean ctrlHold = Trillean.Any;
+
+ [Export]
+ public Trillean altHold = Trillean.Any;
+
+ [Export]
+ public Trillean shiftHold = Trillean.Any;
+
+ public bool modifiersEnabled => ! TrilleanLogic.AllAny( ctrlHold, altHold, shiftHold );
+
+ public enum ModifiersMode
+ {
+ Hold_Modifiers_Only_On_Down,
+ Hold_Modifiers_All_The_Time
+ }
+
+ [Export]
+ public ModifiersMode modifiersMode;
+
+ float _lastInput = 0;
+
+
+ bool IsWheel()
+ {
+ return button == MouseButton.WheelUp || button == MouseButton.WheelDown;
+ }
+
+ protected override void UpdateValue()
+ {
+
+ SetFloatValue( _lastInput );
+
+ if ( IsWheel() )
+ {
+ _lastInput = 0;
+ }
+
+
+ }
+
+ public void _Input( InputEvent ev )
+ {
+
+ var mouseEvent = ev as InputEventMouseButton;
+
+ if ( mouseEvent == null )
+ {
+ return;
+ }
+
+ if ( mouseEvent.ButtonIndex != button )
+ {
+ return;
+ }
+
+ var checkModifiers = modifiersEnabled &&
+ (
+ ModifiersMode.Hold_Modifiers_All_The_Time == modifiersMode ||
+ _lastInput == 0 && ModifiersMode.Hold_Modifiers_Only_On_Down == modifiersMode
+ );
+
+ if ( checkModifiers )
+ {
+
+ if ( ! TrilleanLogic.Matches( ctrlHold, mouseEvent.CtrlPressed ) )
+ {
+ _lastInput = 0;
+ return;
+ }
+
+ if ( ! TrilleanLogic.Matches( altHold, mouseEvent.AltPressed ) )
+ {
+ _lastInput = 0;
+ return;
+ }
+
+ if ( ! TrilleanLogic.Matches( shiftHold, mouseEvent.ShiftPressed ) )
+ {
+ _lastInput = 0;
+ return;
+ }
+ }
+
+ var isActive = mouseEvent.IsPressed();
+
+ if ( IsWheel() && ! isActive )
+ {
+ return;
+ }
+
+ _lastInput = isActive ? 1 : 0;
+
+
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Sensors/SensorRunner.cs b/Runtime/Sensors/SensorRunner.cs
index e439ae3..e18b51d 100644
--- a/Runtime/Sensors/SensorRunner.cs
+++ b/Runtime/Sensors/SensorRunner.cs
@@ -21,6 +21,7 @@ namespace Rokojori
public void Update( float delta )
{
+
sensor.ProcessSensor( this, delta );
if ( ! sensor.continous && sensor.value == _lastValue )
diff --git a/Runtime/Shading/Materials/Materials.cs b/Runtime/Shading/Materials/Materials.cs
index b37f845..9dbb9e8 100644
--- a/Runtime/Shading/Materials/Materials.cs
+++ b/Runtime/Shading/Materials/Materials.cs
@@ -146,7 +146,6 @@ namespace Rokojori
public static void RemoveOverlay( Node node, Material material, bool forceTop = true )
{
-
if ( node is GeometryInstance3D gi )
{
if ( forceTop )
diff --git a/Runtime/Shading/Shaders/Effects/Outline/Outline.tres b/Runtime/Shading/Shaders/Effects/Outline/Outline.tres
new file mode 100644
index 0000000..a014e34
--- /dev/null
+++ b/Runtime/Shading/Shaders/Effects/Outline/Outline.tres
@@ -0,0 +1,31 @@
+[gd_resource type="Shader" format=3 uid="uid://bmgpmbthlfon3"]
+
+[resource]
+code = "// NOTE: Shader automatically converted from Godot Engine 4.3.stable.mono's StandardMaterial3D.
+
+shader_type spatial;
+render_mode blend_mix, world_vertex_coords, depth_draw_opaque, cull_front, diffuse_burley, specular_schlick_ggx, unshaded;
+
+#include \"res://addons/rokojori_action_library/Runtime/Shading/Library/Math.gdshaderinc\"
+#include \"res://addons/rokojori_action_library/Runtime/Shading/Library/Transform.gdshaderinc\"
+#include \"res://addons/rokojori_action_library/Runtime/Shading/Library/Noise.gdshaderinc\"
+
+uniform vec4 albedo : source_color;
+uniform float sizeClose : hint_range(0,100) = 1;
+uniform float sizeFar : hint_range(0,100) =1;
+uniform float closeDistance = 5;
+uniform float farDistance = 100;
+
+
+void vertex()
+{
+ float cameraDistance = distance( VERTEX, CAMERA_POSITION_WORLD );
+ float size = mapClamped( cameraDistance, closeDistance, farDistance, sizeClose, sizeFar );
+ VERTEX += NORMAL * size/500.0 * cameraDistance;
+}
+
+void fragment()
+{
+ ALBEDO = albedo.rgb;
+}
+"
diff --git a/Runtime/Shading/Shaders/Effects/TriPlanarOverlay/TriPlanarOverlay WhiteShield.material b/Runtime/Shading/Shaders/Effects/TriPlanarOverlay/TriPlanarOverlay WhiteShield.material
index 99e07a9..d9f1e38 100644
Binary files a/Runtime/Shading/Shaders/Effects/TriPlanarOverlay/TriPlanarOverlay WhiteShield.material and b/Runtime/Shading/Shaders/Effects/TriPlanarOverlay/TriPlanarOverlay WhiteShield.material differ
diff --git a/Runtime/Time/TimeLineManager.cs b/Runtime/Time/TimeLineManager.cs
index c863cf7..455452a 100644
--- a/Runtime/Time/TimeLineManager.cs
+++ b/Runtime/Time/TimeLineManager.cs
@@ -73,8 +73,7 @@ namespace Rokojori
}
void UpdateRealTime( double engineDelta )
- {
-
+ {
var now = DateTime.Now;
var unscaled = (float) ( ( now - lastUpdated ).TotalSeconds );
lastUpdated = now;