diff --git a/assets/bg.sl2 b/assets/bg.si2 similarity index 100% rename from assets/bg.sl2 rename to assets/bg.si2 diff --git a/assets/hand_closed.si2 b/assets/hand_closed.si2 new file mode 100644 index 0000000..275c3d3 Binary files /dev/null and b/assets/hand_closed.si2 differ diff --git a/assets/hand_open.si2 b/assets/hand_open.si2 new file mode 100644 index 0000000..275c3d3 Binary files /dev/null and b/assets/hand_open.si2 differ diff --git a/assets/test.sl2 b/assets/test.sl2 deleted file mode 100644 index b36f595..0000000 Binary files a/assets/test.sl2 and /dev/null differ diff --git a/headers/pixelManager.h b/headers/pixelManager.h index b02aca2..b659679 100644 --- a/headers/pixelManager.h +++ b/headers/pixelManager.h @@ -18,7 +18,15 @@ class PixelManager{ public: MinGL& window; - nsGui::Sprite background = nsGui::Sprite("./assets/bg.sl2"); // you cant create an empty sprite for some reasons + /* + * Sprites are not const because for some reason the texture is associated with coordinates, + * and we have no way to dissociate them... + * So the objects are constantly updated with new coordinates as they need to be drawn + */ + nsGui::Sprite background = nsGui::Sprite("./assets/bg.si2"); + nsGui::Sprite handOpen = nsGui::Sprite("./assets/hand_open.si2"); + nsGui::Sprite handClosed = nsGui::Sprite("./assets/hand_closed.si2"); + explicit PixelManager(MinGL&); @@ -26,8 +34,9 @@ public: void drawInvaderB(const Position& baseVector, unsigned size, const RGBAcolor& color) const; void drawInvaderC(const Position& baseVector, unsigned size, const RGBAcolor& color) const; void drawPlayer(unsigned x, unsigned width, const nsGraphics::RGBAcolor& color) const; - void drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; void drawMissile(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; + void drawTorpedo(const Position& baseVector, unsigned width, const nsGraphics::RGBAcolor& color) const; + void drawSprite(nsGui::Sprite& sprite, const Position& pos) const; void drawBackground() const; PlayMode showInitialMenu() const; diff --git a/src/game/display.cpp b/src/game/display.cpp index 94a29f5..5e95024 100644 --- a/src/game/display.cpp +++ b/src/game/display.cpp @@ -47,4 +47,67 @@ void Game::displayInvader(const Position& pos, unsigned size, InvaderType type) return; } } -} \ No newline at end of file +} + + +void applyBezier(Position& pos, const Position& point, const double percent) { + pos += (point-pos)*percent; +} + +void Game::displayGod() const { + switch (god.state) { + case GodState::NONE: + return; + case GodState::LOAD: { + pm.displayGodBench(god.counter - GOD_BENCH_SIZE); + + Position leftHand = Position(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, god.counter - GOD_BENCH_SIZE); + Position rightHand = Position(GOD_HAND_DISTANCE, god.counter - GOD_BENCH_SIZE); + pm.displayGodLeftHand(leftHand); + pm.displayGodRightHand(rightHand); + } + case GodState::WAIT:{ + pm.displayGodBench(0); + + Position leftHand(GOD_HAND_DISTANCE, 0); + Position rightHand(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, 0); + pm.displayGodLeftHand(leftHand); + pm.displayGodRightHand(rightHand); + break; + } + case GodState::RETRIEVE1:{ + // Bezier curve + // counter goes [0-100] + + Position startPos(GOD_HAND_DISTANCE, 0); + Position endPos = basePos+Position(INV_POS(god.throwedInvPos.getX()), INV_POS(god.throwedInvPos.getY())); + + applyBezier(startPos, god.thrownTransition, god.counter/100); + applyBezier(startPos, endPos, god.counter/100); + + // startPos is now the position we need to draw our hand to + pm.displayGodRightHand(startPos); + pm.displayGodLeftHand(Position(GOD_HAND_DISTANCE, 0)); + + break; + } + case GodState::RETRIEVE2:{ + // similar with RETRIEVE1 + Position startPos(GOD_HAND_DISTANCE, 0); + Position endPos = basePos+Position(INV_POS(god.throwedInvPos.getX()), INV_POS(god.throwedInvPos.getY())); + + applyBezier(startPos, god.thrownTransition, 1-(god.counter/100)); + applyBezier(startPos, endPos, 1-(god.counter/100)); + + pm.displayGodRightHand(startPos); + pm.displayGodLeftHand(Position(GOD_HAND_DISTANCE, 0)); + + // but now, you come with me you invader ! +// pm.drawInvader1(); + break; + } + case GodState::THROW:{ + break; + } + } +} diff --git a/src/godThings.cpp b/src/godThings.cpp index eb51004..847e0e1 100644 --- a/src/godThings.cpp +++ b/src/godThings.cpp @@ -31,65 +31,3 @@ void Game::manageGod(){ } } } - -void applyBezier(Position& pos, const Position& point, const double percent) { - pos += (point-pos)*percent; -} - -void Game::displayGod() const { - switch (god.state) { - case GodState::NONE: - return; - case GodState::LOAD: { - pm.displayGodBench(god.counter - GOD_BENCH_SIZE); - - Position leftHand = Position(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, god.counter - GOD_BENCH_SIZE); - Position rightHand = Position(GOD_HAND_DISTANCE, god.counter - GOD_BENCH_SIZE); - pm.displayGodLeftHand(leftHand); - pm.displayGodRightHand(rightHand); - } - case GodState::WAIT:{ - pm.displayGodBench(0); - - Position leftHand(GOD_HAND_DISTANCE, 0); - Position rightHand(pm.getScreenWidth()-GOD_HAND_DISTANCE-GOD_HAND_SIZE, 0); - pm.displayGodLeftHand(leftHand); - pm.displayGodRightHand(rightHand); - break; - } - case GodState::RETRIEVE1:{ - // Bezier curve - // counter goes [0-100] - - Position startPos(GOD_HAND_DISTANCE, 0); - Position endPos = basePos+Position(INV_POS(god.throwedInvPos.getX()), INV_POS(god.throwedInvPos.getY())); - - applyBezier(startPos, god.thrownTransition, god.counter/100); - applyBezier(startPos, endPos, god.counter/100); - - // startPos is now the position we need to draw our hand to - pm.displayGodRightHand(startPos); - pm.displayGodLeftHand(Position(GOD_HAND_DISTANCE, 0)); - - break; - } - case GodState::RETRIEVE2:{ - // similar with RETRIEVE1 - Position startPos(GOD_HAND_DISTANCE, 0); - Position endPos = basePos+Position(INV_POS(god.throwedInvPos.getX()), INV_POS(god.throwedInvPos.getY())); - - applyBezier(startPos, god.thrownTransition, 1-(god.counter/100)); - applyBezier(startPos, endPos, 1-(god.counter/100)); - - pm.displayGodRightHand(startPos); - pm.displayGodLeftHand(Position(GOD_HAND_DISTANCE, 0)); - - // but now, you come with me you invader ! -// pm.drawInvader1(); - break; - } - case GodState::THROW:{ - break; - } - } -} diff --git a/src/pixelManager.cpp b/src/pixelManager.cpp index d002324..4553f11 100644 --- a/src/pixelManager.cpp +++ b/src/pixelManager.cpp @@ -58,6 +58,16 @@ void PixelManager::drawTorpedo(const Position& baseVector, unsigned width, const window << nsShape::Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color); } +void PixelManager::drawSprite(nsGui::Sprite& sprite, const Position& pos) const { + /* + * no idea why the const qualifier is authorized since we modify object data with setPosition(), + * but since this modification isn't even "real" (see pixelManager.h), it's actually nice, I guess + */ + sprite.setPosition(pos); + + sprite.draw(window); +} + void PixelManager::drawBackground() const { background.draw(window); } diff --git a/unconverted_assets/bg.jpeg b/unconverted_assets/bg.jpeg new file mode 100644 index 0000000..4f26c68 Binary files /dev/null and b/unconverted_assets/bg.jpeg differ diff --git a/assets/hand_closed.png b/unconverted_assets/hand_closed.png similarity index 100% rename from assets/hand_closed.png rename to unconverted_assets/hand_closed.png diff --git a/assets/hand_open.png b/unconverted_assets/hand_open.png similarity index 100% rename from assets/hand_open.png rename to unconverted_assets/hand_open.png