]> git.lizzy.rs Git - nothing.git/commitdiff
(#394) region -> regions
authorrexim <reximkut@gmail.com>
Fri, 26 Oct 2018 15:28:21 +0000 (22:28 +0700)
committerrexim <reximkut@gmail.com>
Fri, 26 Oct 2018 15:28:21 +0000 (22:28 +0700)
CMakeLists.txt
src/game/level/region.c [deleted file]
src/game/level/region.h [deleted file]
src/game/level/regions.c [new file with mode: 0644]
src/game/level/regions.h [new file with mode: 0644]

index 6dfda6fb877ef97d553e3d18d59691d5dba16feb..d9f75ca60c950c3e0cc8bc77597813db1f55f932 100644 (file)
@@ -57,7 +57,7 @@ add_executable(nothing
   src/ui/log.c
   src/str.c
   src/ui/history.c
-  src/game/level/region.c
+  src/game/level/regions.c
   src/color.h
   src/game.h
   src/game/camera.h
@@ -100,7 +100,7 @@ add_executable(nothing
   src/ui/log.h
   src/str.h
   src/ui/history.h
-  src/game/level/region.h
+  src/game/level/regions.h
   src/system/line_stream.h
   src/system/line_stream.c
 )
diff --git a/src/game/level/region.c b/src/game/level/region.c
deleted file mode 100644 (file)
index 94412ef..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <assert.h>
-
-#include "player.h"
-#include "region.h"
-#include "script/gc.h"
-#include "script/interpreter.h"
-#include "script/parser.h"
-#include "script/scope.h"
-#include "str.h"
-#include "system/error.h"
-#include "system/lt.h"
-#include "system/line_stream.h"
-
-/* TODO(#394): region is not integrated with the level format */
-struct Region
-{
-    Lt *lt;
-    Rect rect;
-    Gc *gc;
-    struct Scope scope;
-};
-
-Region *create_region(Rect rect, const char *script_src)
-{
-    assert(script_src);
-
-    Lt *lt = create_lt();
-    if (lt == NULL) {
-        return NULL;
-    }
-
-    Region *region = PUSH_LT(lt, malloc(sizeof(Region)), free);
-    if (region != NULL) {
-        throw_error(ERROR_TYPE_LIBC);
-        RETURN_LT(lt, NULL);
-    }
-    region->lt = lt;
-    region->rect = rect;
-
-    region->gc = PUSH_LT(lt, create_gc(), destroy_gc);
-    if (region->gc == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    region->scope = create_scope(region->gc);
-
-    while (*script_src != 0) {
-        struct ParseResult parse_result = read_expr_from_string(region->gc, script_src);
-        if (parse_result.is_error) {
-            fprintf(stderr, "Parsing error: %s\n", parse_result.error_message);
-            RETURN_LT(lt, NULL);
-        }
-
-        struct EvalResult eval_result = eval(
-            region->gc,
-            &region->scope,
-            parse_result.expr);
-        if (eval_result.is_error) {
-            fprintf(stderr, "Evaluation error: ");
-            print_expr_as_sexpr(stderr, eval_result.expr);
-            RETURN_LT(lt, NULL);
-        }
-
-        script_src = next_token(parse_result.end).begin;
-    }
-
-    /* TODO(#405): region does not check if the script provides on-enter and on-leave callbacks */
-
-    return region;
-}
-
-Region *create_region_from_stream(LineStream *line_stream)
-{
-    assert(line_stream);
-
-    Rect rect;
-
-    if (sscanf(
-            line_stream_next(line_stream),
-            "%f%f%f%f",
-            &rect.x, &rect.y,
-            &rect.w, &rect.h) < 0) {
-        throw_error(ERROR_TYPE_LIBC);
-        return NULL;
-    }
-
-    size_t n;
-    if (sscanf(
-            line_stream_next(line_stream),
-            "%lu\n",
-            &n) < 0) {
-        throw_error(ERROR_TYPE_LIBC);
-        return NULL;
-    }
-
-    /* TODO: script is not read */
-    char *script = NULL;
-
-    Region *region = create_region(rect, script);
-    if (region == NULL) {
-        return NULL;
-    }
-
-    free(script);
-
-    return region;
-}
-
-void destroy_region(Region *region)
-{
-    assert(region);
-    RETURN_LT0(region->lt);
-}
-
-void region_player_enter(Region *region, Player *player)
-{
-    assert(region);
-    assert(player);
-    /* TODO(#396): region_player_enter is not implemented */
-}
-
-void region_player_leave(Region *region, Player *player)
-{
-    assert(region);
-    assert(player);
-    /* TODO(#397): region_player_leave is not implemented */
-}
diff --git a/src/game/level/region.h b/src/game/level/region.h
deleted file mode 100644 (file)
index b93ad7e..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef REGION_H_
-#define REGION_H_
-
-#include "math/rect.h"
-
-typedef struct Region Region;
-typedef struct Player Player;
-typedef struct LineStream LineStream;
-
-Region *create_region(Rect rect, const char *script_src);
-Region *create_region_from_stream(LineStream *line_stream);
-void destroy_region(Region *region);
-
-void region_player_enter(Region *region, Player *player);
-void region_player_leave(Region *region, Player *player);
-
-#endif  // REGION_H_
diff --git a/src/game/level/regions.c b/src/game/level/regions.c
new file mode 100644 (file)
index 0000000..e18c53f
--- /dev/null
@@ -0,0 +1,127 @@
+#include <assert.h>
+
+#include "player.h"
+#include "regions.h"
+#include "script/gc.h"
+#include "script/interpreter.h"
+#include "script/parser.h"
+#include "script/scope.h"
+#include "str.h"
+#include "system/error.h"
+#include "system/lt.h"
+#include "system/line_stream.h"
+
+/* TODO(#394): regions is not integrated with the level format */
+struct Regions
+{
+    Lt *lt;
+    Rect rect;
+    Gc *gc;
+    struct Scope scope;
+};
+
+Regions *create_regions(Rect rect, const char *script_src)
+{
+    assert(script_src);
+
+    Lt *lt = create_lt();
+    if (lt == NULL) {
+        return NULL;
+    }
+
+    Regions *regions = PUSH_LT(lt, malloc(sizeof(Regions)), free);
+    if (regions != NULL) {
+        throw_error(ERROR_TYPE_LIBC);
+        RETURN_LT(lt, NULL);
+    }
+    regions->lt = lt;
+    regions->rect = rect;
+
+    regions->gc = PUSH_LT(lt, create_gc(), destroy_gc);
+    if (regions->gc == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+
+    regions->scope = create_scope(regions->gc);
+
+    while (*script_src != 0) {
+        struct ParseResult parse_result = read_expr_from_string(regions->gc, script_src);
+        if (parse_result.is_error) {
+            fprintf(stderr, "Parsing error: %s\n", parse_result.error_message);
+            RETURN_LT(lt, NULL);
+        }
+
+        struct EvalResult eval_result = eval(
+            regions->gc,
+            &regions->scope,
+            parse_result.expr);
+        if (eval_result.is_error) {
+            fprintf(stderr, "Evaluation error: ");
+            print_expr_as_sexpr(stderr, eval_result.expr);
+            RETURN_LT(lt, NULL);
+        }
+
+        script_src = next_token(parse_result.end).begin;
+    }
+
+    /* TODO(#405): regions does not check if the script provides on-enter and on-leave callbacks */
+
+    return regions;
+}
+
+Regions *create_regions_from_stream(LineStream *line_stream)
+{
+    assert(line_stream);
+
+    Rect rect;
+
+    if (sscanf(
+            line_stream_next(line_stream),
+            "%f%f%f%f",
+            &rect.x, &rect.y,
+            &rect.w, &rect.h) < 0) {
+        throw_error(ERROR_TYPE_LIBC);
+        return NULL;
+    }
+
+    size_t n;
+    if (sscanf(
+            line_stream_next(line_stream),
+            "%lu\n",
+            &n) < 0) {
+        throw_error(ERROR_TYPE_LIBC);
+        return NULL;
+    }
+
+    /* TODO: script is not read */
+    char *script = NULL;
+
+    Regions *regions = create_regions(rect, script);
+    if (regions == NULL) {
+        return NULL;
+    }
+
+    free(script);
+
+    return regions;
+}
+
+void destroy_regions(Regions *regions)
+{
+    assert(regions);
+    RETURN_LT0(regions->lt);
+}
+
+void regions_player_enter(Regions *regions, Player *player)
+{
+    assert(regions);
+    assert(player);
+    /* TODO(#396): regions_player_enter is not implemented */
+}
+
+void regions_player_leave(Regions *regions, Player *player)
+{
+    assert(regions);
+    assert(player);
+    /* TODO(#397): regions_player_leave is not implemented */
+}
diff --git a/src/game/level/regions.h b/src/game/level/regions.h
new file mode 100644 (file)
index 0000000..8f4ae6f
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef REGIONS_H_
+#define REGIONS_H_
+
+#include "math/rect.h"
+
+typedef struct Regions Regions;
+typedef struct Player Player;
+typedef struct LineStream LineStream;
+
+Regions *create_regions(Rect rect, const char *script_src);
+Regions *create_regions_from_stream(LineStream *line_stream);
+void destroy_regions(Regions *regions);
+
+void regions_player_enter(Regions *regions, Player *player);
+void regions_player_leave(Regions *regions, Player *player);
+
+#endif  // REGIONS_H_