From 67307e300a706173a751e7d86cc98c31b91bd8ab Mon Sep 17 00:00:00 2001 From: Marrub Date: Thu, 28 Sep 2017 13:51:14 -0400 Subject: [PATCH] Add proper stage running --- data/objdefs.dod | 1 + data/objdefs/player.dod | 8 ++------ data/objdefs/testobj.dod | 10 ++++++++++ data/resdecl.rd | 5 ++++- maps/stage1.gmf9 | 5 +++++ src/g_stage.c | 41 +++++++++++++++++++++++++++++++--------- src/g_stage.h | 6 ++++-- src/main.c | 3 ++- src/r_draw.c | 3 ++- 9 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 data/objdefs/testobj.dod create mode 100644 maps/stage1.gmf9 diff --git a/data/objdefs.dod b/data/objdefs.dod index ea8569c..5c13e42 100644 --- a/data/objdefs.dod +++ b/data/objdefs.dod @@ -1,4 +1,5 @@ // Copyright © 2017 Project Golan, all rights reserved. include "objdefs/player.dod" +include "objdefs/testobj.dod" // EOF diff --git a/data/objdefs/player.dod b/data/objdefs/player.dod index 883bb3c..dc76dea 100644 --- a/data/objdefs/player.dod +++ b/data/objdefs/player.dod @@ -1,12 +1,8 @@ // Copyright © 2017 Project Golan, all rights reserved. -entity Shootable +entity Player { health 1 -} - -entity Player < Shootable -{ - task G_Player_Think + subtype Player size 4 drawsize 16 friction 0.9 diff --git a/data/objdefs/testobj.dod b/data/objdefs/testobj.dod new file mode 100644 index 0000000..f59d355 --- /dev/null +++ b/data/objdefs/testobj.dod @@ -0,0 +1,10 @@ +// Copyright © 2017 Project Golan, all rights reserved. +entity TestObj +{ + health 1 + size 10 + drawsize 16 + sprite "ent/testobj" +} + +// EOF diff --git a/data/resdecl.rd b/data/resdecl.rd index 667d953..9031c12 100644 --- a/data/resdecl.rd +++ b/data/resdecl.rd @@ -2,7 +2,10 @@ font "base" = "fonts/base.ttf", 24pt texture "gui/border" = "textures/Border.png" -texture "ent/player" = "sprites/Particle3_Pointer.png" + +texture "ent/player" = "sprites/Particle3_Pointer.png" +texture "ent/testobj" = "sprites/Particle3.png" + texture "box" = "textures/Box.png" texture "empty" = "textures/Empty.png" diff --git a/maps/stage1.gmf9 b/maps/stage1.gmf9 new file mode 100644 index 0000000..d25a28b --- /dev/null +++ b/maps/stage1.gmf9 @@ -0,0 +1,5 @@ +// Copyright © 2017 Project Golan, all rights reserved. +{50 TestObj -200 0 16} +{50 TestObj -200 100 16} + +// EOF diff --git a/src/g_stage.c b/src/g_stage.c index 5f5b03c..c22a465 100644 --- a/src/g_stage.c +++ b/src/g_stage.c @@ -13,7 +13,8 @@ // Extern Objects ------------------------------------------------------------| -char const *G_Place = u8"地球軌道・朝"; +char const *G_Place = u8"地球軌道・朝"; +unsigned long G_Time; // Static Functions ----------------------------------------------------------| @@ -95,6 +96,8 @@ G_stage G_Stage_LoadMap(char const *fname) } while(!feof(fp)); + printf("Stage: Done loading stage '%s'.\n", fname); + done: free(name); fclose(fp); @@ -103,22 +106,42 @@ done: } // -// G_Stage_Begin +// G_Stage_LoadBase // -void G_Stage_Begin(unsigned stagenum) +void G_Stage_LoadBase(void) { - printf("Stage: Beginning stage %u.\n", stagenum); + printf("Stage: Loading base map.\n"); + G_stage s = G_Stage_LoadMap("maps/base.gmf0"); - for(int i = 0; i < s.mapC; i++) + for(size_t i = 0; i < s.mapC && s.mapV[i].time == 0; i++) s.mapV[i].proc(&s.mapV[i].data); - M_Vec_clear(s.map); - - printf("Stage: Done loading, splitting blockmap.\n"); + printf("Stage: Splitting blockmap.\n"); DGE_BlockMap_Split(16, 1); - printf("Stage: Done loading stage %u.\n", stagenum); + M_Vec_clear(s.map); +} + +// +// G_Stage_Run +// +void G_Stage_Run(unsigned stagenum) +{ + printf("Stage: Beginning stage %u.\n", stagenum); + + G_stage s = G_Stage_LoadMap(M_StrFmt("maps/stage%u.gmf0", stagenum)); + size_t i; + + for(G_Time = 0;; G_Time++) + { + for(; i < s.mapC && s.mapV[i].time == G_Time; i++) + s.mapV[i].proc(&s.mapV[i].data); + + DGE_Task_Sleep(0, 1); + } + + M_Vec_clear(s.map); } // EOF diff --git a/src/g_stage.h b/src/g_stage.h index 53ebfd9..cacab0e 100644 --- a/src/g_stage.h +++ b/src/g_stage.h @@ -41,11 +41,13 @@ typedef struct G_stage // Extern Objects ------------------------------------------------------------| -extern char const *G_Place; +extern char const *G_Place; +extern long unsigned G_Time; // Extern Functions ----------------------------------------------------------| G_stage G_Stage_LoadMap(char const *fname); -void G_Stage_Begin(unsigned stagenum); +void G_Stage_LoadBase(void); +void G_Stage_Run(unsigned stagenum); #endif diff --git a/src/main.c b/src/main.c index 9f4972a..5f29d51 100644 --- a/src/main.c +++ b/src/main.c @@ -47,7 +47,8 @@ void GInit(char const *resdecl) void main(void) { GInit("resdecl.rd"); - G_Stage_Begin(1); + G_Stage_LoadBase(); + G_Stage_Run(1); } // EOF diff --git a/src/r_draw.c b/src/r_draw.c index 9214ebd..cf53038 100644 --- a/src/r_draw.c +++ b/src/r_draw.c @@ -19,7 +19,8 @@ static void R_drawHitboxes(void) unsigned head = DGE_Thinker_Head(); DGE_Point2 vp = DGE_Renderer_GetViewpoint(); - for(DGE_Thinker th = {head}; (th.id = th.next) != head;) { + for(DGE_Thinker th = {head}; (th.id = th.next) != head;) + { DGE_PhysicsThinker pth; if((pth.id = DGE_Object_Cast(th.id, DGE_OT_PhysicsThinker))) { fixed tx = pth.x - vp.x, ty = pth.y - vp.y;