837 lines
30 KiB
C++
837 lines
30 KiB
C++
//---------------------------------------------------------------------------
|
||
|
||
#include <vcl.h>
|
||
#pragma hdrstop
|
||
|
||
#include "visorAtaque.h"
|
||
#include "Tmain.h"
|
||
//---------------------------------------------------------------------------
|
||
#pragma package(smart_init)
|
||
#pragma resource "*.dfm"
|
||
|
||
|
||
#include <stdio.h>
|
||
#include "inifiles.hpp"
|
||
|
||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||
|
||
|
||
TvisorAtaques *visorAtaques;
|
||
//---------------------------------------------------------------------------
|
||
__fastcall TvisorAtaques::TvisorAtaques(TComponent* Owner)
|
||
: TForm(Owner)
|
||
{
|
||
/* Magnetic Form */
|
||
snapped=false;
|
||
UpdateWorkArea(); //set our workarea rect
|
||
thresh = 25; //get threshold
|
||
snapwin = FindWindow("Tmain",NULL); //get window to snap to
|
||
/*****************/
|
||
|
||
|
||
tipoD->ItemIndex=0;
|
||
updatingDB=false;
|
||
|
||
|
||
/***********************/
|
||
|
||
|
||
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::nextTABcontrol(TObject *Sender, char &Key)
|
||
{
|
||
if ( Key==VK_RETURN )
|
||
{
|
||
Key=0;
|
||
SelectNext( (TWinControl*)Sender,true,true );
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::SpeedButton2Click(TObject *Sender)
|
||
{
|
||
guardarAtaque();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
int __fastcall TvisorAtaques::guardarAtaque(void)
|
||
{
|
||
int n;
|
||
AnsiString aux;
|
||
|
||
if ( ataqueActual==NULL )
|
||
{
|
||
ataqueActual = new TAtaqueOfensivo;
|
||
AtaquesOfensivos->Add(ataqueActual);
|
||
dgAtaques->RowCount = AtaquesOfensivos->Count+1;
|
||
}
|
||
|
||
ataqueActual->lanzado=false;
|
||
|
||
ataqueActual->evento.status=12;ataqueActual->evento.avisado=true;
|
||
|
||
ataqueActual->numNaves=0;
|
||
/* Fijamos la velocidad Factor / Base */
|
||
switch( velocidadFactor->ItemIndex )
|
||
{
|
||
case '0': ataqueActual->velocidadFactor = 10; break;
|
||
case '1': ataqueActual->velocidadFactor = 9; break;
|
||
case '2': ataqueActual->velocidadFactor = 8; break;
|
||
case '3': ataqueActual->velocidadFactor = 7; break;
|
||
case '4': ataqueActual->velocidadFactor = 6; break;
|
||
case '5': ataqueActual->velocidadFactor = 5; break;
|
||
case '6': ataqueActual->velocidadFactor = 4; break;
|
||
case '7': ataqueActual->velocidadFactor = 3; break;
|
||
case '8': ataqueActual->velocidadFactor = 2; break;
|
||
case '9': ataqueActual->velocidadFactor = 1; break;
|
||
case '10': ataqueActual->velocidadFactor = 15; break;
|
||
case '11': ataqueActual->velocidadFactor = 20; break;
|
||
case '12': ataqueActual->velocidadFactor = 90; break;
|
||
|
||
default:
|
||
ataqueActual->velocidadFactor = 10;
|
||
break;
|
||
}
|
||
switch( velocidadBase->ItemIndex )
|
||
{
|
||
case 0: ataqueActual->velocidadBase = 0; break;
|
||
case 1: ataqueActual->velocidadBase = 15000; break;
|
||
case 2: ataqueActual->velocidadBase = 10000; break;
|
||
case 3: ataqueActual->velocidadBase = 100000000; break;
|
||
|
||
default:
|
||
ataqueActual->velocidadBase = 0;
|
||
break;
|
||
}
|
||
|
||
// Marca de uso de satelites (Posible BUG de oGAME)
|
||
ataqueActual->usarSatelites = usarSatelites->Checked;
|
||
|
||
|
||
// Origen del ataque
|
||
aux = planetasOrigen->Items->Strings[ planetasOrigen->ItemIndex ];
|
||
ataqueActual->evento.gO=aux.SubString(1,1).ToIntDef(0);
|
||
ataqueActual->evento.sO=aux.SubString(3,3).ToIntDef(0);
|
||
ataqueActual->evento.pO=aux.SubString(7,2).ToIntDef(0);
|
||
ataqueActual->evento.tO=aux.SubString(11,1).ToIntDef(0);
|
||
|
||
// Destino del ataque
|
||
ataqueActual->evento.gD=gD->Text.ToIntDef(0);
|
||
ataqueActual->evento.sD=sD->Text.ToIntDef(0);
|
||
ataqueActual->evento.pD=pD->Text.ToIntDef(0);
|
||
ataqueActual->evento.tD=(tipoD->ItemIndex+1);
|
||
|
||
// Mision
|
||
switch( ordenes->ItemIndex )
|
||
{
|
||
case 0: ataqueActual->evento.mision='a'; break;
|
||
case 1: ataqueActual->evento.mision='d'; break;
|
||
case 2: ataqueActual->evento.mision='t'; break;
|
||
case 3: ataqueActual->evento.mision='r'; break;
|
||
case 4: ataqueActual->evento.mision='e'; break;
|
||
}
|
||
|
||
// Naves que intervienen...
|
||
|
||
// CARGA PEQUE<55>A
|
||
n = Edit1->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=202;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=10;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=5000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=5000;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
|
||
// CARGA GRANDE
|
||
n = Edit2->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=203;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=50;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=7500;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=25000;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
|
||
// CAZADOR LIGERO
|
||
n = Edit3->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=204;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=20;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=12500;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=50;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// CAZADOR PESADO
|
||
n = Edit4->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=205;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=75;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=10000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=100;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// CRUCERO
|
||
n = Edit5->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=206;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=300;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=15000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=800;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// NAVE DE BATALLA
|
||
n = Edit6->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=207;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=500;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=10000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=1500;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// COLONIZADOR
|
||
n = Edit7->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=208;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=1000;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=2500;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=7500;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
|
||
// RECICLADOR
|
||
n = Edit8->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=209;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=300;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=2000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=20000;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// SONDA DE ESPIONAJE
|
||
n = Edit9->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=210;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=1;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=100000000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=5;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// BOMBARDERO
|
||
n = Edit10->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=211;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=1000;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=4000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=500;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// SATELITE SOLAR
|
||
n = Edit11->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=212;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=1;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=100000000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=10000000;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
// DESTRUCTOR
|
||
n = Edit12->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=213;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=1000;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=5000;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=2000;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
|
||
// ESTRELLA DE LA MUERTE
|
||
n = Edit13->Text.ToIntDef(0);
|
||
if ( n>0 )
|
||
{
|
||
ataqueActual->naves[ataqueActual->numNaves].id=214;
|
||
ataqueActual->naves[ataqueActual->numNaves].consumption=1;
|
||
ataqueActual->naves[ataqueActual->numNaves].speed=100;
|
||
ataqueActual->naves[ataqueActual->numNaves].capacity=1000000;
|
||
|
||
ataqueActual->naves[ataqueActual->numNaves].maxship = n;
|
||
ataqueActual->naves[ataqueActual->numNaves].ship = n;
|
||
ataqueActual->numNaves++;
|
||
}
|
||
|
||
return AtaquesOfensivos->IndexOf(ataqueActual);
|
||
}
|
||
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::SpeedButton5Click(TObject *Sender)
|
||
{
|
||
if ( dgAtaques->Row < (dgAtaques->RowCount-1) )
|
||
dgAtaques->Row++;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TvisorAtaques::SpeedButton6Click(TObject *Sender)
|
||
{
|
||
if ( dgAtaques->Row > 1 )
|
||
dgAtaques->Row--;
|
||
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::nuevoAtaque(void)
|
||
{
|
||
int i;
|
||
ataqueActual=NULL;
|
||
i = guardarAtaque();
|
||
resetAtaque(i);
|
||
cargarAtaque(i);
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::SpeedButton1Click(TObject *Sender)
|
||
{
|
||
guardarAtaque();
|
||
nuevoAtaque();
|
||
dgAtaques->Row=dgAtaques->RowCount-1;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::resetAtaque(int i)
|
||
{
|
||
AnsiString aux;
|
||
|
||
ataqueActual = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i];
|
||
|
||
ataqueActual->lanzado=false;
|
||
ataqueActual->numNaves=0;
|
||
ataqueActual->velocidadBase = 0;
|
||
ataqueActual->velocidadFactor = 0;
|
||
ataqueActual->usarSatelites = false;
|
||
|
||
// Origen del ataque
|
||
aux = planetasOrigen->Items->Strings[ 0 ];
|
||
ataqueActual->evento.gO=aux.SubString(1,1).ToIntDef(0);
|
||
ataqueActual->evento.sO=aux.SubString(3,3).ToIntDef(0);
|
||
ataqueActual->evento.pO=aux.SubString(7,2).ToIntDef(0);
|
||
ataqueActual->evento.tO=aux.SubString(11,1).ToIntDef(0);
|
||
|
||
// Destino del ataque
|
||
ataqueActual->evento.gD=ataqueActual->evento.gO;
|
||
ataqueActual->evento.sD=0;
|
||
ataqueActual->evento.pD=0;
|
||
ataqueActual->evento.tD=1;
|
||
|
||
// Mision
|
||
ataqueActual->evento.mision='a';
|
||
|
||
// Naves que intervienen...
|
||
for ( i=0; i<13; i++ )
|
||
{
|
||
ataqueActual->naves[i].id = 0;
|
||
ataqueActual->naves[i].ship = 0;
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::cargarAtaque(int i)
|
||
{
|
||
ataqueActual = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i];
|
||
dgAtaques->RowCount = AtaquesOfensivos->Count+1;
|
||
|
||
// Fijamos los datos del destino...
|
||
gD->Text = AnsiString( ataqueActual->evento.gD );
|
||
sD->Text = AnsiString( ataqueActual->evento.sD );
|
||
pD->Text = AnsiString( ataqueActual->evento.pD );
|
||
tipoD->ItemIndex = (ataqueActual->evento.tD-1);
|
||
// mision
|
||
switch( ataqueActual->evento.mision )
|
||
{
|
||
case 'a': ordenes->ItemIndex=0; break;
|
||
case 'd': ordenes->ItemIndex=1; break;
|
||
case 't': ordenes->ItemIndex=2; break;
|
||
case 'r': ordenes->ItemIndex=3; break;
|
||
case 'e': ordenes->ItemIndex=4; break;
|
||
}
|
||
// Fijamos los datos del origen...
|
||
AnsiString aux;
|
||
aux = Format("%d:%.3d:%.2d -%d-",ARRAYOFCONST((ataqueActual->evento.gO,ataqueActual->evento.sO,ataqueActual->evento.pO,ataqueActual->evento.tO)) );
|
||
/* buscamos en la lista de planetas origen, un patron que concuerde con el formato anterior */
|
||
for( i=0;i<planetasOrigen->Items->Count;i++ )
|
||
if ( planetasOrigen->Items->Strings[i].Pos(aux)!=0 )
|
||
planetasOrigen->ItemIndex=i;
|
||
|
||
/* Fijamos la velocidad Factor / Base */
|
||
switch( ataqueActual->velocidadFactor )
|
||
{
|
||
case '10': velocidadFactor->ItemIndex = 0; break;
|
||
case '9': velocidadFactor->ItemIndex = 1; break;
|
||
case '8': velocidadFactor->ItemIndex = 2; break;
|
||
case '7': velocidadFactor->ItemIndex = 3; break;
|
||
case '6': velocidadFactor->ItemIndex = 4; break;
|
||
case '5': velocidadFactor->ItemIndex = 5; break;
|
||
case '4': velocidadFactor->ItemIndex = 6; break;
|
||
case '3': velocidadFactor->ItemIndex = 7; break;
|
||
case '2': velocidadFactor->ItemIndex = 8; break;
|
||
case '1': velocidadFactor->ItemIndex = 9; break;
|
||
case '15': velocidadFactor->ItemIndex = 10; break;
|
||
case '20': velocidadFactor->ItemIndex = 11; break;
|
||
case '90': velocidadFactor->ItemIndex = 12; break;
|
||
|
||
default:
|
||
velocidadFactor->ItemIndex = 0;
|
||
break;
|
||
}
|
||
switch( ataqueActual->velocidadBase )
|
||
{
|
||
case 0: velocidadBase->ItemIndex = 0; break;
|
||
case 15000: velocidadBase->ItemIndex = 1; break;
|
||
case 10000: velocidadBase->ItemIndex = 2; break;
|
||
case 100000000: velocidadBase->ItemIndex = 3; break;
|
||
|
||
default:
|
||
velocidadBase->ItemIndex = 0;
|
||
break;
|
||
}
|
||
|
||
// Marca de uso de satelites (Posible BUG de oGAME)
|
||
usarSatelites->Checked = ataqueActual->usarSatelites;
|
||
|
||
|
||
Edit1->Text=0;Edit2->Text=0;Edit3->Text=0;Edit4->Text=0;Edit5->Text=0;Edit6->Text=0;Edit7->Text=0;Edit8->Text=0;
|
||
Edit9->Text=0;Edit10->Text=0;Edit11->Text=0;Edit12->Text=0;Edit13->Text=0;
|
||
// Naves que intervienen...
|
||
for ( i=0; i<ataqueActual->numNaves; i++ )
|
||
{
|
||
switch( ataqueActual->naves[i].id )
|
||
{
|
||
case 202: Edit1->Text = ataqueActual->naves[i].ship; break;
|
||
case 203: Edit2->Text = ataqueActual->naves[i].ship; break;
|
||
case 204: Edit3->Text = ataqueActual->naves[i].ship; break;
|
||
case 205: Edit4->Text = ataqueActual->naves[i].ship; break;
|
||
case 206: Edit5->Text = ataqueActual->naves[i].ship; break;
|
||
case 207: Edit6->Text = ataqueActual->naves[i].ship; break;
|
||
case 208: Edit7->Text = ataqueActual->naves[i].ship; break;
|
||
case 209: Edit8->Text = ataqueActual->naves[i].ship; break;
|
||
case 210: Edit9->Text = ataqueActual->naves[i].ship; break;
|
||
case 211: Edit10->Text = ataqueActual->naves[i].ship; break;
|
||
case 212: Edit11->Text = ataqueActual->naves[i].ship; break;
|
||
case 213: Edit12->Text = ataqueActual->naves[i].ship; break;
|
||
case 214: Edit13->Text = ataqueActual->naves[i].ship; break;
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::dgAtaquesDrawCell(TObject *Sender,
|
||
int ACol, int ARow, TRect &Rect, TGridDrawState State)
|
||
{
|
||
if ( ARow==0 )
|
||
{
|
||
if ( ACol==0 )
|
||
dgAtaques->RowHeights[0]=18;
|
||
|
||
dgAtaques->Canvas->TextOut(Rect.Left,Rect.Top," Planeta Origen");
|
||
dgAtaques->Canvas->TextOut(Rect.Left+120,Rect.Top," [GSP] Destino" );
|
||
dgAtaques->Canvas->TextOut(Rect.Left+240,Rect.Top," Ord" );
|
||
} else {
|
||
if ( ARow <= AtaquesOfensivos->Count )
|
||
// if ( (ARow-1) < AtaquesOfensivos->Count )
|
||
{
|
||
|
||
int tH,tM,tS;
|
||
PAtaqueOfensivo EAtaque;
|
||
EAtaque = (PAtaqueOfensivo)AtaquesOfensivos->Items[ARow-1];
|
||
|
||
// Fondo del GRID
|
||
if (!State.Contains(gdFocused))
|
||
{
|
||
switch( EAtaque->evento.mision )
|
||
{
|
||
case 's': dgAtaques->Canvas->Brush->Color = 0x007DDBFF; break;
|
||
case 't': dgAtaques->Canvas->Brush->Color = clSkyBlue; break;
|
||
case 'A': dgAtaques->Canvas->Brush->Color = 0x006262FF; break;
|
||
case 'r': dgAtaques->Canvas->Brush->Color = 0x007282B8; break; /* BGR */
|
||
default:
|
||
dgAtaques->Canvas->Brush->Color = clWhite;
|
||
}
|
||
}
|
||
dgAtaques->Canvas->TextRect(TRect(Rect.Left,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left,Rect.Top,"["+AnsiString(EAtaque->evento.gO)+":"+AnsiString(EAtaque->evento.sO)+":"+AnsiString(EAtaque->evento.pO)+"]."+AnsiString(EAtaque->evento.tO));
|
||
dgAtaques->Canvas->TextRect(TRect(Rect.Left+120,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left+120,Rect.Top,"["+AnsiString(EAtaque->evento.gD)+":"+AnsiString(EAtaque->evento.sD)+":"+AnsiString(EAtaque->evento.pD)+"]."+AnsiString(EAtaque->evento.tD));
|
||
dgAtaques->Canvas->TextRect(TRect(Rect.Left+240,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left+240,Rect.Top, EAtaque->evento.mision);
|
||
dgAtaques->Canvas->TextRect(TRect(Rect.Left,Rect.Top+16,Rect.Right,Rect.Bottom),Rect.Left,Rect.Top + 16, digerirFlota(EAtaque->naves,EAtaque->numNaves) );
|
||
|
||
if (State.Contains(gdFocused))
|
||
dgAtaques->Canvas->DrawFocusRect(Rect);
|
||
}
|
||
}
|
||
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TvisorAtaques::dgAtaquesSelectCell(TObject *Sender,
|
||
int ACol, int ARow, bool &CanSelect)
|
||
{
|
||
if ( ARow<1 ) CanSelect=false;
|
||
else {
|
||
if (!updatingDB)
|
||
guardarAtaque();
|
||
cargarAtaque(ARow-1);
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
AnsiString __fastcall TvisorAtaques::digerirFlota(THangar *naves,int numNaves)
|
||
{
|
||
AnsiString dev;
|
||
int i;
|
||
for ( i=0; i<numNaves; i++ )
|
||
{
|
||
switch( naves[i].id )
|
||
{
|
||
case 202: dev += AnsiString(naves[i].ship)+AnsiString("c "); break;
|
||
case 203: dev += AnsiString(naves[i].ship)+AnsiString("C "); break;
|
||
case 204: dev += AnsiString(naves[i].ship)+AnsiString("lg "); break;
|
||
case 205: dev += AnsiString(naves[i].ship)+AnsiString("ps "); break;
|
||
case 206: dev += AnsiString(naves[i].ship)+AnsiString("cr "); break;
|
||
case 207: dev += AnsiString(naves[i].ship)+AnsiString("nb "); break;
|
||
case 208: dev += AnsiString(naves[i].ship)+AnsiString("col "); break;
|
||
case 209: dev += AnsiString(naves[i].ship)+AnsiString("R "); break;
|
||
case 210: dev += AnsiString(naves[i].ship)+AnsiString("S "); break;
|
||
case 211: dev += AnsiString(naves[i].ship)+AnsiString("B "); break;
|
||
case 212: dev += AnsiString(naves[i].ship)+AnsiString("sat "); break;
|
||
case 213: dev += AnsiString(naves[i].ship)+AnsiString("D "); break;
|
||
case 214: dev += AnsiString(naves[i].ship)+AnsiString("EdlM "); break;
|
||
}
|
||
}
|
||
return dev;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::SpeedButton4Click(TObject *Sender)
|
||
{
|
||
int i,rc;
|
||
updatingDB = true;
|
||
|
||
|
||
i = AtaquesOfensivos->IndexOf(ataqueActual);
|
||
if ( i>=0 )
|
||
{
|
||
delete ataqueActual;
|
||
ataqueActual = NULL;
|
||
AtaquesOfensivos->Delete(i);
|
||
|
||
if ( AtaquesOfensivos->Count==0 )
|
||
{
|
||
nuevoAtaque();
|
||
dgAtaques->RowCount = AtaquesOfensivos->Count + 1;
|
||
dgAtaques->FixedRows=1;
|
||
dgAtaques->Row=1;
|
||
} else {
|
||
if ( i==0 )
|
||
{
|
||
cargarAtaque(0);
|
||
dgAtaques->Row=1;
|
||
} else {
|
||
cargarAtaque(i-1);
|
||
dgAtaques->Row=i;
|
||
}
|
||
}
|
||
}
|
||
|
||
updatingDB = false;
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TvisorAtaques::SpeedButton3Click(TObject *Sender)
|
||
{
|
||
bool save;
|
||
int i;
|
||
if (SaveDialog1->Execute())
|
||
{
|
||
save = true;
|
||
if ( FileExists(SaveDialog1->FileName) )
|
||
save = ( MessageDlg("El fichero destino ya existe. <20>reemplazar archivo? ",
|
||
mtWarning, TMsgDlgButtons() << mbYes << mbNo << mbCancel, 0) == mrYes
|
||
);
|
||
|
||
if ( save ) {
|
||
|
||
FILE *out;
|
||
if ((out = fopen(SaveDialog1->FileName.c_str(), "wt")) != NULL)
|
||
{
|
||
// Parseamos la lista de ataques a un CVS
|
||
// gO,sO,pO,tO,mision,gD,sD,pD,tD,velocidad,metal,cristal,deuterio,-1,-2,-3,-4,-5,#c,#C,#lg,#cz,#cr,#nb~,#col,#rc,#S,#b,#sat,#d,#edlm
|
||
TAtaqueOfensivo *Ataque;
|
||
for (i=0;i<AtaquesOfensivos->Count; i++ )
|
||
{
|
||
Ataque = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i];
|
||
fprintf( out, "%d:%0.3d:%0.2d.%d,%c,%d:%0.3d:%0.2d.%d,%d,%ld,0,0,0,0,0,0,%d,%d:{%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d}\n",
|
||
Ataque->evento.gO,Ataque->evento.sO,Ataque->evento.pO,Ataque->evento.tO,
|
||
Ataque->evento.mision,
|
||
Ataque->evento.gD,Ataque->evento.sD,Ataque->evento.pD,Ataque->evento.tD,
|
||
Ataque->velocidadFactor,Ataque->velocidadBase,
|
||
(Ataque->usarSatelites?1:0),
|
||
Ataque->numNaves,
|
||
Ataque->naves[0].id,Ataque->naves[0].ship,
|
||
Ataque->naves[1].id,Ataque->naves[1].ship,
|
||
Ataque->naves[2].id,Ataque->naves[2].ship,
|
||
Ataque->naves[3].id,Ataque->naves[3].ship,
|
||
Ataque->naves[4].id,Ataque->naves[4].ship,
|
||
Ataque->naves[5].id,Ataque->naves[5].ship,
|
||
Ataque->naves[6].id,Ataque->naves[6].ship,
|
||
Ataque->naves[7].id,Ataque->naves[7].ship,
|
||
Ataque->naves[8].id,Ataque->naves[8].ship,
|
||
Ataque->naves[9].id,Ataque->naves[9].ship,
|
||
Ataque->naves[10].id,Ataque->naves[10].ship,
|
||
Ataque->naves[11].id,Ataque->naves[11].ship,
|
||
Ataque->naves[12].id,Ataque->naves[12].ship
|
||
);
|
||
}
|
||
fclose(out);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|
||
void __fastcall TvisorAtaques::SpeedButton7Click(TObject *Sender)
|
||
{
|
||
|
||
if (OpenDialog1->Execute() && FileExists(OpenDialog1->FileName) )
|
||
{
|
||
updatingDB = true;
|
||
dgAtaques->RowCount = 1;
|
||
|
||
|
||
|
||
TIniFile *ini;
|
||
ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\salvaVidas.ini");
|
||
if ( main->cargarAtaques(OpenDialog1->FileName) )
|
||
{
|
||
ini->WriteString("colaAtaques","nombreCola",OpenDialog1->FileName);
|
||
|
||
dgAtaques->RowCount = AtaquesOfensivos->Count+1;
|
||
if (dgAtaques->RowCount>1)
|
||
{
|
||
dgAtaques->FixedRows=1;
|
||
// ataqueActual = NULL;
|
||
cargarAtaque(0);
|
||
// dgAtaques->Row=1;
|
||
}
|
||
} else
|
||
ini->WriteString("colaAtaques","nombreCola","");
|
||
delete ini;
|
||
|
||
updatingDB = false;
|
||
|
||
}
|
||
}
|
||
|
||
/*
|
||
bool __fastcall TvisorAtaques::cargarAtaques(AnsiString filename)
|
||
{
|
||
float aux;
|
||
bool dev;
|
||
|
||
dev=false;
|
||
|
||
FILE *in;
|
||
if ((in = fopen(filename.c_str(), "rt")) != NULL)
|
||
{
|
||
TAtaqueOfensivo *Ataque;
|
||
|
||
// BEGIN -- Limpiamos la cola actual
|
||
int i;
|
||
for (i=0;i<AtaquesOfensivos->Count;i++)
|
||
{
|
||
Ataque = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i];
|
||
delete Ataque;
|
||
}
|
||
AtaquesOfensivos->Clear();
|
||
// END -- Limpiamos la cola actual
|
||
|
||
int _usarSatelites;
|
||
i=0;
|
||
Ataque = new TAtaqueOfensivo;
|
||
do
|
||
{
|
||
i = fscanf(in,"%d:%d:%d.%d,%c,%d:%d:%d.%d,%d,%ld,%d,%d,%d,%d,%d,%d,%d,%d:{%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d}",
|
||
&Ataque->evento.gO,&Ataque->evento.sO,&Ataque->evento.pO,&Ataque->evento.tO,
|
||
&Ataque->evento.mision,
|
||
&Ataque->evento.gD,&Ataque->evento.sD,&Ataque->evento.pD,&Ataque->evento.tD,
|
||
&Ataque->velocidadFactor,&Ataque->velocidadBase,
|
||
&aux,&aux,&aux,&aux,&aux,&aux,
|
||
&_usarSatelites,
|
||
&Ataque->numNaves,
|
||
&Ataque->naves[0].id,&Ataque->naves[0].ship,
|
||
&Ataque->naves[1].id,&Ataque->naves[1].ship,
|
||
&Ataque->naves[2].id,&Ataque->naves[2].ship,
|
||
&Ataque->naves[3].id,&Ataque->naves[3].ship,
|
||
&Ataque->naves[4].id,&Ataque->naves[4].ship,
|
||
&Ataque->naves[5].id,&Ataque->naves[5].ship,
|
||
&Ataque->naves[6].id,&Ataque->naves[6].ship,
|
||
&Ataque->naves[7].id,&Ataque->naves[7].ship,
|
||
&Ataque->naves[8].id,&Ataque->naves[8].ship,
|
||
&Ataque->naves[9].id,&Ataque->naves[9].ship,
|
||
&Ataque->naves[10].id,&Ataque->naves[10].ship,
|
||
&Ataque->naves[11].id,&Ataque->naves[11].ship,
|
||
&Ataque->naves[12].id,&Ataque->naves[12].ship
|
||
);
|
||
if ( i>0 )
|
||
{
|
||
Ataque->usarSatelites = (_usarSatelites==1);
|
||
Ataque->lanzado = false;
|
||
Ataque->evento.status=12;Ataque->evento.avisado=true;
|
||
|
||
if ( Ataque->numNaves>13 ) Ataque->numNaves=13;
|
||
main->fixParams(Ataque->naves);
|
||
AtaquesOfensivos->Add(Ataque);
|
||
Ataque = new TAtaqueOfensivo;
|
||
}
|
||
}while( i>0 );
|
||
delete Ataque;
|
||
|
||
|
||
fclose(in);
|
||
|
||
dev = true;
|
||
}
|
||
|
||
return dev;
|
||
}
|
||
*/
|
||
//---------------------------------------------------------------------------
|
||
/* Magnetic Form */
|
||
/*****************/
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::SettingChanged(TMessage &msg)
|
||
{
|
||
UpdateWorkArea();
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::WMWindowPosChanging(TWMWindowPosChanging &msg)
|
||
{
|
||
RECT sr;
|
||
snapped=false;
|
||
//test window
|
||
if (snapwin && IsWindowVisible(snapwin))
|
||
{
|
||
if (GetWindowRect(snapwin,&sr))
|
||
{
|
||
if ( (msg.WindowPos->x <= (sr.right+thresh)) &&
|
||
(msg.WindowPos->x >= (sr.right-thresh)) ) {
|
||
if ((msg.WindowPos->y > sr.top) && (msg.WindowPos->y < sr.bottom)) {
|
||
snapped=true;
|
||
msg.WindowPos->x = sr.right;
|
||
}
|
||
}
|
||
else if ((msg.WindowPos->x + msg.WindowPos->cx) >= (sr.left-thresh) &&
|
||
(msg.WindowPos->x + msg.WindowPos->cx) <= (sr.left+thresh)) {
|
||
if ((msg.WindowPos->y > sr.top) && (msg.WindowPos->y < sr.bottom)) {
|
||
snapped=true;
|
||
msg.WindowPos->x = sr.left-msg.WindowPos->cx;
|
||
}
|
||
}
|
||
|
||
if ( (msg.WindowPos->y <= (sr.bottom+thresh)) &&
|
||
(msg.WindowPos->y >= (sr.bottom-thresh)) ) {
|
||
if ((msg.WindowPos->x > sr.left) && (msg.WindowPos->x < sr.right)) {
|
||
snapped=true;
|
||
msg.WindowPos->y = sr.bottom;
|
||
}
|
||
}
|
||
else if ((msg.WindowPos->y + msg.WindowPos->cy) <= (sr.top+thresh) &&
|
||
(msg.WindowPos->y + msg.WindowPos->cy) >= (sr.top-thresh)) {
|
||
if ((msg.WindowPos->x > sr.left) && (msg.WindowPos->x < sr.right)) {
|
||
snapped=true;
|
||
msg.WindowPos->y = sr.top-msg.WindowPos->cy;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//test screen
|
||
sr = work_area;
|
||
if (abs(msg.WindowPos->x) <= (sr.left+thresh)) {
|
||
snapped=true;
|
||
msg.WindowPos->x = sr.left;
|
||
}
|
||
else if ((msg.WindowPos->x + msg.WindowPos->cx) >= (sr.right-thresh) &&
|
||
(msg.WindowPos->x + msg.WindowPos->cx) <= (sr.right+thresh)) {
|
||
snapped=true;
|
||
msg.WindowPos->x = sr.right-msg.WindowPos->cx;
|
||
}
|
||
|
||
if (abs(msg.WindowPos->y) <= (sr.top+thresh)) {
|
||
snapped=true;
|
||
msg.WindowPos->y = sr.top;
|
||
}
|
||
else if ((msg.WindowPos->y+msg.WindowPos->cy) >= (sr.bottom-thresh) &&
|
||
(msg.WindowPos->y+msg.WindowPos->cy) <= (sr.bottom+thresh)) {
|
||
snapped=true;
|
||
msg.WindowPos->y = sr.bottom-msg.WindowPos->cy;
|
||
}
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
void __fastcall TvisorAtaques::UpdateWorkArea()
|
||
{
|
||
SystemParametersInfo(SPI_GETWORKAREA, 0, &work_area, 0);
|
||
//get the size of the desktop or whatever
|
||
}
|
||
//---------------------------------------------------------------------------
|
||
|