using Godot; using System.Collections; using System.Collections.Generic; using Godot.Collections; namespace Rokojori { [GlobalClass,Icon("res://addons/rokojori_action_library/Icons/Pointer.svg")] public partial class Pointer:Node3D { [Export] public Caster caster; [Export] public HighlightEffect defaultHighlighter; [ExportGroup("Read Only")] [Export] public Pointable pointable; public override void _Process( double delta ) { if ( caster == null ) { return; } var currentCollider = caster.NumColliders() == 0 ? null : caster.GetCollider( 0 ); var currentPointable = currentCollider == null ? null : Nodes.Find( currentCollider ); // RJLog.Log( currentCollider, currentPointable ); if ( currentPointable == pointable ) { return; } if ( pointable != null ) { Highlight( HighlightActionType.End, pointable ); pointable.UpdatePointerState( this, false ); } pointable = currentPointable; if ( pointable != null ) { pointable.UpdatePointerState( this, true ); Highlight( HighlightActionType.Start, pointable ); } } void Highlight( HighlightActionType type, Pointable p ) { if ( p.highlightTargets == null || p.highlightTargets.Length == 0 ) { return; } if ( p.highlightEffect == null && defaultHighlighter == null ) { return; } var highlightEffect = p.highlightEffect ?? defaultHighlighter; highlightEffect.Highlight( type, p.highlightTargets ); } } }