remove EcsWhereResult

This commit is contained in:
Mikhail 2023-06-02 03:33:33 +08:00
parent 7951cf27a8
commit 1c5ce4561b
2 changed files with 12 additions and 37 deletions

View File

@ -170,23 +170,23 @@ namespace DCFApixels.DragonECS
#endregion
#region Where Query
public EcsWhereResult<TSubject> WhereFor<TSubject>(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject
public EcsReadonlyGroup WhereFor<TSubject>(EcsReadonlyGroup sourceGroup, out TSubject subject) where TSubject : EcsSubject
{
var executor = GetExecutor<EcsWhereExecutor<TSubject>>();
subject = executor.Subject;
return executor.ExecuteFor(sourceGroup);
}
public EcsWhereResult<TSubject> WhereFor<TSubject>(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject
public EcsReadonlyGroup WhereFor<TSubject>(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject
{
return GetExecutor<EcsWhereExecutor<TSubject>>().ExecuteFor(sourceGroup);
}
public EcsWhereResult<TSubject> Where<TSubject>(out TSubject subject) where TSubject : EcsSubject
public EcsReadonlyGroup Where<TSubject>(out TSubject subject) where TSubject : EcsSubject
{
var executor = GetExecutor<EcsWhereExecutor<TSubject>>();
subject = executor.Subject;
return executor.Execute();
}
public EcsWhereResult<TSubject> Where<TSubject>() where TSubject : EcsSubject
public EcsReadonlyGroup Where<TSubject>() where TSubject : EcsSubject
{
return GetExecutor<EcsWhereExecutor<TSubject>>().Execute();
}

View File

@ -7,7 +7,9 @@
private long _executeVersion;
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
private EcsProfilerMarker _executeWhere = new EcsProfilerMarker("Where");
#endif
#region Properties
public TSubject Subject => _subject;
@ -27,47 +29,20 @@
#endregion
#region Methods
public EcsWhereResult<TSubject> Execute() => ExecuteFor(_subject.World.Entities);
public EcsWhereResult<TSubject> ExecuteFor(EcsReadonlyGroup sourceGroup)
public EcsReadonlyGroup Execute() => ExecuteFor(_subject.World.Entities);
public EcsReadonlyGroup ExecuteFor(EcsReadonlyGroup sourceGroup)
{
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
using (_executeWhere.Auto())
#endif
{
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
if (sourceGroup.IsNull) throw new System.ArgumentNullException();//TODO составить текст исключения.
#endif
_subject.GetIteratorFor(sourceGroup).CopyTo(_filteredGroup);
return new EcsWhereResult<TSubject>(this, _filteredGroup.Readonly);
return _filteredGroup.Readonly;
}
}
#endregion
}
#region WhereExecuter Results
public readonly ref struct EcsWhereResult<TSubject> where TSubject : EcsSubject
{
public readonly TSubject s;
private readonly EcsWhereExecutor<TSubject> _executer;
public readonly EcsReadonlyGroup group;
private readonly long _version;
public bool IsRelevant => _version == _executer.ExecuteVersion;
public EcsWhereResult(EcsWhereExecutor<TSubject> executer, EcsReadonlyGroup group)
{
_executer = executer;
_version = executer.ExecuteVersion;
s = executer.Subject;
this.group = group;
}
public EcsGroup.Enumerator GetEnumerator()
{
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
if (!IsRelevant) throw new System.InvalidOperationException();//TODO составить текст исключения.
#endif
return group.GetEnumerator();
}
public override string ToString()
{
return group.ToString();
}
}
#endregion
}