mirror of
https://github.com/zoriya/Gamacon.git
synced 2026-05-28 09:27:29 +00:00
Updating position of entities linked to tiles
This commit is contained in:
@@ -48,6 +48,7 @@ SRC = src/engine/engine.c \
|
||||
src/systems/tooltip_system.c \
|
||||
src/systems/clickable_system.c \
|
||||
src/systems/fixed_to_cam_pseudosystem.c \
|
||||
src/systems/map_linker_system.c \
|
||||
src/engine/engine_system_builder.c \
|
||||
src/engine/engine_component_builder.c \
|
||||
src/engine/event_manager.c \
|
||||
|
||||
@@ -11,6 +11,15 @@
|
||||
|
||||
#include "component.h"
|
||||
|
||||
const gc_component map_linker;
|
||||
struct map_linker
|
||||
{
|
||||
gc_component base;
|
||||
struct tile *tile;
|
||||
};
|
||||
|
||||
const struct map_linker map_linker;
|
||||
|
||||
void map_linker_update_entity(gc_engine *engine, gc_entity *entity, \
|
||||
struct tile *tile, gc_vector2 map_offset);
|
||||
|
||||
#endif //MY_RPG_MAP_LINKER_H
|
||||
|
||||
@@ -10,8 +10,11 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "components/vertex_component.h"
|
||||
#include "systems/sfml_renderer_system.h"
|
||||
|
||||
bool get_vertices(struct vertex_component *this, node *n);
|
||||
bool get_tiles(struct vertex_component *this, gc_scene *scene, node *n);
|
||||
void isometry_update_entity(struct sfml_renderer_system *this, \
|
||||
gc_entity *entity, gc_engine *engine, float dt);
|
||||
|
||||
#endif //MY3D_CREATE_MAP_FUNCTIONS_H
|
||||
|
||||
+36
-12
@@ -5,15 +5,37 @@
|
||||
** map_linker.c
|
||||
*/
|
||||
|
||||
#include <components/renderer.h>
|
||||
#include "components/renderer.h"
|
||||
#include "component.h"
|
||||
#include "components/vertex_component.h"
|
||||
#include "components/map_linker.h"
|
||||
#include "map_utils.h"
|
||||
#include "my.h"
|
||||
|
||||
|
||||
static void ctr(void *component, va_list args)
|
||||
{
|
||||
gc_entity *entity = va_arg(args, gc_entity *);
|
||||
gc_scene *scene = va_arg(args, gc_scene *);
|
||||
gc_list *maps;
|
||||
struct vertex_component *vert;
|
||||
int x = va_arg(args, int);
|
||||
int y = va_arg(args, int);
|
||||
struct tile *tile;
|
||||
struct renderer *rend;
|
||||
|
||||
if (!scene || !(maps = scene->get_entity_by_cmp(scene, "vertex_component")))
|
||||
return;
|
||||
vert = GETCMP(maps->data, vertex_component);
|
||||
tile = get_tile_at(vert, (gc_vector2i){x, y});
|
||||
if (!tile) {
|
||||
my_printf("No tile found at %d, %d. Can't link entity to it.\n", x, y);
|
||||
return;
|
||||
}
|
||||
tile->entity = entity;
|
||||
rend = GETCMP(entity, renderer);
|
||||
if (rend)
|
||||
rend->is_visible = false;
|
||||
}
|
||||
|
||||
static void fdctr(gc_entity *entity, gc_scene *scene, void *component, node *n)
|
||||
@@ -50,15 +72,17 @@ static char *serialize(void *component)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
const gc_component map_linker = {
|
||||
name: "map_linker",
|
||||
size: sizeof(gc_component),
|
||||
dependencies: (char *[]) {
|
||||
NULL
|
||||
},
|
||||
ctr: &ctr,
|
||||
fdctr: &fdctr,
|
||||
dtr: &dtr,
|
||||
serialize: &serialize,
|
||||
destroy: &component_destroy
|
||||
const struct map_linker map_linker = {
|
||||
base: {
|
||||
name: "map_linker",
|
||||
size: sizeof(struct map_linker),
|
||||
dependencies: (char *[]) {
|
||||
NULL
|
||||
},
|
||||
ctr: &ctr,
|
||||
fdctr: &fdctr,
|
||||
dtr: &dtr,
|
||||
serialize: &serialize,
|
||||
destroy: &component_destroy
|
||||
}
|
||||
};
|
||||
@@ -53,7 +53,7 @@ gc_sprite *sprite, float dt)
|
||||
sprite->rect.width, sprite->rect.height
|
||||
});
|
||||
sfSprite_setPosition(rend->sprite, pos);
|
||||
sfmlrenderer_setorigin(rend, entity, sprite, tra);
|
||||
sfmlrenderer_setorigin(rend, entity, sprite, tra);
|
||||
sfRenderWindow_drawSprite(rend->window, rend->sprite, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
#include "map_utils.h"
|
||||
#include <stdint.h>
|
||||
#include <SFML/Graphics.h>
|
||||
#include <components/renderer.h>
|
||||
#include "isometry.h"
|
||||
#include "components/map_linker.h"
|
||||
#include "components/renderer.h"
|
||||
|
||||
static void tile_rotate(struct tile *tile, int *vertex_order)
|
||||
{
|
||||
@@ -56,7 +58,10 @@ gc_vector2 offset, struct tile *tile, float dt)
|
||||
sfRenderWindow_drawVertexArray(this->window, this->vertices, this->states);
|
||||
this->states->texture = NULL;
|
||||
if (tile->entity) {
|
||||
map_linker_update_entity(engine, tile->entity, tile, offset);
|
||||
renderer = GETCMP(tile->entity, renderer);
|
||||
if (!renderer)
|
||||
return;
|
||||
renderer->is_visible = true;
|
||||
this->system.update_entity(engine, this, tile->entity, dt);
|
||||
renderer->is_visible = false;
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
** EPITECH PROJECT, 2020
|
||||
** my_rpg
|
||||
** File description:
|
||||
** map_linker_system.c
|
||||
*/
|
||||
|
||||
#include <components/map_linker.h>
|
||||
#include "system.h"
|
||||
#include "map_utils.h"
|
||||
#include "components/transform_component.h"
|
||||
|
||||
void map_linker_update_entity(gc_engine *engine, gc_entity *entity, \
|
||||
struct tile *tile, gc_vector2 map_offset)
|
||||
{
|
||||
struct map_linker *link = GETCMP(entity, map_linker);
|
||||
struct transform_component *tra = GETCMP(entity, transform_component);
|
||||
struct vertex *c = tile->corners[0];
|
||||
|
||||
if (!link)
|
||||
return;
|
||||
link->tile = tile;
|
||||
if (!tra)
|
||||
return;
|
||||
tra->position = gc_vector2_from_coords(c->x, c->y, c->z);
|
||||
tra->position.x += map_offset.x;
|
||||
tra->position.y += map_offset.y;
|
||||
}
|
||||
Reference in New Issue
Block a user