From 6816afe07e0ad2ba3f66bcd730a12b6760202dcf Mon Sep 17 00:00:00 2001 From: helixhorned Date: Sat, 16 Feb 2013 18:53:00 +0000 Subject: [PATCH] Refactor C code related to gettimedate and sect*interpolation CON commands. No functional changes. git-svn-id: https://svn.eduke32.com/eduke32@3486 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/source/actors.c | 62 +++++++++++++++++-------------- polymer/eduke32/source/actors.h | 2 +- polymer/eduke32/source/gameexec.c | 38 ++++++++++++------- 3 files changed, 60 insertions(+), 42 deletions(-) diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c index 91a7b24d2..99347cc7f 100644 --- a/polymer/eduke32/source/actors.c +++ b/polymer/eduke32/source/actors.c @@ -36,16 +36,21 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. extern int32_t g_numEnvSoundsPlaying; extern int32_t g_noEnemies; -void G_SetInterpolation(int32_t *posptr) +int32_t G_SetInterpolation(int32_t *posptr) { int32_t i=g_numInterpolations-1; - if (g_numInterpolations >= MAXINTERPOLATIONS) return; + if (g_numInterpolations >= MAXINTERPOLATIONS) + return 1; + for (; i>=0; i--) - if (curipos[i] == posptr) return; + if (curipos[i] == posptr) + return 0; + curipos[g_numInterpolations] = posptr; oldipos[g_numInterpolations] = *posptr; g_numInterpolations++; + return 0; } void G_StopInterpolation(int32_t *posptr) @@ -594,44 +599,47 @@ void A_DoGutsDir(int32_t sp, int32_t gtype, int32_t n) } } -void Sect_SetInterpolation(int32_t sectnum) +// NOTE: external linkage for Lunatic +int32_t G_ToggleWallInterpolation(int32_t w, int32_t doset) +{ + if (doset) + { + return G_SetInterpolation(&wall[w].x) + || G_SetInterpolation(&wall[w].y); + } + else + { + G_StopInterpolation(&wall[w].x); + G_StopInterpolation(&wall[w].y); + return 0; + } +} + +static void Sect_ToggleInterpolation(int32_t sectnum, int32_t doset) { int32_t k, j = sector[sectnum].wallptr, endwall = j+sector[sectnum].wallnum; for (; j= 0) { - G_SetInterpolation(&wall[k].x); - G_SetInterpolation(&wall[k].y); - k = wall[k].point2; - G_SetInterpolation(&wall[k].x); - G_SetInterpolation(&wall[k].y); + G_ToggleWallInterpolation(k, doset); + G_ToggleWallInterpolation(wall[k].point2, doset); } } } +void Sect_SetInterpolation(int32_t sectnum) +{ + Sect_ToggleInterpolation(sectnum, 1); +} + void Sect_ClearInterpolation(int32_t sectnum) { - int32_t k, j = sector[sectnum].wallptr, endwall = j+sector[sectnum].wallnum; - - for (; j= 0) - { - G_StopInterpolation(&wall[k].x); - G_StopInterpolation(&wall[k].y); - k = wall[k].point2; - G_StopInterpolation(&wall[k].x); - G_StopInterpolation(&wall[k].y); - } - } + Sect_ToggleInterpolation(sectnum, 0); } static int32_t move_rotfixed_sprite(int32_t j, int32_t pivotspr, int32_t daang) diff --git a/polymer/eduke32/source/actors.h b/polymer/eduke32/source/actors.h index f617317be..caf4dacaf 100644 --- a/polymer/eduke32/source/actors.h +++ b/polymer/eduke32/source/actors.h @@ -275,7 +275,7 @@ void G_AddGameLight(int32_t radius,int32_t srcsprite,int32_t zoff void G_ClearCameraView(DukePlayer_t *ps); void G_DoInterpolations(int32_t smoothratio); void G_MoveWorld(void); -void G_SetInterpolation(int32_t *posptr); +int32_t G_SetInterpolation(int32_t *posptr); void G_StopInterpolation(int32_t *posptr); // PK 20110701: changed input argument: int32_t i (== sprite, whose sectnum...) --> sectnum directly diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c index 7931cbcea..90a7f850b 100644 --- a/polymer/eduke32/source/gameexec.c +++ b/polymer/eduke32/source/gameexec.c @@ -968,6 +968,25 @@ static int32_t VM_ResetPlayer(int32_t g_p, int32_t g_flags) return g_flags; } +void G_GetTimeDate(int32_t *vals) +{ + time_t rawtime; + struct tm *ti; + + time(&rawtime); + ti=localtime(&rawtime); + // initprintf("Time&date: %s\n",asctime (ti)); + + vals[0] = ti->tm_sec; + vals[1] = ti->tm_min; + vals[2] = ti->tm_hour; + vals[3] = ti->tm_mday; + vals[4] = ti->tm_mon; + vals[5] = ti->tm_year+1900; + vals[6] = ti->tm_wday; + vals[7] = ti->tm_yday; +} + #if !defined LUNATIC GAMEEXEC_STATIC void VM_Execute(int32_t loop) { @@ -2891,22 +2910,13 @@ nullquote: case CON_GETTIMEDATE: insptr++; { - int32_t v1=*insptr++,v2=*insptr++,v3=*insptr++,v4=*insptr++,v5=*insptr++,v6=*insptr++,v7=*insptr++,v8=*insptr++; - time_t rawtime; - struct tm *ti; + int32_t i, vals[8]; - time(&rawtime); - ti=localtime(&rawtime); - // initprintf("Time&date: %s\n",asctime (ti)); + G_GetTimeDate(vals); + + for (i=0; i<8; i++) + Gv_SetVarX(*insptr++, vals[i]); - Gv_SetVarX(v1, ti->tm_sec); - Gv_SetVarX(v2, ti->tm_min); - Gv_SetVarX(v3, ti->tm_hour); - Gv_SetVarX(v4, ti->tm_mday); - Gv_SetVarX(v5, ti->tm_mon); - Gv_SetVarX(v6, ti->tm_year+1900); - Gv_SetVarX(v7, ti->tm_wday); - Gv_SetVarX(v8, ti->tm_yday); continue; }