tile entities can be drawned and norm compliance has been made

This commit is contained in:
Clément Le Bihan
2020-03-30 18:52:26 +02:00
parent d7974c7ab0
commit 1a3b252066
5 changed files with 43 additions and 23 deletions
+2 -1
View File
@@ -67,7 +67,8 @@ SRC = src/engine/engine.c \
src/isometry/map_utils.c \
src/isometry/tile_collisions.c \
src/components/vertex_component.c \
src/isometry/vertex_data_loader.c
src/isometry/vertex_data_loader.c \
src/sfml_renderer/sfml_utilities.c
OBJ = $(SRC:%.c=%.o)
+3 -1
View File
@@ -34,4 +34,6 @@ struct vertex_component
struct vertex **vertices;
};
extern const struct vertex_component vertex_component;
extern const struct vertex_component vertex_component;
sfVector2f sfvector2f(gc_vector2 vector);
+1
View File
@@ -64,6 +64,7 @@ bool init_tile(struct tile *tile, gc_vector2i c, struct vertex **vertices, node
for (int i = 0; i < 4; i++)
tile->corners[i] = &vertices[arr[i].x][arr[i].y];
tile->data = 0;
tile->entity = NULL;
n = tile_get_data(c, n);
tmp = xml_gettmpstring(n, "texture", NULL);
tile->texture = scene->get_data(scene, "sprite", tmp);
+17
View File
@@ -0,0 +1,17 @@
/*
** EPITECH PROJECT, 2020
** MUL_my_runner_2019
** File description:
** sfml utilities
*/
#include "vector2.h"
#include "SFML/Graphics.h"
sfVector2f sfvector2f(gc_vector2 vector)
{
return ((sfVector2f){
vector.x,
vector.y
});
}
+20 -21
View File
@@ -17,14 +17,6 @@
#include <stdint.h>
#include <SFML/Graphics.h>
sfVector2f sfvector2f(gc_vector2 vector)
{
return ((sfVector2f){
vector.x,
vector.y
});
}
static void tile_rotate(struct tile *tile, int *vertex_order)
{
for (int j = 0; j < (tile->data & ROTATION_INFO); j++) {
@@ -53,9 +45,10 @@ struct tile *tile, gc_vector2 offset, sfVertex **v)
}
}
void sfmlrenderer_draw_tile(struct sfml_renderer_system *this, \
gc_vector2 offset, struct tile *tile)
void sfmlrenderer_draw_tile(gc_engine *engine, \
gc_vector2 offset, struct tile *tile, float dt)
{
struct sfml_renderer_system *this = GETSYS(engine, sfml_renderer_system);
sfVertex *v[4];
if (tile->corners[0]->z == INT32_MAX || !tile->corners[2]->y)
@@ -64,6 +57,20 @@ gc_vector2 offset, struct tile *tile)
this->states->texture = (sfTexture *) tile->texture;
sfRenderWindow_drawVertexArray(this->window, this->vertices, this->states);
this->states->texture = NULL;
if (tile->entity)
this->system.update_entity(engine, this, tile->entity, dt);
}
void sfmlrenderer_manage_hovered_tile(struct sfml_renderer_system *this, \
bool hovered)
{
sfColor colors[2] = {sfWhite, {180, 180, 180, 255}};
int sel = 0;
if (hovered)
sel = 1;
for (int j = 0; j < 4; j++)
sfVertexArray_getVertex(this->vertices, j)->color = colors[sel];
}
void sfmlrenderer_draw_tilemap(gc_engine *engine, gc_entity *entity, \
@@ -81,16 +88,8 @@ struct vertex_component *info, float dt)
if (!info || !info->map)
return;
tl = get_tile_from_pos(info, gc_vector2_add(pos, *(gc_vector2 *)&w));
for (i = 0; info->map[i].corners[0]; i++);
for (i--; i >= 0; i--) {
if (&info->map[i] == tl) {
for (int j = 0; j < 4; j++)
sfVertexArray_getVertex(this->vertices, j)->color = (sfColor) {180, 180, 180, 255};
}
sfmlrenderer_draw_tile(this, pos, &info->map[i]);
if (&info->map[i] == tl) {
for (int j = 0; j < 4; j++)
sfVertexArray_getVertex(this->vertices, j)->color = sfWhite;
}
for (i = 0; info->map[i].corners[0]; i++) {
sfmlrenderer_manage_hovered_tile(this, &info->map[i] == tl);
sfmlrenderer_draw_tile(engine, pos, &info->map[i], dt);
}
}