Subversion Repositories spk

Rev

Rev 1 | Blame | Compare with Previous | Last modification | View Log | RSS feed

// X3Data.h: interface for the CX3Data class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_X3DATA_H__491F0DBE_1AE5_4956_B262_F2D1B0D0E9FF__INCLUDED_)
#define AFX_X3DATA_H__491F0DBE_1AE5_4956_B262_F2D1B0D0E9FF__INCLUDED_

#include <Utils/WStringList.h>

Utils::WString GetEndOfLine(FILE* id, int* line, bool upper);

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define DATA_LOCKED  m_bLocked = true;
#define DATA_UNLOCKED m_bLocked = false;

enum Rep { REP_TRADE, REP_FIGHT, REP_ARGON, REP_BORON, REP_SPLIT, REP_PARANID, REP_TELADI, REP_GONER, REP_TERRAN, REP_ATF, REP_PIRATES, REP_YAKI };
enum ShipClass { CLASS_M1, CLASS_M2, CLASS_M3, CLASS_M4, CLASS_M5, CLASS_M6, CLASS_M7, CLASS_M8, CLASS_TP, CLASS_TS, CLASS_TM, CLASS_TL };
#define MAXRACEREP              12
#define MAXSHIPCLASS    12

typedef struct SShip {
        void Reset() { sName = sID = sClass = sEnv = ""; iSpeed = 0; }
        Utils::WString sName;
        Utils::WString sID;
        Utils::WString sClass;
        Utils::WString sEnv;
        int              iSpeed;
} SShip;

typedef struct STarget : public SShip {
        void Reset() { SShip::Reset(); iShields = iHull = iDist = 0; sRelation = ""; }
        int                     iShields;
        int                     iHull;
        Utils::WString  sRelation;
        int                     iDist;
} STarget;

typedef struct SRaceRep {
        void Reset() { sRace = ""; iRep = 0; iRepPct = 0; sRank = ""; bIncludeRace = false; }
        Utils::WString  sRace;
        Utils::WString  sRank;
        int                     iRep;
        int                     iRepPct;
        bool            bIncludeRace;
} SRaceRep;

class CX3Data  
{
public:
        bool readFile(const Utils::WString &, const Utils::WString &);

        // get strings
        bool    IsLocked                        () { return m_bLocked; }
        SShip    &GetShipData           () { return m_shipData; }
        STarget  &GetTargetData         () { return m_targetData; }
        const Utils::WString &pilot     () const { return m_sPilot; }
        const Utils::WString &shipId() const { return m_shipData.sID; }
        int               GetShipsNum           () { return m_iShips; }
        int               GetStations           () { return m_iStations; }
        const Utils::WString &credits   () const { return m_sAccount; }
        const Utils::WString &gameTime  () const { return m_sGametime; }
        const Utils::WString &shipName  () const { return m_shipData.sName; }
        const Utils::WString &shipEnv   () const { return m_shipData.sEnv; }
        int GetShipClass (int s_class) { return m_iShipClass[s_class]; }
        SRaceRep &GetRaceRep    (int race) { return m_Rep[race]; }
        bool     HasTarget              () const { return (m_targetData.sName.empty()) ? false : true; }
        Utils::WString  target () const { return (!HasTarget()) ? L"No Target" : m_targetData.sName; }
        const Utils::WString &targetRelation() { return m_targetData.sRelation; }
        Utils::WString GetTargetDistanceStr()
        {
                int dist = m_targetData.iDist;
                if ( dist > 900 )
                {
                        float fDist = (float)dist / 1000.0f;
                        return Utils::WString::FromFloat(fDist, 1) + L"Km";
                }
                return Utils::WString::Number(dist) + L"m";
        }
        int     GetHull                 () { return m_iHull; }
        int     GetShields      () { return m_iShields; }
        int     GetWeaponEnergy () { return m_iLaserProgress; }
        int             GetMySpeed              () { return m_shipData.iSpeed; }
        int             GetTargetSpeed  () { return m_targetData.iSpeed; }
        int             GetTargetDistance  () { return m_targetData.iDist; }
        int             GetTargetHull   () { return m_targetData.iHull; }
        int             GetTargetShield () { return m_targetData.iShields;  }
        int             GetEnemies              () { return m_iEnemies; }
        int             GetEnemies2             () { return m_iEnemies2; }
        int             GetMissiles             () { return m_iMissiles; }
        int             GetInsurance    () { return m_iInsurance; }
        int             GetVersion              () { return m_iVersion; }
        Utils::WString  myShip          () const { return (m_shipData.sName.empty()) ? L"No Ship" : (m_shipData.sName + L" (" + m_shipData.sID + L") [" + m_shipData.sClass + L"] / " + m_shipData.sEnv); }
        Utils::WString  myTarget        () const { return (!HasTarget()) ? L"No Target" : (m_targetData.sName + L" (" + m_targetData.sID + L") [" + m_targetData.sClass + L"]"); }

        const Utils::WStringList &customFiles () const { return _lCustomFile; }
        const Utils::WStringList &customList () const { return _lCustomList; }

        // set strings
        void Reset ();
        void setGameName(const Utils::WString &name) { m_sGameName = name; }
        void setGameDirectory(const Utils::WString &name) { m_sGameDir = name; }

        const Utils::WString &GetGameName() const { return m_sGameName; }
        const Utils::WString& GetProgDir() const { return m_sProgDir; }
        const Utils::WString& GetGameDirectory() const { return m_sGameDir; }

        CX3Data(const Utils::WString &progDir);
        virtual ~CX3Data();

        void setRaceRep(int rep, const Utils::WString &race, const Utils::WString &rest, bool old = false);

private:
        Utils::WString _getRepPercentage(const Utils::WString &rank) const;
        Utils::WString _getRankPercentage(const Utils::WString &rank) const;

        // data locking
        bool            m_bLocked;

        // my ship data
        SShip           m_shipData;
        // my targets data
        STarget         m_targetData;

        // pilot info
        Utils::WString  m_sPilot;
        int                     m_iShips;
        int                     m_iStations;
        int                     m_iAccount;
        int                     m_iInsurance;
        int                     m_iShipClass[MAXSHIPCLASS];
        // main ship information
        int                     m_iHull;
        int                     m_iShields;
        int                     m_iLaser;
        int                     m_iMaxLaser;
        int                     m_iLaserProgress;
        int                     m_iMissiles;
        int                     m_iEnemies;
        int                     m_iEnemies2;
        int                     m_iVersion;
        int                     m_iLastUpdate;

        Utils::WString  m_sAccount;
        Utils::WString  m_sGametime;
        Utils::WString  m_sShipEnv;
        SRaceRep        m_Rep[MAXRACEREP];
        Utils::WString  m_sGameName;
        Utils::WString  m_sGameDir;
        Utils::WString  m_sProgDir;

        bool            m_bLoaded;

        Utils::WStringList _lCustomList;
        Utils::WStringList _lCustomFile;
};

#endif // !defined(AFX_X3DATA_H__491F0DBE_1AE5_4956_B262_F2D1B0D0E9FF__INCLUDED_)