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

/*
Firma   : Digital Artist (DgA)
Objekt  : reederei/action.c
Version : 1.0
Autor   : [RK]
Datum   : 09-04-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 Schiff schiffstyp[6];
extern USHORT *box2;
extern UBYTE Geld[15];
extern UBYTE zahl[7][11];
extern float rnd();

SHORT FrachtG[4];

USHORT actpts[2][18] =
 {
  {0,0,499,0,499,99,1,99,1,0,498,0,498,99,0,99,0,0},
  {0,0,499,0,499,14,1,14,1,0,498,0,498,14,0,14,0,0}
 };

struct IntuiText actggtxt[2] =
 {
  {1,13,JAM2,36,2,&font[0],"Ja",NULL},
  {1,13,JAM2,26,2,&font[0],"Nein",NULL}
 };

struct Image actggim =
 {-2,-1,96,15,4,NULL,0xf,0x0,NULL};

struct Gadget actgg[2] =
 {
  {&actgg[1],393,80,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&actggim,NULL,&actggtxt[0],0L,NULL,1,NULL},
  {NULL,276,80,92,13,GADGIMAGE|GADGHNONE,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&actggim,NULL,&actggtxt[1],0L,NULL,2,NULL}
 };

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

struct IntuiText acttxt[16] =
 {
  {1,0,JAM2,405,3,&font[0],"Nachricht",&acttxt[1]},
  {1,0,JAM2,10,3,&font[0],"Reeder",&acttxt[2]},
  {1,0,JAM2,85,3,&font[0],NULL,NULL},

  {7,0,JAM2,15,25,&font[0],"Sie haben Glück! Ihnen wird ein Schiff angeboten.",&acttxt[4]},
  {7,0,JAM2,15,40,&font[0],"Tonnen : ",&acttxt[5]},
  {1,0,JAM2,0,40,&font[0],&zahl[0][0],&acttxt[6]},
  {7,0,JAM2,0,40,&font[0],"Kabinen :",&acttxt[7]},
  {1,0,JAM2,0,40,&font[0],&zahl[1][0],&acttxt[8]},
  {7,0,JAM2,0,40,&font[0],"Preis :",&acttxt[9]},
  {1,0,JAM2,0,40,&font[0],&Geld[0],NULL},

  {14,0,JAM2,15,25,&font[0],"Ihnen liegt ein großzügiges Angebot für ein Fracht-",&acttxt[11]},
  {14,0,JAM2,15,40,&font[0],"geschäft vor. Es wird ein Zeitraum von",&acttxt[12]},
  {1,0,JAM2,370,40,&font[0],&zahl[0][0],&acttxt[13]},
  {14,0,JAM2,390,40,&font[0],"Monaten",&acttxt[14]},
  {14,0,JAM2,15,55,&font[0],"benötigt. Die Prämie beträgt",&acttxt[15]},
  {1,0,JAM2,275,55,&font[0],&Geld[0],NULL}
 };

struct Requester action =
 {NULL,70,50,500,100,0,0,&actgg[0],&actbo[0],&acttxt[0],0,0,NULL,NULL,NULL,NULL,NULL};

Aktion(pl,mode,data)
SHORT pl;
int mode;
int data;
 {
  struct IntuiMessage *actmsg = NULL;
  int i,j;
  int count;
  int Dauer,Angebot;
  SHORT Alt;
  USHORT Kab,Lad,Anz;
  float Preis;
  BOOL Ready = FALSE;
  BOOL returnwert = FALSE;

  acttxt[2].IText = Spieler[pl].Name;
  actggim.ImageData = box2;

  if (mode == 1)
   {
    Lad = (USHORT)(schiffstyp[data].MinLadung+(((int)((float)rnd()*((schiffstyp[data].MaxLadung-schiffstyp[data].MinLadung)/1000)))*1000));
    Kab = (USHORT)(schiffstyp[data].MinKabinen+(((int)((float)rnd()*((schiffstyp[data].MaxKabinen-schiffstyp[data].MinKabinen)/25)))*25));
    Alt = 48;
    Preis = (float)((LONG)(schiffstyp[data].Grundpreis+(Kab/10)*.025+(Lad/1000)*1.5)*(90-Alt/6)/100);
    acttxt[2].NextText = &acttxt[3];
    if (Lad != 0)
     sprintf(&zahl[0][0],"%d",Lad);
    else
     strcpy(&zahl[0][0]," --");
    if (Kab != 0)
     sprintf(&zahl[1][0],"%d",Kab);
    else
     strcpy(&zahl[1][0]," --");
    sprintf(&Geld[0],"%3.1f Mio.",Preis);
    for(i=0;i<5;i++)
     acttxt[5+i].LeftEdge = 10+IntuiTextLength(&acttxt[4+i])+acttxt[4+i].LeftEdge;
    Ready = FALSE;
    if (Spieler[pl].Geld < Preis * 1000)
     Ready = TRUE;

    if (Ready != TRUE)
     Request(&action,Window);

    while (NOT Ready)
     {
      while((actmsg=(struct IntuiMessage *)GetMsg(Window->UserPort))==NULL);
      ReplyMsg(actmsg);
      if (actmsg->Class == GADGETDOWN)
       {
        if(actmsg->IAddress->GadgetID == 1)
         {
          Spieler[pl].Geld -= Preis * 1000;
          Anz = Spieler[pl].Schiffsanzahl;
          Spieler[pl].Schiffsdaten[Anz] = schiffstyp[data];
          Spieler[pl].Schiffsdaten[Anz].Ladung = Lad;
          Spieler[pl].Schiffsdaten[Anz].Kabinen = Kab;
          Spieler[pl].Schiffsdaten[Anz].Alter = Alt;
          Spieler[pl].Schiffsanzahl++;
          returnwert = TRUE;
         }
        else
         returnwert = FALSE;
        Ready = TRUE;
       }
     }
    EndRequest(&action,Window);
   }
  if (mode == 2)
   {
    count = 0;
    acttxt[2].NextText = &acttxt[10];
    for (i=0;i<Spieler[pl].Schiffsanzahl;i++)
     if (Spieler[pl].Schiffsdaten[i].Alter >= 0)
      count++;
    i = (int)((float)rnd() * count)-1;
    if (i < 0)
     i = 0;
    if ((strcmp(Spieler[pl].Schiffsdaten[i].Typ,"Tankschiff") != 0) && (strcmp(Spieler[pl].Schiffsdaten[i].Typ,"Passagierschiff") != 0))
     {
      Dauer = (int)((float)rnd() * 3)+1;
      if (Dauer == 1)
       strcpy(acttxt[13].IText,"Monat  ");
      else
       strcpy(acttxt[13].IText,"Monaten");
      Angebot = Dauer * (int)((float)rnd() * 3)+1;
      sprintf(&zahl[0][0],"%d",Dauer);
      sprintf(&Geld[0],"%d Mio.",Angebot);
      Ready = FALSE;

      Request(&action,Window);

      while (NOT Ready)
       {
        while((actmsg=(struct IntuiMessage *)GetMsg(Window->UserPort))==NULL);
        ReplyMsg(actmsg);
        if (actmsg->Class == GADGETDOWN)
         {
          if(actmsg->IAddress->GadgetID == 1)
           {
            for (j=0;j<Dauer;j++)
             Spieler[pl].Routen[i][j] = 5471;
            FrachtG[pl] = Angebot;
           }
          Ready = TRUE;
         }
       }
      EndRequest(&action,Window);
     }
   }
  return(returnwert);
 }
