123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- #define LOGISTICSCOMPONENT_CPP
- /*************************************************************************************************\
- LogisticsComponent.cpp : Implementation of the LogisticsComponent component.
- //---------------------------------------------------------------------------//
- // Copyright (C) Microsoft Corporation. All rights reserved. //
- //===========================================================================//
- \*************************************************************************************************/
- #include "LogisticsComponent.h"
- #include <gameos.hpp>
- #include "Cmponent.h"
- #include "..\resource.h"
- #include "utilities.h"
- extern char* ComponentFormString[];
- long LogisticsComponent::XICON_FACTOR = 48;
- long LogisticsComponent::YICON_FACTOR = 32;
- float LogisticsComponent::MAX_HEAT = 20.f;
- float LogisticsComponent::MAX_DAMAGE = 15.f;
- float LogisticsComponent::MAX_RECYCLE = 10.75f;
- float LogisticsComponent::MAX_RANGE = 3.f;
- /*char* LogisticsComponent::ComponentFormString[NUM_COMPONENT_FORMS] =
- {
- "Simple",
- "Cockpit",
- "Sensor",
- "Actuator",
- "Engine",
- "HeatSink",
- "Weapon",]
- "EnergyWeapon",
- "BallsticWeapon",
- "MissileWeapon",
- "Ammo",
- "JumpJet",
- "Case",
- "LifeSuport",
- "Gyroscope",
- "PowerAmplifier",
- "ECM",
- "Probe",
- "Jammer",
- "Bulk",
- };*/
- LogisticsComponent::LogisticsComponent()
- {
- name = NULL;
- ID = -1;
- flavorText = NULL;
- bHead = bTorso = bLegs = 0;
- iconFileName = 0;
- pictureFileName = 0;
- iconX = iconY = 0;
- bAvailable = 0;
- recycleTime = 0.f;
- }
- //-------------------------------------------------------------------------------------------------
- LogisticsComponent::~LogisticsComponent()
- {
- if ( name )
- delete name;
- if ( iconFileName )
- delete iconFileName;
- if ( pictureFileName )
- delete pictureFileName;
- }
- int LogisticsComponent::init( char* dataLine )
- {
- char* line = dataLine;
- char* pLine = line;
- char pBuffer[1025];
- ID = (extractInt( pLine ));
- // the type
- extractString( pLine, pBuffer, 1024 );
- for ( int i = 0; i < NUM_COMPONENT_FORMS; ++i )
- {
- if ( 0 == stricmp( ComponentFormString[i], pBuffer ) )
- {
- Type = i;
- break;
- }
- }
- if ( i == NUM_COMPONENT_FORMS )
- return -1;
- // name, probably aren't going to use this, they should be in the RC.
- extractString( pLine, pBuffer, 1024 );
- // name, probably aren't going to use this, they should be in the RC.
- extractString( pLine, pBuffer, 1024 ); // ignore critical hits
- recycleTime = extractFloat( pLine );
- heat = extractFloat( pLine );
- // weight
- weight = extractFloat( pLine );
- damage = extractFloat( pLine );
- // ignore battle rating
- extractString( pLine, pBuffer, 1024 );
- // cost
- cost = extractInt( pLine );
- // range
- extractString( pLine, pBuffer, 1024 );
- if ( !isWeapon() )
- rangeType = NO_RANGE;
- else if ( !strcmp( pBuffer, "long" ) )
- rangeType = LONG;
- else if ( !strcmp( pBuffer, "medium" ) )
- rangeType = MEDIUM;
- else
- rangeType = SHORT;
- // we need to figure out where things can go
- extractString( pLine, pBuffer, 1024 );
- bHead = stricmp( pBuffer, "Yes" ) ? false : true;
-
- extractString( pLine, pBuffer, 1024 );
- bTorso = stricmp( pBuffer, "Yes" ) ? false : true;
-
- // ignore the next 4 columns
- for ( i = 0; i < 4; ++i )
- extractString( pLine, pBuffer, 1024 );
-
- extractString( pLine, pBuffer, 1024 );
- bLegs = stricmp( pBuffer, "Yes" ) ? false : true;
-
- // ignore the next 4 columns
- for ( i = 0; i < 4; ++i )
- extractString( pLine, pBuffer, 1024 );
- Ammo = extractInt( pLine );
- // now read in icon info
- extractString( pLine, pBuffer, 1024 );
- if ( *pBuffer && (pBuffer[0] != '0') )
- {
- iconFileName = new char[strlen( pBuffer ) + 1];
- strcpy( iconFileName, pBuffer );
- }
- else
- return -1; // fail if no picture
- extractString( pLine, pBuffer, 1024 );
- if ( *pBuffer )
- {
- pictureFileName = new char[strlen( pBuffer ) + 1]; //Forgot the NULL all over the place did we?
- strcpy( pictureFileName, pBuffer );
- }
- stringID = extractInt( pLine );
- helpStringID = extractInt( pLine );
- iconX = extractInt( pLine );
- iconY = extractInt( pLine );
-
- char nameBuffer[256];
- cLoadString( stringID, nameBuffer, 256 );
- name = flavorText = new char[strlen( nameBuffer ) + 1]; //Lets not forget the NULL!!!
- strcpy( name, nameBuffer );
- return ID;
- }
- int LogisticsComponent::extractString( char*& pFileLine, char* pBuffer, int bufferLength )
- {
- *pBuffer = 0;
- for ( int i = 0; i < 512; ++i )
- {
- if ( pFileLine[i] == '\n' )
- break;
- else if ( pFileLine[i] == ',' )
- break;
- else if ( pFileLine[i] == NULL )
- break;
- }
- if ( i == 512 )
- return false;
- gosASSERT( i < bufferLength );
- memcpy( pBuffer, pFileLine, i );
- pBuffer[i] = NULL;
- bufferLength = i + 1;
- pFileLine += i + 1;
- return i;
- }
- int LogisticsComponent::extractInt( char*& pFileLine )
- {
- char buffer[1024];
- int count = extractString( pFileLine, buffer, 1024 );
- if ( count > 0 )
- {
- return atoi( buffer );
- }
- return -1;
- }
- float LogisticsComponent::extractFloat( char*& pFileLine )
- {
- char buffer[1024];
- int count = extractString( pFileLine, buffer, 1024 );
- if ( count > 0 )
- {
- return atof( buffer );
- }
- return -1;
- }
- bool LogisticsComponent::compare( LogisticsComponent* second, int type )
- {
- switch( type )
- {
- case DAMAGE:
- return second->damage > damage;
- break;
- case WEIGHT:
- return second->weight > damage;
- break;
- case HEAT:
- return second->heat > heat;
- break;
- case NAME:
- return stricmp( name, second->name ) > 0;
- break;
- case RANGE:
- return second->damage > damage;
- break;
- }
- return 0;
- }
- bool LogisticsComponent::isWeapon()
- {
- return Type == COMPONENT_FORM_WEAPON ||
- Type == COMPONENT_FORM_WEAPON_ENERGY ||
- Type == COMPONENT_FORM_WEAPON_BALLISTIC ||
- Type == COMPONENT_FORM_WEAPON_MISSILE;
- }
- //*************************************************************************************************
- // end of file ( LogisticsComponent.cpp )
|