72 lines
1.3 KiB
C#
72 lines
1.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Godot;
|
|
using System;
|
|
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
public enum DiscardListMode
|
|
{
|
|
At_Least_Inside_One,
|
|
Only_Inside_One,
|
|
Must_Be_Inside_All
|
|
}
|
|
|
|
[Tool]
|
|
[GlobalClass]
|
|
public partial class DiscarderList:Discarder
|
|
{
|
|
[Export]
|
|
public DiscardListMode listMode;
|
|
|
|
[Export]
|
|
public bool childrenNeedToBeVisible = true;
|
|
[Export]
|
|
public bool childrenNeedToBeProcessing = false;
|
|
|
|
public override bool IsInside( Vector3 position )
|
|
{
|
|
var inside = 0;
|
|
|
|
var numNodes = 0;
|
|
|
|
Nodes.ForEachDirectChild<Discarder>( this,
|
|
d =>
|
|
{
|
|
if ( ! IsChildEnabled( d, childrenNeedToBeVisible, childrenNeedToBeProcessing ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( d.IsInside( position ) )
|
|
{
|
|
inside ++;
|
|
}
|
|
|
|
numNodes++;
|
|
}
|
|
);
|
|
|
|
if ( DiscardListMode.At_Least_Inside_One == listMode )
|
|
{
|
|
return inside > 0;
|
|
}
|
|
else if ( DiscardListMode.Only_Inside_One == listMode )
|
|
{
|
|
return inside == 1;
|
|
}
|
|
else if ( DiscardListMode.Must_Be_Inside_All == listMode )
|
|
{
|
|
return numNodes == inside;
|
|
}
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
} |