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

/*
Firma   : Digital Artist (DgA)
Objekt  : reederei/gebote.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 <graphics/rastport.h>
#include "reederei.h"

extern struct IntuiMessage *GetMsg();
extern float rnd();

extern struct Window *Window;
extern struct TextAttr font[2];
extern struct Spieler Spieler[4];
extern struct Schiff schiffstyp[6];
extern USHORT *box4;
extern UBYTE Data[15][11];
extern UBYTE Geld[15];
extern int players;

USHORT gpts[18] =
 {0,0,579,0,579,114,1,114,1,0,578,0,578,114,0,114,0,0};

struct IntuiText gggtxt[4] =
 {
  {1,13,JAM2,17,2,&font[0],NULL,NULL},
  {1,13,JAM2,17,2,&font[0],NULL,NULL},
  {1,13,JAM2,17,2,&font[0],NULL,NULL},
  {1,13,JAM2,17,2,&font[0],NULL,NULL}
 };

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

struct Gadget ggg[4] =
 {
  {&ggg[1],76,75,172,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&gggim,NULL,&gggtxt[0],0L,NULL,0,NULL},
  {&ggg[2],328,75,172,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&gggim,NULL,&gggtxt[1],0L,NULL,1,NULL},
  {&ggg[3],76,95,172,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&gggim,NULL,&gggtxt[2],0L,NULL,2,NULL},
  {NULL,328,95,172,13,GADGIMAGE|GADGHCOMP,GADGIMMEDIATE,BOOLGADGET|REQGADGET,&gggim,NULL,&gggtxt[3],0L,NULL,3,NULL}
 };

struct Border gbo =
 {0,0,13,0,JAM2,9,&gpts[0],NULL};

struct IntuiText gtxt[11] =
 {
  {12,0,JAM2,25,15,&font[0],"Es wird ein Schiff zum Verkauf angeboten.",&gtxt[1]},
  {12,0,JAM2,15,30,&font[0],"Tonnen :",&gtxt[2]},
  {11,0,JAM2,110,30,&font[0],&Data[0][0],&gtxt[3]},
  {12,0,JAM2,200,30,&font[0],"Kabinen :",&gtxt[4]},
  {11,0,JAM2,300,30,&font[0],&Data[1][0],&gtxt[5]},
  {12,0,JAM2,25,45,&font[0],"Gebot :",&gtxt[6]},
  {11,0,JAM2,110,45,&font[0],&Geld[0],NULL},

  {1,0,JAM2,15,60,&font[0],"zum ersten...",NULL},
  {1,0,JAM2,150,60,&font[0],"zum zweiten...",NULL},
  {1,0,JAM2,280,60,&font[0],"zum dritten",NULL},
  {1,0,JAM2,15,60,&font[0],"                                        ",NULL}
 };

struct Requester gebote =
 {NULL,30,40,580,115,0,0,&ggg[0],&gbo,&gtxt[0],0,0,NULL,NULL,NULL,NULL,NULL};

int Gebot,MaxComp;

Gebote(pl,data)
int pl,data;
 {
  struct IntuiMessage *gmsg = NULL;
  struct RastPort *rp;
  int i,j,id;
  int count = 0;
  BOOL done = FALSE;
  BOOL ready = FALSE;

  gggim.ImageData = box4;

  for (i=0;i<4;i++)
   {
    gggtxt[i].FrontPen = 1;
    gggtxt[i].IText = Spieler[i].Firma;
    gggtxt[i].LeftEdge = (176-IntuiTextLength(&gggtxt[i]))/2;
    if (i >= players)
     OffGadget(&ggg[i],Window,&gebote);
    else
     OnGadget(&ggg[i],Window,&gebote);
   }
  gggtxt[pl].FrontPen = 0;

  sprintf(&Data[0][0],"%d",Spieler[pl].Schiffsdaten[data].Ladung);
  sprintf(&Data[1][0],"%d",Spieler[pl].Schiffsdaten[data].Kabinen);
  Gebot = (int)((Spieler[pl].Schiffsdaten[data].Grundpreis+.025*(Spieler[pl].Schiffsdaten[data].Kabinen/10)+1.5*(Spieler[pl].Schiffsdaten[data].Ladung/1000))*(90-Spieler[pl].Schiffsdaten[data].Alter/6)/100);
  MaxComp = Gebot * 1.5;

  Request(&gebote,Window);

  rp = gebote.ReqLayer->rp;

  RefreshOptik(rp);
  count = i = 0;
  id = pl;

  while (NOT ready)
   {
    while (((gmsg=(struct IntuiMessage *)GetMsg(Window->UserPort))==NULL) && (NOT done))
     {
      Delay(10);
      count++;
      if (count == 15)
       {
        i++;
        if (i == 3)
         {
          done = TRUE;
          ready = TRUE;
          PrintIText(rp,&gtxt[9],0,0);
          Delay(10);
         }
        else
         {
          PrintIText(rp,&gtxt[6+i],0,0);
          count = 0;
         }
       }
      if (((rnd()*100) < 30) && (Gebot <= MaxComp) && (players != 4))
       {
        gggtxt[id].FrontPen = 1;
        id = 3;
        gggtxt[id].FrontPen = 0;
        RefreshGadgets(&ggg[0],Window,&gebote);
        Gebot++;
        RefreshOptik(rp);
        count = 0;
        i = 0;
        done = FALSE;
       }
     }

    if (gmsg != NULL)
     {
      ReplyMsg(gmsg);

      if (gmsg->Class == GADGETDOWN)
       {
        gggtxt[id].FrontPen = 1;
        id = gmsg->IAddress->GadgetID;
        gggtxt[id].FrontPen = 0;
        RefreshGadgets(&ggg[0],Window,&gebote);
        Gebot++;
        RefreshOptik(rp);
        count = 0;
        i = 0;
        done = FALSE;
       }
     }
   }

  if (id != pl)
   {
    Spieler[pl].Geld += Gebot * 1000;
    Spieler[id].Geld -= Gebot * 1000;
    i = Spieler[id].Schiffsanzahl;
    j = Spieler[pl].Schiffsanzahl-1;
    Spieler[id].Schiffsdaten[i] = Spieler[pl].Schiffsdaten[data];
    if (data != j)
     Spieler[pl].Schiffsdaten[data] = Spieler[pl].Schiffsdaten[j];
    Spieler[id].Schiffsanzahl++;
    Spieler[pl].Schiffsanzahl--;
   }

  EndRequest(&gebote,Window);

  return;
 }

RefreshOptik(rp)
struct RastPort *rp;
 {
  PrintIText(rp,&gtxt[10],0,0);
  sprintf(&Geld[0],"%d Mio. ",Gebot);
  strncat(&Geld[0],"              ",14-strlen(&Geld[0]));
  PrintIText(rp,&gtxt[6],0,0);

  return;
 }
