diff --git a/assets/games/liminal/prefabs/EthPrefab.xml b/assets/games/liminal/prefabs/EthPrefab.xml index aaffb9e6..8a401037 100644 --- a/assets/games/liminal/prefabs/EthPrefab.xml +++ b/assets/games/liminal/prefabs/EthPrefab.xml @@ -1,43 +1,65 @@ - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + - TilesetGrid gridFace; - TilesetGrid gridBody; StateProperty<int32_t> faceTile; + StateProperty<int32_t> poseTile; - gridFace = TilesetGrid(faceDayHappy->texture, 1, 1); - faceSprite->tileset = &gridFace; - - gridBody = TilesetGrid(poseDayBack->texture, 1, 1); - bodySprite->tileset = &gridBody; + faceTile = 0; + poseTile = 0; useEffect([&]{ - faceMaterial->texture = ( - faceTile == 0 ? &faceDayHappy->texture : - faceTile == 1 ? &faceDayAnger->texture : - nullptr + faceMaterial->texture = &( + faceTile == 0 ? faceDayHappy->texture : + faceTile == 1 ? faceDayAnger->texture : + faceTile == 2 ? faceDayConfused->texture : + faceTile == 3 ? faceDayEyeroll->texture : + faceTile == 4 ? faceDayFear->texture : + faceTile == 5 ? faceDayHaughty->texture : + faceTile == 6 ? faceDayNeutral->texture : + faceTile == 7 ? faceDaySad->texture : + faceTile == 8 ? faceDaySurprised->texture : + faceDayHappy->texture ); }, faceTile)(); + + useEffect([&]{ + bodyMaterial->texture = &( + poseTile == 0 ? poseDayBack->texture : + poseTile == 1 ? poseDayCross->texture : + poseTile == 2 ? poseDayFront->texture : + poseTile == 3 ? poseDayHips->texture : + poseTile == 4 ? poseDayNeutral->texture : + poseDayBack->texture + ); + }, poseTile)(); \ No newline at end of file diff --git a/assets/games/liminal/scenes/SceneBase.xml b/assets/games/liminal/scenes/SceneBase.xml index 41d6745e..380d85a3 100644 --- a/assets/games/liminal/scenes/SceneBase.xml +++ b/assets/games/liminal/scenes/SceneBase.xml @@ -1,14 +1,19 @@ - + + + + + + + - - - - + + + diff --git a/assets/games/liminal/textures/CMakeLists.txt b/assets/games/liminal/textures/CMakeLists.txt index e80f5ffa..54f8c94b 100644 --- a/assets/games/liminal/textures/CMakeLists.txt +++ b/assets/games/liminal/textures/CMakeLists.txt @@ -3,7 +3,7 @@ # This software is released under the MIT License. # https://opensource.org/licenses/MIT -set(LIMINIAL_CHARACTER_SCALE 1.0) +set(LIMINIAL_CHARACTER_SCALE 1.00) include("${CMAKE_CURRENT_LIST_DIR}/eth/CMakeLists.txt") diff --git a/assets/games/liminal/textures/eth/faces/CMakeLists.txt b/assets/games/liminal/textures/eth/faces/CMakeLists.txt index a1310376..760548c0 100644 --- a/assets/games/liminal/textures/eth/faces/CMakeLists.txt +++ b/assets/games/liminal/textures/eth/faces/CMakeLists.txt @@ -3,48 +3,5 @@ # This software is released under the MIT License. # https://opensource.org/licenses/MIT - -tool_texture(texture_eth_face_day_anger - FILE="${CMAKE_CURRENT_LIST_DIR}/anger.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_confused - FILE="${CMAKE_CURRENT_LIST_DIR}/confused.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_eyeroll - FILE="${CMAKE_CURRENT_LIST_DIR}/eyeroll.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_fear - FILE="${CMAKE_CURRENT_LIST_DIR}/fear.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_happy - FILE="${CMAKE_CURRENT_LIST_DIR}/happy.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_haughty - FILE="${CMAKE_CURRENT_LIST_DIR}/haughty.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_neutral - FILE="${CMAKE_CURRENT_LIST_DIR}/neutral.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_sad - FILE="${CMAKE_CURRENT_LIST_DIR}/sad.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) - -tool_texture(texture_eth_face_day_surprised - FILE="${CMAKE_CURRENT_LIST_DIR}/surprised.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/day/CMakeLists.txt) +include(${CMAKE_CURRENT_LIST_DIR}/night/CMakeLists.txt) \ No newline at end of file diff --git a/assets/games/liminal/textures/eth/faces/day/CMakeLists.txt b/assets/games/liminal/textures/eth/faces/day/CMakeLists.txt new file mode 100644 index 00000000..08767b28 --- /dev/null +++ b/assets/games/liminal/textures/eth/faces/day/CMakeLists.txt @@ -0,0 +1,68 @@ +# Copyright (c) 2023 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + + +tool_texture(texture_eth_face_day_anger + FILE="${CMAKE_CURRENT_LIST_DIR}/anger.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_confused + FILE="${CMAKE_CURRENT_LIST_DIR}/confused.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_eyeroll + FILE="${CMAKE_CURRENT_LIST_DIR}/eyeroll.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_fear + FILE="${CMAKE_CURRENT_LIST_DIR}/fear.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_happy + FILE="${CMAKE_CURRENT_LIST_DIR}/happy.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_haughty + FILE="${CMAKE_CURRENT_LIST_DIR}/haughty.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_neutral + FILE="${CMAKE_CURRENT_LIST_DIR}/neutral.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_sad + FILE="${CMAKE_CURRENT_LIST_DIR}/sad.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_day_surprised + FILE="${CMAKE_CURRENT_LIST_DIR}/surprised.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) \ No newline at end of file diff --git a/assets/games/liminal/textures/eth/faces/anger.png b/assets/games/liminal/textures/eth/faces/day/anger.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/anger.png rename to assets/games/liminal/textures/eth/faces/day/anger.png diff --git a/assets/games/liminal/textures/eth/faces/confused.png b/assets/games/liminal/textures/eth/faces/day/confused.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/confused.png rename to assets/games/liminal/textures/eth/faces/day/confused.png diff --git a/assets/games/liminal/textures/eth/faces/eyeroll.png b/assets/games/liminal/textures/eth/faces/day/eyeroll.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/eyeroll.png rename to assets/games/liminal/textures/eth/faces/day/eyeroll.png diff --git a/assets/games/liminal/textures/eth/faces/fear.png b/assets/games/liminal/textures/eth/faces/day/fear.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/fear.png rename to assets/games/liminal/textures/eth/faces/day/fear.png diff --git a/assets/games/liminal/textures/eth/faces/happy.png b/assets/games/liminal/textures/eth/faces/day/happy.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/happy.png rename to assets/games/liminal/textures/eth/faces/day/happy.png diff --git a/assets/games/liminal/textures/eth/faces/haughty.png b/assets/games/liminal/textures/eth/faces/day/haughty.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/haughty.png rename to assets/games/liminal/textures/eth/faces/day/haughty.png diff --git a/assets/games/liminal/textures/eth/faces/neutral.png b/assets/games/liminal/textures/eth/faces/day/neutral.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/neutral.png rename to assets/games/liminal/textures/eth/faces/day/neutral.png diff --git a/assets/games/liminal/textures/eth/faces/sad.png b/assets/games/liminal/textures/eth/faces/day/sad.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/sad.png rename to assets/games/liminal/textures/eth/faces/day/sad.png diff --git a/assets/games/liminal/textures/eth/faces/surprised.png b/assets/games/liminal/textures/eth/faces/day/surprised.png similarity index 100% rename from assets/games/liminal/textures/eth/faces/surprised.png rename to assets/games/liminal/textures/eth/faces/day/surprised.png diff --git a/assets/games/liminal/textures/eth/faces/night/CMakeLists.txt b/assets/games/liminal/textures/eth/faces/night/CMakeLists.txt new file mode 100644 index 00000000..87774e17 --- /dev/null +++ b/assets/games/liminal/textures/eth/faces/night/CMakeLists.txt @@ -0,0 +1,68 @@ +# Copyright (c) 2023 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + + +tool_texture(texture_eth_face_night_anger + FILE="${CMAKE_CURRENT_LIST_DIR}/anger.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_confused + FILE="${CMAKE_CURRENT_LIST_DIR}/confused.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_eyeroll + FILE="${CMAKE_CURRENT_LIST_DIR}/eyeroll.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_fear + FILE="${CMAKE_CURRENT_LIST_DIR}/fear.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_happy + FILE="${CMAKE_CURRENT_LIST_DIR}/happy.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_haughty + FILE="${CMAKE_CURRENT_LIST_DIR}/haughty.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_neutral + FILE="${CMAKE_CURRENT_LIST_DIR}/neutral.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_sad + FILE="${CMAKE_CURRENT_LIST_DIR}/sad.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_face_night_surprised + FILE="${CMAKE_CURRENT_LIST_DIR}/surprised.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) \ No newline at end of file diff --git a/assets/games/liminal/textures/eth/faces/night/anger.png b/assets/games/liminal/textures/eth/faces/night/anger.png new file mode 100644 index 00000000..195eaf73 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/anger.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/confused.png b/assets/games/liminal/textures/eth/faces/night/confused.png new file mode 100644 index 00000000..f021e7e4 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/confused.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/eyeroll.png b/assets/games/liminal/textures/eth/faces/night/eyeroll.png new file mode 100644 index 00000000..cb13d5c0 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/eyeroll.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/fear.png b/assets/games/liminal/textures/eth/faces/night/fear.png new file mode 100644 index 00000000..784df083 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/fear.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/happy.png b/assets/games/liminal/textures/eth/faces/night/happy.png new file mode 100644 index 00000000..7a79dfdf Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/happy.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/haughty.png b/assets/games/liminal/textures/eth/faces/night/haughty.png new file mode 100644 index 00000000..bdebab56 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/haughty.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/neutral.png b/assets/games/liminal/textures/eth/faces/night/neutral.png new file mode 100644 index 00000000..2a3b24c8 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/neutral.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/sad.png b/assets/games/liminal/textures/eth/faces/night/sad.png new file mode 100644 index 00000000..80aa2fb4 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/sad.png differ diff --git a/assets/games/liminal/textures/eth/faces/night/surprised.png b/assets/games/liminal/textures/eth/faces/night/surprised.png new file mode 100644 index 00000000..79436d27 Binary files /dev/null and b/assets/games/liminal/textures/eth/faces/night/surprised.png differ diff --git a/assets/games/liminal/textures/eth/poses/CMakeLists.txt b/assets/games/liminal/textures/eth/poses/CMakeLists.txt index 01b891ec..760548c0 100644 --- a/assets/games/liminal/textures/eth/poses/CMakeLists.txt +++ b/assets/games/liminal/textures/eth/poses/CMakeLists.txt @@ -3,11 +3,5 @@ # This software is released under the MIT License. # https://opensource.org/licenses/MIT -tool_texture(texture_eth_pose_day_front -FILE="${CMAKE_CURRENT_LIST_DIR}/day_front.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) -tool_texture(texture_eth_pose_day_back - FILE="${CMAKE_CURRENT_LIST_DIR}/day_back.png" - SCALE=${LIMINIAL_CHARACTER_SCALE} -) \ No newline at end of file +include(${CMAKE_CURRENT_LIST_DIR}/day/CMakeLists.txt) +include(${CMAKE_CURRENT_LIST_DIR}/night/CMakeLists.txt) \ No newline at end of file diff --git a/assets/games/liminal/textures/eth/poses/day/CMakeLists.txt b/assets/games/liminal/textures/eth/poses/day/CMakeLists.txt new file mode 100644 index 00000000..2cb7e92f --- /dev/null +++ b/assets/games/liminal/textures/eth/poses/day/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copyright (c) 2023 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +tool_texture(texture_eth_pose_day_back + FILE="${CMAKE_CURRENT_LIST_DIR}/back.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_day_cross + FILE="${CMAKE_CURRENT_LIST_DIR}/cross.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_day_front + FILE="${CMAKE_CURRENT_LIST_DIR}/front.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_day_hips + FILE="${CMAKE_CURRENT_LIST_DIR}/hips.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_day_neutral + FILE="${CMAKE_CURRENT_LIST_DIR}/neutral.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) \ No newline at end of file diff --git a/assets/games/liminal/textures/eth/poses/day_back.png b/assets/games/liminal/textures/eth/poses/day/back.png similarity index 100% rename from assets/games/liminal/textures/eth/poses/day_back.png rename to assets/games/liminal/textures/eth/poses/day/back.png diff --git a/assets/games/liminal/textures/eth/poses/day_cross.png b/assets/games/liminal/textures/eth/poses/day/cross.png similarity index 100% rename from assets/games/liminal/textures/eth/poses/day_cross.png rename to assets/games/liminal/textures/eth/poses/day/cross.png diff --git a/assets/games/liminal/textures/eth/poses/day_front.png b/assets/games/liminal/textures/eth/poses/day/front.png similarity index 100% rename from assets/games/liminal/textures/eth/poses/day_front.png rename to assets/games/liminal/textures/eth/poses/day/front.png diff --git a/assets/games/liminal/textures/eth/poses/day_hips.png b/assets/games/liminal/textures/eth/poses/day/hips.png similarity index 100% rename from assets/games/liminal/textures/eth/poses/day_hips.png rename to assets/games/liminal/textures/eth/poses/day/hips.png diff --git a/assets/games/liminal/textures/eth/poses/day_neutral.png b/assets/games/liminal/textures/eth/poses/day/neutral.png similarity index 100% rename from assets/games/liminal/textures/eth/poses/day_neutral.png rename to assets/games/liminal/textures/eth/poses/day/neutral.png diff --git a/assets/games/liminal/textures/eth/poses/night/CMakeLists.txt b/assets/games/liminal/textures/eth/poses/night/CMakeLists.txt new file mode 100644 index 00000000..423020b2 --- /dev/null +++ b/assets/games/liminal/textures/eth/poses/night/CMakeLists.txt @@ -0,0 +1,39 @@ +# Copyright (c) 2023 Dominic Masters +# +# This software is released under the MIT License. +# https://opensource.org/licenses/MIT + +tool_texture(texture_eth_pose_night_back + FILE="${CMAKE_CURRENT_LIST_DIR}/back.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_night_cross + FILE="${CMAKE_CURRENT_LIST_DIR}/cross.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_night_front + FILE="${CMAKE_CURRENT_LIST_DIR}/front.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_night_hips + FILE="${CMAKE_CURRENT_LIST_DIR}/hips.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) + +tool_texture(texture_eth_pose_night_neutral + FILE="${CMAKE_CURRENT_LIST_DIR}/neutral.png" + SCALE=${LIMINIAL_CHARACTER_SCALE} + FILTER_MIN=nearest + FILTER_MAG=nearest +) \ No newline at end of file diff --git a/assets/games/liminal/textures/eth/poses/night/back.png b/assets/games/liminal/textures/eth/poses/night/back.png new file mode 100644 index 00000000..f09ffd36 Binary files /dev/null and b/assets/games/liminal/textures/eth/poses/night/back.png differ diff --git a/assets/games/liminal/textures/eth/poses/night/cross.png b/assets/games/liminal/textures/eth/poses/night/cross.png new file mode 100644 index 00000000..a14c3205 Binary files /dev/null and b/assets/games/liminal/textures/eth/poses/night/cross.png differ diff --git a/assets/games/liminal/textures/eth/poses/night/front.png b/assets/games/liminal/textures/eth/poses/night/front.png new file mode 100644 index 00000000..3b72c28a Binary files /dev/null and b/assets/games/liminal/textures/eth/poses/night/front.png differ diff --git a/assets/games/liminal/textures/eth/poses/night/hips.png b/assets/games/liminal/textures/eth/poses/night/hips.png new file mode 100644 index 00000000..275afa6a Binary files /dev/null and b/assets/games/liminal/textures/eth/poses/night/hips.png differ diff --git a/assets/games/liminal/textures/eth/poses/night/neutral.png b/assets/games/liminal/textures/eth/poses/night/neutral.png new file mode 100644 index 00000000..81776db9 Binary files /dev/null and b/assets/games/liminal/textures/eth/poses/night/neutral.png differ diff --git a/src/dawn/scene/components/display/CameraTexture.cpp b/src/dawn/scene/components/display/CameraTexture.cpp index 15a28d91..cdbf4437 100644 --- a/src/dawn/scene/components/display/CameraTexture.cpp +++ b/src/dawn/scene/components/display/CameraTexture.cpp @@ -10,34 +10,15 @@ using namespace Dawn; CameraTexture::CameraTexture(SceneItem *item) : SceneItemComponent(item), camera(nullptr), - renderTarget(32.0f, 32.0f), - updateOrtho(true) + renderTarget(32.0f, 32.0f) { } void CameraTexture::onStart() { if(this->camera == nullptr) this->camera = item->getComponent(); - auto effectCamera = [&]{ - if(this->camera == nullptr) return teardown = [&]{}; + useEffect([&]{ + if(this->camera == nullptr) return; this->camera->renderTarget = &this->renderTarget; - - if(!this->updateOrtho) return teardown = [&]{}; - - this->updateOrthoValues(); - return teardown = useEvent([&](float_t w, float_t h){ - this->updateOrthoValues(); - }, this->camera->eventRenderTargetResized); - }; - - useEffectWithTeardown(effectCamera, this->camera); - useEffectWithTeardown(effectCamera, this->updateOrtho)(); -} - -void CameraTexture::updateOrthoValues() { - assertNotNull(this->camera); - float_t wr = this->camera->renderTarget->getWidth() / this->camera->renderTarget->getHeight(); - wr *= 0.5f;//TODO: allow this to be editable - this->camera->orthoLeft = -wr; - this->camera->orthoRight = wr; + }, camera)(); } \ No newline at end of file diff --git a/src/dawn/scene/components/display/CameraTexture.hpp b/src/dawn/scene/components/display/CameraTexture.hpp index 3a92ced0..42e01275 100644 --- a/src/dawn/scene/components/display/CameraTexture.hpp +++ b/src/dawn/scene/components/display/CameraTexture.hpp @@ -9,22 +9,12 @@ namespace Dawn { class CameraTexture : public SceneItemComponent { - protected: - std::function teardown; - - void updateOrthoValues(); - public: // @optional StateProperty camera; - - // @optional - StateProperty updateOrtho; - TextureRenderTarget renderTarget; CameraTexture(SceneItem *item); - void onStart() override; }; } \ No newline at end of file diff --git a/src/dawn/scene/components/display/PixelPerfectCamera.cpp b/src/dawn/scene/components/display/PixelPerfectCamera.cpp index afba4121..ab0ccfb2 100644 --- a/src/dawn/scene/components/display/PixelPerfectCamera.cpp +++ b/src/dawn/scene/components/display/PixelPerfectCamera.cpp @@ -10,20 +10,16 @@ using namespace Dawn; PixelPerfectCamera::PixelPerfectCamera(SceneItem *i) : SceneItemComponent(i), - scale(1.0f) + scale(1.0f), + camera(nullptr) { } -std::vector PixelPerfectCamera::getDependencies() { - return std::vector{ - (this->camera = this->item->getComponent()) - }; -} - void PixelPerfectCamera::updateDimensions() { + if(this->camera == nullptr) return; + float_t w, h; - assertNotNull(this->camera); auto target = this->camera->getRenderTarget(); switch(this->camera->type) { @@ -52,14 +48,23 @@ void PixelPerfectCamera::updateDimensions() { } void PixelPerfectCamera::onStart() { - assertNotNull(this->camera); - this->updateDimensions(); - - useEvent([&](float_t w, float_t h){ - this->updateDimensions(); - }, this->camera->eventRenderTargetResized); - + if(camera == nullptr) camera = item->getComponent(); + useEffect([&]{ this->updateDimensions(); }, scale); + + useEffectWithTeardown([&]{ + if(!camera) { + return teardown = [&]{}; + } + + this->updateDimensions(); + + return teardown = [&]{ + useEvent([&](float_t w, float_t h){ + this->updateDimensions(); + }, this->camera->eventRenderTargetResized); + }; + }, camera)(); } \ No newline at end of file diff --git a/src/dawn/scene/components/display/PixelPerfectCamera.hpp b/src/dawn/scene/components/display/PixelPerfectCamera.hpp index e8949af0..6ba7ee59 100644 --- a/src/dawn/scene/components/display/PixelPerfectCamera.hpp +++ b/src/dawn/scene/components/display/PixelPerfectCamera.hpp @@ -9,14 +9,17 @@ namespace Dawn { class PixelPerfectCamera : public SceneItemComponent { protected: - Camera *camera = nullptr; - + std::function teardown; + /** * Updates the underlying camera's projection information. */ void updateDimensions(); public: + // @optional + StateProperty camera; + // @optional StateProperty scale; @@ -27,7 +30,6 @@ namespace Dawn { */ PixelPerfectCamera(SceneItem *item); - std::vector getDependencies() override; void onStart() override; }; } \ No newline at end of file diff --git a/src/dawnopengl/display/Texture.cpp b/src/dawnopengl/display/Texture.cpp index 64f3c1e6..40a7fc2a 100644 --- a/src/dawnopengl/display/Texture.cpp +++ b/src/dawnopengl/display/Texture.cpp @@ -122,34 +122,36 @@ void Texture::updateTextureProperties() { ) { switch(filter) { case TEXTURE_FILTER_MODE_NEAREST: { - switch(mapFilterMode) { - case TEXTURE_FILTER_MODE_NEAREST: - glTexParameteri(GL_TEXTURE_2D, minMag, GL_NEAREST_MIPMAP_NEAREST); - break; + glTexParameteri(GL_TEXTURE_2D, minMag, GL_NEAREST); + // switch(mapFilterMode) { + // case TEXTURE_FILTER_MODE_NEAREST: + // glTexParameteri(GL_TEXTURE_2D, minMag, GL_NEAREST_MIPMAP_NEAREST); + // break; - case TEXTURE_FILTER_MODE_LINEAR: - glTexParameteri(GL_TEXTURE_2D, minMag, GL_LINEAR_MIPMAP_NEAREST); - break; + // case TEXTURE_FILTER_MODE_LINEAR: + // glTexParameteri(GL_TEXTURE_2D, minMag, GL_LINEAR_MIPMAP_NEAREST); + // break; - default: - assertUnreachable(); - } + // default: + // assertUnreachable(); + // } break; } case TEXTURE_FILTER_MODE_LINEAR: { - switch(mapFilterMode) { - case TEXTURE_FILTER_MODE_NEAREST: - glTexParameteri(GL_TEXTURE_2D, minMag, GL_NEAREST_MIPMAP_LINEAR); - break; + glTexParameteri(GL_TEXTURE_2D, minMag, GL_LINEAR); + // switch(mapFilterMode) { + // case TEXTURE_FILTER_MODE_NEAREST: + // glTexParameteri(GL_TEXTURE_2D, minMag, GL_NEAREST_MIPMAP_LINEAR); + // break; - case TEXTURE_FILTER_MODE_LINEAR: - glTexParameteri(GL_TEXTURE_2D, minMag, GL_LINEAR_MIPMAP_LINEAR); - break; + // case TEXTURE_FILTER_MODE_LINEAR: + // glTexParameteri(GL_TEXTURE_2D, minMag, GL_LINEAR_MIPMAP_LINEAR); + // break; - default: - assertUnreachable(); - } + // default: + // assertUnreachable(); + // } break; } diff --git a/src/dawnopengl/scene/components/display/material/SimpleTexturedMaterial.cpp b/src/dawnopengl/scene/components/display/material/SimpleTexturedMaterial.cpp index 801eeaa6..f74235bd 100644 --- a/src/dawnopengl/scene/components/display/material/SimpleTexturedMaterial.cpp +++ b/src/dawnopengl/scene/components/display/material/SimpleTexturedMaterial.cpp @@ -38,7 +38,6 @@ std::vector SimpleTexturedMaterial::getRenderPasses(IRend onlyPass.renderFlags = ( RENDER_MANAGER_RENDER_FLAG_BLEND - // RENDER_MANAGER_RENDER_FLAG_DEPTH_TEST ); if(this->texture != nullptr) { diff --git a/src/dawntools/texturetool/TextureTool.cpp b/src/dawntools/texturetool/TextureTool.cpp index 7d129010..a01da438 100644 --- a/src/dawntools/texturetool/TextureTool.cpp +++ b/src/dawntools/texturetool/TextureTool.cpp @@ -17,7 +17,11 @@ std::map TextureTool::getOptionalFlags() { { "wrapY", "clamp" }, { "filterMin", "linear" }, { "filterMax", "linear" }, - { "scale", "" } + { "scale", "" }, + { "scaleWrapX", "clamp" }, + { "scaleWrapY", "clamp" }, + { "scaleFilterX", "nearest" }, + { "scaleFilterY", "nearest" } }; } @@ -45,11 +49,22 @@ int32_t TextureTool::start() { size_t len = STBI_rgb_alpha * w * h; uint8_t *dataImage = (uint8_t*)malloc(sizeof(uint8_t) * len); + float_t scale = 1; if(!flags["scale"].empty()) { - float_t scale = std::stof(flags["scale"]); - stbir_resize_uint8(imageRaw, w, h, 0, dataImage, w * scale, h * scale, 0, STBI_rgb_alpha); + scale = std::stof(flags["scale"]); + } + + if(scale != 1) { + stbir_resize_uint8_generic( + imageRaw, w, h, 0, + dataImage, w * scale, h * scale, 0, + STBI_rgb_alpha, -1, 0, + STBIR_EDGE_CLAMP, STBIR_FILTER_TRIANGLE, STBIR_COLORSPACE_LINEAR, + NULL + ); w = w * scale; h = h * scale; + printf("Changing size to %ix%i\n", w, h); } else { memcpy(dataImage, imageRaw, len); } diff --git a/src/dawntools/util/CodeGen.cpp b/src/dawntools/util/CodeGen.cpp index a0d90dc6..5ea6518f 100644 --- a/src/dawntools/util/CodeGen.cpp +++ b/src/dawntools/util/CodeGen.cpp @@ -55,6 +55,11 @@ void CodeGen::classGen( } line(out, "namespace Dawn {", ""); + auto itTemplates = info.classTemplates.begin(); + while(itTemplates != info.classTemplates.end()) { + line(out, "template<" + itTemplates->second + " " + itTemplates->first + ">", " "); + ++itTemplates; + } line(out, "class " + info.clazz + (info.extend.size() == 0 ? "{" : " : public " + info.extend + " {" ), " "); if(info.protectedCode.size() > 0) { line(out, "protected:", " "); diff --git a/src/dawntools/util/CodeGen.hpp b/src/dawntools/util/CodeGen.hpp index 1bcc454c..1dcf9861 100644 --- a/src/dawntools/util/CodeGen.hpp +++ b/src/dawntools/util/CodeGen.hpp @@ -14,6 +14,8 @@ namespace Dawn { std::string constructorArgs = ""; std::string extendArgs = ""; + std::map classTemplates; + std::vector constructorCode; std::vector protectedCode;