diff options
| author | chai <215380520@qq.com> | 2024-06-03 10:15:45 +0800 |
|---|---|---|
| committer | chai <215380520@qq.com> | 2024-06-03 10:15:45 +0800 |
| commit | acea7b2e728787a0d83bbf83c8c1f042d2c32e7e (patch) | |
| tree | 0bfec05c1ca2d71be2c337bcd110a0421f19318b /Plugins/MonoGame.Extended/source/MonoGame.Extended.Collisions/QuadTree/QuadTreeData.cs | |
| parent | 88febcb02bf127d961c6471d9e846c0e1315f5c3 (diff) | |
+ plugins project
Diffstat (limited to 'Plugins/MonoGame.Extended/source/MonoGame.Extended.Collisions/QuadTree/QuadTreeData.cs')
| -rw-r--r-- | Plugins/MonoGame.Extended/source/MonoGame.Extended.Collisions/QuadTree/QuadTreeData.cs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/source/MonoGame.Extended.Collisions/QuadTree/QuadTreeData.cs b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Collisions/QuadTree/QuadTreeData.cs new file mode 100644 index 0000000..db6da3e --- /dev/null +++ b/Plugins/MonoGame.Extended/source/MonoGame.Extended.Collisions/QuadTree/QuadTreeData.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using System.Linq; + +namespace MonoGame.Extended.Collisions.QuadTree; + +/// <summary> +/// Data structure for the quad tree. +/// Holds the entity and collision data for it. +/// </summary> +public class QuadtreeData +{ + private readonly ICollisionActor _target; + private readonly HashSet<QuadTree> _parents = new(); + + /// <summary> + /// Initialize a new instance of QuadTreeData. + /// </summary> + /// <param name="target"></param> + public QuadtreeData(ICollisionActor target) + { + _target = target; + Bounds = _target.Bounds.BoundingRectangle; + } + + /// <summary> + /// Remove a parent node. + /// </summary> + /// <param name="parent"></param> + public void RemoveParent(QuadTree parent) + { + _parents.Remove(parent); + } + + /// <summary> + /// Add a parent node. + /// </summary> + /// <param name="parent"></param> + public void AddParent(QuadTree parent) + { + _parents.Add(parent); + Bounds = _target.Bounds.BoundingRectangle; + } + + /// <summary> + /// Remove all parent nodes from this node. + /// </summary> + public void RemoveFromAllParents() + { + foreach (var parent in _parents.ToList()) + { + parent.Remove(this); + } + + _parents.Clear(); + } + + /// <summary> + /// Gets the bounding box for collision detection. + /// </summary> + public RectangleF Bounds { get; set; } + + /// <summary> + /// Gets the collision actor target. + /// </summary> + public ICollisionActor Target => _target; + + /// <summary> + /// Gets or sets whether Target has had its collision handled this + /// iteration. + /// </summary> + public bool Dirty { get; private set; } + + /// <summary> + /// Mark node as dirty. + /// </summary> + public void MarkDirty() + { + Dirty = true; + } + + /// <summary> + /// Mark node as clean, i.e. not dirty. + /// </summary> + public void MarkClean() + { + Dirty = false; + } +} |
