aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/facade/SDLContext.cpp14
-rw-r--r--src/crepe/system/RenderSystem.cpp12
-rw-r--r--src/crepe/system/RenderSystem.h2
-rw-r--r--src/crepe/util/AbsoluutPosition.cpp20
-rw-r--r--src/crepe/util/AbsoluutPosition.h14
-rw-r--r--src/crepe/util/CMakeLists.txt2
6 files changed, 50 insertions, 14 deletions
diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp
index f350250..d352adc 100644
--- a/src/crepe/facade/SDLContext.cpp
+++ b/src/crepe/facade/SDLContext.cpp
@@ -28,6 +28,7 @@
#include "SDLContext.h"
#include "Texture.h"
#include "types.h"
+#include "util/AbsoluutPosition.h"
using namespace crepe;
using namespace std;
@@ -148,8 +149,7 @@ SDL_FRect SDLContext::get_dst_rect(const DestinationRectangleData & ctx) const {
}
size *= cam_aux_data.render_scale * ctx.img_scale * data.scale_offset;
- vec2 screen_pos = (ctx.pos + data.position_offset - cam_aux_data.cam_pos
- + (cam_aux_data.zoomed_viewport) / 2)
+ vec2 screen_pos = (ctx.pos - cam_aux_data.cam_pos + (cam_aux_data.zoomed_viewport) / 2)
* cam_aux_data.render_scale
- size / 2 + cam_aux_data.bar_size;
@@ -195,7 +195,7 @@ void SDLContext::draw_text(const RenderText & data) {
const Text & text = data.text;
const Font & font = data.font;
- const Transform & transform = data.transform;
+ vec2 absoluut_pos = AbsoluutPosition::get_position(data.transform, data.text.offset);
std::unique_ptr<SDL_Surface, std::function<void(SDL_Surface *)>> font_surface;
std::unique_ptr<SDL_Texture, std::function<void(SDL_Texture *)>> font_texture;
@@ -220,8 +220,8 @@ void SDLContext::draw_text(const RenderText & data) {
font_texture
= {tmp_font_texture, [](SDL_Texture * texture) { SDL_DestroyTexture(texture); }};
- vec2 size = text.dimensions * cam_aux_data.render_scale * transform.scale;
- vec2 screen_pos = (transform.position + text.offset - cam_aux_data.cam_pos
+ vec2 size = text.dimensions * cam_aux_data.render_scale * data.transform.scale;
+ vec2 screen_pos = (absoluut_pos + text.offset - cam_aux_data.cam_pos
+ (cam_aux_data.zoomed_viewport) / 2)
* cam_aux_data.render_scale
- size / 2 + cam_aux_data.bar_size;
@@ -233,8 +233,8 @@ void SDLContext::draw_text(const RenderText & data) {
.h = size.y,
};
- SDL_RenderCopyExF(this->game_renderer.get(), font_texture.get(), NULL, &dstrect, transform.rotation, NULL,
- SDL_FLIP_NONE);
+ SDL_RenderCopyExF(this->game_renderer.get(), font_texture.get(), NULL, &dstrect,
+ data.transform.rotation, NULL, SDL_FLIP_NONE);
}
void SDLContext::update_camera_view(const Camera & cam, const vec2 & new_pos) {
diff --git a/src/crepe/system/RenderSystem.cpp b/src/crepe/system/RenderSystem.cpp
index bf2bfd3..ba09530 100644
--- a/src/crepe/system/RenderSystem.cpp
+++ b/src/crepe/system/RenderSystem.cpp
@@ -21,6 +21,7 @@
#include "RenderSystem.h"
#include "types.h"
+#include "util/AbsoluutPosition.h"
using namespace crepe;
using namespace std;
@@ -99,8 +100,7 @@ void RenderSystem::render_text() {
}
}
-bool RenderSystem::render_particle(const Sprite & sprite, const double & scale) {
-
+bool RenderSystem::render_particle(const Sprite & sprite, const Transform & tm){
ComponentManager & mgr = this->mediator.component_manager;
SDLContext & ctx = this->mediator.sdl_context;
ResourceManager & resource_manager = this->mediator.resource_manager;
@@ -122,9 +122,9 @@ bool RenderSystem::render_particle(const Sprite & sprite, const double & scale)
ctx.draw(SDLContext::RenderContext{
.sprite = sprite,
.texture = res,
- .pos = p.position,
+ .pos = AbsoluutPosition::get_position(tm, em.data.offset + sprite.data.position_offset),
.angle = p.angle,
- .scale = scale,
+ .scale = tm.scale,
});
}
}
@@ -138,7 +138,7 @@ void RenderSystem::render_normal(const Sprite & sprite, const Transform & tm) {
ctx.draw(SDLContext::RenderContext{
.sprite = sprite,
.texture = res,
- .pos = tm.position,
+ .pos = AbsoluutPosition::get_position(tm, sprite.data.position_offset),
.angle = tm.rotation,
.scale = tm.scale,
});
@@ -158,7 +158,7 @@ void RenderSystem::render() {
const Transform & transform
= mgr.get_components_by_id<Transform>(sprite.game_object_id).front().get();
- bool rendered_particles = this->render_particle(sprite, transform.scale);
+ bool rendered_particles = this->render_particle(sprite, transform);
if (rendered_particles) continue;
diff --git a/src/crepe/system/RenderSystem.h b/src/crepe/system/RenderSystem.h
index d5385eb..762b11f 100644
--- a/src/crepe/system/RenderSystem.h
+++ b/src/crepe/system/RenderSystem.h
@@ -53,7 +53,7 @@ private:
* constructor is now protected i cannot make tmp inside
* \return true if particles have been rendered
*/
- bool render_particle(const Sprite & sprite, const double & scale);
+ bool render_particle(const Sprite & sprite, const Transform & tm);
/**
* \brief renders a sprite with a Transform component on the screen
*
diff --git a/src/crepe/util/AbsoluutPosition.cpp b/src/crepe/util/AbsoluutPosition.cpp
new file mode 100644
index 0000000..296cc09
--- /dev/null
+++ b/src/crepe/util/AbsoluutPosition.cpp
@@ -0,0 +1,20 @@
+#include "AbsoluutPosition.h"
+
+using namespace crepe;
+
+vec2 AbsoluutPosition::get_position(const Transform & transform, const vec2 & offset) {
+ // Get the rotation in radians
+ float radians1 = transform.rotation * (M_PI / 180.0);
+
+ // Calculate total offset with scale
+ vec2 total_offset = offset * transform.scale;
+
+ // Rotate
+ float rotated_total_offset_x1
+ = total_offset.x * cos(radians1) - total_offset.y * sin(radians1);
+ float rotated_total_offset_y1
+ = total_offset.x * sin(radians1) + total_offset.y * cos(radians1);
+
+ // Final positions considering scaling and rotation
+ return (transform.position + vec2(rotated_total_offset_x1, rotated_total_offset_y1));
+}
diff --git a/src/crepe/util/AbsoluutPosition.h b/src/crepe/util/AbsoluutPosition.h
new file mode 100644
index 0000000..30a7f93
--- /dev/null
+++ b/src/crepe/util/AbsoluutPosition.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "api/Transform.h"
+
+#include "types.h"
+
+namespace crepe {
+
+class AbsoluutPosition {
+public:
+ static vec2 get_position(const Transform & transform, const vec2 & offset);
+};
+
+} // namespace crepe
diff --git a/src/crepe/util/CMakeLists.txt b/src/crepe/util/CMakeLists.txt
index 94ed906..b4b9221 100644
--- a/src/crepe/util/CMakeLists.txt
+++ b/src/crepe/util/CMakeLists.txt
@@ -1,6 +1,7 @@
target_sources(crepe PUBLIC
LogColor.cpp
Log.cpp
+ AbsoluutPosition.cpp
)
target_sources(crepe PUBLIC FILE_SET HEADERS FILES
@@ -11,5 +12,6 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
Proxy.hpp
OptionalRef.h
OptionalRef.hpp
+ AbsoluutPosition.h
)