/* Copyright (C) 2007, 2010 - Bit-Blot This file is part of Aquaria. Aquaria is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef COLLISION_H #define COLLISION_H #include "Base.h" class RenderObject; struct CollisionResult { CollisionResult() { collided = false; collider = 0; project = true; } bool project; bool collided; Vector overlap; RenderObject *collider; void reportCollision(Vector overlap) { collided = true; this->overlap = overlap; } }; class CollisionShape { public: CollisionShape(); /* void addCollisionGroup(int group); void removeCollisionGroup(int group); void canCollideWithGroup(); */ void updatePosition(const Vector &position); void activate() { active = true; } void deactivate() { active = false; } bool isActive() { return active; } float getX1(); float getX2(); float getY1(); float getY2(); float xw, yw; float radius; enum Type { NONE=0, AABB, CIRCLE, TOP_HALF_CIRCLE, TRIANGLE }; void setType(Type type); Type getType(); bool isPointWithin(Vector point); void render(); CollisionResult findOverlap(CollisionShape &collisionShape); Vector offsetPosition; bool compareLayer(CollisionShape &c); //bool compareMask(CollisionShape &c); int getLayer() { return layer; } void setLayer(int layer) { this->layer = layer; } bool project; protected: int layer; /* typedef std::vector CollisionLayerMask; CollisionLayerMask colliderMask, collideeMask; */ std::vector corners; Vector position; bool active; CollisionResult collideCircleWithCircle(CollisionShape &collisionShape); CollisionResult collideCircleWithTopHalfCircle(CollisionShape &collisionShape); CollisionResult collideCircleWithAABB(CollisionShape &collisionShape, float x, float y, int oH, int oV); Type type; }; /* class CollisionObject { public: void onCollision(); void collide() { CollisionResult c; for (int i = 0; i < collisionManager->colliders.size(); i++) { c = findOverlap(collisionManager->colliders[i]->collisionShape); if (c.collided) { position -= c.overlap; collisionShape.position = } } } }; class CollisionManager { public: void addCollider( }; */ #endif