#include "MiniGame.h" #include #include #include #include #include // Inhalt der Minigame Klasse aus MiniGame.h // Konstruktor MiniGame::MiniGame(const char* name) : ReferenceCounter() { 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; Text* pfad = new Text("data/Minigames/"); pfad->append(name); if (!DateiExistiert(pfad->getText())) { ok = 0; pfad->release(); return; } pfad->append("/mg.ini"); if (!DateiExistiert(pfad->getText())) { 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->getText())) { 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::doPublicMausEreignis(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; }