#include "MiniGame.h" #include #include #include #include #include // Inhalt der Minigame Klasse aus MiniGame.h // Konstruktor MiniGame::MiniGame( char *name ) { xPos = 0; yPos = 0; xAbs = 0; yAbs = 0; zXPos = 0; zYPos = 0; xSpeed = 0; ySpeed = 0; this->name = new Text( name ); bgBild = 0; mausAlpha = new AlphaFeld(); mausAlpha->setSize( 248, 98 ); mausAlpha->setFarbe( 0xFF00FF00 ); mausAlpha->setStrength( 50 ); rahmen = new LRahmen(); rahmen->setSize( 250, 100 ); rahmen->setFarbe( 0xFFFFFFFF ); rahmen->setRamenBreite( 1 ); sichtbar = 1; alpha = 0; mausIn = 0; ok = 1; rend = 0; ref = 1; Text *pfad = new Text( "data/Minigames/" ); pfad->append( name ); if( !DateiExistiert( pfad->getThis() ) ) { ok = 0; pfad->release(); return; } pfad->append( "/mg.ini" ); if( !DateiExistiert( pfad->getThis() ) ) { ok = 0; pfad->release(); return; } InitDatei *mgIni = new InitDatei( pfad ); if( !mgIni->laden() ) { ok = 0; mgIni->release(); return; } if( !mgIni->wertExistiert( "TitelBild" ) || !mgIni->wertExistiert( "TitelBildPfad" ) || !mgIni->wertExistiert( "DllPfad" ) ) { ok = 0; mgIni->release(); return; } Text *bPfad = new Text( "data/Minigames/" ); bPfad->append( name ); bPfad->append( "/" ); bPfad->append( mgIni->zWert( "TitelBildPfad" )->getText() ); if( !DateiExistiert( bPfad->getThis() ) ) { ok = 0; bPfad->release(); mgIni->release(); return; } LTDBDatei *bDat = new LTDBDatei(); bDat->setDatei( bPfad ); bDat->leseDaten( 0 ); bgBild = bDat->laden( 0, mgIni->getWert( "TitelBild" ) ); bDat->release(); mgIni->release(); if( !bgBild ) ok = 0; } // Destruktor MiniGame::~MiniGame() { name->release(); if( bgBild ) bgBild->release(); mausAlpha->release(); rahmen->release(); } // nicht constant void MiniGame::setPosition( int x, int y ) { if( !xPos && !yPos ) { xPos = x; yPos = y; } zXPos = x; zYPos = y; xAbs = (int)( zXPos - xPos ); yAbs = (int)( zYPos - yPos ); } void MiniGame::setSichtbar( bool sichtbar ) { this->sichtbar = sichtbar; } void MiniGame::doMausEreignis( MausEreignis &me ) { if( !this->sichtbar ) return; if( me.mx > xPos && me.mx < xPos + 250 && me.my > yPos && me.my < yPos + 100 ) { if( !mausIn ) { rend = 1; rahmen->setFarbe( 0xFF00FF00 ); } mausIn = 1; } else { if( mausIn ) { rend = 1; rahmen->setFarbe( 0xFFFFFFFF ); } mausIn = 0; } me.verarbeitet |= mausIn; } bool MiniGame::tick( double z ) { bool ret = rend; rend = 0; int val = (int)( z * 150 ); if( sichtbar && alpha != 255 ) { if( alpha + val > 255 ) alpha = 255; else alpha += val; ret = 1; } if( !sichtbar && alpha ) { if( alpha - val < 0 ) alpha = 0; else alpha -= val; ret = 1; } if( xPos != zXPos || yPos != zYPos ) { if( xPos != zXPos ) { if( xAbs > 0 ) { if( zXPos - xPos >= xAbs / 2 ) xSpeed += xAbs * z; else { xSpeed -= xAbs * z; if( xSpeed < zXPos - xPos ) xSpeed += xAbs * z; } } else { if( zXPos - xPos <= xAbs / 2 ) xSpeed += xAbs * z; else { xSpeed -= xAbs * z; if( xSpeed > zXPos - xPos ) xSpeed += xAbs * z; } } } if( yPos != zYPos ) { if( yAbs > 0 ) { if( zYPos - yPos >= yAbs / 2 ) ySpeed += yAbs * z; else { ySpeed -= yAbs * z; if( ySpeed < zYPos - yPos ) ySpeed += yAbs * z; } } else { if( zYPos - yPos <= yAbs / 2 ) ySpeed += yAbs * z; else { ySpeed -= yAbs * z; if( ySpeed > zYPos - yPos ) ySpeed += yAbs * z; } } } xPos += xSpeed * z; yPos += ySpeed * z; if( xAbs > 0 ) { if( xPos >= zXPos ) { xPos = zXPos; xSpeed = 0; } } else { if( xPos <= zXPos ) { xPos = zXPos; xSpeed = 0; } } if( yAbs > 0 ) { if( yPos >= zYPos ) { yPos = zYPos; ySpeed = 0; } } else { if( yPos <= zYPos ) { yPos = zYPos; ySpeed = 0; } } ret = 1; } return ret; } void MiniGame::render( Bild &zRObj ) { zRObj.setAlpha( alpha ); zRObj.drawBild( (int)( xPos ), (int)( yPos ), 250, 100, *bgBild ); rahmen->setPosition( (int)xPos, (int)yPos ); rahmen->render( zRObj ); if( mausIn ) { mausAlpha->setPosition( (int)xPos + 1, (int)yPos + 1 ); mausAlpha->render( zRObj ); } zRObj.releaseAlpha(); } // constant Text *MiniGame::zName() { return name; } bool MiniGame::istOk() const { return ok; } // Reference Counting MiniGame *MiniGame::getThis() { ref++; return this; } MiniGame *MiniGame::release() { ref--; if( !ref ) delete this; return 0; }