mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 15:42:35 +00:00
Refactored GameObject to Entity, replaced @x,@y,@z with @position, added @velocity vector to Entity, bricked Player terrain interaction while authoring Axis Aligned Bounding Box Tree for CollisionManager to handle all collision interaction. Added PhysicsManager stub.
This commit is contained in:
@@ -2,25 +2,33 @@ class IMICFPS
|
||||
class CollisionManager
|
||||
def initialize(game_state:)
|
||||
@game_state = game_state
|
||||
# @aabb_tree = AABBTree.new
|
||||
@aabb_tree = AABBTree.new
|
||||
end
|
||||
|
||||
def add(entity)
|
||||
@aabb_tree.add(entity.normalized_bounding_box, entity)
|
||||
end
|
||||
|
||||
def remove(entity)
|
||||
@aabb_tree.remove(entity)
|
||||
end
|
||||
|
||||
def lazy_check_collisions
|
||||
# Expensive AABB collision detection
|
||||
@game_state.game_objects.each do |object|
|
||||
@game_state.game_objects.each do |b|
|
||||
next if object == b
|
||||
next if object.is_a?(Terrain) || b.is_a?(Terrain)
|
||||
@game_state.entities.each do |entity|
|
||||
@game_state.entities.each do |other|
|
||||
next if entity == other
|
||||
next if entity.is_a?(Terrain) || other.is_a?(Terrain)
|
||||
|
||||
if object.intersect(object, b)
|
||||
object.debug_color = Color.new(1.0,0.0,0.0)
|
||||
b.debug_color = Color.new(1.0,0.0,0.0)
|
||||
if entity.intersect(other)
|
||||
entity.debug_color = Color.new(1.0,0.0,0.0)
|
||||
other.debug_color = Color.new(1.0,0.0,0.0)
|
||||
|
||||
# @game_state.game_objects.delete(object) unless object.is_a?(Player)
|
||||
# puts "#{object} is intersecting #{b}" if object.is_a?(Player)
|
||||
# @game_state.entities.delete(entity) unless entity.is_a?(Player)
|
||||
# puts "#{entity} is intersecting #{b}" if entity.is_a?(Player)
|
||||
else
|
||||
object.debug_color = Color.new(0,1,0)
|
||||
b.debug_color = Color.new(0,1,0)
|
||||
entity.debug_color = Color.new(0,1,0)
|
||||
other.debug_color = Color.new(0,1,0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user