salvaVidas/scr/visorAtaque.cpp
2021-09-01 18:26:41 +02:00

837 lines
30 KiB
C++
Raw Blame History

//---------------------------------------------------------------------------
#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
}
//---------------------------------------------------------------------------