]> git.lizzy.rs Git - nothing.git/blob - src/game/level_metadata.c
(#1153) Remove TODO for #1157 (sorry!) and cleanup key handling.
[nothing.git] / src / game / level_metadata.c
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 #include "system/stacktrace.h"
5 #include "system/nth_alloc.h"
6 #include "system/lt.h"
7 #include "system/line_stream.h"
8 #include "system/str.h"
9 #include "level_metadata.h"
10
11 struct LevelMetadata
12 {
13     Lt *lt;
14     const char *title;
15 };
16
17 LevelMetadata *create_level_metadata(const char *title)
18 {
19     trace_assert(title);
20
21     Lt *lt = create_lt();
22
23     LevelMetadata *level_metadata = PUSH_LT(
24         lt, nth_calloc(1, sizeof(LevelMetadata)), free);
25     if (level_metadata == NULL) {
26         RETURN_LT(lt, NULL);
27     }
28     level_metadata->lt = lt;
29
30     level_metadata->title = PUSH_LT(
31         lt,
32         trim_endline(string_duplicate(title, NULL)),
33         free);
34     if (level_metadata->title == NULL) {
35         RETURN_LT(lt, NULL);
36     }
37
38     return level_metadata;
39 }
40
41 LevelMetadata *create_level_metadata_from_file(const char *filename)
42 {
43     trace_assert(filename);
44
45     LineStream *line_stream = create_line_stream(filename, "r", 256);
46     if (line_stream == NULL) {
47         return NULL;
48     }
49
50     LevelMetadata *level_metadata = create_level_metadata_from_line_stream(line_stream);
51     destroy_line_stream(line_stream);
52
53     return level_metadata;
54 }
55
56 LevelMetadata *create_level_metadata_from_line_stream(LineStream *line_stream)
57 {
58     trace_assert(line_stream);
59
60     const char *line = line_stream_next(line_stream);
61     if (line == NULL) {
62         return NULL;
63     }
64
65     return create_level_metadata(line);
66 }
67
68 void destroy_level_metadata(LevelMetadata *level_metadata)
69 {
70     trace_assert(level_metadata);
71     RETURN_LT0(level_metadata->lt);
72 }
73
74 const char *level_metadata_title(const LevelMetadata *level_metadata)
75 {
76     trace_assert(level_metadata);
77     return level_metadata->title;
78 }