Created a function for inverting the values of a point, returning positive infinity for 0 values.
Created a Ray object that consists of a vector with an inverted offset, and an array of signs corresponding to the direction the ray is traveling in the x, y, and z planes.
inverse should get initialized as a point.
Created some basic tests for the point inversion function.
sign array should contain values of 1 or 0.
Created an intersect function that checks to see whether a ray intersects with a cube. This will be used for collision detection.
Added basic tests to check whether a robot will collide with a floor when driving over it, and whether it will collide with a wall when driving through it. (the ray is measured from the center of the robot)
Added base MapItem class and enumeration permeability. All map items are nonpermeable by default.
Initialized ConcreteBlock coordinate and size values.
Added base collision functionality.
Created a test to verify that a robot will collide with a wall and stop its movement.
Added x, y, z parameters to the size constructor. Robots are size (1, 1, 1) by default.
Added functionality for pushing moveable items. Only one item can be pushed at a time.
Minor fixes.
Added a test for verifying that push functionality works correctly. Test fails because the pushed robot collides with the pushing robot.
Added a check to make sure that a collision occurs within the range of a ray. This fixes the 'should push a robot' test.
Added a test to validate that only one item may be pushed by a single move.
(0.5, 0.5, 0.5) should be added to the coordinate of the moving item, not the direction of the movement ray.
Added a check to make sure that a collision occurs within the range of a ray. Otherwise a moving item collides with all items on the line that it is moving along. (And could potentially push a robot that is ten spaces away)
Updated variable names for clarity.