Files
source/Laptop/PostalService.h
T
Marco Antonio J. Costaandmajcosta 86ad401186 add newline at end of file where it's lacking
.editorconfig already enforces it but it's getting changed piecemeal in
every commit. just get it done with.

the script:
```

find . -type f -not -path "./.git/*" -not -path "./.vs/*" | while read -r file; do
	isFile=$(file -0 "$file" | cut -d $'\0' -f2)
	case "$isFile" in
		(*text*)
			echo "$file is text"
			if [[ $(tail -c 1 "$file" | wc -l) -ne 1 ]]; then
				echo "" >> "$file"
			fi
			;;
		(*)
			echo "file isn't text"
			;;
	esac
done
```
2024-12-14 19:05:48 -03:00

258 lines
8.6 KiB
C++

#ifndef __POSTAL_SERVICE_H
#define __POSTAL_SERVICE_H
#include "SaveLoadMap.h"
#include "Structure Wrap.h"
#include "Tactical Save.h"
#include "laptopsave.h"
#include "postalservice.h"
#include "isometric utils.h"
#include "debug.h"
#include "game event hook.h"
#include "game events.h"
#include <list>
#include <string>
#include <iostream>
using namespace std;
#define MAX_DEST_NAME_LENGTH 32
#define MAX_DELIVERYMETHOD_DESC_LENGTH 32
#define MAX_DESTINATIONS 255
#define MAX_SHIPMENTS 255
//////////////////////////////////////////////
class CPostalService;
typedef CPostalService& RefToCPostalService;
typedef CPostalService* PCPostalService;
//////////////////////////////////////////////
typedef struct
{
UINT16 usID;
UINT32 uiIndex; // uiIndex is used as an ID number in external game data
UINT8 ubMapY;
UINT8 ubMapX;
UINT8 ubMapZ;
UINT32 sGridNo;
wstring wstrName;
} DestinationStruct;
typedef DestinationStruct& RefToDestinationStruct;
typedef DestinationStruct* PDestinationStruct;
typedef list<DestinationStruct> DestinationList;
typedef list<DestinationStruct>& RefToDestinationList;
typedef DestinationList::const_iterator& RefToDestinationListIterator;
inline RefToDestinationStruct DESTINATION(RefToDestinationListIterator dli)
{
return ( (RefToDestinationStruct) *dli );
}
inline BOOLEAN DESTINATION_ID_GREATER(RefToDestinationStruct d1, RefToDestinationStruct d2)
{
return (d1.usID > d2.usID);
}
#define DESTINATION_LIST_DESCENDING DESTINATION_ID_GREATER
inline BOOLEAN DESTINATION_ID_LOWER(RefToDestinationStruct d1, RefToDestinationStruct d2)
{
return (d1.usID < d2.usID);
}
#define DESTINATION_LIST_ASCENDING DESTINATION_ID_LOWER
inline BOOLEAN DESTINATION_ID_EQUAL(RefToDestinationStruct d1, RefToDestinationStruct d2)
{
return (d1.usID == d2.usID);
}
//////////////////////////////////////////////////////////////
typedef struct
{
UINT8 ubParentDeliveryMethodIndex;
UINT16 usDestinationFee;
INT8 bDaysAhead;
}DestinationDeliveryInfoStruct;
typedef DestinationDeliveryInfoStruct& RefToDestinationDeliveryInfoStruct;
typedef DestinationDeliveryInfoStruct* PDestinationDeliveryInfoStruct;
typedef vector<DestinationDeliveryInfoStruct> DestinationDeliveryInfoTable;
typedef DestinationDeliveryInfoTable* PDestinationDeliveryInfoTable;
typedef DestinationDeliveryInfoTable& RefToDestinationDeliveryInfoTable;
typedef DestinationDeliveryInfoTable::iterator DestinationDeliveryInfoTableIterator;
typedef DestinationDeliveryInfoTableIterator& RefToDestinationDeliveryInfoTableIterator;
typedef struct
{
wstring wstrDescription;
PDestinationDeliveryInfoTable pDestinationDeliveryInfos;
} DeliveryMethodStruct;
typedef DeliveryMethodStruct& RefToDeliveryMethodStruct;
typedef DeliveryMethodStruct* PDeliveryMethodStruct;
typedef vector<DeliveryMethodStruct> DeliveryMethodTable;
typedef DeliveryMethodTable& RefToDeliveryMethodTable;
/////////////////////////////////////////////////////////////
typedef struct
{
UINT16 usItemIndex;
UINT8 ubNumber;
INT8 bItemQuality;
} ShipmentPackageStruct;
typedef ShipmentPackageStruct& RefToShipmentPackageStruct;
typedef ShipmentPackageStruct* PShipmentPackageStruct;
typedef vector<ShipmentPackageStruct> ShipmentPackageList;
typedef ShipmentPackageList& RefToShipmentPackageList;
typedef ShipmentPackageList::iterator& RefToShipmentPackageListIterator;
typedef enum
{
SHIPMENT_STATIONARY=0,
SHIPMENT_INTRANSIT,
SHIPMENT_CANCEL_DELIVERY
} SHIPMENT_STATUS;
typedef struct
{
UINT16 usID;
SHIPMENT_STATUS ShipmentStatus;
ShipmentPackageList ShipmentPackages;
PDestinationStruct pDestination;
PDestinationDeliveryInfoStruct pDestinationDeliveryInfo;
INT16 sSenderID; // For now, two senders exist: Bobby Ray(0) and John Kulba(1)
INT16 sReceiverID; // Unused for now, but reserved for future projects
UINT32 uiOrderDate;
} ShipmentStruct;
typedef ShipmentStruct& RefToShipmentStruct;
typedef ShipmentStruct* PShipmentStruct;
typedef list<ShipmentStruct> ShipmentList;
typedef ShipmentList* PShipmentList;
typedef ShipmentList& RefToShipmentList;
typedef ShipmentList::iterator ShipmentListIterator;
typedef ShipmentListIterator& RefToShipmentListIterator;
typedef struct
{
UINT32 uiNumberOfShipments;
UINT32 uiShipmentDataSize;
UINT32 uiPackageDataSize;
}ShipmentListSaveFileDataHeaderStruct;
typedef ShipmentListSaveFileDataHeaderStruct* PShipmentListSaveFileDataHeaderStruct;
typedef struct
{
UINT16 usID;
SHIPMENT_STATUS ShipmentStatus;
UINT32 uiNumberOfPackages;
UINT16 usDestinationID;
UINT8 ubDeliveryMethodIndex;
INT16 sSenderID;
INT16 sReceiverID;
UINT32 uiOrderDate;
} ShipmentSaveFileDataStruct;
typedef ShipmentSaveFileDataStruct* PShipmentSaveFileDataStruct;
inline BOOLEAN SHIPMENT_ID_LOWER(RefToShipmentStruct s1, RefToShipmentStruct s2)
{
return (s1.usID < s2.usID);
}
#define SHIPMENT_LIST_ASCENDING SHIPMENT_ID_LOWER
inline RefToShipmentStruct SHIPMENT(RefToShipmentListIterator sli)
{
return ( (RefToShipmentStruct) *sli );
}
////////////////////////////////////////////////////////////////
class CShipmentManipulator
{
friend CPostalService;
public:
INT16 GetSenderID(void);
RefToDestinationStruct GetDestination(void) const;
void ContinueCallbackChain(BOOLEAN fContinue);
void CancelDelivery(void);
CShipmentManipulator(PCPostalService Owner, PShipmentStruct Shipment);
private:
PCPostalService _PostalService;
PShipmentStruct _Shipment;
BOOLEAN _fContinueCallbackChain;
};
typedef CShipmentManipulator& RefToCShipmentManipulator;
typedef CShipmentManipulator* PCShipmentManipulator;
typedef void (*PtrToDeliveryCallbackFunc)(RefToCShipmentManipulator ShipmentManipulator);
typedef struct
{
INT16 sSenderID;
PtrToDeliveryCallbackFunc DeliveryCallbackFunc;
} DeliveryCallbackDataStruct;
typedef DeliveryCallbackDataStruct& RefToDeliveryCallbackDataStruct;
typedef vector<DeliveryCallbackDataStruct> DeliveryCallbackDataList;
typedef DeliveryCallbackDataList& RefToDeliveryCallbackDataList;
typedef DeliveryCallbackDataList::iterator DeliveryCallbackDataListIterator;
typedef DeliveryCallbackDataListIterator& RefToDeliveryCallbackDataListIterator;
////////////////////////////////////////////////////////////////
class CPostalService
{
friend BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent );
friend CShipmentManipulator;
public:
// Shipment management
UINT16 CreateNewShipment(UINT16 usDestinationID, UINT8 ubDeliveryMethodIndex, INT16 sSenderID);
BOOLEAN AddPackageToShipment(UINT16 usShipmentID, UINT16 usItemIndex, UINT8 ubNumber, INT8 bItemQuality);
BOOLEAN SendShipment(UINT16 usShipmentID);
BOOLEAN DeliverShipment(UINT16 usShipmentID);
BOOLEAN DeliverShipmentForMultiplayer(UINT16 usShipmentID);
BOOLEAN RegisterDeliveryCallback(INT16 sSenderID, PtrToDeliveryCallbackFunc DeliveryCallbackFunc);
// Interfaces
BOOLEAN LoadShipmentListFromSaveGameFile(HWFILE hFile);
BOOLEAN SaveShipmentListToSaveGameFile(HWFILE hFile);
// Shipment utility functions
UINT16 GetShipmentCount(SHIPMENT_STATUS TargetedShipmentStatus);
RefToShipmentList LookupShipmentList(void) const;
// Destination management
UINT16 AddDestination(UINT32 uiIndex, UINT8 ubMapX, UINT8 ubMapY, UINT8 ubMapZ, UINT32 sGridNo, STR16 pszName );
UINT16 RemoveDestination(UINT16 usDestinationID);
RefToDestinationStruct GetDestination(UINT16 usDestinationID) const;
RefToDestinationList LookupDestinationList(void) const;
// WANNE:
BOOLEAN IsSectorAShipmentSector(UINT8 ubMapX, UINT8 ubMapY, UINT8 ubMapZ);
// Delivery method management
UINT8 AddDeliveryMethod(STR16 pszDescription);
UINT16 SetDestinationDeliveryInfo(UINT8 ubDeliveryMethodIndex, UINT32 uiDestinationIndex, UINT16 usDestinationFee, INT8 bDaysAhead);
UINT16 GetDestinationFee(UINT8 ubDeliveryMethodIndex, UINT16 usDestinationID);
RefToDeliveryMethodStruct GetDeliveryMethod(UINT8 ubDeliveryMethodIndex) const;
void Clear(bool clearOnlyData);
CPostalService();
private:
ShipmentList _Shipments;
vector<BOOLEAN> _UsedShipmentIDList;
DeliveryCallbackDataList _DeliveryCallbacks;
static OBJECTTYPE tempObject;
// All instances share the same set of destinations...
static DestinationList _Destinations;
static vector<BOOLEAN> _UsedDestinationIDList;
RefToDestinationStruct _GetDestination(UINT16 usDestinationID);
// ...but they may have different delivery methods available so these are managed individually
DeliveryMethodTable _DeliveryMethods;
RefToDestinationDeliveryInfoStruct _GetDestinationDeliveryInfo(UINT8 ubDeliveryMethodIndex, UINT16 usDestinationID);
protected:
};
#endif