Browse Source

Kameranamen hinzugefügt

kolja 5 years ago
parent
commit
a8392876ea
6 changed files with 70 additions and 22 deletions
  1. 23 1
      Kamera2D.cpp
  2. 5 0
      Kamera2D.h
  3. 2 2
      Model2D.cpp
  4. 1 1
      Model2D.h
  5. 29 15
      Welt2D.cpp
  6. 10 3
      Welt2D.h

+ 23 - 1
Kamera2D.cpp

@@ -14,6 +14,7 @@ Kamera2D::Kamera2D()
     matrix = Mat3< float >::identity();
     zoom = 1;
     tickWelt = 0;
+    name = new Text( "" );
     ref = 1;
 }
 
@@ -21,6 +22,17 @@ Kamera2D::~Kamera2D()
 {
     if( welt )
         welt->release();
+    name->release();
+}
+
+void Kamera2D::setName( const char *name )
+{
+    this->name->setText( name );
+}
+
+void Kamera2D::setName( Text *name )
+{
+    this->name->setText( name );
 }
 
 void Kamera2D::lookAtWorldPos( int x, int y )
@@ -103,7 +115,7 @@ void Kamera2D::render( Bild &zRObj )
         return;
     }
     matrix = Mat3< float >::translation( (Vertex)gr / 2 ) * Mat3< float >::rotation( rotation ) * Mat3< float >::scaling( zoom ) * Mat3< float >::translation( -wPos );
-    welt->render( matrix, gr, zRObj );
+    welt->render( matrix, gr, zRObj, *name );
     zRObj.releaseDrawOptions();
     unlockZeichnung();
 }
@@ -150,6 +162,16 @@ const Mat3< float > &Kamera2D::getMatrix()
     return matrix;
 }
 
+Text *Kamera2D::getName()
+{
+    return name->getThis();
+}
+
+Text *Kamera2D::zName()
+{
+    return name;
+}
+
 Kamera2D *Kamera2D::getThis()
 {
     ref++;

+ 5 - 0
Kamera2D.h

@@ -18,11 +18,14 @@ namespace Framework
         float rotation;
         float zoom;
         Mat3< float > matrix;
+        Text *name;
         int ref;
 
     public:
         __declspec( dllexport ) Kamera2D();
         __declspec( dllexport ) virtual ~Kamera2D();
+        __declspec( dllexport ) void setName( const char *name );
+        __declspec( dllexport ) void setName( Text *name );
         __declspec( dllexport ) void lookAtWorldPos( Vertex pos );
         __declspec( dllexport ) void lookAtWorldPos( int x, int y );
         __declspec( dllexport ) void lookAtWorldArea( int width, int height );
@@ -37,6 +40,8 @@ namespace Framework
         __declspec( dllexport ) float getRotation();
         __declspec( dllexport ) float getZoom();
         __declspec( dllexport ) const Mat3< float > &getMatrix();
+        __declspec( dllexport ) Text *getName();
+        __declspec( dllexport ) Text *zName();
         __declspec( dllexport ) Kamera2D *getThis();
         __declspec( dllexport ) Kamera2D *release();
     };

+ 2 - 2
Model2D.cpp

@@ -680,7 +680,7 @@ Model2DObject::Model2DObject()
     : Object2D()
 {
     rData = 0;
-    textur = new RCArray< Textur2D >;
+    textur = new RCArray< Textur2D >();
     ref = 1;
 }
 
@@ -758,7 +758,7 @@ void Model2DObject::setTextur( Textur2D *t, const char *polygonName )
     t->release();
 }
 
-void Model2DObject::render( Mat3< float > &kamMat, Bild &zRObj )
+void Model2DObject::render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName )
 {
     if( !rData || !rData->polygons || !textur )
         return;

+ 1 - 1
Model2D.h

@@ -108,7 +108,7 @@ namespace Framework
         __declspec( dllexport ) void impuls( Vertex start, Vertex speed ) override;
         // Zeichnet die Zeihnung in ein bestimmtes Bild
         //  zRObj: Das Bild, in das gezeichnet werden soll
-        __declspec( dllexport ) void render( Mat3< float > &kamMat, Bild &zRObj ) override;
+        __declspec( dllexport ) void render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName ) override;
         // Gibt zurück, ob ein Punkt in dem Model enthalten ist
         //  p: Der Punkt
         __declspec( dllexport ) bool istPunktInnen( Vertex p ) const override;

+ 29 - 15
Welt2D.cpp

@@ -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 );
     }
 }
 

+ 10 - 3
Welt2D.h

@@ -26,6 +26,7 @@ namespace Framework
         float rSpeed;
         float rotation;
         float size;
+        bool collision;
         int ref;
 
     public:
@@ -68,6 +69,9 @@ namespace Framework
         // Addiert zur Skallierung einen bestimmten Wert hinzu
         //  size: Der Wert, der zur skallierung hinzugefügt werden soll
         __declspec( dllexport ) void addSize( float size );
+        // Legt fest, ob andere Objekte mit diesem Objekt zusammenschtoßen können
+        //  handle: 0, falls keine Kollisionen existieren
+        __declspec( dllexport ) void setCollision( bool handle );
         // Prüft ob eine Collision mit einem anderen Objekt vorliegt und passt die Geschwindigkeiten beider Objekte entsprechend an
         __declspec( dllexport ) virtual bool handleCollision( Object2D *obj );
         // Verarbeitet vargangene Zeit und aktualisiert die Position und die Drehung des Objektes in der Welt
@@ -76,7 +80,7 @@ namespace Framework
         // Zeichnet das Objekt in ein Bild
         //  kamMat: Due Kamera Matrix, welche einen Punkt aus Weltkoordinaten in Bildschirmkoordinaten umwandelt
         //  zRObj: Das Bild, in welches gezeichnet werden soll
-        virtual void render( Mat3< float > &kamMat, Bild &zRObj ) = 0;
+        virtual void render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName ) = 0;
         // Gibt zurück, ob ein Punkt in dem Objekt enthalten ist
         //  p: Der Punkt
         __declspec( dllexport ) virtual bool istPunktInnen( Vertex p ) const;
@@ -127,6 +131,9 @@ namespace Framework
         __declspec( dllexport ) virtual float getLuftWiederstand() const;
         // Gibt die Masse des Objektes zurück
         __declspec( dllexport ) virtual float getMasse() const;
+        // Legt fest, ob andere Objekte mit diesem Objekt zusammenschtoßen können
+        //  return: 0, falls keine Kollisionen existieren
+        __declspec( dllexport ) bool canCollide();
         // Erhöht den Reference Counter um 1 und gibt this zurück
         __declspec( dllexport ) Object2D *getThis();
         // Verringert den Reference Counter um 1 (bei 0 löscht sich das Objekt selbst)
@@ -141,7 +148,7 @@ namespace Framework
         WeltInfo info;
         int ref;
 
-        void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, int xOffset, int yOffset );
+        void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, int xOffset, int yOffset, const char *kamName );
 
     public:
         __declspec( dllexport ) Welt2D();
@@ -156,7 +163,7 @@ namespace Framework
         __declspec( dllexport ) void explosion( Vertex worldPos, float intensity, float maxRad );
         __declspec( dllexport ) void impuls( Vertex worldPos, Vertex worldDir );
         __declspec( dllexport ) bool tick( double zeit );
-        __declspec( dllexport ) void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj );
+        __declspec( dllexport ) void render( Mat3< float > &kamMat, Punkt size, Bild &zRObj, const char *kamName );
         __declspec( dllexport ) const WeltInfo &getWorldInfo() const;
         __declspec( dllexport ) Welt2D *getThis();
         __declspec( dllexport ) Welt2D *release();