mirror of
https://github.com/zoriya/My3D.git
synced 2025-12-06 06:26:14 +00:00
Implementing a draw brush
This commit is contained in:
@@ -212,7 +212,7 @@ add_executable(My3D
|
||||
lib/gamacon/src/sfml_renderer/sfml_init.c
|
||||
lib/gamacon/src/sfml_renderer/sfml_events.c
|
||||
lib/gamacon/src/components/isometry/map_managment.c
|
||||
lib/gamacon/include/components/map_managment.h
|
||||
lib/gamacon/include/map_managment.h
|
||||
lib/xmlparser/src/otherget.c
|
||||
src/options.c
|
||||
lib/gamacon/src/components/input_component.c
|
||||
@@ -242,17 +242,17 @@ add_executable(My3D
|
||||
src/systems/game_manager_system.c
|
||||
include/systems/game_manager_system.h
|
||||
lib/gamacon/include/keybindings.h
|
||||
lib/gamacon/src/components/isometry/map_interactions.c
|
||||
lib/gamacon/include/map_interactions.h
|
||||
src/components/isometry/map_interactions.c
|
||||
include/map_interactions.h
|
||||
lib/gamacon/include/keybindings.h
|
||||
lib/gamacon/src/ui/tooltip.c
|
||||
lib/gamacon/src/components/tooltip_component.c
|
||||
lib/gamacon/include/components/tooltip_component.h
|
||||
lib/gamacon/src/systems/tooltip_system.c
|
||||
lib/gamacon/src/components/isometry/map_manager_component.c
|
||||
lib/gamacon/include/components/isometry/map_manager_component.h
|
||||
src/components/isometry/map_manager_component.c
|
||||
include/components/isometry/map_manager_component.h
|
||||
lib/gamacon/src/components/isometry/vertex_data_loader.c
|
||||
lib/gamacon/include/vertex_data_loader.h src/toolbar.c lib/gamacon/include/callbacks.h)
|
||||
lib/gamacon/include/vertex_data_loader.h src/toolbar.c lib/gamacon/include/callbacks.h src/selectors.c)
|
||||
|
||||
add_compile_options(-W -Wall -Wextra -Wshadow)
|
||||
|
||||
|
||||
BIN
assets/ui/texture.png
Normal file
BIN
assets/ui/texture.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 262 B |
28
include/components/isometry/map_manager_component.h
Normal file
28
include/components/isometry/map_manager_component.h
Normal file
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// Created by anonymus-raccoon on 3/10/20.
|
||||
//
|
||||
|
||||
#ifndef _MAP_MANAGER_COMPONENT_H_
|
||||
#define _MAP_MANAGER_COMPONENT_H_
|
||||
|
||||
#include "component.h"
|
||||
|
||||
enum brush
|
||||
{
|
||||
MOVE,
|
||||
RESET,
|
||||
ROTATE,
|
||||
TEXTURE
|
||||
};
|
||||
|
||||
struct map_manager_component
|
||||
{
|
||||
gc_component base;
|
||||
bool tile_mode;
|
||||
enum brush brush;
|
||||
void *selected_texture;
|
||||
};
|
||||
|
||||
const struct map_manager_component map_manager_component;
|
||||
|
||||
#endif //_MAP_MANAGER_COMPONENT_H_
|
||||
19
include/map_interactions.h
Normal file
19
include/map_interactions.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
** EPITECH PROJECT, 2020
|
||||
** Gamacon
|
||||
** File description:
|
||||
** map_interactions
|
||||
*/
|
||||
|
||||
|
||||
#ifndef MY3D_MAP_INTERACTIONS_H
|
||||
#define MY3D_MAP_INTERACTIONS_H
|
||||
|
||||
#include "engine.h"
|
||||
#include "vertex_component.h"
|
||||
#include "keybindings.h"
|
||||
|
||||
bool tile_interact(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \
|
||||
enum gc_mousekeys key);
|
||||
|
||||
#endif //MY3D_MAP_INTERACTIONS_H
|
||||
@@ -30,4 +30,5 @@ bool tile_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
bool up_down(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
bool reset(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
bool rotate(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
bool rotate(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
bool texture(gc_engine *engine, gc_entity *entity, gc_vector2 _);
|
||||
Submodule lib/gamacon updated: 609122329b...02861bab23
@@ -12,6 +12,7 @@
|
||||
<sprite name="up_down" src="assets/ui/up_down.png" />
|
||||
<sprite name="reset" src="assets/ui/reset.png" />
|
||||
<sprite name="rotate" src="assets/ui/rotate.png" />
|
||||
<sprite name="texture" src="assets/ui/texture.png" />
|
||||
<sprite name="cobblestone" src="assets/sprites/cobblestone.png" />
|
||||
<sprite name="comparator_on" src="assets/sprites/comparator_on.png" />
|
||||
<sprite name="mossy_cobblestone" src="assets/sprites/cobblestone_mossy.png" />
|
||||
@@ -49,12 +50,13 @@
|
||||
</teams_component>
|
||||
</gc_entity>
|
||||
|
||||
<panel src="panel" x="7%" y="3%" width="30%" height="6%"/>
|
||||
<panel src="panel" x="7%" y="3%" width="37%" height="6%"/>
|
||||
<button sprite="tile_select" x="3%" y="3%" width="%" height="3%" tooltip="Select a tile." tooltip_x="5" tooltip_y="-5" size="15" click="tile_select" />
|
||||
<button sprite="vertex_select" x="7%" y="3%" width="%" height="3%" tooltip="Select a Vertex." tooltip_y="-5" size="15" click="vertex_select" />
|
||||
<button sprite="up_down" x="12%" y="3%" width="%" height="3%" tooltip="Move a tiles.\n - Up with left click.\n - Down with right click" tooltip_y="-15" size="15" click="up_down" />
|
||||
<button sprite="reset" x="15%" y="3%" width="%" height="3%" tooltip="Reset the height of a tile." tooltip_y="-5" size="15" click="reset" />
|
||||
<button sprite="rotate" x="19%" y="3%" width="%" height="3%" tooltip="Rotate a texture" tooltip_y="-5" size="15" click="rotate" />
|
||||
<button sprite="texture" x="23%" y="3%" width="%" height="3%" tooltip="Change the texture of a tile" tooltip_y="-5" size="15" click="texture" />
|
||||
|
||||
<panel src="panel" x="100%" y="50%" width="50%" height="120%"/>
|
||||
<text text="TEAMS" x="88%" y="40"/>
|
||||
|
||||
73
src/components/isometry/map_interactions.c
Normal file
73
src/components/isometry/map_interactions.c
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
** EPITECH PROJECT, 2020
|
||||
** Gamacon
|
||||
** File description:
|
||||
** map_interactions
|
||||
*/
|
||||
|
||||
#include "map_interactions.h"
|
||||
#include "clickable_component.h"
|
||||
#include "entity.h"
|
||||
#include "my.h"
|
||||
#include <math.h>
|
||||
#include "components/transform_component.h"
|
||||
#include "map_managment.h"
|
||||
#include <stdlib.h>
|
||||
#include <components/isometry/map_manager_component.h>
|
||||
|
||||
void click_tile(gc_engine *engine, struct map_manager_component *manager, \
|
||||
struct tile *ret, bool is_left)
|
||||
{
|
||||
bool r = manager->brush == RESET;
|
||||
|
||||
switch (manager->brush) {
|
||||
case ROTATE:
|
||||
ret->data = (ret->data + (is_left ? 1 : -1U)) % 4;
|
||||
break;
|
||||
case TEXTURE:
|
||||
ret->texture = manager->selected_texture;
|
||||
break;
|
||||
case MOVE:
|
||||
case RESET:
|
||||
move_tile(engine, ret, ALL_VERTICES | is_left, r);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool tile_interact(gc_engine *engine, gc_entity *entity, gc_vector2 pos, \
|
||||
enum gc_mousekeys key)
|
||||
{
|
||||
struct vertex_component *map = GETCMP(entity, vertex_component);
|
||||
struct map_manager_component *manager = GETCMP(entity, map_manager_component);
|
||||
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);
|
||||
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);
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
|
||||
void move_tile(gc_engine *engine, struct tile *ret, char mode, bool r)
|
||||
{
|
||||
int val = (mode & INVERT_ADD_VALUE) ? ADD_VALUE : -ADD_VALUE;
|
||||
|
||||
if (mode & VERTEX_0)
|
||||
ret->corners[0]->z += (r) ? -ret->corners[0]->z : val;
|
||||
if (mode & VERTEX_1)
|
||||
ret->corners[1]->z += (r) ? -ret->corners[1]->z : val;
|
||||
if (mode & VERTEX_2)
|
||||
ret->corners[2]->z += (r) ? -ret->corners[2]->z : val;
|
||||
if (mode & VERTEX_3)
|
||||
ret->corners[3]->z += (r) ? -ret->corners[3]->z : val;
|
||||
}
|
||||
55
src/components/isometry/map_manager_component.c
Normal file
55
src/components/isometry/map_manager_component.c
Normal file
@@ -0,0 +1,55 @@
|
||||
//
|
||||
// Created by anonymus-raccoon on 3/10/20.
|
||||
//
|
||||
|
||||
#include <components/isometry/map_manager_component.h>
|
||||
#include "engine.h"
|
||||
#include "entity.h"
|
||||
#include "xml.h"
|
||||
#include "my.h"
|
||||
|
||||
|
||||
static void ctr(void *comp, va_list args)
|
||||
{
|
||||
struct map_manager_component *cmp = (struct map_manager_component *)comp;
|
||||
|
||||
cmp->tile_mode = true;
|
||||
cmp->brush = MOVE;
|
||||
}
|
||||
|
||||
static void fdctr(gc_entity *entity, gc_scene *scene, void *comp, node *n)
|
||||
{
|
||||
struct map_manager_component *cmp = (struct map_manager_component *)comp;
|
||||
void **data = scene->get_data(scene, "tiles", NULL);
|
||||
|
||||
cmp->tile_mode = true;
|
||||
cmp->brush = MOVE;
|
||||
if (data)
|
||||
cmp->selected_texture = data[0];
|
||||
}
|
||||
|
||||
static void dtr(void *component)
|
||||
{
|
||||
(void)component;
|
||||
}
|
||||
|
||||
static char *serialize(void *component)
|
||||
{
|
||||
(void)component;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
const struct map_manager_component map_manager_component = {
|
||||
base: {
|
||||
name: "map_manager_component",
|
||||
size: sizeof(struct map_manager_component),
|
||||
dependencies: (char *[]){
|
||||
NULL
|
||||
},
|
||||
ctr: &ctr,
|
||||
fdctr: &fdctr,
|
||||
dtr: &dtr,
|
||||
serialize: &serialize,
|
||||
destroy: &component_destroy
|
||||
}
|
||||
};
|
||||
@@ -39,6 +39,7 @@ const struct callback callbacks[] = {
|
||||
{"up_down", &up_down},
|
||||
{"reset", &reset},
|
||||
{"rotate", &rotate},
|
||||
{"texture", &texture},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
||||
34
src/selectors.c
Normal file
34
src/selectors.c
Normal file
@@ -0,0 +1,34 @@
|
||||
//
|
||||
// Created by anonymus-raccoon on 3/11/20.
|
||||
//
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <components/isometry/map_manager_component.h>
|
||||
#include "engine.h"
|
||||
#include "entity.h"
|
||||
|
||||
bool tile_select(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
{
|
||||
gc_scene *scene = engine->scene;
|
||||
gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
|
||||
struct map_manager_component *manager;
|
||||
|
||||
if (!list)
|
||||
return (false);
|
||||
manager = GETCMP(list->data, map_manager_component);
|
||||
manager->tile_mode = true;
|
||||
return (true);
|
||||
}
|
||||
|
||||
bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
{
|
||||
gc_scene *scene = engine->scene;
|
||||
gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
|
||||
struct map_manager_component *manager;
|
||||
|
||||
if (!list)
|
||||
return (false);
|
||||
manager = GETCMP(list->data, map_manager_component);
|
||||
manager->tile_mode = false;
|
||||
return (true);
|
||||
}
|
||||
@@ -7,32 +7,6 @@
|
||||
#include "engine.h"
|
||||
#include "entity.h"
|
||||
|
||||
bool tile_select(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
{
|
||||
gc_scene *scene = engine->scene;
|
||||
gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
|
||||
struct map_manager_component *manager;
|
||||
|
||||
if (!list)
|
||||
return (false);
|
||||
manager = GETCMP(list->data, map_manager_component);
|
||||
manager->tile_mode = true;
|
||||
return (true);
|
||||
}
|
||||
|
||||
bool vertex_select(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
{
|
||||
gc_scene *scene = engine->scene;
|
||||
gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
|
||||
struct map_manager_component *manager;
|
||||
|
||||
if (!list)
|
||||
return (false);
|
||||
manager = GETCMP(list->data, map_manager_component);
|
||||
manager->tile_mode = false;
|
||||
return (true);
|
||||
}
|
||||
|
||||
bool up_down(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
{
|
||||
gc_scene *scene = engine->scene;
|
||||
@@ -70,4 +44,17 @@ bool rotate(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
manager = GETCMP(list->data, map_manager_component);
|
||||
manager->brush = ROTATE;
|
||||
return (true);
|
||||
}
|
||||
|
||||
bool texture(gc_engine *engine, gc_entity *entity, gc_vector2 _)
|
||||
{
|
||||
gc_scene *scene = engine->scene;
|
||||
gc_list *list = scene->get_entity_by_cmp(scene, "map_manager_component");
|
||||
struct map_manager_component *manager;
|
||||
|
||||
if (!list)
|
||||
return (false);
|
||||
manager = GETCMP(list->data, map_manager_component);
|
||||
manager->brush = TEXTURE;
|
||||
return (true);
|
||||
}
|
||||
Reference in New Issue
Block a user