diff src/wander2.c @ 8:0836fb919dfa

First entry of Paradise Server 2.9 patch 10 Beta
author darius
date Sat, 06 Dec 1997 04:37:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/wander2.c	Sat Dec 06 04:37:05 1997 +0000
@@ -0,0 +1,202 @@
+/*--------------------------------------------------------------------------
+NETREK II -- Paradise
+
+Permission to use, copy, modify, and distribute this software and its
+documentation, or any derivative works thereof, for any NON-COMMERCIAL
+purpose and without fee is hereby granted, provided that this copyright
+notice appear in all copies.  No representations are made about the
+suitability of this software for any purpose.  This software is provided
+"as is" without express or implied warranty.
+
+    Xtrek Copyright 1986                            Chris Guthrie
+    Netrek (Xtrek II) Copyright 1989                Kevin P. Smith
+                                                    Scott Silvey
+    Paradise II (Netrek II) Copyright 1993          Larry Denys
+                                                    Kurt Olsen
+                                                    Brandon Gillespie
+--------------------------------------------------------------------------*/
+
+#include "config.h"
+
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <signal.h>
+#include <setjmp.h>
+#include <sys/file.h>
+#include <math.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <errno.h>
+#include <pwd.h>
+#include <ctype.h>
+#include "defs.h"
+#include "struct.h"
+#include "data.h"
+
+extern void (*r_signal()) ();
+
+extern struct planet *planets;
+
+#define COS(x) ((x) >= 0.0 ? Cosine[(int)(x)] : Cosine[(int)(-(x))])
+#define SIN(x) ((x) >= 0.0 ? Sine[(int)(x)] : -Sine[(int)(-(x))])
+
+#define PUPDATE 999999
+
+int pl_home[4];
+int pl_core[4][10];
+int pl_dist[4][10];
+double increment = 0.016;
+double incrementrecip = 62.5;
+float *Cosine, *Sine;
+
+double dpre;
+double fpre;
+double pi = 3.1415926;
+
+int planeti, planetj;
+
+/* call only once */
+
+
+void
+pinit()
+{
+  double dx, dy;
+  int i, j;
+
+  int pre;
+
+  void pmove();
+
+  pre = 3.5 / increment;
+  dpre = (double) pre;
+
+  Cosine = (float *) calloc(sizeof(float), pre);
+  Sine = (float *) calloc(sizeof(float), pre);
+  for (i = 0; i < pre; i++)
+  {
+    Cosine[i] = cos((double) i * increment);
+    Sine[i] = sin((double) i * increment);
+  }
+
+  /* openmem(); */
+
+  pl_home[0] = 0;
+  pl_core[0][0] = 5;
+  pl_core[0][1] = 7;
+  pl_core[0][2] = 8;
+  pl_core[0][3] = 9;
+  pl_home[1] = 10;
+  pl_core[1][0] = 12;
+  pl_core[1][1] = 15;
+  pl_core[1][2] = 16;
+  pl_core[1][3] = 19;
+  pl_home[2] = 20;
+  pl_core[2][0] = 24;
+  pl_core[2][1] = 26;
+  pl_core[2][2] = 29;
+  pl_core[2][3] = 25;
+  pl_home[3] = 30;
+  pl_core[3][0] = 34;
+  pl_core[3][1] = 37;
+  pl_core[3][2] = 38;
+  pl_core[3][3] = 39;
+
+  for (i = 0; i < 4; i++)
+  {
+    for (j = 0; j < 4; j++)
+    {
+      dx = (double) (planets[pl_core[i][j]].pl_x - planets[pl_home[i]].pl_x);
+      dy = (double) (planets[pl_home[i]].pl_y - planets[pl_core[i][j]].pl_y);
+      pl_dist[i][j] = isqrt(dx * dx + dy * dy);
+      /* pl_dist[i][j] = 12000; */
+    }
+  }
+
+  planeti = 0;
+  planetj = 0;
+
+#if 0
+  {
+    static struct itimerval udt;
+    r_signal(SIGALRM, pmove);
+
+    udt.it_interval.tv_sec = 0;
+    udt.it_interval.tv_usec = PUPDATE;
+    udt.it_value.tv_sec = 0;
+    udt.it_value.tv_usec = PUPDATE;
+    (void) setitimer(ITIMER_REAL, &udt, (struct itimerval *) 0);
+
+    while (1)
+      pause();
+  }
+#endif
+}
+
+/* call once per second */
+void
+pmove()
+{
+  int i, j;
+  double dir;
+  double dx, dy;
+
+  /*
+   * for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) {
+   */
+  i = planeti;
+  j = planetj;
+  planetj = (planetj + 1) % 4;
+  if (planetj == 0)
+    planeti = (planeti + 1) % 4;
+
+  dir = atan2((double) (planets[pl_core[i][j]].pl_y - planets[pl_home[i]].pl_y),
+	 (double) (planets[pl_core[i][j]].pl_x - planets[pl_home[i]].pl_x));
+  if (dir > pi)
+    dir = dir - 2.0 * pi;
+  if (dir >= 0.0)
+    dir = (dir * incrementrecip + 1.5);
+  else
+    dir = (dir * incrementrecip + 0.5);
+
+
+  planets[pl_core[i][j]].pl_x =
+    planets[pl_home[i]].pl_x +
+    (int) (pl_dist[i][j] * (dx = COS(dir)));
+  planets[pl_core[i][j]].pl_y =
+    planets[pl_home[i]].pl_y +
+    (int) (pl_dist[i][j] * (dy = SIN(dir)));
+  /*
+   * dir = atan2((double) (planets[pl_core[i][j]].pl_y -
+   * planets[pl_home[i]].pl_y), (double) (planets[pl_core[i][j]].pl_x -
+   * planets[pl_home[i]].pl_x));
+   */
+
+  /* planets[pl_core[i][j]].pl_flags |= PLREDRAW; */
+}
+
+/*
+ * } }
+ */
+
+/*
+ * usage(string) char *string; { printf("Usage: %s [-dnnn]\n", string);
+ * printf("  -dnnn  delay nnn 1/10 seconds between frames\n"); }
+ * 
+ * openmem() { extern int errno; int	shmemKey = PKEY; int	shmid; struct
+ * memory	*sharedMemory;
+ * 
+ * errno = 0; shmid = shmget(shmemKey, 0, 0); if (shmid < 0) { if (errno !=
+ * ENOENT) { fprintf(stderr, "shmget\n"); exit(1); } shmid = shmget(shmemKey,
+ * 0, 0); if (shmid < 0) { fprintf(stderr, "Daemon not running\n"); exit (1);
+ * } } sharedMemory = (struct memory *) shmat(shmid, 0, 0); if (sharedMemory
+ * == (struct memory *) -1) { fprintf(stderr, "shared memory\n"); exit (1); }
+ * players = sharedMemory->players; torps = sharedMemory->torps; plasmatorps
+ * = sharedMemory->plasmatorps; planets = sharedMemory->planets; phasers =
+ * sharedMemory->phasers; mctl = sharedMemory->mctl; messages =
+ * sharedMemory->messages; teams = sharedMemory->teams; status =
+ * sharedMemory->status; }
+ */