diff --git a/lib/gamacon b/lib/gamacon index b9532de..ba792b5 160000 --- a/lib/gamacon +++ b/lib/gamacon @@ -1 +1 @@ -Subproject commit b9532de65a036fa58b98717d076b5f0091507a1f +Subproject commit ba792b5fe3b54cadc80bd8a129c298f59c298ddd diff --git a/src/components/isometry/map_interactions.c b/src/components/isometry/map_interactions.c index f2a646e..ec677d8 100644 --- a/src/components/isometry/map_interactions.c +++ b/src/components/isometry/map_interactions.c @@ -34,27 +34,40 @@ struct tile *ret, bool is_left) } } -bool tile_interact(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \ -enum gc_mousekeys key) +void do_the_tile_interact(gc_engine *engine, void **dodge, \ +enum gc_mousekeys key, gc_vector2 pos) { - struct vertex_component *map = GETCMP(entity, vertex_component); - struct map_manager_component *manager = GETCMP(entity, map_manager_component); + int ind; + struct map_manager_component *manager = dodge[1]; + struct vertex_component *map = dodge[0]; struct tile *ret = get_tile_from_pos(map, pos); bool r = manager->brush == RESET; - int ind; - if (!map || !manager) { - my_printf("map not found\n"); - return (false); - } if (!ret) - return (false); + return; if (manager->tile_mode) click_tile(engine, manager, ret, key == GC_LEFT); else { ind = get_index_nearest_vertex(ret, pos); - move_tile(engine, ret, ((int) pow(2, ind + 1)) | (key == GC_LEFT), r); + move_tile(engine, ret, ((int) pow(2, ind + 1)) | (key == GC_LEFT), r); } +} + +bool tile_interact(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \ +enum gc_mousekeys key) +{ + struct map_manager_component *m = GETCMP(entity, map_manager_component); + struct transform_component *tc = GETCMP(entity, transform_component); + struct vertex_component *map = GETCMP(entity, vertex_component); + void *dodge[2] = {map, m}; + + if (!map || !m || !tc) { + my_printf("map not found\n"); + return (false); + } + pos.x -= tc->position.x; + pos.y += tc->position.y; + do_the_tile_interact(engine, dodge, key, pos); return (false); }