Class: CyberarmEngine::AABBTree
- Inherits:
-
Object
- Object
- CyberarmEngine::AABBTree
- Includes:
- AABBTreeDebug
- Defined in:
- lib/cyberarm_engine/trees/aabb_node.rb,
lib/cyberarm_engine/trees/aabb_tree.rb
Defined Under Namespace
Classes: AABBNode
Instance Attribute Summary collapse
-
#branches ⇒ Object
readonly
Returns the value of attribute branches.
-
#leaves ⇒ Object
readonly
Returns the value of attribute leaves.
-
#objects ⇒ Object
readonly
Returns the value of attribute objects.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Instance Method Summary collapse
-
#initialize ⇒ AABBTree
constructor
A new instance of AABBTree.
- #insert(object, bounding_box) ⇒ Object
- #insert_leaf(leaf) ⇒ Object
- #remove(object) ⇒ Object
-
#search(collider, return_nodes = false) ⇒ Object
Returns a list of all objects that collided with collider.
- #update(object, bounding_box) ⇒ Object
Methods included from AABBTreeDebug
Constructor Details
#initialize ⇒ AABBTree
Returns a new instance of AABBTree.
9 10 11 12 13 14 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 9 def initialize @objects = {} @root = nil @branches = 0 @leaves = 0 end |
Instance Attribute Details
#branches ⇒ Object (readonly)
Returns the value of attribute branches.
7 8 9 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 7 def branches @branches end |
#leaves ⇒ Object (readonly)
Returns the value of attribute leaves.
7 8 9 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 7 def leaves @leaves end |
#objects ⇒ Object (readonly)
Returns the value of attribute objects.
7 8 9 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 7 def objects @objects end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
7 8 9 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 7 def root @root end |
Instance Method Details
#insert(object, bounding_box) ⇒ Object
16 17 18 19 20 21 22 23 24 25 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 16 def insert(object, bounding_box) raise "BoundingBox can't be nil!" unless bounding_box raise "Object can't be nil!" unless object # raise "Object already in tree!" if @objects[object] # FIXME leaf = AABBNode.new(parent: nil, object: object, bounding_box: bounding_box.dup) @objects[object] = leaf insert_leaf(leaf) end |
#insert_leaf(leaf) ⇒ Object
27 28 29 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 27 def insert_leaf(leaf) @root = @root ? @root.insert_subtree(leaf) : leaf end |
#remove(object) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 48 def remove(object) leaf = @objects.delete(object) @root = @root.remove_subtree(leaf) if leaf leaf end |
#search(collider, return_nodes = false) ⇒ Object
Returns a list of all objects that collided with collider
38 39 40 41 42 43 44 45 46 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 38 def search(collider, return_nodes = false) items = [] if @root items = @root.search_subtree(collider) items.map!(&:object) unless return_nodes end items end |
#update(object, bounding_box) ⇒ Object
31 32 33 34 35 |
# File 'lib/cyberarm_engine/trees/aabb_tree.rb', line 31 def update(object, bounding_box) leaf = remove(object) leaf.bounding_box = bounding_box insert_leaf(leaf) end |