WIP file-based level loading
This commit is contained in:
parent
9f60aa339b
commit
2f883d39b0
47
app_file.c
47
app_file.c
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "app.h"
|
#include "app.h"
|
||||||
|
#include "particle.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
|
|
||||||
@ -12,5 +13,49 @@ void app_QueueLoadLevel(App *app, const char *level_name) {
|
|||||||
app->switch_level = copy_malloc(level_name);
|
app->switch_level = copy_malloc(level_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _app_SwitchLevel(App *app) {
|
|
||||||
|
#define CMD1(str) if (strcmp(cmd, str) == 0)
|
||||||
|
#define CMD(str) else if (strcmd(cmd, str) == 0)
|
||||||
|
#define TOKEN (strtok(NULL, " "))
|
||||||
|
#define TOKEN_INT (atoi(TOKEN))
|
||||||
|
#define TOKEN_DOUBLE (strtod(TOKEN))
|
||||||
|
|
||||||
|
// Subsequent tokens can be read by strtok(NULL, " ")
|
||||||
|
static void _app_LevelCommand(char *cmd) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Defined in render_bundle_file.c
|
||||||
|
extern char linebuf[512];
|
||||||
|
|
||||||
|
void _app_SwitchLevel(App *app) {
|
||||||
|
if (app->switch_level == NULL) {
|
||||||
|
WARN("called when switch_level is NULL", 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *f = fopen(app->switch_level, "r");
|
||||||
|
if (!f) {
|
||||||
|
WARN("failed to open file\"%s\"", app->switch_level);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the current level
|
||||||
|
entity_Clear(app->entity);
|
||||||
|
particle_Clear(app->particle);
|
||||||
|
|
||||||
|
// Read every line
|
||||||
|
while (!feof(f) && fgets(linebuf, sizeof(linebuf), f)) {
|
||||||
|
while (linebuf[strlen(linebuf) - 1] == '\n')
|
||||||
|
linebuf[strlen(linebuf) - 1] = '\0';
|
||||||
|
|
||||||
|
char *cmd = strtok(linebuf, " ");
|
||||||
|
if (cmd == NULL)
|
||||||
|
continue;
|
||||||
|
_app_LevelCommand(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
free(app->switch_level);
|
||||||
|
app->switch_level = NULL;
|
||||||
}
|
}
|
||||||
|
12
particle.c
12
particle.c
@ -3,6 +3,7 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "util/tree.h"
|
#include "util/tree.h"
|
||||||
#include "util/vector.h"
|
#include "util/vector.h"
|
||||||
|
#include "util/assert.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
@ -78,3 +79,14 @@ void particle_Emit(System_Particle *sys, Vec2 pos, Vec2 vec, double vec_friction
|
|||||||
p->sizedec = sizedec;
|
p->sizedec = sizedec;
|
||||||
p->mode = fill;
|
p->mode = fill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void particle_Clear(System_Particle *sys) {
|
||||||
|
vector_Clear(sys->deleted_ids);
|
||||||
|
// Delete every first node
|
||||||
|
int count = tree_Count(sys->parts);
|
||||||
|
while (count--)
|
||||||
|
tree_Delete(sys->parts, tree_FirstNode(sys->parts));
|
||||||
|
|
||||||
|
ASSERT(tree_Count(sys->parts) == 0);
|
||||||
|
}
|
||||||
|
@ -46,6 +46,9 @@ void particle_Render(System_Particle *sys);
|
|||||||
void particle_Emit(System_Particle *sys, Vec2 pos, Vec2 vec, double vec_friction, double size, double sizedec, Duration tolive, const FillMode *fill);
|
void particle_Emit(System_Particle *sys, Vec2 pos, Vec2 vec, double vec_friction, double size, double sizedec, Duration tolive, const FillMode *fill);
|
||||||
void particle_Delete(System_Particle *sys, uintptr_t id);
|
void particle_Delete(System_Particle *sys, uintptr_t id);
|
||||||
|
|
||||||
|
// Clear all particles.
|
||||||
|
void particle_Clear(System_Particle *sys);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ static void _render_BundleCommand(char *cmd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char linebuf[512];
|
char linebuf[512];
|
||||||
|
|
||||||
void render_LoadBundle(const char *filename) {
|
void render_LoadBundle(const char *filename) {
|
||||||
if (!render_Bundles)
|
if (!render_Bundles)
|
||||||
|
Loading…
Reference in New Issue
Block a user