//this is only really for forces made manually, not by the forces that are made by other objects(including friction and normal forces) void Force::tick(std::vector<Object *> &objects) { //check for objects to act upon for(Object *obj : objects) { vec2* corners = obj->getVertices(); //i know for now that this array has a size of 4 //for(int i = 0; i < 4; i++) //std::cout << corners[i] << std::endl; //check each side for collisions with this line vec2 intersect1 = lineIntersect(corners[0], corners[1]); //top side vec2 intersect2 = lineIntersect(corners[1], corners[2]); //right side vec2 intersect3 = lineIntersect(corners[2], corners[3]); //bottom side vec2 intersect4 = lineIntersect(corners[3], corners[0]); //left side //now check to see if each intersection is actually on the if(pointOnSegment(intersect1, corners[0], corners[1])) { std::cout << "1" << std::endl; obj->forceApplied(this, intersect1); } if(pointOnSegment(intersect2, corners[1], corners[2])) { std::cout << "1" << std::endl; obj->forceApplied(this, intersect2); } if(pointOnSegment(intersect3, corners[2], corners[3])) { std::cout << "1" << std::endl; obj->forceApplied(this, intersect3); } if(pointOnSegment(intersect4, corners[3], corners[4])) { std::cout << "1" << std::endl; obj->forceApplied(this, intersect4); } toDelete = true; //maybe a for-loop here? //check if the intersects are in-bounds - should I have a method that does this? //a different method may need to be used - b/c how would i know which point is before the other? /*if(intersect1.x > corners[0].x && intersect1.x < corners[1].x) if(intersect1.y < corners[0].y && intersect1.y > corners[1].y) std::cout << "1 is inbounds" << std::endl; if(intersect2.x > corners[1].x && intersect2.x < corners[2].x) if(intersect2.y > corners[1].y && intersect2.y < corners[2].y) std::cout << "2 is inbounds" << std::endl; if(intersect1.x > corners[2].x && intersect1.x < corners[3].x) if(intersect1.y > corners[2].y && intersect1.y < corners[3].y) std::cout << "3 is inbounds" << std::endl; if(intersect1.x > corners[3].x && intersect1.x < corners[0].x) if(intersect1.y > corners[3].y && intersect1.y < corners[0].y) std::cout << "4 is inbounds" << std::endl; */ } }
bool Segment::containPoint(const cocos2d::Vec2& point) const { return pointOnSegment(point, start, end); }