mirror of
https://github.com/DCFApixels/DragonECS-Graphs.git
synced 2025-09-18 11:54:35 +08:00
remove relationMatrix
This commit is contained in:
parent
08b25ed671
commit
5d4573f431
120
src/EcsArc.cs
120
src/EcsArc.cs
@ -2,6 +2,7 @@
|
|||||||
using DCFApixels.DragonECS.Relations.Utils;
|
using DCFApixels.DragonECS.Relations.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Xml;
|
||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
@ -20,7 +21,7 @@ namespace DCFApixels.DragonECS
|
|||||||
private readonly EndWorldHandler _endWorldHandler;
|
private readonly EndWorldHandler _endWorldHandler;
|
||||||
private readonly LoopWorldHandler _loopWorldHandler;
|
private readonly LoopWorldHandler _loopWorldHandler;
|
||||||
|
|
||||||
private readonly SparseArray64<int> _relationsMatrix = new SparseArray64<int>();
|
//private readonly SparseArray64<int> _relationsMatrix = new SparseArray64<int>();
|
||||||
|
|
||||||
private EcsGraph _entitiesGraph;
|
private EcsGraph _entitiesGraph;
|
||||||
private EcsGraph.FriendEcsArc _entitiesGraphFriend;
|
private EcsGraph.FriendEcsArc _entitiesGraphFriend;
|
||||||
@ -123,60 +124,72 @@ namespace DCFApixels.DragonECS
|
|||||||
#region New/Del
|
#region New/Del
|
||||||
public int NewRelation(int startEntityID, int endEntityID)
|
public int NewRelation(int startEntityID, int endEntityID)
|
||||||
{
|
{
|
||||||
if (HasRelation(startEntityID, endEntityID))
|
//if (HasRelation(startEntityID, endEntityID))
|
||||||
{
|
//{
|
||||||
Throw.RelationAlreadyExists();
|
// Throw.RelationAlreadyExists();
|
||||||
}
|
//}
|
||||||
|
|
||||||
int relEntity = _arcWorld.NewEntity();
|
int relEntity = _arcWorld.NewEntity();
|
||||||
_relationsMatrix.Add(startEntityID, endEntityID, relEntity);
|
//_relationsMatrix.Add(startEntityID, endEntityID, relEntity);
|
||||||
|
|
||||||
_relEntityInfos[relEntity] = new RelEntityInfo(startEntityID, endEntityID);
|
_relEntityInfos[relEntity] = new RelEntityInfo(startEntityID, endEntityID);
|
||||||
_relEntities.Add(relEntity);
|
_relEntities.Add(relEntity);
|
||||||
_entitiesGraph.Add(relEntity);
|
_entitiesGraph.Add(relEntity);
|
||||||
return relEntity;
|
return relEntity;
|
||||||
}
|
}
|
||||||
public void DelRelation(int startEntityID, int endEntityID)
|
//public void DelRelation(int startEntityID, int endEntityID)
|
||||||
|
//{
|
||||||
|
// if (_relationsMatrix.TryGetValue(startEntityID, endEntityID, out int relEntityID))
|
||||||
|
// {
|
||||||
|
// _arcWorld.DelEntity(relEntityID);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// Throw.UndefinedRelationException();
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
public void DelRelation(int relEntityID)
|
||||||
{
|
{
|
||||||
if (_relationsMatrix.TryGetValue(startEntityID, endEntityID, out int relEntity))
|
_arcWorld.DelEntity(relEntityID);
|
||||||
{
|
|
||||||
_arcWorld.DelEntity(relEntity);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Throw.UndefinedRelationException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClearRelation_Internal(int startEntityID, int endEntityID)
|
public void ClearRelation_Internal(int relEntityID)
|
||||||
{
|
{
|
||||||
if (_relationsMatrix.TryGetValue(startEntityID, endEntityID, out int relEntity))
|
_relEntities.Remove(relEntityID);
|
||||||
{
|
_entitiesGraph.Del(relEntityID);
|
||||||
_relEntities.Remove(relEntity);
|
_relEntityInfos[relEntityID] = RelEntityInfo.Empty;
|
||||||
_entitiesGraph.Del(relEntity);
|
|
||||||
_relationsMatrix.Remove(startEntityID, endEntityID);
|
|
||||||
_relEntityInfos[relEntity] = RelEntityInfo.Empty;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//private void ClearRelation_Internal(int startEntityID, int endEntityID)
|
||||||
|
//{
|
||||||
|
// if (_relationsMatrix.TryGetValue(startEntityID, endEntityID, out int relEntityID))
|
||||||
|
// {
|
||||||
|
// _relEntities.Remove(relEntityID);
|
||||||
|
// _entitiesGraph.Del(relEntityID);
|
||||||
|
// _relationsMatrix.Remove(startEntityID, endEntityID);
|
||||||
|
// _relEntityInfos[relEntityID] = RelEntityInfo.Empty;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region GetRelation/HasRelation
|
#region GetRelation/HasRelation
|
||||||
public bool HasRelation(int startEntityID, int endEntityID)
|
//public bool HasRelation(int startEntityID, int endEntityID)
|
||||||
{
|
//{
|
||||||
return _relationsMatrix.Contains(startEntityID, endEntityID);
|
// return _relationsMatrix.Contains(startEntityID, endEntityID);
|
||||||
}
|
//}
|
||||||
public int GetRelation(int startEntityID, int endEntityID)
|
//public int GetRelation(int startEntityID, int endEntityID)
|
||||||
{
|
//{
|
||||||
if (!_relationsMatrix.TryGetValue(startEntityID, endEntityID, out int relEntityID))
|
// if (!_relationsMatrix.TryGetValue(startEntityID, endEntityID, out int relEntityID))
|
||||||
{
|
// {
|
||||||
Throw.UndefinedRelationException();
|
// Throw.UndefinedRelationException();
|
||||||
}
|
// }
|
||||||
return relEntityID;
|
// return relEntityID;
|
||||||
}
|
//}
|
||||||
public bool TryGetRelation(int startEntityID, int endEntityID, out int relEntityID)
|
//public bool TryGetRelation(int startEntityID, int endEntityID, out int relEntityID)
|
||||||
{
|
//{
|
||||||
return _relationsMatrix.TryGetValue(startEntityID, endEntityID, out relEntityID);
|
// return _relationsMatrix.TryGetValue(startEntityID, endEntityID, out relEntityID);
|
||||||
}
|
//}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ArcEntityInfo
|
#region ArcEntityInfo
|
||||||
@ -209,18 +222,18 @@ namespace DCFApixels.DragonECS
|
|||||||
return GetRelationInfo(relEntityID).end;
|
return GetRelationInfo(relEntityID).end;
|
||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
//[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public int GetInversedRelation(int relEntityID)
|
//public int GetInversedRelation(int relEntityID)
|
||||||
{
|
//{
|
||||||
var (startEntityID, endEntityID) = GetRelationInfo(relEntityID);
|
// var (startEntityID, endEntityID) = GetRelationInfo(relEntityID);
|
||||||
return GetRelation(endEntityID, startEntityID);
|
// return GetRelation(endEntityID, startEntityID);
|
||||||
}
|
//}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
//[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public bool TryGetInversedRelation(int relEntityID, out int inversedRelEntityID)
|
//public bool TryGetInversedRelation(int relEntityID, out int inversedRelEntityID)
|
||||||
{
|
//{
|
||||||
var (startEntityID, endEntityID) = GetRelationInfo(relEntityID);
|
// var (startEntityID, endEntityID) = GetRelationInfo(relEntityID);
|
||||||
return TryGetRelation(endEntityID, startEntityID, out inversedRelEntityID);
|
// return TryGetRelation(endEntityID, startEntityID, out inversedRelEntityID);
|
||||||
}
|
//}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Other
|
#region Other
|
||||||
@ -253,8 +266,9 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
foreach (var relEntityID in relEntityBuffer)
|
foreach (var relEntityID in relEntityBuffer)
|
||||||
{
|
{
|
||||||
var (startEntityID, endEntityID) = _arc._relEntityInfos[relEntityID];
|
//var (startEntityID, endEntityID) = _arc._relEntityInfos[relEntityID];
|
||||||
_arc.ClearRelation_Internal(startEntityID, endEntityID);
|
//_arc.ClearRelation_Internal(startEntityID, endEntityID);
|
||||||
|
_arc.ClearRelation_Internal(relEntityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void OnWorldDestroy() { }
|
public void OnWorldDestroy() { }
|
||||||
|
Loading…
Reference in New Issue
Block a user