From 7b4781a4cdf338eab2661e1309094937f088bc57 Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Mon, 9 Mar 2020 17:27:22 +0100
Subject: [PATCH] Reversing the click order
---
include/keybindings.h | 15 +++++++++++++++
include/list.h | 1 +
include/scene.h | 2 ++
src/scene/scene.c | 5 ++---
src/systems/clickable_system.c | 4 +++-
src/utility/list.c | 4 ++++
6 files changed, 27 insertions(+), 4 deletions(-)
create mode 100644 include/keybindings.h
diff --git a/include/keybindings.h b/include/keybindings.h
new file mode 100644
index 0000000..2374f93
--- /dev/null
+++ b/include/keybindings.h
@@ -0,0 +1,15 @@
+//
+// Created by anonymus-raccoon on 3/9/20.
+//
+
+#ifndef _KEYBINDINGS_H_
+#define _KEYBINDINGS_H_
+
+#include
+
+typedef enum gc_keybindings
+{
+ ESCAPE = sfKeyEscape
+} gc_keybindings;
+
+#endif //_KEYBINDINGS_H_
diff --git a/include/list.h b/include/list.h
index a3a13de..e2d0bae 100644
--- a/include/list.h
+++ b/include/list.h
@@ -13,6 +13,7 @@ struct gc_list
{
void *data;
gc_list *next;
+ gc_list *prev;
};
gc_list *list_add(gc_list *list, void *obj);
diff --git a/include/scene.h b/include/scene.h
index 1e25674..928be44 100644
--- a/include/scene.h
+++ b/include/scene.h
@@ -30,6 +30,8 @@ struct gc_scene
gc_list *callbacks;
callback_t (*get_callback)(gc_scene *this, char *name);
+
+ bool is_paused;
};
callback_t scene_get_callback(gc_scene *scene, char *name);
diff --git a/src/scene/scene.c b/src/scene/scene.c
index 51ab239..89430b5 100644
--- a/src/scene/scene.c
+++ b/src/scene/scene.c
@@ -41,11 +41,10 @@ gc_scene *scene_create(gc_engine *engine, const char *xmlpath)
gc_scene *scene = malloc(sizeof(gc_scene));
node *n = NULL;
- if (!scene)
- return (NULL);
- if (xmlpath && !(n = xml_parse(xmlpath)))
+ if (!scene || (xmlpath && !(n = xml_parse(xmlpath))))
return (NULL);
scene_load_data(engine, scene, n);
+ scene->is_paused = false;
scene->entities = NULL;
scene->entities_by_cmp = NULL;
scene->add_entity = &entity_add;
diff --git a/src/systems/clickable_system.c b/src/systems/clickable_system.c
index a197811..4a62d23 100644
--- a/src/systems/clickable_system.c
+++ b/src/systems/clickable_system.c
@@ -21,7 +21,9 @@ void clickable_onclick(gc_engine *engine, gc_vector2 position)
if (!scene)
return;
entities = scene->get_entity_by_cmp(scene, "clickable_component");
- for (gc_list *ent = entities; ent; ent = ent->next) {
+ while (entities->next)
+ entities = entities->next;
+ for (gc_list *ent = entities; ent; ent = ent->prev) {
tra = GETCMP(((gc_entity *)ent->data), transform_component);
if ((tra->position.x - tra->size.x / 2) <= position.x
&& (tra->position.y + tra->size.y / 2) >= position.y
diff --git a/src/utility/list.c b/src/utility/list.c
index fd2f7fb..a68e03e 100644
--- a/src/utility/list.c
+++ b/src/utility/list.c
@@ -14,11 +14,15 @@ gc_list *list_add(gc_list *list, void *obj)
if (!list) {
list = malloc(sizeof(gc_list));
+ if (list)
+ list->prev = NULL;
listconst = list;
} else {
while (list->next)
list = list->next;
list->next = malloc(sizeof(gc_list));
+ if (list->next)
+ list->next->prev = list;
list = list->next;
}
if (!list)