From b547de9cbbb34461786e915c22705605263b237a Mon Sep 17 00:00:00 2001 From: Foxar Date: Fri, 4 Dec 2020 16:50:25 +0100 Subject: [PATCH 1/8] Stretched water overlay to fullscreen, made it appear when camera's sugmerged, disabled the invalid rotation during submerging ( issue number #10 ), enlargened and fixed position of the island mesh. --- src/samples/dolphin/dolphin.cpp | 10 +++++----- src/samples/dolphin/objects/player.cpp | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index 8b622b3..323d9f6 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -29,15 +29,15 @@ void Dolphin::onInit() engine->renderer->disableVSync(); printf("loading island..\n"); - island.loadDff("sunnyisl/", "sunnyisl", 1.0F, false); + island.loadDff("sunnyisl/", "sunnyisl", 5.0F, false); printf("Loaded..\n"); island.rotation.x = -1.6F; - island.position.set(0.0F, 10.0F, 20.0F); + island.position.set(0.0F, 60.0F, 20.0F); island.shouldBeBackfaceCulled = true; island.shouldBeFrustumCulled = false; printf("Loading water overlay...\n"); - waterOverlay.size.set(100.0F, 100.0F); + waterOverlay.size.set(640.0F, 480.0F); Texture *watOverlayTex = texRepo->add("2d/", "underwater_overlay", PNG); watOverlayTex->addLink(waterOverlay.getId()); printf("Loaded.\n"); @@ -98,6 +98,6 @@ void Dolphin::onUpdate() engine->renderer->draw(skybox); engine->renderer->draw(waterbox); engine->renderer->draw(player.mesh); - //if (player.mesh.position.y < WATER_LEVEL) - //engine->renderer->draw(waterOverlay); + if (camera.position.y < WATER_LEVEL) + engine->renderer->draw(waterOverlay); } diff --git a/src/samples/dolphin/objects/player.cpp b/src/samples/dolphin/objects/player.cpp index 207dfdc..09e49b6 100755 --- a/src/samples/dolphin/objects/player.cpp +++ b/src/samples/dolphin/objects/player.cpp @@ -65,13 +65,14 @@ void Player::update(Pad &t_pad) isJumping = true; else isJumping = false; - + /* if (lift < 0) mesh.rotation.y = 1; else if (lift > 0) mesh.rotation.y = -1; else mesh.rotation.y = 0; + */ if (velocity > 0 && mesh.getCurrentAnimationFrame() == 0) { From c0ab97585c5b5ed4c1607ea93faa9052fa1f39d3 Mon Sep 17 00:00:00 2001 From: Foxar Date: Sat, 5 Dec 2020 22:04:38 +0100 Subject: [PATCH 2/8] Added: collectibles class. Collectibles are strewn around the level and can be 'picked up' (deactivated, won't be rendered), when the player gets close and jumps. --- src/samples/dolphin/Makefile | 1 + src/samples/dolphin/dolphin.cpp | 41 +++++++++++++++++++++ src/samples/dolphin/dolphin.hpp | 3 +- src/samples/dolphin/objects/collectible.cpp | 39 ++++++++++++++++++++ src/samples/dolphin/objects/collectible.hpp | 33 +++++++++++++++++ src/samples/dolphin/objects/player.cpp | 5 +++ src/samples/dolphin/objects/player.hpp | 1 + 7 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 src/samples/dolphin/objects/collectible.cpp create mode 100644 src/samples/dolphin/objects/collectible.hpp diff --git a/src/samples/dolphin/Makefile b/src/samples/dolphin/Makefile index c4e5f83..5c92574 100755 --- a/src/samples/dolphin/Makefile +++ b/src/samples/dolphin/Makefile @@ -5,6 +5,7 @@ TYRA_DIR = ./../../engine EE_OBJS = \ camera.o \ objects/player.o \ + objects/collectible.o \ dolphin.o \ main.o diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index 323d9f6..19f3df3 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -14,8 +14,11 @@ const u8 WATER_TILE_SCALE = 5.0F; const u8 WATER_SIZE = 100.0F; +const u8 OYSTERS_COUNT = 15.0F; + Dolphin::Dolphin(Engine *t_engine) : engine(t_engine), camera(&engine->screen) { + oysters = new Collectible[OYSTERS_COUNT]; } Dolphin::~Dolphin() {} @@ -58,6 +61,26 @@ void Dolphin::onInit() waterbox.rotation.x = Math::PI; waterbox.position.y = -100.F; + printf("Loading oyster dff\n"); + //oysters[0].loadDff("oyster/", "oyster", 1.F, false); + oysters[0].mesh.loadObj("oyster/", "oyster", 10.F, false); + printf("Loaded."); + oysters[0].mesh.shouldBeBackfaceCulled = false; + oysters[0].mesh.shouldBeFrustumCulled = false; + oysters[0].mesh.position.set(15, 0, 15); + texRepo->addByMesh("oyster/", oysters[0].mesh, BMP); + printf("Adding oyster texture.\n"); + for (int i = 1; i < OYSTERS_COUNT; i++) + { + printf("Processing oyster %d\n", i); + oysters[i].mesh.loadFrom(oysters[0].mesh); + oysters[i].mesh.shouldBeBackfaceCulled = false; + oysters[i].mesh.shouldBeFrustumCulled = false; + texRepo->getByMesh(oysters[0].mesh.getId(), oysters[0].mesh.getMaterial(0).getId()) + ->addLink(oysters[i].mesh.getId(), oysters[i].mesh.getMaterial(0).getId()); + oysters[i].mesh.position.set(i * -100, 5.0F, i * -100); + } + texRepo->addByMesh("dolphin/", player.mesh, BMP); texRepo->addByMesh("sunnyisl/", island, BMP); texRepo->addByMesh("skybox/", skybox, BMP); @@ -86,6 +109,17 @@ void Dolphin::onUpdate() water.position.z = (player.mesh.position.z / WATER_SIZE) * WATER_SIZE; } + for (int i = 0; i < OYSTERS_COUNT; i++) + { + Vector3 vecDist = oysters[i].mesh.position - player.mesh.position; + float dist = Math::sqrt(vecDist.x + vecDist.y + vecDist.z); + if (dist < 2 && player.getIsJumping() && oysters[i].isActive()) + { + printf("Pickup %d Dist %d\n", i, dist); + oysters[i].setActive(false); + } + } + if (player.mesh.position.y > WATER_LEVEL - 5) player.mesh.position.y = WATER_LEVEL - 5; @@ -97,6 +131,13 @@ void Dolphin::onUpdate() engine->renderer->draw(water); engine->renderer->draw(skybox); engine->renderer->draw(waterbox); + for (u8 i = 0; i < OYSTERS_COUNT; i++) + { + if (oysters[i].isActive()) + { + engine->renderer->draw(oysters[i].mesh); + } + } engine->renderer->draw(player.mesh); if (camera.position.y < WATER_LEVEL) engine->renderer->draw(waterOverlay); diff --git a/src/samples/dolphin/dolphin.hpp b/src/samples/dolphin/dolphin.hpp index 6c00556..9630f5e 100755 --- a/src/samples/dolphin/dolphin.hpp +++ b/src/samples/dolphin/dolphin.hpp @@ -11,7 +11,6 @@ #ifndef _DRIVER_ #define _DRIVER_ - #include #include #include @@ -21,6 +20,7 @@ #include #include "./camera.hpp" #include "./objects/player.hpp" +#include "./objects/collectible.hpp" class Dolphin : public Game { @@ -39,6 +39,7 @@ private: Player player; Camera camera; Mesh island, skybox, water, waterbox; + Collectible *oysters; TextureRepository *texRepo; Sprite waterOverlay; }; diff --git a/src/samples/dolphin/objects/collectible.cpp b/src/samples/dolphin/objects/collectible.cpp new file mode 100644 index 0000000..27ffb5c --- /dev/null +++ b/src/samples/dolphin/objects/collectible.cpp @@ -0,0 +1,39 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Michał Mostowik +*/ + +#include "collectible.hpp" + +#include +#include +#include +#include +#include + +Collectible::Collectible() +{ + mesh.loadObj("oyster/", "oyster", 10.F, false); + mesh.shouldBeFrustumCulled = false; + mesh.position.set(0.0F, 0.0F, 0.0f); + bActive = true; +} + +Collectible::~Collectible() +{ +} + +void Collectible::setActive(u8 b) +{ + bActive = b; +} + +u8 Collectible::isActive() +{ + return bActive; +} \ No newline at end of file diff --git a/src/samples/dolphin/objects/collectible.hpp b/src/samples/dolphin/objects/collectible.hpp new file mode 100644 index 0000000..a7adbd1 --- /dev/null +++ b/src/samples/dolphin/objects/collectible.hpp @@ -0,0 +1,33 @@ +/* +# ______ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2020, tyra - https://github.com/h4570/tyra +# Licenced under Apache License 2.0 +# Michał Mostowik +*/ + +#ifndef _COLLECTIBLE_ +#define _COLLECTIBLE_ + +#include "../camera.hpp" +#include + +class Collectible +{ + +public: + float rotation; + Mesh mesh; + Collectible(); + ~Collectible(); + void update(); + void setActive(u8 b); + u8 isActive(); + +private: + u8 bActive; +}; + +#endif diff --git a/src/samples/dolphin/objects/player.cpp b/src/samples/dolphin/objects/player.cpp index 09e49b6..87c4953 100755 --- a/src/samples/dolphin/objects/player.cpp +++ b/src/samples/dolphin/objects/player.cpp @@ -86,4 +86,9 @@ void Player::update(Pad &t_pad) mesh.position.x += Math::sin(mesh.rotation.z) * velocity * (isJumping + 1); mesh.position.y += lift; +} + +u8 Player::getIsJumping() +{ + return isJumping; } \ No newline at end of file diff --git a/src/samples/dolphin/objects/player.hpp b/src/samples/dolphin/objects/player.hpp index bd990be..fecbd51 100755 --- a/src/samples/dolphin/objects/player.hpp +++ b/src/samples/dolphin/objects/player.hpp @@ -26,6 +26,7 @@ public: Player(); ~Player(); void update(Pad &t_pad); + u8 getIsJumping(); private: u8 isJumping; From 0423e484a568af58a100e3d123b7c157a3175628 Mon Sep 17 00:00:00 2001 From: Foxar Date: Mon, 7 Dec 2020 14:28:56 +0100 Subject: [PATCH 3/8] Changed: Dolphin sample FOV is now 75.F, zoomed in the camera, increased the distance for collectibles pickup. --- src/samples/dolphin/camera.cpp | 2 +- src/samples/dolphin/dolphin.cpp | 2 +- src/samples/dolphin/main.cpp | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/samples/dolphin/camera.cpp b/src/samples/dolphin/camera.cpp index 0fb871f..5a9e61f 100755 --- a/src/samples/dolphin/camera.cpp +++ b/src/samples/dolphin/camera.cpp @@ -16,7 +16,7 @@ const float CAMERA_Y = 15.0F; Camera::Camera(ScreenSettings *t_screen) : CameraBase(t_screen, &position, &up) { - verticalLevel = 80.0F; + verticalLevel = 30.0F; up.x = 0.0F; up.y = 1.0F; up.z = 0.0F; diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index 19f3df3..bc3f35e 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -113,7 +113,7 @@ void Dolphin::onUpdate() { Vector3 vecDist = oysters[i].mesh.position - player.mesh.position; float dist = Math::sqrt(vecDist.x + vecDist.y + vecDist.z); - if (dist < 2 && player.getIsJumping() && oysters[i].isActive()) + if (dist < 2.5F && player.getIsJumping() && oysters[i].isActive()) { printf("Pickup %d Dist %d\n", i, dist); oysters[i].setActive(false); diff --git a/src/samples/dolphin/main.cpp b/src/samples/dolphin/main.cpp index 9c5f37e..d094a17 100755 --- a/src/samples/dolphin/main.cpp +++ b/src/samples/dolphin/main.cpp @@ -13,6 +13,7 @@ int main() { Engine engine = Engine(); + engine.screen.fov = 75.F; Dolphin game = Dolphin(&engine); game.engine->init(&game, 128); SleepThread(); From 6292c27c505c5f2a555ebbe5f184e2950c200534 Mon Sep 17 00:00:00 2001 From: Foxar Date: Mon, 7 Dec 2020 19:30:07 +0100 Subject: [PATCH 4/8] Added: Camera automatically shifts to an angle from behind the player. --- src/samples/dolphin/camera.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/samples/dolphin/camera.cpp b/src/samples/dolphin/camera.cpp index 5a9e61f..5c122f7 100755 --- a/src/samples/dolphin/camera.cpp +++ b/src/samples/dolphin/camera.cpp @@ -26,6 +26,10 @@ Camera::~Camera() {} void Camera::update(Pad &t_pad, Mesh &t_mesh) { + float cameraRot = (t_mesh.rotation.z * 180 / Math::PI) - (horizontalLevel * 180 / Math::PI); + cameraRot += 180; + cameraRot /= 15; + horizontalLevel += cameraRot / (180 / Math::PI); rotate(t_pad); followBy(t_mesh); Vector3 lookPos = Vector3(t_mesh.position.x, t_mesh.position.y + 10.0F, t_mesh.position.z); @@ -35,10 +39,10 @@ void Camera::update(Pad &t_pad, Mesh &t_mesh) void Camera::rotate(Pad &t_pad) { - if (t_pad.rJoyH <= 50) + if (t_pad.rJoyH <= 100) horizontalLevel -= 0.08; else if (t_pad.rJoyH >= 200) - horizontalLevel += 0.04; + horizontalLevel += 0.08; /* if (t_pad.rJoyV <= 50 && verticalLevel > 25.0F) verticalLevel -= 0.9F; From 32422b87eba981c8d1c5372d724b6829d013717e Mon Sep 17 00:00:00 2001 From: Foxar Date: Mon, 7 Dec 2020 20:08:11 +0100 Subject: [PATCH 5/8] Added: Collectibles now rotate, float up before disapeparing after being picked up. --- src/samples/dolphin/dolphin.cpp | 4 +++- src/samples/dolphin/objects/collectible.cpp | 22 +++++++++++++++++++++ src/samples/dolphin/objects/collectible.hpp | 4 +++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index bc3f35e..841be31 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -111,12 +111,14 @@ void Dolphin::onUpdate() for (int i = 0; i < OYSTERS_COUNT; i++) { + oysters[i].update(); Vector3 vecDist = oysters[i].mesh.position - player.mesh.position; float dist = Math::sqrt(vecDist.x + vecDist.y + vecDist.z); if (dist < 2.5F && player.getIsJumping() && oysters[i].isActive()) { printf("Pickup %d Dist %d\n", i, dist); - oysters[i].setActive(false); + //oysters[i].setActive(false); + oysters[i].disappear(); } } diff --git a/src/samples/dolphin/objects/collectible.cpp b/src/samples/dolphin/objects/collectible.cpp index 27ffb5c..e1c76a1 100644 --- a/src/samples/dolphin/objects/collectible.cpp +++ b/src/samples/dolphin/objects/collectible.cpp @@ -22,6 +22,7 @@ Collectible::Collectible() mesh.shouldBeFrustumCulled = false; mesh.position.set(0.0F, 0.0F, 0.0f); bActive = true; + bDisappearing = false; } Collectible::~Collectible() @@ -33,7 +34,28 @@ void Collectible::setActive(u8 b) bActive = b; } +void Collectible::disappear() +{ + bDisappearing = true; + lift = 10; +} + u8 Collectible::isActive() { return bActive; +} + +void Collectible::update() +{ + mesh.rotation.y += 0.08F; + if (bDisappearing) + { + mesh.position.y += lift; + lift = lift > 0 ? lift / 2 : 0; + if (lift < 1) + { + setActive(false); + bDisappearing = false; + } + } } \ No newline at end of file diff --git a/src/samples/dolphin/objects/collectible.hpp b/src/samples/dolphin/objects/collectible.hpp index a7adbd1..775eb70 100644 --- a/src/samples/dolphin/objects/collectible.hpp +++ b/src/samples/dolphin/objects/collectible.hpp @@ -23,11 +23,13 @@ public: Collectible(); ~Collectible(); void update(); + void disappear(); void setActive(u8 b); u8 isActive(); private: - u8 bActive; + u8 bActive, bDisappearing; + u8 lift; }; #endif From 83dce5cb9222e9974eb3e1ad3bcea4bcc0399795 Mon Sep 17 00:00:00 2001 From: Foxar Date: Mon, 7 Dec 2020 20:09:17 +0100 Subject: [PATCH 6/8] Changed: Slowed player rotation speed. --- src/samples/dolphin/objects/player.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/samples/dolphin/objects/player.cpp b/src/samples/dolphin/objects/player.cpp index 87c4953..125a3a5 100755 --- a/src/samples/dolphin/objects/player.cpp +++ b/src/samples/dolphin/objects/player.cpp @@ -45,9 +45,9 @@ void Player::update(Pad &t_pad) velocity = -1; if (t_pad.lJoyH >= 200) - mesh.rotation.z -= 0.1; + mesh.rotation.z -= 0.05; else if (t_pad.lJoyH <= 100) - mesh.rotation.z += 0.1; + mesh.rotation.z += 0.05; if (t_pad.rJoyV >= 200 && lift <= 1) lift += 0.2F; From 582b42c29e4af7560df7af32ff230b9c463ba620 Mon Sep 17 00:00:00 2001 From: Foxar Date: Tue, 8 Dec 2020 13:36:13 +0100 Subject: [PATCH 7/8] Changed: Optimization from code review PR #42 --- src/samples/dolphin/dolphin.cpp | 2 +- src/samples/dolphin/objects/collectible.cpp | 12 +----------- src/samples/dolphin/objects/collectible.hpp | 4 ++-- src/samples/dolphin/objects/player.cpp | 15 +++++---------- src/samples/dolphin/objects/player.hpp | 4 ++-- 5 files changed, 11 insertions(+), 26 deletions(-) diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index 841be31..36b766f 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -114,7 +114,7 @@ void Dolphin::onUpdate() oysters[i].update(); Vector3 vecDist = oysters[i].mesh.position - player.mesh.position; float dist = Math::sqrt(vecDist.x + vecDist.y + vecDist.z); - if (dist < 2.5F && player.getIsJumping() && oysters[i].isActive()) + if (dist < 2.5F && player.isJumping() && oysters[i].isActive()) { printf("Pickup %d Dist %d\n", i, dist); //oysters[i].setActive(false); diff --git a/src/samples/dolphin/objects/collectible.cpp b/src/samples/dolphin/objects/collectible.cpp index e1c76a1..9cd7d78 100644 --- a/src/samples/dolphin/objects/collectible.cpp +++ b/src/samples/dolphin/objects/collectible.cpp @@ -29,22 +29,12 @@ Collectible::~Collectible() { } -void Collectible::setActive(u8 b) -{ - bActive = b; -} - void Collectible::disappear() { bDisappearing = true; lift = 10; } -u8 Collectible::isActive() -{ - return bActive; -} - void Collectible::update() { mesh.rotation.y += 0.08F; @@ -58,4 +48,4 @@ void Collectible::update() bDisappearing = false; } } -} \ No newline at end of file +} diff --git a/src/samples/dolphin/objects/collectible.hpp b/src/samples/dolphin/objects/collectible.hpp index 775eb70..32795ea 100644 --- a/src/samples/dolphin/objects/collectible.hpp +++ b/src/samples/dolphin/objects/collectible.hpp @@ -24,8 +24,8 @@ public: ~Collectible(); void update(); void disappear(); - void setActive(u8 b); - u8 isActive(); + void setActive(const u8 &b) { bActive = b; } + u8 isActive() { return bActive; } private: u8 bActive, bDisappearing; diff --git a/src/samples/dolphin/objects/player.cpp b/src/samples/dolphin/objects/player.cpp index 125a3a5..aafe048 100755 --- a/src/samples/dolphin/objects/player.cpp +++ b/src/samples/dolphin/objects/player.cpp @@ -23,7 +23,7 @@ Player::Player() mesh.position.set(0.0F, 0.0F, 10.0f); mesh.rotation.x = -1.6F; mesh.setAnimSpeed(0.05F); - isJumping = false; + bIsJumping = false; } Player::~Player() @@ -62,9 +62,9 @@ void Player::update(Pad &t_pad) } if (mesh.getCurrentAnimationFrame() > 25 && mesh.getCurrentAnimationFrame() < 47) - isJumping = true; + bIsJumping = true; else - isJumping = false; + bIsJumping = false; /* if (lift < 0) mesh.rotation.y = 1; @@ -82,13 +82,8 @@ void Player::update(Pad &t_pad) } mesh.position.z += - Math::cos(mesh.rotation.z) * velocity * (isJumping + 1); + Math::cos(mesh.rotation.z) * velocity * (bIsJumping + 1); mesh.position.x += - Math::sin(mesh.rotation.z) * velocity * (isJumping + 1); + Math::sin(mesh.rotation.z) * velocity * (bIsJumping + 1); mesh.position.y += lift; } - -u8 Player::getIsJumping() -{ - return isJumping; -} \ No newline at end of file diff --git a/src/samples/dolphin/objects/player.hpp b/src/samples/dolphin/objects/player.hpp index fecbd51..c615d13 100755 --- a/src/samples/dolphin/objects/player.hpp +++ b/src/samples/dolphin/objects/player.hpp @@ -26,10 +26,10 @@ public: Player(); ~Player(); void update(Pad &t_pad); - u8 getIsJumping(); + const u8 &isJumping() { return bIsJumping; } private: - u8 isJumping; + u8 bIsJumping; Vector3 playerNextPosition; }; From 4557485cab0d53f9ca18cef6ae4304400d428291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Mostowik?= Date: Tue, 8 Dec 2020 14:20:00 +0100 Subject: [PATCH 8/8] Fixed datatype typos in dolphin.cpp --- src/samples/dolphin/dolphin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/samples/dolphin/dolphin.cpp b/src/samples/dolphin/dolphin.cpp index 36b766f..704a04b 100755 --- a/src/samples/dolphin/dolphin.cpp +++ b/src/samples/dolphin/dolphin.cpp @@ -11,10 +11,10 @@ #include "dolphin.hpp" #include "utils/math.hpp" -const u8 WATER_TILE_SCALE = 5.0F; -const u8 WATER_SIZE = 100.0F; +const u8 WATER_TILE_SCALE = 5; +const u8 WATER_SIZE = 100; -const u8 OYSTERS_COUNT = 15.0F; +const u8 OYSTERS_COUNT = 15; Dolphin::Dolphin(Engine *t_engine) : engine(t_engine), camera(&engine->screen) {