first commit (2005-12-25)
This commit is contained in:
836
scr/visorAtaque.cpp
Normal file
836
scr/visorAtaque.cpp
Normal file
@ -0,0 +1,836 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#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
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user