|
@@ -8,6 +8,7 @@ Object2D::Object2D()
|
|
|
rSpeed = 0;
|
|
|
rotation = 0;
|
|
|
size = 1;
|
|
|
+ collision = 1;
|
|
|
ref = 1;
|
|
|
}
|
|
|
|
|
@@ -76,6 +77,11 @@ void Object2D::addSize( float size )
|
|
|
this->size += size;
|
|
|
}
|
|
|
|
|
|
+void Object2D::setCollision( bool handle )
|
|
|
+{
|
|
|
+ collision = handle;
|
|
|
+}
|
|
|
+
|
|
|
bool Object2D::handleCollision( Object2D *obj )
|
|
|
{
|
|
|
Vertex hp;
|
|
@@ -224,6 +230,11 @@ float Object2D::getMasse() const
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+bool Object2D::canCollide()
|
|
|
+{
|
|
|
+ return collision;
|
|
|
+}
|
|
|
+
|
|
|
Object2D *Object2D::getThis()
|
|
|
{
|
|
|
ref++;
|
|
@@ -355,17 +366,20 @@ bool Welt2D::tick( double zeit )
|
|
|
bool ret = 0;
|
|
|
for( auto obj = objects->getIterator(); obj; obj++ )
|
|
|
{
|
|
|
- if( obj.hasNext() )
|
|
|
+ if( obj.hasNext() && obj->canCollide() )
|
|
|
{
|
|
|
for( auto obj2 = obj.next(); obj2; obj2++ )
|
|
|
- obj->handleCollision( obj2 );
|
|
|
+ {
|
|
|
+ if( obj2->canCollide() )
|
|
|
+ obj->handleCollision( obj2 );
|
|
|
+ }
|
|
|
}
|
|
|
ret |= obj->tick( info, zeit );
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-void Welt2D::render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, int xOffset, int yOffset )
|
|
|
+void Welt2D::render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, int xOffset, int yOffset, const char *kamName )
|
|
|
{
|
|
|
for( auto obj = objects->getIterator(); obj; obj++ )
|
|
|
{
|
|
@@ -385,11 +399,11 @@ void Welt2D::render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, int xOffset
|
|
|
( topRight.y >= 0 && topRight.y < size.y ) ||
|
|
|
( bottomLeft.x >= 0 && bottomLeft.x < size.x ) ||
|
|
|
( bottomLeft.y >= 0 && bottomLeft.y < size.y ) )
|
|
|
- obj->render( km, zRObj );
|
|
|
+ obj->render( km, zRObj, kamName );
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void Welt2D::render( Mat3< float > &kamMat, Punkt size, Bild &zRObj )
|
|
|
+void Welt2D::render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, const char *kamName )
|
|
|
{
|
|
|
if( !info.hasSize || !info.circular )
|
|
|
{
|
|
@@ -410,20 +424,20 @@ void Welt2D::render( Mat3< float > &kamMat, Punkt size, Bild &zRObj )
|
|
|
( topRight.y >= 0 && topRight.y < size.y ) ||
|
|
|
( bottomLeft.x >= 0 && bottomLeft.x < size.x ) ||
|
|
|
( bottomLeft.y >= 0 && bottomLeft.y < size.y ) )
|
|
|
- obj->render( kamMat, zRObj );
|
|
|
+ obj->render( kamMat, zRObj, kamName );
|
|
|
}
|
|
|
}
|
|
|
else if( info.circular )
|
|
|
{
|
|
|
- render( kamMat, size, zRObj, 0, 0 );
|
|
|
- render( kamMat, size, zRObj, info.size.x, 0 );
|
|
|
- render( kamMat, size, zRObj, 0, info.size.y );
|
|
|
- render( kamMat, size, zRObj, info.size.x, info.size.y );
|
|
|
- render( kamMat, size, zRObj, -info.size.x, 0 );
|
|
|
- render( kamMat, size, zRObj, 0, -info.size.y );
|
|
|
- render( kamMat, size, zRObj, -info.size.x, -info.size.y );
|
|
|
- render( kamMat, size, zRObj, -info.size.x, +info.size.y );
|
|
|
- render( kamMat, size, zRObj, +info.size.x, -info.size.y );
|
|
|
+ render( kamMat, size, zRObj, 0, 0, kamName );
|
|
|
+ render( kamMat, size, zRObj, info.size.x, 0, kamName );
|
|
|
+ render( kamMat, size, zRObj, 0, info.size.y, kamName );
|
|
|
+ render( kamMat, size, zRObj, info.size.x, info.size.y, kamName );
|
|
|
+ render( kamMat, size, zRObj, -info.size.x, 0, kamName );
|
|
|
+ render( kamMat, size, zRObj, 0, -info.size.y, kamName );
|
|
|
+ render( kamMat, size, zRObj, -info.size.x, -info.size.y, kamName );
|
|
|
+ render( kamMat, size, zRObj, -info.size.x, +info.size.y, kamName );
|
|
|
+ render( kamMat, size, zRObj, +info.size.x, -info.size.y, kamName );
|
|
|
}
|
|
|
}
|
|
|
|