
/** routen.c **********************************/
/*                                            */
/* Copyright © 1988 by Digital Artists (DgA). */
/* All Rights reserved.                       */
/*                                            */
/**********************************************/

/*
Firma   : Digital Artists (DgA)
Objekt  : reederei/routen.c
Version : 1.0
Autor   : [RK]
Datum   : 09-18-1988
Status  : geheim
*/

#include <exec/types.h>
#include <intuition/intuition.h>
#include <graphics/text.h>
#include "reederei.h"

extern struct Window *Window;
extern struct TextAttr font[2];
extern struct Spieler Spieler[4];
extern struct Quartal Quartal[8];
extern struct Hafen Hafen[14];
extern USHORT *box2;
extern USHORT *box3;
extern float rnd();

UBYTE HafenName[3][15];
UBYTE UNDOBuffer[15];

USHORT rpts[2][18] =
 {
  {0,0,599,0,599,179,1,179,1,0,598,0,598,179,0,179,0,0},
  {0,0,599,0,599,14,1,14,1,0,598,0,598,14,0,14,0,0}
 };

struct IntuiText rggtxt[10] =
 {
  {1,13,JAM2,17,2,&font[0],"Zurück",NULL},
  {1,13,JAM2,9,2,&font[0],"1. Route",NULL},
  {1,13,JAM2,7,2,&font[0],"2. Route",NULL},
  {1,13,JAM2,6,2,&font[0],"3. Route",NULL},
  {1,13,JAM2,25,2,&font[0],"Info",NULL},
  {1,13,JAM2,11,2,&font[0],"1",NULL},
  {1,13,JAM2,10,2,&font[0],"2",NULL},
  {1,13,JAM2,10,2,&font[0],"3",NULL},
  {1,13,JAM2,9,2,&font[0],"4",NULL},
  {1,13,JAM2,9,2,&font[0],"5",NULL},
 };

struct Image rggim[2] =
 {
  {-2,-1,96,15,4,NULL,0xf,0x0,NULL},
  {-2,-1,32,15,4,NULL,0xf,0x0,NULL}
 };

struct Gadget rgg[10] =
 {
  {&rgg[1],15,160,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[0],NULL,&rggtxt[0],0L,NULL,6,NULL},
  {&rgg[2],247,160,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[0],NULL,&rggtxt[1],0L,NULL,7,NULL},
  {&rgg[3],368,160,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[0],NULL,&rggtxt[2],0L,NULL,8,NULL},
  {&rgg[4],489,160,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[0],NULL,&rggtxt[3],0L,NULL,9,NULL},
  {&rgg[5],126,160,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[0],NULL,&rggtxt[4],0L,NULL,10,NULL},
  {&rgg[6],15,38,28,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[1],NULL,&rggtxt[5],0L,NULL,1,NULL},
  {&rgg[7],15,58,28,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[1],NULL,&rggtxt[6],0L,NULL,2,NULL},
  {&rgg[8],15,78,28,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[1],NULL,&rggtxt[7],0L,NULL,3,NULL},
  {&rgg[9],15,98,28,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[1],NULL,&rggtxt[8],0L,NULL,4,NULL},
  {NULL,15,118,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&rggim[1],NULL,&rggtxt[9],0L,NULL,5,NULL}
 };

struct Border rbo[2] =
 {
  {0,0,13,0,JAM2,9,&rpts[1][0],&rbo[1]},
  {0,0,13,0,JAM2,9,&rpts[0][0],NULL}
 };

struct IntuiText rtxt[27] =
 {
  {1,0,JAM2,410,3,&font[0],"Schiffe verschicken",&rtxt[1]},
  {1,0,JAM2,10,3,&font[0],"Reeder",&rtxt[2]},
  {1,0,JAM2,85,3,&font[0],NULL,&rtxt[3]},

  {9,0,JAM2,55,20,&font[0],"Schiff",&rtxt[4]},
  {9,0,JAM2,250,20,&font[0],"1. Route",&rtxt[5]},
  {9,0,JAM2,375,20,&font[0],"2. Route",&rtxt[6]},
  {9,0,JAM2,500,20,&font[0],"3. Route",&rtxt[7]},

  {14,0,JAM2,55,40,&font[0],NULL,&rtxt[8]},
  {8,0,JAM2,250,40,&font[0],NULL,&rtxt[9]},
  {8,0,JAM2,375,40,&font[0],NULL,&rtxt[10]},
  {8,0,JAM2,500,40,&font[0],NULL,&rtxt[11]},

  {14,0,JAM2,55,60,&font[0],NULL,&rtxt[12]},
  {8,0,JAM2,250,60,&font[0],NULL,&rtxt[13]},
  {8,0,JAM2,375,60,&font[0],NULL,&rtxt[14]},
  {8,0,JAM2,500,60,&font[0],NULL,&rtxt[15]},

  {14,0,JAM2,55,80,&font[0],NULL,&rtxt[16]},
  {8,0,JAM2,250,80,&font[0],NULL,&rtxt[17]},
  {8,0,JAM2,375,80,&font[0],NULL,&rtxt[18]},
  {8,0,JAM2,500,80,&font[0],NULL,&rtxt[19]},

  {14,0,JAM2,55,100,&font[0],NULL,&rtxt[20]},
  {8,0,JAM2,250,100,&font[0],NULL,&rtxt[21]},
  {8,0,JAM2,375,100,&font[0],NULL,&rtxt[22]},
  {8,0,JAM2,500,100,&font[0],NULL,&rtxt[23]},

  {14,0,JAM2,55,120,&font[0],NULL,&rtxt[24]},
  {8,0,JAM2,250,120,&font[0],NULL,&rtxt[25]},
  {8,0,JAM2,375,120,&font[0],NULL,&rtxt[26]},
  {8,0,JAM2,500,120,&font[0],NULL,NULL}
 };

struct Requester routen =
 {NULL,20,5,600,180,0,0,&rgg[0],&rbo[0],&rtxt[0],0,0,NULL,NULL,NULL,NULL,NULL};

Routen(pl)
int pl;
 {
  static USHORT year[4] = NULL;
  int i,j,id,x,y;
  int count;
  int ship = 0;
  int route,Haf;
  struct IntuiMessage *rmsg = NULL;
  BOOL choosen = FALSE;
  BOOL done = FALSE;

  GetPicture(2);
  PrintPlayersName(pl,1);
  rtxt[2].IText = Spieler[pl].Name;
  rggim[0].ImageData = box2;
  rggim[1].ImageData = box3;

  count = 0;

  if (year[pl] != Quartal[7].Quartal)
   {
    if (Spieler[pl].Geld >= 0)
     if (((float)rnd() * 100) > 65)
      Aktion(pl,2,0);
    year[pl] = Quartal[7].Quartal;
   }

  rgg[4].NextGadget = &rgg[5];
  for(i=0;i<4;i++)
   {
    rgg[5+i].NextGadget = &rgg[6+i];
    rggtxt[5+i].FrontPen = 1;
    rtxt[10+(i*4)].NextText = &rtxt[11+(i*4)];
   }

  for(i=0;i<Spieler[pl].Schiffsanzahl;i++)
   {
    if(Spieler[pl].Schiffsdaten[i].Alter >= 0)
     {
      rtxt[7+(i*4)].IText = Spieler[pl].Schiffsdaten[i].Typ;
      for(j=0;j<3;j++)
       {
        if (Spieler[pl].Routen[i][j] == 5471)
         rtxt[8+j+(i*4)].IText = "Fracht";
        else if (Spieler[pl].Routen[i][j] == 0)
         rtxt[8+j+(i*4)].IText = "Hamburg";
       }
      count++;
     }
    else
     rgg[4+i].NextGadget = &rgg[6+i];
   }

  if (count == 1)
   {
    rgg[4].NextGadget = NULL;
    ship = 1;
    for (j=0;j<3;j++)
     {
      if (Spieler[pl].Routen[ship-1][j] == 5471)
       OffGadget(&rgg[j+1],Window,&routen);
      else
       OnGadget(&rgg[j+1],Window,&routen);
     }
   }
  else
   {
    rgg[4+count].NextGadget = NULL;
    ship = 0;
   }
  rtxt[6+(count*4)].NextText = NULL;
 
  Request(&routen,Window);

  while (!(choosen))
   {
    while((rmsg=(struct IntuiMessage *)GetMsg(Window->UserPort))==NULL);
    ReplyMsg(rmsg);
    if (rmsg->Class == GADGETDOWN)
     {
      id = rmsg->IAddress->GadgetID;

      if ((id >= 1) && (id <= 5))
       {
        if (ship != 0)
         rggtxt[4+ship].FrontPen = 1;
        ship = id;
        rggtxt[4+ship].FrontPen = 0;
        for (j=0;j<3;j++)
         {
          if (Spieler[pl].Routen[ship-1][j] == 5471)
           OffGadget(&rgg[j+1],Window,&routen);
          else
           OnGadget(&rgg[j+1],Window,&routen);
         }
        RefreshGadgets(&rgg[0],Window,&routen);
       }
      if ((id >= 7) && (id <= 9) && (ship != 0))
       {
        route = id-6;
        done = FALSE;
        EndRequest(&routen,Window);

        while(!(done))
         {
          while((rmsg=(struct IntuiMessage *)GetMsg(Window->UserPort))==NULL);
          ReplyMsg(rmsg);

          if ((rmsg->Class == MOUSEBUTTONS) && (rmsg->Code == SELECTDOWN))
           {
            x = rmsg->MouseX;
            y = rmsg->MouseY;

            if ((strcmp(Spieler[pl].Schiffsdaten[ship-1].Typ,"Tankschiff") == 0) || (strcmp(Spieler[pl].Schiffsdaten[ship-1].Typ,"Passagierschiff") == 0))
             {
              if ((x >= 45) && (x <= 72) && (y >= 76) && (y <= 89))
               { /* Houston : Erdöl */
                Haf = 1;
                done = TRUE;
               }
              if ((x >= 102) && (x <= 129) && (y >= 102) && (y <= 115))
               { /* Caracas : Erdöl */
                Haf = 3;
                done = TRUE;
               }
              if ((x >= 388) && (x <= 415) && (y >= 83) && (y <= 96))
               { /* Bahrein : Erdöl */
                Haf = 8;
                done = TRUE;
               }
              if ((x >= 300) && (x <= 327) && (y >= 49) && (y <= 62))
               {
                rtxt[7+((ship-1)*4)+route].IText = "Hamburg";
                done = TRUE;
               }
              else
               {
                rtxt[7+((ship-1)*4)+route].IText = Hafen[Haf].Name;
                Spieler[pl].Routen[ship-1][route-1] = Haf+1;
               }
             }
            if (strcmp(Spieler[pl].Schiffsdaten[ship-1].Typ,"Tankschiff") != 0)
             {
              if ((x >= 97) && (x <= 124) && (y >= 63) && (y <= 76))
               { /* New York : Weizen */
                Haf = 0;
                done = TRUE;
               }
              if ((x >= 55) && (x <= 82) && (y >= 91) && (y <= 104))
               { /* Honduras : Kaffee */
                Haf = 2;
                done = TRUE;
               }
              if ((x >= 154) && (x <= 181) && (y >= 140) && (y <= 153))
               { /* Rio de J. : Kaffee */
                Haf = 4;
                done = TRUE;
               } 
              if ((x >= 278) && (x <= 305) && (y >= 105) && (y <= 118))
               { /* Accra : Kakao */
                Haf = 5;
                done = TRUE;
               }
              if ((x >= 325) && (x <= 352) && (y >= 152) && (y <= 165))
               { /* Kapstadt : Weizen */
                Haf = 6;
                done = TRUE;
               }
              if ((x >= 370) && (x <= 397) && (y >= 113) && (y <= 126))
               { /* Mombasa : Tee */
                Haf = 7;
                done = TRUE;
               }
              if ((x >= 443) && (x <= 470) && (y >= 91) && (y <= 104))
               { /* Bombay : Tee */
                Haf = 9;
                done = TRUE;
               }
              if ((x >= 471) && (x <= 498) && (y >= 83) && (y <= 96))
               { /* Kalkutta : Tee */
                Haf = 10;
                done = TRUE;
               }
              if ((x >= 521) && (x <= 548) && (y >= 156) && (y <= 169))
               { /* Perth : Weizen */
                Haf = 11;
                done = TRUE;
               }
              if ((x >= 523) && (x <= 550) && (y >= 81) && (y <= 94))
               { /* Hong Kong : Reis */
                Haf = 12;
                done = TRUE;
               }
              if ((x >= 514) && (x <= 541) && (y >= 61) && (y <= 74))
               { /* Peking : Reis */
                Haf = 13;
                done = TRUE;
               }
              if ((x >= 300) && (x <= 327) && (y >= 49) && (y <= 62))
               {
                rtxt[7+((ship-1)*4)+route].IText = "Hamburg";
                done = TRUE;
               }
              else
               {
                rtxt[7+((ship-1)*4)+route].IText = Hafen[Haf].Name;
                Spieler[pl].Routen[ship-1][route-1] = Haf+1;
               }
             }
           } 
         }
        Request(&routen,Window);
       }
      if (id == 6)
       choosen = TRUE;
      if (id == 10)
       Information(pl);
     }
   }

  EndRequest(&routen,Window);

  return;
 }
