From 3ec83a6e436d55a7b0355debc62142107231ef6f Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Wed, 15 Apr 2020 15:31:06 +0200
Subject: [PATCH] Disabling movements when the player enter in a dialog
---
include/components/controllable_component.h | 3 +++
src/components/controllable_component.c | 12 ++++++++++++
src/systems/dialog_manager.c | 3 +++
src/systems/map_movement_system.c | 2 +-
4 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/include/components/controllable_component.h b/include/components/controllable_component.h
index 0d01263..99993dc 100644
--- a/include/components/controllable_component.h
+++ b/include/components/controllable_component.h
@@ -16,6 +16,9 @@ struct controllable_component
int movement_x;
int movement_y;
float move_callback;
+ bool can_move;
};
+void controllable_set_can_move(gc_scene *scene, bool value);
+
extern const struct controllable_component controllable_component;
\ No newline at end of file
diff --git a/src/components/controllable_component.c b/src/components/controllable_component.c
index 2f06114..3f2856d 100644
--- a/src/components/controllable_component.c
+++ b/src/components/controllable_component.c
@@ -19,6 +19,7 @@ component;
cmp->movement_x = 0;
cmp->movement_y = 0;
cmp->move_callback = 0;
+ cmp->can_move = true;
(void)args;
}
@@ -47,6 +48,17 @@ static char *controllable_serialize(void *component)
return (NULL);
}
+void controllable_set_can_move(gc_scene *scene, bool value)
+{
+ gc_list *list = scene->get_entity_by_cmp(scene, "controllable_component");
+ struct controllable_component *ctl;
+
+ for (; list; list = list->next) {
+ ctl = GETCMP(list->data, controllable_component);
+ ctl->can_move = value;
+ }
+}
+
const struct controllable_component controllable_component = {
base: {
name: "controllable_component",
diff --git a/src/systems/dialog_manager.c b/src/systems/dialog_manager.c
index b685117..e50d63d 100644
--- a/src/systems/dialog_manager.c
+++ b/src/systems/dialog_manager.c
@@ -6,6 +6,7 @@
*/
#include
+#include
#include "components/map_linker.h"
#include "text.h"
#include "my.h"
@@ -78,6 +79,7 @@ static void check_for_dialog(gc_engine *engine, va_list args)
return;
if (this->dialog_id == -1)
load_dialog(this, engine, entity);
+ controllable_set_can_move(scene, false);
holder_name = scene->get_entity(scene, 1336);
entity = scene->get_entity(scene, 1337);
if (!update_dialog(this, entity, holder_name, scene))
@@ -87,6 +89,7 @@ static void check_for_dialog(gc_engine *engine, va_list args)
((gc_entity *) li->data)->destroy(li->data, scene);
}
this->dialog_id = -1;
+ controllable_set_can_move(scene, true);
}
static void update_entity(gc_engine *engine, void *system, gc_entity *entity, \
diff --git a/src/systems/map_movement_system.c b/src/systems/map_movement_system.c
index aecd45a..d4c85db 100644
--- a/src/systems/map_movement_system.c
+++ b/src/systems/map_movement_system.c
@@ -68,7 +68,7 @@ float dtime)
gc_vector2i map_pos = get_new_map_pos(link, ctl);
struct tile *new_tile;
- if (!maps)
+ if (!maps || !ctl->can_move)
return;
map = GETCMP(maps->data, vertex_component);
new_tile = get_tile_at(map, map_pos);