mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Added missing #includes Added LUA scripting and console Changed the way tracers are visualized, so they work more like real tracers instead of a light fountain Fixed signedness of many grid variables used in GetMouseMapPos calls Fixed enemy weapon choosing: Sometimes a mortar is chosen but later rejected, but the grenade class was not reset. Caused assertion failure Added checks so enemies don't try to chuck RPG grenades with their hands Now possible to shoot a someone in the head if he's in water Fixed InitSightArrays to also clear soldier interrupt duel points. This was causing an assertion failure elsewhere in the code because the interrupt list still had soldiers on it sometimes when this function was called. Soldiers are much less willing to forfeit their turn over an attempt to use more APs than they have Removed early setting of muzzle flash. This would allow enemies to get an interrupt before you even fired. Fixed item dropping by AI. If AI tried to drop something while standing it would cause deadlock Change to greatly speed up closing the sector inventory window in an unloaded sector Added conditional compile flag to always give robot weapon ready advantage, even for 360 degree sighting Check builddefines.h for the conditional flags. Of greatest interest might be LUA_CONSOLE. This will cause the game to bring up a command console when run. However this console is severely lacking in many areas. If anybody knows of an open-source terminal/console that could be used instead, it would be appreciated. The existing console does bad things when you try to close it, and since it counts as a separate app, it pauses the game while it has focus. LUA scripting is very limited, basically just proof of concept. There is one global variable, the Soldiers array. An array index gives you the soldier in that slot in the currently loaded sector. The soldier has a few things that can be accessed: name (short name); fullname (long name); grid (current grid #, can be changed); walkto(grid) (function to walk to another grid); runto(grid) (function to run to another grid) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@924 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2455 lines
90 KiB
C++
2455 lines
90 KiB
C++
#ifdef PRECOMPILEDHEADERS
|
|
#include "Laptop All.h"
|
|
#else
|
|
#include "laptop.h"
|
|
#include "BobbyRMailOrder.h"
|
|
#include "BobbyR.h"
|
|
#include "Utilities.h"
|
|
#include "WCheck.h"
|
|
#include "WordWrap.h"
|
|
#include "Cursors.h"
|
|
#include "Encrypted File.h"
|
|
#include "BobbyRGuns.h"
|
|
#include "finances.h"
|
|
#include "Game Clock.h"
|
|
#include "Game Event Hook.h"
|
|
#include "Random.h"
|
|
#include "LaptopSave.h"
|
|
#include "Soldier Profile.h"
|
|
#include "input.h"
|
|
#include "line.h"
|
|
#include "Text.h"
|
|
#include "Campaign Types.h"
|
|
#include "Multi Language Graphic Utils.h"
|
|
#include "strategic.h"
|
|
#include "strategicmap.h"
|
|
#endif
|
|
|
|
|
|
typedef struct
|
|
{
|
|
STR16 *psCityLoc;
|
|
UINT16 usOverNightExpress;
|
|
UINT16 us2DaysService;
|
|
UINT16 usStandardService;
|
|
} BobbyROrderLocationStruct;
|
|
|
|
|
|
BobbyROrderLocationStruct BobbyROrderLocations[]=
|
|
{
|
|
{ &pDeliveryLocationStrings[0], 20, 15, 10 },
|
|
{ &pDeliveryLocationStrings[1], 295, 150, 85 },
|
|
{ &pDeliveryLocationStrings[2], 200, 100, 50 }, // the only one that really matters
|
|
{ &pDeliveryLocationStrings[3], 100, 55, 30 },
|
|
{ &pDeliveryLocationStrings[4], 95, 65, 40 },
|
|
{ &pDeliveryLocationStrings[5], 55, 40, 25 },
|
|
{ &pDeliveryLocationStrings[6], 35, 25, 15 },
|
|
{ &pDeliveryLocationStrings[7], 200, 100, 50 },
|
|
{ &pDeliveryLocationStrings[8], 190, 90, 45 },
|
|
{ &pDeliveryLocationStrings[9], 35, 25, 15 },
|
|
{ &pDeliveryLocationStrings[10], 100, 55, 30 },
|
|
{ &pDeliveryLocationStrings[11], 35, 25, 15 },
|
|
{ &pDeliveryLocationStrings[12], 45, 30, 20 },
|
|
{ &pDeliveryLocationStrings[13], 55, 40, 25 },
|
|
{ &pDeliveryLocationStrings[14], 100, 55, 30 },
|
|
{ &pDeliveryLocationStrings[15], 100, 55, 30 },
|
|
{ &pDeliveryLocationStrings[16], 45, 30, 20 },
|
|
};
|
|
|
|
//drop down menu
|
|
enum
|
|
{
|
|
BR_DROP_DOWN_NO_ACTION,
|
|
BR_DROP_DOWN_CREATE,
|
|
BR_DROP_DOWN_DESTROY,
|
|
BR_DROP_DOWN_DISPLAY,
|
|
};
|
|
|
|
#define BOBBYR_ORDER_NUM_SHIPPING_CITIES 17
|
|
#define BOBBYR_NUM_DISPLAYED_CITIES 10
|
|
|
|
#define OVERNIGHT_EXPRESS 1
|
|
#define TWO_BUSINESS_DAYS 2
|
|
#define STANDARD_SERVICE 3
|
|
|
|
#define MIN_SHIPPING_WEIGHT 20
|
|
|
|
#define BOBBYR_ORDER_TITLE_TEXT_FONT FONT14ARIAL
|
|
#define BOBBYR_ORDER_TITLE_TEXT_COLOR 157
|
|
|
|
#define BOBBYR_FONT_BLACK 2
|
|
|
|
#define BOBBYR_ORDER_STATIC_TEXT_FONT FONT12ARIAL
|
|
#define BOBBYR_ORDER_STATIC_TEXT_COLOR 145
|
|
|
|
#define BOBBYR_DISCLAIMER_FONT FONT10ARIAL
|
|
|
|
#define BOBBYR_ORDER_DYNAMIC_TEXT_FONT FONT12ARIAL
|
|
#define BOBBYR_ORDER_DYNAMIC_TEXT_COLOR FONT_MCOLOR_WHITE
|
|
|
|
#define BOBBYR_ORDER_DROP_DOWN_SELEC_COLOR FONT_MCOLOR_WHITE
|
|
|
|
#define BOBBYR_DROPDOWN_FONT FONT12ARIAL
|
|
|
|
#define BOBBYR_ORDERGRID_X LAPTOP_SCREEN_UL_X + 2
|
|
#define BOBBYR_ORDERGRID_Y LAPTOP_SCREEN_WEB_UL_Y + 62
|
|
|
|
#define BOBBYR_BOBBY_RAY_TITLE_X LAPTOP_SCREEN_UL_X + 171
|
|
#define BOBBYR_BOBBY_RAY_TITLE_Y LAPTOP_SCREEN_WEB_UL_Y + 3
|
|
#define BOBBYR_BOBBY_RAY_TITLE_WIDTH 160
|
|
#define BOBBYR_BOBBY_RAY_TITLE_HEIGHT 35
|
|
|
|
#define BOBBYR_LOCATION_BOX_X LAPTOP_SCREEN_UL_X + 276
|
|
#define BOBBYR_LOCATION_BOX_Y LAPTOP_SCREEN_WEB_UL_Y + 62
|
|
|
|
#define BOBBYR_DELIVERYSPEED_X LAPTOP_SCREEN_UL_X + 276
|
|
#define BOBBYR_DELIVERYSPEED_Y LAPTOP_SCREEN_WEB_UL_Y + 149
|
|
|
|
#define BOBBYR_CLEAR_ORDER_X LAPTOP_SCREEN_UL_X + 309
|
|
#define BOBBYR_CLEAR_ORDER_Y LAPTOP_SCREEN_WEB_UL_Y + 268 //LAPTOP_SCREEN_WEB_UL_Y + 252
|
|
|
|
#define BOBBYR_ACCEPT_ORDER_X LAPTOP_SCREEN_UL_X + 299
|
|
#define BOBBYR_ACCEPT_ORDER_Y LAPTOP_SCREEN_WEB_UL_Y + 303 //LAPTOP_SCREEN_WEB_UL_Y + 288
|
|
|
|
#define BOBBYR_GRID_ROW_OFFSET 20
|
|
#define BOBBYR_GRID_TITLE_OFFSET 27
|
|
|
|
#define BOBBYR_GRID_FIRST_COLUMN_X 3//BOBBYR_ORDERGRID_X + 3
|
|
#define BOBBYR_GRID_FIRST_COLUMN_Y 37//BOBBYR_ORDERGRID_Y + 37
|
|
#define BOBBYR_GRID_FIRST_COLUMN_WIDTH 23
|
|
|
|
#define BOBBYR_GRID_SECOND_COLUMN_X 28//BOBBYR_ORDERGRID_X + 28
|
|
#define BOBBYR_GRID_SECOND_COLUMN_Y BOBBYR_GRID_FIRST_COLUMN_Y
|
|
#define BOBBYR_GRID_SECOND_COLUMN_WIDTH 40
|
|
|
|
#define BOBBYR_GRID_THIRD_COLUMN_X 70//BOBBYR_ORDERGRID_X + 70
|
|
#define BOBBYR_GRID_THIRD_COLUMN_Y BOBBYR_GRID_FIRST_COLUMN_Y
|
|
#define BOBBYR_GRID_THIRD_COLUMN_WIDTH 111
|
|
|
|
#define BOBBYR_GRID_FOURTH_COLUMN_X 184//BOBBYR_ORDERGRID_X + 184
|
|
#define BOBBYR_GRID_FOURTH_COLUMN_Y BOBBYR_GRID_FIRST_COLUMN_Y
|
|
#define BOBBYR_GRID_FOURTH_COLUMN_WIDTH 40
|
|
|
|
#define BOBBYR_GRID_FIFTH_COLUMN_X 224//BOBBYR_ORDERGRID_X + 224
|
|
#define BOBBYR_GRID_FIFTH_COLUMN_Y BOBBYR_GRID_FIRST_COLUMN_Y
|
|
#define BOBBYR_GRID_FIFTH_COLUMN_WIDTH 42
|
|
|
|
#define BOBBYR_SUBTOTAL_WIDTH 212
|
|
#define BOBBYR_SUBTOTAL_X BOBBYR_GRID_FIRST_COLUMN_X
|
|
#define BOBBYR_SUBTOTAL_Y BOBBYR_GRID_FIRST_COLUMN_Y + BOBBYR_GRID_ROW_OFFSET * 10 + 3
|
|
|
|
#define BOBBYR_SHIPPING_N_HANDLE_Y BOBBYR_SUBTOTAL_Y + 17
|
|
#define BOBBYR_GRAND_TOTAL_Y BOBBYR_SHIPPING_N_HANDLE_Y + 20
|
|
|
|
#define BOBBYR_SHIPPING_LOCATION_TEXT_X BOBBYR_LOCATION_BOX_X + 8
|
|
#define BOBBYR_SHIPPING_LOCATION_TEXT_Y BOBBYR_LOCATION_BOX_Y + 8
|
|
|
|
#define BOBBYR_SHIPPING_SPEED_X BOBBYR_SHIPPING_LOCATION_TEXT_X
|
|
#define BOBBYR_SHIPPING_SPEED_Y BOBBYR_DELIVERYSPEED_Y + 11
|
|
|
|
#define BOBBYR_SHIPPING_COST_X BOBBYR_SHIPPING_SPEED_X + 130
|
|
|
|
#define BOBBYR_OVERNIGHT_EXPRESS_Y BOBBYR_DELIVERYSPEED_Y + 42
|
|
|
|
#define BOBBYR_ORDER_FORM_TITLE_X BOBBYR_BOBBY_RAY_TITLE_X
|
|
#define BOBBYR_ORDER_FORM_TITLE_Y BOBBYR_BOBBY_RAY_TITLE_Y + 37
|
|
#define BOBBYR_ORDER_FORM_TITLE_WIDTH 159
|
|
|
|
#define BOBBYR_BACK_BUTTON_X iScreenWidthOffset + 130
|
|
#define BOBBYR_BACK_BUTTON_Y iScreenHeightOffset + 400 + LAPTOP_SCREEN_WEB_DELTA_Y + 4
|
|
|
|
#define BOBBYR_HOME_BUTTON_X iScreenWidthOffset + 515
|
|
#define BOBBYR_HOME_BUTTON_Y BOBBYR_BACK_BUTTON_Y
|
|
|
|
#define BOBBYR_SHIPMENT_BUTTON_X iScreenWidthOffset + ( (LAPTOP_SCREEN_UL_X - iScreenWidthOffset) + ( (LAPTOP_SCREEN_LR_X - iScreenWidthOffset) - (LAPTOP_SCREEN_UL_X - iScreenWidthOffset - 75 )) / 2)
|
|
#define BOBBYR_SHIPMENT_BUTTON_Y BOBBYR_BACK_BUTTON_Y
|
|
|
|
#define SHIPPING_SPEED_LIGHT_WIDTH 9
|
|
#define SHIPPING_SPEED_LIGHT_HEIGHT 9
|
|
|
|
#define BOBBYR_CONFIRM_ORDER_X iScreenWidthOffset + 220
|
|
#define BOBBYR_CONFIRM_ORDER_Y iScreenHeightOffset + 170
|
|
|
|
#define BOBBYR_CITY_START_LOCATION_X BOBBYR_LOCATION_BOX_X + 6
|
|
#define BOBBYR_CITY_START_LOCATION_Y BOBBYR_LOCATION_BOX_Y + 61
|
|
#define BOBBYR_DROP_DOWN_WIDTH 182//203
|
|
#define BOBBYR_DROP_DOWN_HEIGHT 19
|
|
#define BOBBYR_CITY_NAME_OFFSET 6
|
|
|
|
#define BOBBYR_SCROLL_AREA_X BOBBYR_CITY_START_LOCATION_X + BOBBYR_DROP_DOWN_WIDTH
|
|
#define BOBBYR_SCROLL_AREA_Y BOBBYR_CITY_START_LOCATION_Y
|
|
#define BOBBYR_SCROLL_AREA_WIDTH 22
|
|
#define BOBBYR_SCROLL_AREA_HEIGHT 139
|
|
#define BOBBYR_SCROLL_AREA_HEIGHT_MINUS_ARROWS ( BOBBYR_SCROLL_AREA_HEIGHT - (2 * BOBBYR_SCROLL_ARROW_HEIGHT) - 8 )
|
|
|
|
#define BOBBYR_SCROLL_UP_ARROW_X BOBBYR_SCROLL_AREA_X
|
|
#define BOBBYR_SCROLL_UP_ARROW_Y BOBBYR_SCROLL_AREA_Y+5
|
|
#define BOBBYR_SCROLL_DOWN_ARROW_X BOBBYR_SCROLL_UP_ARROW_X
|
|
#define BOBBYR_SCROLL_DOWN_ARROW_Y BOBBYR_SCROLL_AREA_Y+BOBBYR_SCROLL_AREA_HEIGHT-24
|
|
#define BOBBYR_SCROLL_ARROW_WIDTH 18
|
|
#define BOBBYR_SCROLL_ARROW_HEIGHT 20
|
|
|
|
|
|
#define BOBBYR_SHIPPING_LOC_AREA_L_X BOBBYR_LOCATION_BOX_X + 9
|
|
#define BOBBYR_SHIPPING_LOC_AREA_T_Y BOBBYR_LOCATION_BOX_Y + 39
|
|
|
|
#define BOBBYR_SHIPPING_LOC_AREA_R_X BOBBYR_LOCATION_BOX_X + 206
|
|
#define BOBBYR_SHIPPING_LOC_AREA_B_Y BOBBYR_LOCATION_BOX_Y + 57
|
|
|
|
#define BOBBYR_SHIPPING_SPEED_NUMBER_X BOBBYR_SHIPPING_COST_X
|
|
#define BOBBYR_SHIPPING_SPEED_NUMBER_WIDTH 37
|
|
#define BOBBYR_SHIPPING_SPEED_NUMBER_1_Y BOBBYR_OVERNIGHT_EXPRESS_Y
|
|
|
|
#define BOBBYR_SHIPPING_SPEED_NUMBER_2_Y BOBBYR_OVERNIGHT_EXPRESS_Y
|
|
#define BOBBYR_SHIPPING_SPEED_NUMBER_3_Y BOBBYR_OVERNIGHT_EXPRESS_Y
|
|
|
|
#define BOBBYR_TOTAL_SAVED_AREA_X BOBBYR_ORDERGRID_X + 221
|
|
#define BOBBYR_TOTAL_SAVED_AREA_Y BOBBYR_ORDERGRID_Y + 237
|
|
|
|
#define BOBBYR_USED_WARNING_X iScreenWidthOffset + 122
|
|
#define BOBBYR_USED_WARNING_Y iScreenHeightOffset + 382 + LAPTOP_SCREEN_WEB_DELTA_Y
|
|
|
|
|
|
#define BOBBYR_PACKAXGE_WEIGHT_X BOBBYR_LOCATION_BOX_X
|
|
#define BOBBYR_PACKAXGE_WEIGHT_Y LAPTOP_SCREEN_WEB_UL_Y + 249
|
|
#define BOBBYR_PACKAXGE_WEIGHT_WIDTH 188
|
|
|
|
|
|
UINT16 gShippingSpeedAreas[] = {585, 218 + LAPTOP_SCREEN_WEB_DELTA_Y,
|
|
585, 238 + LAPTOP_SCREEN_WEB_DELTA_Y,
|
|
585, 258 + LAPTOP_SCREEN_WEB_DELTA_Y};
|
|
|
|
// Identifier for the images
|
|
UINT32 guiBobbyRayTitle;
|
|
UINT32 guiBobbyROrderGrid;
|
|
UINT32 guiBobbyRLocationGraphic;
|
|
UINT32 guiDeliverySpeedGraphic;
|
|
UINT32 guiConfirmGraphic;
|
|
UINT32 guiTotalSaveArea; //used as a savebuffer for the subtotal, s&h, and grand total values
|
|
UINT32 guiDropDownBorder;
|
|
UINT32 guiGoldArrowImages;
|
|
UINT32 guiPackageWeightImage;
|
|
|
|
|
|
|
|
BOOLEAN gfReDrawBobbyOrder=FALSE;
|
|
|
|
INT32 giGrandTotal;
|
|
UINT32 guiShippingCost;
|
|
UINT32 guiSubTotal;
|
|
|
|
UINT8 gubSelectedLight;
|
|
|
|
BOOLEAN gfDrawConfirmOrderGrpahic;
|
|
BOOLEAN gfDestroyConfirmGrphiArea;
|
|
|
|
BOOLEAN gfCanAcceptOrder;
|
|
|
|
UINT8 gubDropDownAction;
|
|
INT8 gbSelectedCity=-1; //keeps track of the currently selected city
|
|
UINT8 gubCityAtTopOfList;
|
|
|
|
BOOLEAN gfRemoveItemsFromStock=FALSE;
|
|
|
|
NewBobbyRayOrderStruct *gpNewBobbyrShipments;
|
|
INT32 giNumberOfNewBobbyRShipment;
|
|
|
|
|
|
//
|
|
//Buttons
|
|
//
|
|
|
|
//Clear Order Button
|
|
void BtnBobbyRClearOrderCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiBobbyRClearOrder;
|
|
INT32 guiBobbyRClearOrderImage;
|
|
|
|
//Accept Order Button
|
|
void BtnBobbyRAcceptOrderCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiBobbyRAcceptOrder;
|
|
INT32 guiBobbyRAcceptOrderImage;
|
|
|
|
//Back Button
|
|
void BtnBobbyRBackCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiBobbyRBack;
|
|
INT32 guiBobbyRBackImage;
|
|
|
|
//Home Button
|
|
void BtnBobbyRHomeCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiBobbyRHome;
|
|
INT32 guiBobbyRHomeImage;
|
|
|
|
//Goto Shipment Page Button
|
|
void BtnBobbyRGotoShipmentPageCallback(GUI_BUTTON *btn,INT32 reason);
|
|
UINT32 guiBobbyRGotoShipmentPage;
|
|
INT32 giBobbyRGotoShipmentPageImage;
|
|
|
|
|
|
//mouse region for the shipping speed selection area
|
|
MOUSE_REGION gSelectedShippingSpeedRegion[3];
|
|
void SelectShippingSpeedRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
//mouse region for the confirm area
|
|
MOUSE_REGION gSelectedConfirmOrderRegion;
|
|
void SelectConfirmOrderRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
//mouse region for the drop down city location area
|
|
MOUSE_REGION gSelectedDropDownRegion[ BOBBYR_ORDER_NUM_SHIPPING_CITIES ];
|
|
void SelectDropDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
void SelectDropDownMovementCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
//mouse region for scroll area for the drop down city location area
|
|
MOUSE_REGION gSelectedScrollAreaDropDownRegion[BOBBYR_ORDER_NUM_SHIPPING_CITIES];
|
|
void SelectScrollAreaDropDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
void SelectScrollAreaDropDownMovementCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
|
|
//mouse region to activate the shipping location drop down
|
|
MOUSE_REGION gSelectedActivateCityDroDownRegion;
|
|
void SelectActivateCityDroDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
//mouse region to close the drop down menu
|
|
MOUSE_REGION gSelectedCloseDropDownRegion;
|
|
void SelectCloseDroDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
//mouse region to click on the title to go to the home page
|
|
MOUSE_REGION gSelectedTitleLinkRegion;
|
|
void SelectTitleLinkRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
//mouse region to click on the up or down arrow on the scroll area
|
|
MOUSE_REGION gSelectedUpDownArrowOnScrollAreaRegion[2];
|
|
void SelectUpDownArrowOnScrollAreaRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
|
|
|
|
|
|
|
|
BOOLEAN DrawShippingSpeedLights(UINT8 ubSelectedLight);
|
|
BOOLEAN CreateDestroyBobbyRDropDown( UINT8 ubDropDownAction );
|
|
void DrawSelectedCity( UINT8 ubNumber );
|
|
void DisplayShippingLocationCity();
|
|
void DisplayShippingCosts( BOOLEAN fCalledFromOrderPage, INT32 iSubTotal, UINT16 usGridX, UINT16 usGridY, INT32 iOrderNum );
|
|
void RemovePurchasedItemsFromBobbyRayInventory();
|
|
BOOLEAN IsAnythingPurchasedFromBobbyRayPage();
|
|
void DrawGoldRectangle( INT8 bCityNum );
|
|
UINT32 CalcCostFromWeightOfPackage( UINT8 ubTypeOfService );
|
|
void ConfirmBobbyRPurchaseMessageBoxCallBack( UINT8 bExitValue );
|
|
void PurchaseBobbyOrder();
|
|
UINT32 CalcPackageTotalWeight();
|
|
void DisplayPackageWeight( );
|
|
void ShutDownBobbyRNewMailOrders();
|
|
//ppp
|
|
|
|
|
|
void GameInitBobbyRMailOrder()
|
|
{
|
|
gubSelectedLight = 0;
|
|
|
|
gpNewBobbyrShipments = NULL;
|
|
giNumberOfNewBobbyRShipment = 0;
|
|
}
|
|
|
|
BOOLEAN EnterBobbyRMailOrder()
|
|
{
|
|
VOBJECT_DESC VObjectDesc;
|
|
UINT16 i;
|
|
|
|
gfReDrawBobbyOrder = FALSE;
|
|
gfDrawConfirmOrderGrpahic = FALSE;
|
|
gfDestroyConfirmGrphiArea = FALSE;
|
|
gfCanAcceptOrder = TRUE;
|
|
gubDropDownAction = BR_DROP_DOWN_NO_ACTION;
|
|
|
|
gShippingSpeedAreas[0] = iScreenWidthOffset + 585;
|
|
gShippingSpeedAreas[1] = iScreenHeightOffset + 218 + LAPTOP_SCREEN_WEB_DELTA_Y;
|
|
gShippingSpeedAreas[2] = iScreenWidthOffset + 585;
|
|
gShippingSpeedAreas[3] = iScreenHeightOffset + 238 + LAPTOP_SCREEN_WEB_DELTA_Y;
|
|
gShippingSpeedAreas[4] = iScreenWidthOffset + 585;
|
|
gShippingSpeedAreas[5] = iScreenHeightOffset + 258 + LAPTOP_SCREEN_WEB_DELTA_Y;
|
|
|
|
// load the Order Grid graphic and add it
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\BobbyOrderGrid.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiBobbyROrderGrid));
|
|
|
|
// load the Location graphic and add it
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\BobbyLocationBox.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiBobbyRLocationGraphic));
|
|
|
|
// load the delivery speed graphic and add it
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\BobbyDeliverySpeed.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiDeliverySpeedGraphic));
|
|
|
|
// load the delivery speed graphic and add it
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
GetMLGFilename( VObjectDesc.ImageFile, MLG_CONFIRMORDER );
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiConfirmGraphic));
|
|
|
|
// load the delivery speed graphic and add it
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\TotalSaveArea.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiTotalSaveArea));
|
|
|
|
// border
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP( "INTERFACE\\TactPopUp.sti", VObjectDesc.ImageFile );
|
|
CHECKF( AddVideoObject( &VObjectDesc, &guiDropDownBorder ) );
|
|
|
|
// Gold Arrow for the scroll area
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP( "LAPTOP\\GoldArrows.sti", VObjectDesc.ImageFile );
|
|
CHECKF( AddVideoObject( &VObjectDesc, &guiGoldArrowImages ) );
|
|
|
|
// Package Weight Graphic
|
|
VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP( "LAPTOP\\PackageWeight.sti", VObjectDesc.ImageFile );
|
|
CHECKF( AddVideoObject( &VObjectDesc, &guiPackageWeightImage ) );
|
|
|
|
|
|
InitBobbyRWoodBackground();
|
|
|
|
//
|
|
//Init the button areas
|
|
//
|
|
|
|
// Clear Order button
|
|
guiBobbyRClearOrderImage = LoadButtonImage("LAPTOP\\EraseOrderButton.sti", -1,0,-1,1,-1 );
|
|
guiBobbyRClearOrder = CreateIconAndTextButton( guiBobbyRClearOrderImage, BobbyROrderFormText[BOBBYR_CLEAR_ORDER], BOBBYR_ORDER_TITLE_TEXT_FONT,
|
|
BOBBYR_GUNS_TEXT_COLOR_ON, BOBBYR_GUNS_SHADOW_COLOR,
|
|
BOBBYR_GUNS_TEXT_COLOR_OFF, BOBBYR_GUNS_SHADOW_COLOR,
|
|
TEXT_CJUSTIFIED,
|
|
BOBBYR_CLEAR_ORDER_X, BOBBYR_CLEAR_ORDER_Y+4, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnBobbyRClearOrderCallback);
|
|
SetButtonCursor(guiBobbyRClearOrder, CURSOR_LAPTOP_SCREEN);
|
|
SpecifyDisabledButtonStyle( guiBobbyRClearOrder, DISABLED_STYLE_NONE );
|
|
SpecifyButtonTextOffsets( guiBobbyRClearOrder, 39, 10, TRUE );
|
|
|
|
|
|
// Accept Order button
|
|
guiBobbyRAcceptOrderImage = LoadButtonImage("LAPTOP\\AcceptOrderButton.sti", 2,0,-1,1,-1 );
|
|
guiBobbyRAcceptOrder = CreateIconAndTextButton( guiBobbyRAcceptOrderImage, BobbyROrderFormText[BOBBYR_ACCEPT_ORDER], BOBBYR_ORDER_TITLE_TEXT_FONT,
|
|
BOBBYR_GUNS_TEXT_COLOR_ON, BOBBYR_GUNS_SHADOW_COLOR,
|
|
BOBBYR_GUNS_TEXT_COLOR_OFF, BOBBYR_GUNS_SHADOW_COLOR,
|
|
TEXT_CJUSTIFIED,
|
|
BOBBYR_ACCEPT_ORDER_X, BOBBYR_ACCEPT_ORDER_Y+4, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnBobbyRAcceptOrderCallback);
|
|
SetButtonCursor( guiBobbyRAcceptOrder, CURSOR_LAPTOP_SCREEN);
|
|
SpecifyButtonTextOffsets( guiBobbyRAcceptOrder, 43, 24, TRUE );
|
|
|
|
SpecifyDisabledButtonStyle( guiBobbyRAcceptOrder, DISABLED_STYLE_SHADED );
|
|
|
|
if( gbSelectedCity == -1 )
|
|
DisableButton( guiBobbyRAcceptOrder );
|
|
|
|
//if there is anything to buy, dont disable the accept button
|
|
// if( !IsAnythingPurchasedFromBobbyRayPage() )
|
|
{
|
|
// DisableButton( guiBobbyRAcceptOrder );
|
|
}
|
|
|
|
|
|
guiBobbyRBackImage = LoadButtonImage("LAPTOP\\CatalogueButton.sti", -1,0,-1,1,-1 );
|
|
guiBobbyRBack = CreateIconAndTextButton( guiBobbyRBackImage, BobbyROrderFormText[BOBBYR_BACK], BOBBYR_GUNS_BUTTON_FONT,
|
|
BOBBYR_GUNS_TEXT_COLOR_ON, BOBBYR_GUNS_SHADOW_COLOR,
|
|
BOBBYR_GUNS_TEXT_COLOR_OFF, BOBBYR_GUNS_SHADOW_COLOR,
|
|
TEXT_CJUSTIFIED,
|
|
BOBBYR_BACK_BUTTON_X, BOBBYR_BACK_BUTTON_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnBobbyRBackCallback);
|
|
SetButtonCursor(guiBobbyRBack, CURSOR_LAPTOP_SCREEN);
|
|
|
|
guiBobbyRHomeImage = UseLoadedButtonImage( guiBobbyRBackImage, -1,0,-1,1,-1 );
|
|
guiBobbyRHome = CreateIconAndTextButton( guiBobbyRHomeImage, BobbyROrderFormText[BOBBYR_HOME], BOBBYR_GUNS_BUTTON_FONT,
|
|
BOBBYR_GUNS_TEXT_COLOR_ON, BOBBYR_GUNS_SHADOW_COLOR,
|
|
BOBBYR_GUNS_TEXT_COLOR_OFF, BOBBYR_GUNS_SHADOW_COLOR,
|
|
TEXT_CJUSTIFIED,
|
|
BOBBYR_HOME_BUTTON_X, BOBBYR_HOME_BUTTON_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnBobbyRHomeCallback);
|
|
SetButtonCursor(guiBobbyRHome, CURSOR_LAPTOP_SCREEN);
|
|
|
|
|
|
giBobbyRGotoShipmentPageImage = UseLoadedButtonImage( guiBobbyRBackImage, -1,0,-1,1,-1 );
|
|
guiBobbyRGotoShipmentPage = CreateIconAndTextButton( giBobbyRGotoShipmentPageImage, BobbyROrderFormText[BOBBYR_GOTOSHIPMENT_PAGE], BOBBYR_GUNS_BUTTON_FONT,
|
|
BOBBYR_GUNS_TEXT_COLOR_ON, BOBBYR_GUNS_SHADOW_COLOR,
|
|
BOBBYR_GUNS_TEXT_COLOR_OFF, BOBBYR_GUNS_SHADOW_COLOR,
|
|
TEXT_CJUSTIFIED,
|
|
BOBBYR_SHIPMENT_BUTTON_X, BOBBYR_SHIPMENT_BUTTON_Y, BUTTON_TOGGLE, MSYS_PRIORITY_HIGH,
|
|
DEFAULT_MOVE_CALLBACK, BtnBobbyRGotoShipmentPageCallback );
|
|
SetButtonCursor(guiBobbyRGotoShipmentPage, CURSOR_LAPTOP_SCREEN);
|
|
|
|
|
|
for(i=0; i<3; i++)
|
|
{
|
|
|
|
MSYS_DefineRegion( &gSelectedShippingSpeedRegion[i], gShippingSpeedAreas[i*2], gShippingSpeedAreas[i*2+1] , (UINT16)(gShippingSpeedAreas[i*2]+SHIPPING_SPEED_LIGHT_WIDTH), (UINT16)(gShippingSpeedAreas[i*2+1]+SHIPPING_SPEED_LIGHT_HEIGHT), MSYS_PRIORITY_HIGH,
|
|
CURSOR_WWW, MSYS_NO_CALLBACK, SelectShippingSpeedRegionCallBack );
|
|
MSYS_AddRegion(&gSelectedShippingSpeedRegion[i]);
|
|
MSYS_SetRegionUserData( &gSelectedShippingSpeedRegion[ i ], 0, i);
|
|
}
|
|
|
|
//confirmorder mouse region, occupies the entrie screen and is present only when the confirm order graphic
|
|
//s on screen. When user clicks anywhere the graphic disappears
|
|
MSYS_DefineRegion( &gSelectedConfirmOrderRegion, LAPTOP_SCREEN_UL_X, LAPTOP_SCREEN_WEB_UL_Y , LAPTOP_SCREEN_LR_X, LAPTOP_SCREEN_WEB_LR_Y, MSYS_PRIORITY_HIGH+1,
|
|
CURSOR_WWW, MSYS_NO_CALLBACK, SelectConfirmOrderRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedConfirmOrderRegion);
|
|
MSYS_DisableRegion(&gSelectedConfirmOrderRegion);
|
|
|
|
|
|
//click on the shipping location to activate the drop down menu
|
|
MSYS_DefineRegion( &gSelectedActivateCityDroDownRegion, BOBBYR_SHIPPING_LOC_AREA_L_X, BOBBYR_SHIPPING_LOC_AREA_T_Y, BOBBYR_SHIPPING_LOC_AREA_R_X, BOBBYR_SHIPPING_LOC_AREA_B_Y, MSYS_PRIORITY_HIGH,
|
|
CURSOR_WWW, MSYS_NO_CALLBACK, SelectActivateCityDroDownRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedActivateCityDroDownRegion);
|
|
|
|
|
|
//click anywhere on the screen to close the window( only when the drop down window is active)
|
|
MSYS_DefineRegion( &gSelectedCloseDropDownRegion, LAPTOP_SCREEN_UL_X, LAPTOP_SCREEN_WEB_UL_Y , LAPTOP_SCREEN_LR_X, LAPTOP_SCREEN_WEB_LR_Y, MSYS_PRIORITY_HIGH-1,
|
|
CURSOR_LAPTOP_SCREEN, MSYS_NO_CALLBACK, SelectCloseDroDownRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedCloseDropDownRegion);
|
|
MSYS_DisableRegion(&gSelectedCloseDropDownRegion);
|
|
|
|
|
|
CreateBobbyRayOrderTitle();
|
|
|
|
guiShippingCost = 0;
|
|
|
|
gfRemoveItemsFromStock = FALSE;
|
|
|
|
RenderBobbyRMailOrder();
|
|
return(TRUE);
|
|
}
|
|
|
|
void ExitBobbyRMailOrder()
|
|
{
|
|
UINT16 i;
|
|
|
|
//if we are to remove the items from stock
|
|
if( gfRemoveItemsFromStock )
|
|
{
|
|
//Remove the items for Boby Rqys Inventory
|
|
RemovePurchasedItemsFromBobbyRayInventory();
|
|
}
|
|
|
|
|
|
DestroyBobbyROrderTitle();
|
|
|
|
DeleteVideoObjectFromIndex(guiBobbyROrderGrid);
|
|
DeleteVideoObjectFromIndex(guiBobbyRLocationGraphic);
|
|
DeleteVideoObjectFromIndex(guiDeliverySpeedGraphic);
|
|
DeleteVideoObjectFromIndex(guiConfirmGraphic);
|
|
DeleteVideoObjectFromIndex(guiTotalSaveArea);
|
|
DeleteVideoObjectFromIndex(guiDropDownBorder);
|
|
DeleteVideoObjectFromIndex(guiGoldArrowImages);
|
|
DeleteVideoObjectFromIndex(guiPackageWeightImage);
|
|
|
|
|
|
UnloadButtonImage( guiBobbyRClearOrderImage );
|
|
RemoveButton( guiBobbyRClearOrder );
|
|
|
|
UnloadButtonImage( guiBobbyRAcceptOrderImage );
|
|
RemoveButton( guiBobbyRAcceptOrder );
|
|
|
|
UnloadButtonImage( guiBobbyRBackImage );
|
|
RemoveButton( guiBobbyRBack );
|
|
|
|
UnloadButtonImage( giBobbyRGotoShipmentPageImage );
|
|
RemoveButton( guiBobbyRGotoShipmentPage );
|
|
|
|
RemoveButton( guiBobbyRHome );
|
|
UnloadButtonImage( guiBobbyRHomeImage );
|
|
|
|
DeleteBobbyRWoodBackground();
|
|
|
|
for(i=0; i<3; i++)
|
|
{
|
|
MSYS_RemoveRegion( &gSelectedShippingSpeedRegion[i]);
|
|
}
|
|
|
|
MSYS_RemoveRegion( &gSelectedConfirmOrderRegion);
|
|
MSYS_RemoveRegion( &gSelectedActivateCityDroDownRegion);
|
|
MSYS_RemoveRegion( &gSelectedCloseDropDownRegion);
|
|
|
|
|
|
//if the drop down box is active, destroy it
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
CreateDestroyBobbyRDropDown( BR_DROP_DOWN_DESTROY );
|
|
}
|
|
|
|
void HandleBobbyRMailOrder()
|
|
{
|
|
if( gfReDrawBobbyOrder )
|
|
{
|
|
// RenderBobbyRMailOrder();
|
|
fPausedReDrawScreenFlag = TRUE;
|
|
gfReDrawBobbyOrder = FALSE;
|
|
}
|
|
|
|
if( gfDrawConfirmOrderGrpahic )
|
|
{
|
|
HVOBJECT hPixHandle;
|
|
|
|
// Bobbyray title
|
|
GetVideoObject(&hPixHandle, guiConfirmGraphic);
|
|
BltVideoObjectOutlineShadowFromIndex( FRAME_BUFFER, guiConfirmGraphic, 0, BOBBYR_CONFIRM_ORDER_X+3, BOBBYR_CONFIRM_ORDER_Y+3);
|
|
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_CONFIRM_ORDER_X, BOBBYR_CONFIRM_ORDER_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
InvalidateRegion(LAPTOP_SCREEN_UL_X,LAPTOP_SCREEN_WEB_UL_Y,LAPTOP_SCREEN_LR_X,LAPTOP_SCREEN_WEB_LR_Y);
|
|
|
|
gfDrawConfirmOrderGrpahic = FALSE;
|
|
}
|
|
|
|
if( gfDestroyConfirmGrphiArea )
|
|
{
|
|
gfDestroyConfirmGrphiArea = FALSE;
|
|
gfReDrawBobbyOrder = TRUE;
|
|
MSYS_DisableRegion(&gSelectedConfirmOrderRegion);
|
|
gfCanAcceptOrder = TRUE;
|
|
}
|
|
|
|
if( gubDropDownAction != BR_DROP_DOWN_NO_ACTION )
|
|
{
|
|
CreateDestroyBobbyRDropDown( gubDropDownAction );
|
|
|
|
if( gubDropDownAction == BR_DROP_DOWN_CREATE )
|
|
gubDropDownAction = BR_DROP_DOWN_DISPLAY;
|
|
else
|
|
gubDropDownAction = BR_DROP_DOWN_NO_ACTION;
|
|
}
|
|
|
|
}
|
|
|
|
void RenderBobbyRMailOrder()
|
|
{
|
|
UINT16 usPosY;
|
|
HVOBJECT hPixHandle;
|
|
UINT16 usHeight;//usWidth,
|
|
CHAR16 sTemp[ 128 ];
|
|
|
|
DrawBobbyRWoodBackground();
|
|
|
|
DrawBobbyROrderTitle();
|
|
|
|
// Order Grid
|
|
GetVideoObject(&hPixHandle, guiBobbyROrderGrid);
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_ORDERGRID_X, BOBBYR_ORDERGRID_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
// Location graphic
|
|
GetVideoObject(&hPixHandle, guiBobbyRLocationGraphic);
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_LOCATION_BOX_X, BOBBYR_LOCATION_BOX_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
// DeliverySpeedGraphic
|
|
GetVideoObject(&hPixHandle, guiDeliverySpeedGraphic);
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_DELIVERYSPEED_X, BOBBYR_DELIVERYSPEED_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
//Package Weight
|
|
GetVideoObject(&hPixHandle, guiPackageWeightImage);
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_PACKAXGE_WEIGHT_X, BOBBYR_PACKAXGE_WEIGHT_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
|
|
//
|
|
// Display the STATIC text
|
|
//
|
|
|
|
//Output the title
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_ORDER_FORM], BOBBYR_ORDER_FORM_TITLE_X, BOBBYR_ORDER_FORM_TITLE_Y, BOBBYR_ORDER_FORM_TITLE_WIDTH, BOBBYR_ORDER_TITLE_TEXT_FONT, BOBBYR_ORDER_TITLE_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
/*
|
|
//Output the qty
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_QTY], BOBBYR_GRID_FIRST_COLUMN_X, BOBBYR_GRID_FIRST_COLUMN_Y-BOBBYR_GRID_TITLE_OFFSET, BOBBYR_GRID_FIRST_COLUMN_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Create a string for the weight ( %s ) ( where %s is the weight string, either kg or lbs )
|
|
swprintf( sTemp, BobbyROrderFormText[BOBBYR_WEIGHT], GetWeightUnitString( ) );
|
|
|
|
//Output the Weight
|
|
DisplayWrappedString(BOBBYR_GRID_SECOND_COLUMN_X, BOBBYR_GRID_SECOND_COLUMN_Y-30, BOBBYR_GRID_SECOND_COLUMN_WIDTH, 2, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, sTemp, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
|
|
|
|
//Output the name
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_NAME], BOBBYR_GRID_THIRD_COLUMN_X, BOBBYR_GRID_THIRD_COLUMN_Y-BOBBYR_GRID_TITLE_OFFSET, BOBBYR_GRID_THIRD_COLUMN_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Output the unit price
|
|
DisplayWrappedString(BOBBYR_GRID_FOURTH_COLUMN_X, BOBBYR_GRID_FOURTH_COLUMN_Y-30, BOBBYR_GRID_FOURTH_COLUMN_WIDTH, 2, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, BobbyROrderFormText[BOBBYR_UNIT_PRICE], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Output the total
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_TOTAL], BOBBYR_GRID_FIFTH_COLUMN_X, BOBBYR_GRID_FIFTH_COLUMN_Y-BOBBYR_GRID_TITLE_OFFSET, BOBBYR_GRID_FIFTH_COLUMN_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Output the sub total, shipping and handling, and the grand total
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_SUB_TOTAL], BOBBYR_SUBTOTAL_X, BOBBYR_SUBTOTAL_Y, BOBBYR_SUBTOTAL_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_S_H], BOBBYR_SUBTOTAL_X, BOBBYR_SHIPPING_N_HANDLE_Y, BOBBYR_SUBTOTAL_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_GRAND_TOTAL], BOBBYR_SUBTOTAL_X, BOBBYR_GRAND_TOTAL_Y, BOBBYR_SUBTOTAL_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
*/
|
|
|
|
//Output the shipping location
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_SHIPPING_LOCATION], BOBBYR_SHIPPING_LOCATION_TEXT_X, BOBBYR_SHIPPING_LOCATION_TEXT_Y, 0, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
|
|
//Output the shiupping speed
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_SHIPPING_SPEED], BOBBYR_SHIPPING_SPEED_X, BOBBYR_SHIPPING_SPEED_Y, 0, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
|
|
//Create a string for the weight ( %s ) ( where %s is the weight string, either kg or lbs )
|
|
swprintf( sTemp, BobbyROrderFormText[BOBBYR_COST], GetWeightUnitString( ) );
|
|
|
|
//Output the cost
|
|
DrawTextToScreen( sTemp, BOBBYR_SHIPPING_COST_X, BOBBYR_SHIPPING_SPEED_Y, 0, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
|
|
//Output the overnight, business days, standard service
|
|
usPosY = BOBBYR_OVERNIGHT_EXPRESS_Y;
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_OVERNIGHT_EXPRESS], BOBBYR_SHIPPING_SPEED_X, usPosY, 0, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
usPosY +=BOBBYR_GRID_ROW_OFFSET;
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_BUSINESS_DAYS], BOBBYR_SHIPPING_SPEED_X, usPosY, 0, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
usPosY +=BOBBYR_GRID_ROW_OFFSET;
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_STANDARD_SERVICE], BOBBYR_SHIPPING_SPEED_X, usPosY, 0, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
|
|
// DisplayPurchasedItems();
|
|
DisplayPurchasedItems( TRUE, BOBBYR_ORDERGRID_X, BOBBYR_ORDERGRID_Y, BobbyRayPurchases, FALSE, -1 );
|
|
|
|
DrawShippingSpeedLights(gubSelectedLight);
|
|
|
|
DisplayShippingLocationCity();
|
|
|
|
//Display the 'used' text at the bottom of the screen
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_USED_TEXT], BOBBYR_USED_WARNING_X, BOBBYR_USED_WARNING_Y+1, 0, BOBBYR_DISCLAIMER_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED | TEXT_SHADOWED );
|
|
|
|
//Display the minimum weight disclaimer at the bottom of the page
|
|
usHeight = GetFontHeight( BOBBYR_DISCLAIMER_FONT ) + 2;
|
|
swprintf( sTemp, L"%s %2.1f %s.", BobbyROrderFormText[BOBBYR_MINIMUM_WEIGHT], GetWeightBasedOnMetricOption( MIN_SHIPPING_WEIGHT ) / 10.0, GetWeightUnitString() );
|
|
DrawTextToScreen( sTemp, BOBBYR_USED_WARNING_X, (UINT16)(BOBBYR_USED_WARNING_Y+usHeight+1), 0, BOBBYR_DISCLAIMER_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED | TEXT_SHADOWED );
|
|
|
|
|
|
//Calculate and display the total package weight
|
|
DisplayPackageWeight( );
|
|
|
|
MarkButtonsDirty( );
|
|
RenderWWWProgramTitleBar( );
|
|
InvalidateRegion(LAPTOP_SCREEN_UL_X,LAPTOP_SCREEN_WEB_UL_Y,LAPTOP_SCREEN_LR_X,LAPTOP_SCREEN_WEB_LR_Y);
|
|
}
|
|
|
|
|
|
|
|
void BtnBobbyRClearOrderCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
|
|
memset(&BobbyRayPurchases, 0, sizeof(BobbyRayPurchaseStruct) * MAX_PURCHASE_AMOUNT);
|
|
gubSelectedLight = 0;
|
|
gfReDrawBobbyOrder = TRUE;
|
|
gbSelectedCity = -1;
|
|
gubCityAtTopOfList = 0;
|
|
|
|
//Get rid of the city drop dowm, if it is being displayed
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
|
|
//disable the accept order button
|
|
DisableButton( guiBobbyRAcceptOrder );
|
|
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
|
|
void BtnBobbyRAcceptOrderCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
|
|
if( guiSubTotal && gfCanAcceptOrder )
|
|
{
|
|
//if the player doesnt have enough money
|
|
if( LaptopSaveInfo.iCurrentBalance < giGrandTotal )
|
|
{
|
|
DoLapTopMessageBox( MSG_BOX_LAPTOP_DEFAULT, BobbyROrderFormText[BOBBYR_CANT_AFFORD_PURCHASE], LAPTOP_SCREEN, MSG_BOX_FLAG_OK, NULL);
|
|
}
|
|
else
|
|
{
|
|
CHAR16 zTemp[ 128 ];
|
|
|
|
//if the city is Drassen, and the airport sector is player controlled
|
|
if( gbSelectedCity == BR_DRASSEN && !StrategicMap[ SECTOR_INFO_TO_STRATEGIC_INDEX( SEC_B13 ) ].fEnemyControlled )
|
|
{
|
|
//Quick hack to bypass the confirmation box
|
|
ConfirmBobbyRPurchaseMessageBoxCallBack( MSG_BOX_RETURN_YES );
|
|
}
|
|
else
|
|
{
|
|
//else pop up a confirmation box
|
|
swprintf( zTemp, BobbyROrderFormText[BOBBYR_CONFIRM_DEST], *BobbyROrderLocations[gbSelectedCity].psCityLoc );
|
|
DoLapTopMessageBox( MSG_BOX_LAPTOP_DEFAULT, zTemp, LAPTOP_SCREEN, MSG_BOX_FLAG_YESNO, ConfirmBobbyRPurchaseMessageBoxCallBack );
|
|
}
|
|
|
|
/* //if the shipment is going to Drassen, add the inventory
|
|
if( gbSelectedCity == BR_DRASSEN )
|
|
{
|
|
// BobbyRayOrderStruct *pBobbyRayPurchase;
|
|
// UINT32 uiResetTimeSec;
|
|
UINT8 i, ubCount;
|
|
UINT8 cnt;
|
|
INT8 bDaysAhead;
|
|
|
|
//if we need to add more array elements for the Order Array
|
|
if( LaptopSaveInfo.usNumberOfBobbyRayOrderItems <= LaptopSaveInfo.usNumberOfBobbyRayOrderUsed )
|
|
{
|
|
LaptopSaveInfo.usNumberOfBobbyRayOrderItems++;
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray = MemRealloc( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray, sizeof( BobbyRayOrderStruct ) * LaptopSaveInfo.usNumberOfBobbyRayOrderItems );
|
|
if( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray == NULL )
|
|
return;
|
|
|
|
memset( &LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ LaptopSaveInfo.usNumberOfBobbyRayOrderItems - 1 ], 0, sizeof( BobbyRayOrderStruct ) );
|
|
}
|
|
|
|
for( cnt =0; cnt< LaptopSaveInfo.usNumberOfBobbyRayOrderItems; cnt++ )
|
|
{
|
|
//get an empty element in the array
|
|
if( !LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].fActive )
|
|
break;
|
|
}
|
|
|
|
//gets reset when the confirm order graphic disappears
|
|
gfCanAcceptOrder = FALSE;
|
|
|
|
// pBobbyRayPurchase = MemAlloc( sizeof( BobbyRayOrderStruct ) );
|
|
// memset(pBobbyRayPurchase, 0, sizeof( BobbyRayOrderStruct ) );
|
|
|
|
|
|
ubCount = 0;
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
{
|
|
//copy the purchases into the struct that will be added to the queue
|
|
memcpy(&LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].BobbyRayPurchase[ ubCount ] , &BobbyRayPurchases[i], sizeof(BobbyRayPurchaseStruct));
|
|
ubCount ++;
|
|
}
|
|
}
|
|
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].ubNumberPurchases = ubCount;
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].fActive = TRUE;
|
|
LaptopSaveInfo.usNumberOfBobbyRayOrderUsed++;
|
|
|
|
//get the length of time to receive the shipment
|
|
if( gubSelectedLight == 0 )
|
|
{
|
|
bDaysAhead = OVERNIGHT_EXPRESS;
|
|
//uiResetTimeSec = GetMidnightOfFutureDayInMinutes( OVERNIGHT_EXPRESS );
|
|
}
|
|
else if( gubSelectedLight == 1 )
|
|
{
|
|
bDaysAhead = TWO_BUSINESS_DAYS;
|
|
//uiResetTimeSec = GetMidnightOfFutureDayInMinutes( TWO_BUSINESS_DAYS );
|
|
}
|
|
else if( gubSelectedLight == 2 )
|
|
{
|
|
bDaysAhead = STANDARD_SERVICE;
|
|
//uiResetTimeSec = GetMidnightOfFutureDayInMinutes( STANDARD_SERVICE );
|
|
}
|
|
else
|
|
{
|
|
bDaysAhead = 0;
|
|
//uiResetTimeSec = 0;
|
|
}
|
|
|
|
if (gMercProfiles[99].bLife == 0)
|
|
{
|
|
// Sal is dead, so Pablo is dead, so the airport is badly run
|
|
bDaysAhead += (UINT8) Random( 5 ) + 1;
|
|
}
|
|
|
|
//add a random amount between so it arrives between 8:00 am and noon
|
|
//uiResetTimeSec += (8 + Random(4) ) * 60;
|
|
|
|
//AddStrategicEvent( EVENT_BOBBYRAY_PURCHASE, uiResetTimeSec, cnt);
|
|
AddFutureDayStrategicEvent( EVENT_BOBBYRAY_PURCHASE, (8 + Random(4) ) * 60, cnt, bDaysAhead );
|
|
|
|
}
|
|
|
|
//Add the transaction to the finance page
|
|
AddTransactionToPlayersBook(BOBBYR_PURCHASE, 0, GetWorldTotalMin(), -giGrandTotal);
|
|
|
|
//display the confirm order graphic
|
|
gfDrawConfirmOrderGrpahic = TRUE;
|
|
|
|
//Get rid of the city drop dowm, if it is being displayed
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
|
|
MSYS_EnableRegion(&gSelectedConfirmOrderRegion);
|
|
*/
|
|
}
|
|
}
|
|
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
|
|
void DisplayPurchasedItems( BOOLEAN fCalledFromOrderPage, UINT16 usGridX, UINT16 usGridY, BobbyRayPurchaseStruct *pBobbyRayPurchase, BOOLEAN fJustDisplayTitles, INT32 iOrderNum )
|
|
{
|
|
UINT16 i,j;
|
|
CHAR16 sText[400];
|
|
CHAR16 sBack[400];
|
|
CHAR16 sTemp[20];
|
|
UINT16 usPosY;
|
|
UINT32 uiStartLoc=0;
|
|
UINT32 uiTotal;
|
|
UINT16 usStringLength;
|
|
UINT16 usPixLength;
|
|
CHAR16 OneChar[2];
|
|
INT32 iGrandTotal;
|
|
INT32 iSubTotal;
|
|
|
|
|
|
|
|
//Output the qty
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_QTY], (UINT16)(usGridX+BOBBYR_GRID_FIRST_COLUMN_X), (UINT16)(usGridY+BOBBYR_GRID_FIRST_COLUMN_Y-BOBBYR_GRID_TITLE_OFFSET), BOBBYR_GRID_FIRST_COLUMN_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Create a string for the weight ( %s ) ( where %s is the weight string, either kg or lbs )
|
|
swprintf( sTemp, BobbyROrderFormText[BOBBYR_WEIGHT], GetWeightUnitString( ) );
|
|
|
|
//Output the Weight
|
|
DisplayWrappedString((UINT16)(usGridX+BOBBYR_GRID_SECOND_COLUMN_X), (UINT16)(usGridY+BOBBYR_GRID_SECOND_COLUMN_Y-30), BOBBYR_GRID_SECOND_COLUMN_WIDTH, 2, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, sTemp, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED );
|
|
|
|
//Output the name
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_NAME], (UINT16)(usGridX+BOBBYR_GRID_THIRD_COLUMN_X), (UINT16)(usGridY+BOBBYR_GRID_THIRD_COLUMN_Y-BOBBYR_GRID_TITLE_OFFSET), BOBBYR_GRID_THIRD_COLUMN_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Output the unit price
|
|
DisplayWrappedString((UINT16)(usGridX+BOBBYR_GRID_FOURTH_COLUMN_X), (UINT16)(usGridY+BOBBYR_GRID_FOURTH_COLUMN_Y-30), BOBBYR_GRID_FOURTH_COLUMN_WIDTH, 2, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, BobbyROrderFormText[BOBBYR_UNIT_PRICE], FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Output the total
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_TOTAL], (UINT16)(usGridX+BOBBYR_GRID_FIFTH_COLUMN_X), (UINT16)(usGridY+BOBBYR_GRID_FIFTH_COLUMN_Y-BOBBYR_GRID_TITLE_OFFSET), BOBBYR_GRID_FIFTH_COLUMN_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, CENTER_JUSTIFIED);
|
|
|
|
//Output the sub total, shipping and handling, and the grand total
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_SUB_TOTAL], (UINT16)(usGridX+BOBBYR_SUBTOTAL_X), (UINT16)(usGridY+BOBBYR_SUBTOTAL_Y), BOBBYR_SUBTOTAL_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_S_H], (UINT16)(usGridX+BOBBYR_SUBTOTAL_X), (UINT16)(usGridY+BOBBYR_SHIPPING_N_HANDLE_Y), BOBBYR_SUBTOTAL_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
DrawTextToScreen(BobbyROrderFormText[BOBBYR_GRAND_TOTAL], (UINT16)(usGridX+BOBBYR_SUBTOTAL_X), (UINT16)(usGridY+BOBBYR_GRAND_TOTAL_Y), BOBBYR_SUBTOTAL_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
|
|
if( fJustDisplayTitles )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if( fCalledFromOrderPage )
|
|
{
|
|
guiSubTotal = 0;
|
|
giGrandTotal = 0;
|
|
}
|
|
else
|
|
{
|
|
iSubTotal = 0;
|
|
iGrandTotal = 0;
|
|
}
|
|
|
|
|
|
if( pBobbyRayPurchase == NULL )
|
|
{
|
|
return;
|
|
}
|
|
|
|
//loop through the array of purchases to display only the items that are purchased
|
|
usPosY = usGridY+BOBBYR_GRID_FIRST_COLUMN_Y + 4;
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
// if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
if( pBobbyRayPurchase[i].ubNumberPurchased )
|
|
{
|
|
uiTotal = 0;
|
|
|
|
//Display the qty, order#, item name, unit price and the total
|
|
|
|
//qty
|
|
swprintf(sTemp, L"%3d", pBobbyRayPurchase[i].ubNumberPurchased );
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX+BOBBYR_GRID_FIRST_COLUMN_X-2), usPosY, BOBBYR_GRID_FIRST_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
//weight
|
|
swprintf( sTemp, L"%3.1f", GetWeightBasedOnMetricOption( Item[ pBobbyRayPurchase[i].usItemIndex ].ubWeight ) / (FLOAT)( 10.0 ) * pBobbyRayPurchase[i].ubNumberPurchased );
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX+BOBBYR_GRID_SECOND_COLUMN_X-2), usPosY, BOBBYR_GRID_SECOND_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
//Display Items Name
|
|
if( pBobbyRayPurchase[i].fUsed )
|
|
{
|
|
uiStartLoc = BOBBYR_ITEM_DESC_FILE_SIZE * LaptopSaveInfo.BobbyRayUsedInventory[ pBobbyRayPurchase[i].usBobbyItemIndex ].usItemIndex;
|
|
}
|
|
else
|
|
{
|
|
uiStartLoc = BOBBYR_ITEM_DESC_FILE_SIZE * LaptopSaveInfo.BobbyRayInventory[ pBobbyRayPurchase[i].usBobbyItemIndex ].usItemIndex;
|
|
}
|
|
|
|
|
|
if( pBobbyRayPurchase[i].fUsed )
|
|
{
|
|
// LoadEncryptedDataFromFile(BOBBYRDESCFILE, sBack, uiStartLoc, BOBBYR_ITEM_DESC_NAME_SIZE);
|
|
LoadBRName(pBobbyRayPurchase[i].usItemIndex,sBack);
|
|
swprintf(sText, L"%s %s", "*", sBack);
|
|
}
|
|
else
|
|
LoadBRName(pBobbyRayPurchase[i].usItemIndex,sText);
|
|
// LoadEncryptedDataFromFile(BOBBYRDESCFILE, sText, uiStartLoc, BOBBYR_ITEM_DESC_NAME_SIZE);
|
|
|
|
//if the name is bigger then can fit into the slot, reduce the size
|
|
if( StringPixLength(sText, BOBBYR_ORDER_DYNAMIC_TEXT_FONT) > BOBBYR_GRID_THIRD_COLUMN_WIDTH-4 )
|
|
{
|
|
usStringLength = wcslen(sText);
|
|
usPixLength=0;
|
|
OneChar[1] = L'\0';
|
|
for(j=0; (i<usStringLength)&&(usPixLength < BOBBYR_GRID_THIRD_COLUMN_WIDTH-16); j++)
|
|
{
|
|
sBack[j] = sText[j];
|
|
OneChar[0] = sBack[j];
|
|
usPixLength += StringPixLength(OneChar, BOBBYR_ORDER_DYNAMIC_TEXT_FONT);
|
|
}
|
|
sBack[j] = 0;
|
|
swprintf(sText, L"%s...", sBack);
|
|
}
|
|
|
|
DrawTextToScreen(sText, (UINT16)(usGridX+BOBBYR_GRID_THIRD_COLUMN_X+2), usPosY, BOBBYR_GRID_THIRD_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
|
|
//unit price
|
|
swprintf(sTemp, L"%d", CalcBobbyRayCost( pBobbyRayPurchase[i].usItemIndex, pBobbyRayPurchase[i].usBobbyItemIndex, pBobbyRayPurchase[i].fUsed ));
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX+BOBBYR_GRID_FOURTH_COLUMN_X-2), usPosY, BOBBYR_GRID_FOURTH_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
uiTotal += CalcBobbyRayCost( pBobbyRayPurchase[i].usItemIndex, pBobbyRayPurchase[i].usBobbyItemIndex, pBobbyRayPurchase[i].fUsed ) * pBobbyRayPurchase[i].ubNumberPurchased;
|
|
|
|
swprintf(sTemp, L"%d", uiTotal );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX+BOBBYR_GRID_FIFTH_COLUMN_X-2), usPosY, BOBBYR_GRID_FIFTH_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
//add the current item total to the sub total
|
|
if( fCalledFromOrderPage )
|
|
{
|
|
guiSubTotal += uiTotal;
|
|
}
|
|
else
|
|
{
|
|
iSubTotal += uiTotal;
|
|
}
|
|
|
|
usPosY += BOBBYR_GRID_ROW_OFFSET;
|
|
}
|
|
}
|
|
|
|
DisplayShippingCosts( fCalledFromOrderPage, iSubTotal, usGridX, usGridY, iOrderNum );
|
|
}
|
|
|
|
|
|
void DisplayShippingCosts( BOOLEAN fCalledFromOrderPage, INT32 iSubTotal, UINT16 usGridX, UINT16 usGridY, INT32 iOrderNum )
|
|
{
|
|
CHAR16 sTemp[20];
|
|
HVOBJECT hPixHandle;
|
|
INT32 iShippingCost = 0;
|
|
// INT32 iTotal;
|
|
|
|
if( fCalledFromOrderPage )
|
|
{
|
|
iSubTotal = guiSubTotal;
|
|
// iTotal = giGrandTotal;
|
|
|
|
if( gubSelectedLight == 0 )
|
|
guiShippingCost = CalcCostFromWeightOfPackage( 0 );
|
|
else if( gubSelectedLight == 1 )
|
|
guiShippingCost = CalcCostFromWeightOfPackage( 1 );
|
|
else if( gubSelectedLight == 2 )
|
|
guiShippingCost = CalcCostFromWeightOfPackage( 2 );
|
|
|
|
iShippingCost = guiShippingCost;
|
|
}
|
|
else
|
|
{
|
|
UINT16 usStandardCost;
|
|
|
|
switch( gpNewBobbyrShipments[ iOrderNum ].ubDeliveryMethod )
|
|
{
|
|
case 0:
|
|
usStandardCost = BobbyROrderLocations[gpNewBobbyrShipments[ iOrderNum ].ubDeliveryLoc].usOverNightExpress;
|
|
break;
|
|
case 1:
|
|
usStandardCost = BobbyROrderLocations[gpNewBobbyrShipments[ iOrderNum ].ubDeliveryLoc].us2DaysService;
|
|
break;
|
|
case 2:
|
|
usStandardCost = BobbyROrderLocations[gpNewBobbyrShipments[ iOrderNum ].ubDeliveryLoc].usStandardService;
|
|
break;
|
|
|
|
default:
|
|
usStandardCost = 0;
|
|
}
|
|
|
|
iShippingCost = (INT32)( ( gpNewBobbyrShipments[ iOrderNum ].uiPackageWeight / (FLOAT)10 ) * usStandardCost + .5 );
|
|
}
|
|
|
|
|
|
//erase the old area
|
|
// bli the total Saved area onto the grid
|
|
if( fCalledFromOrderPage )
|
|
{
|
|
GetVideoObject(&hPixHandle, guiTotalSaveArea);
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_TOTAL_SAVED_AREA_X, BOBBYR_TOTAL_SAVED_AREA_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
}
|
|
|
|
|
|
//if there is a shipment, display the s&h charge
|
|
if( iSubTotal )
|
|
{
|
|
//Display the subtotal
|
|
swprintf(sTemp, L"%d", iSubTotal );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX + BOBBYR_GRID_FIFTH_COLUMN_X-2), (UINT16)(usGridY + BOBBYR_SUBTOTAL_Y), BOBBYR_GRID_FIFTH_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
//Display the shipping and handling charge
|
|
swprintf(sTemp, L"%d", iShippingCost );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX + BOBBYR_GRID_FIFTH_COLUMN_X-2), (UINT16)(usGridY + BOBBYR_SHIPPING_N_HANDLE_Y), BOBBYR_GRID_FIFTH_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
|
|
|
|
//Display the grand total
|
|
giGrandTotal = iSubTotal + iShippingCost;
|
|
swprintf(sTemp, L"%d", giGrandTotal );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
|
|
DrawTextToScreen(sTemp, (UINT16)(usGridX + BOBBYR_GRID_FIFTH_COLUMN_X-2), (UINT16)(usGridY + BOBBYR_GRAND_TOTAL_Y), BOBBYR_GRID_FIFTH_COLUMN_WIDTH, BOBBYR_ORDER_DYNAMIC_TEXT_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
}
|
|
|
|
InvalidateRegion(iScreenWidthOffset + 333,iScreenHeightOffset + 326,iScreenWidthOffset + 374,iScreenHeightOffset + 400);
|
|
}
|
|
|
|
|
|
|
|
|
|
void BtnBobbyRBackCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
guiCurrentLaptopMode = guiLastBobbyRayPage;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
|
|
void BtnBobbyRHomeCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
guiCurrentLaptopMode = LAPTOP_MODE_BOBBY_R;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
void SelectShippingSpeedRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
gubSelectedLight = (UINT8)MSYS_GetRegionUserData( pRegion, 0 );
|
|
DrawShippingSpeedLights( gubSelectedLight );
|
|
DisplayShippingCosts( TRUE, 0, BOBBYR_ORDERGRID_X, BOBBYR_ORDERGRID_Y, -1 );
|
|
}
|
|
}
|
|
|
|
BOOLEAN DrawShippingSpeedLights(UINT8 ubSelected)
|
|
{
|
|
|
|
if(ubSelected == 0)
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, gShippingSpeedAreas[0], gShippingSpeedAreas[1], gShippingSpeedAreas[0]+SHIPPING_SPEED_LIGHT_WIDTH, gShippingSpeedAreas[1]+SHIPPING_SPEED_LIGHT_HEIGHT, Get16BPPColor( FROMRGB( 0, 255, 0 ) ) );
|
|
else
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, gShippingSpeedAreas[0], gShippingSpeedAreas[1], gShippingSpeedAreas[0]+SHIPPING_SPEED_LIGHT_WIDTH, gShippingSpeedAreas[1]+SHIPPING_SPEED_LIGHT_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
if(ubSelected == 1)
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, gShippingSpeedAreas[2], gShippingSpeedAreas[3], gShippingSpeedAreas[2]+SHIPPING_SPEED_LIGHT_WIDTH, gShippingSpeedAreas[3]+SHIPPING_SPEED_LIGHT_HEIGHT, Get16BPPColor( FROMRGB( 0, 255, 0 ) ) );
|
|
else
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, gShippingSpeedAreas[2], gShippingSpeedAreas[3], gShippingSpeedAreas[2]+SHIPPING_SPEED_LIGHT_WIDTH, gShippingSpeedAreas[3]+SHIPPING_SPEED_LIGHT_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
if(ubSelected == 2)
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, gShippingSpeedAreas[4], gShippingSpeedAreas[5], gShippingSpeedAreas[4]+SHIPPING_SPEED_LIGHT_WIDTH, gShippingSpeedAreas[5]+SHIPPING_SPEED_LIGHT_HEIGHT, Get16BPPColor( FROMRGB( 0, 255, 0 ) ) );
|
|
else
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, gShippingSpeedAreas[4], gShippingSpeedAreas[5], gShippingSpeedAreas[4]+SHIPPING_SPEED_LIGHT_WIDTH, gShippingSpeedAreas[5]+SHIPPING_SPEED_LIGHT_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
InvalidateRegion(iScreenWidthOffset + 585, iScreenHeightOffset + 218, iScreenWidthOffset + 594, iScreenHeightOffset + 287);
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
void SelectConfirmOrderRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
//Remove the items for Boby Rqys Inventory
|
|
RemovePurchasedItemsFromBobbyRayInventory();
|
|
|
|
//delete the order
|
|
memset(&BobbyRayPurchases, 0, sizeof(BobbyRayPurchaseStruct) * MAX_PURCHASE_AMOUNT);
|
|
gubSelectedLight = 0;
|
|
gfDestroyConfirmGrphiArea = TRUE;
|
|
gubSelectedLight = 0;
|
|
|
|
//Goto The homepage
|
|
guiCurrentLaptopMode = LAPTOP_MODE_BOBBY_R;
|
|
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_RBUTTON_UP)
|
|
{
|
|
//Remove the items for Boby Rqys Inventory
|
|
RemovePurchasedItemsFromBobbyRayInventory();
|
|
|
|
//delete the order
|
|
memset(&BobbyRayPurchases, 0, sizeof(BobbyRayPurchaseStruct) * MAX_PURCHASE_AMOUNT);
|
|
gubSelectedLight = 0;
|
|
gfDestroyConfirmGrphiArea = TRUE;
|
|
gubSelectedLight = 0;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
BOOLEAN CreateDestroyBobbyRDropDown( UINT8 ubDropDownAction )
|
|
{
|
|
static UINT16 usHeight;
|
|
static BOOLEAN fMouseRegionsCreated=FALSE;
|
|
|
|
switch( ubDropDownAction )
|
|
{
|
|
case BR_DROP_DOWN_NO_ACTION:
|
|
{
|
|
|
|
}
|
|
break;
|
|
|
|
case BR_DROP_DOWN_CREATE:
|
|
{
|
|
UINT8 i;
|
|
UINT16 usPosX, usPosY, usHeight;
|
|
UINT16 usTemp;
|
|
UINT16 usFontHeight = GetFontHeight( BOBBYR_DROPDOWN_FONT );
|
|
|
|
if( fMouseRegionsCreated )
|
|
{
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
|
|
break;
|
|
}
|
|
fMouseRegionsCreated = TRUE;
|
|
|
|
usPosX = BOBBYR_CITY_START_LOCATION_X;
|
|
usPosY = BOBBYR_CITY_START_LOCATION_Y;
|
|
for( i=0; i< BOBBYR_NUM_DISPLAYED_CITIES; i++)
|
|
{
|
|
MSYS_DefineRegion( &gSelectedDropDownRegion[i], usPosX, (UINT16)(usPosY+4), (UINT16)(usPosX+BOBBYR_DROP_DOWN_WIDTH-6), (UINT16)(usPosY+usFontHeight+7), MSYS_PRIORITY_HIGH,
|
|
CURSOR_WWW, SelectDropDownMovementCallBack, SelectDropDownRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedDropDownRegion[i]);
|
|
MSYS_SetRegionUserData( &gSelectedDropDownRegion[ i ], 0, i);
|
|
|
|
usPosY += usFontHeight + 2;
|
|
}
|
|
usTemp = BOBBYR_CITY_START_LOCATION_Y;
|
|
usHeight = usPosY - usTemp + 10;
|
|
|
|
|
|
//create the scroll bars regions
|
|
//up arrow
|
|
usPosX = BOBBYR_SCROLL_UP_ARROW_X;
|
|
usPosY = BOBBYR_SCROLL_UP_ARROW_Y;
|
|
for(i=0; i<2; i++)
|
|
{
|
|
MSYS_DefineRegion( &gSelectedUpDownArrowOnScrollAreaRegion[i], usPosX, usPosY, (UINT16)(usPosX+BOBBYR_SCROLL_ARROW_WIDTH), (UINT16)(usPosY+BOBBYR_SCROLL_ARROW_HEIGHT), MSYS_PRIORITY_HIGH,
|
|
CURSOR_WWW, MSYS_NO_CALLBACK, SelectUpDownArrowOnScrollAreaRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedUpDownArrowOnScrollAreaRegion[i]);
|
|
MSYS_SetRegionUserData( &gSelectedUpDownArrowOnScrollAreaRegion[ i ], 0, i);
|
|
usPosX = BOBBYR_SCROLL_DOWN_ARROW_X;
|
|
usPosY = BOBBYR_SCROLL_DOWN_ARROW_Y;
|
|
}
|
|
|
|
//the scroll area itself
|
|
usPosX = BOBBYR_SCROLL_AREA_X;
|
|
usPosY = BOBBYR_SCROLL_UP_ARROW_Y + BOBBYR_SCROLL_ARROW_HEIGHT;
|
|
usHeight = BOBBYR_SCROLL_AREA_HEIGHT_MINUS_ARROWS / BOBBYR_ORDER_NUM_SHIPPING_CITIES;
|
|
for(i=0; i<BOBBYR_ORDER_NUM_SHIPPING_CITIES-1; i++)
|
|
{
|
|
MSYS_DefineRegion( &gSelectedScrollAreaDropDownRegion[i], usPosX, usPosY, (UINT16)(usPosX+BOBBYR_SCROLL_ARROW_WIDTH), (UINT16)(usPosY+usHeight), MSYS_PRIORITY_HIGH+1,
|
|
CURSOR_LAPTOP_SCREEN, SelectScrollAreaDropDownMovementCallBack, SelectScrollAreaDropDownRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedScrollAreaDropDownRegion[i]);
|
|
MSYS_SetRegionUserData( &gSelectedScrollAreaDropDownRegion[ i ], 0, i);
|
|
usPosY += usHeight;
|
|
}
|
|
//put the last one down to cover the remaining area
|
|
MSYS_DefineRegion( &gSelectedScrollAreaDropDownRegion[i], usPosX, usPosY, (UINT16)(usPosX+BOBBYR_SCROLL_ARROW_WIDTH), BOBBYR_SCROLL_DOWN_ARROW_Y, MSYS_PRIORITY_HIGH+1,
|
|
CURSOR_LAPTOP_SCREEN, SelectScrollAreaDropDownMovementCallBack, SelectScrollAreaDropDownRegionCallBack);
|
|
MSYS_AddRegion(&gSelectedScrollAreaDropDownRegion[i]);
|
|
MSYS_SetRegionUserData( &gSelectedScrollAreaDropDownRegion[ i ], 0, i);
|
|
|
|
|
|
MSYS_EnableRegion(&gSelectedCloseDropDownRegion);
|
|
|
|
//disable the clear order and accept order buttons, (their rendering interferes with the drop down graphics)
|
|
DisableButton(guiBobbyRClearOrder);
|
|
|
|
//FERAL
|
|
// if( IsAnythingPurchasedFromBobbyRayPage() )
|
|
// {
|
|
// SpecifyDisabledButtonStyle( guiBobbyRAcceptOrder, DISABLED_STYLE_NONE );
|
|
// DisableButton(guiBobbyRAcceptOrder);
|
|
// }
|
|
}
|
|
break;
|
|
|
|
case BR_DROP_DOWN_DESTROY:
|
|
{
|
|
UINT8 i;
|
|
|
|
if( !fMouseRegionsCreated )
|
|
break;
|
|
|
|
for( i=0; i< BOBBYR_NUM_DISPLAYED_CITIES; i++)
|
|
MSYS_RemoveRegion( &gSelectedDropDownRegion[i]);
|
|
|
|
|
|
//destroy the scroll bars arrow regions
|
|
for( i=0; i< 2; i++)
|
|
MSYS_RemoveRegion( &gSelectedUpDownArrowOnScrollAreaRegion[i]);
|
|
|
|
//destroy the scroll bars regions
|
|
for( i=0; i<BOBBYR_ORDER_NUM_SHIPPING_CITIES; i++)
|
|
MSYS_RemoveRegion( &gSelectedScrollAreaDropDownRegion[i]);
|
|
|
|
//display the name on the title bar
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, BOBBYR_SHIPPING_LOC_AREA_L_X, BOBBYR_SHIPPING_LOC_AREA_T_Y, BOBBYR_SHIPPING_LOC_AREA_L_X+175, BOBBYR_SHIPPING_LOC_AREA_T_Y+BOBBYR_DROP_DOWN_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
if( gbSelectedCity == -1 )
|
|
DrawTextToScreen( BobbyROrderFormText[BOBBYR_SELECT_DEST], BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, BOBBYR_SHIPPING_LOC_AREA_T_Y+3, 0, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DROP_DOWN_SELEC_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
else
|
|
DrawTextToScreen( *(BobbyROrderLocations[gbSelectedCity].psCityLoc), BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, BOBBYR_SHIPPING_LOC_AREA_T_Y+3, 0, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DROP_DOWN_SELEC_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
//disable the r\close regiuon
|
|
MSYS_DisableRegion(&gSelectedCloseDropDownRegion);
|
|
|
|
//enable the clear order and accept order buttons, (because their rendering interferes with the drop down graphics)
|
|
EnableButton(guiBobbyRClearOrder);
|
|
//FERAL
|
|
// if( IsAnythingPurchasedFromBobbyRayPage() )
|
|
// {
|
|
// SpecifyDisabledButtonStyle( guiBobbyRAcceptOrder, DISABLED_STYLE_SHADED );
|
|
// EnableButton(guiBobbyRAcceptOrder);
|
|
// }
|
|
|
|
gfReDrawBobbyOrder = TRUE;
|
|
fMouseRegionsCreated = FALSE;
|
|
gubDropDownAction = BR_DROP_DOWN_NO_ACTION;
|
|
}
|
|
break;
|
|
|
|
case BR_DROP_DOWN_DISPLAY:
|
|
{
|
|
UINT8 i;
|
|
UINT16 usPosY, usPosX;
|
|
UINT16 usFontHeight = GetFontHeight( BOBBYR_DROPDOWN_FONT );
|
|
HVOBJECT hImageHandle;
|
|
HVOBJECT hArrowHandle;
|
|
|
|
//Display the background for the drop down window
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, BOBBYR_CITY_START_LOCATION_X, BOBBYR_CITY_START_LOCATION_Y, BOBBYR_CITY_START_LOCATION_X+BOBBYR_DROP_DOWN_WIDTH, BOBBYR_CITY_START_LOCATION_Y+BOBBYR_SCROLL_AREA_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
//
|
|
// Place the border around the background
|
|
//
|
|
usHeight = BOBBYR_SCROLL_AREA_HEIGHT;
|
|
|
|
GetVideoObject(&hImageHandle, guiDropDownBorder);
|
|
|
|
usPosX = usPosY = 0;
|
|
//blit top & bottom row of images
|
|
for(i=10; i< BOBBYR_DROP_DOWN_WIDTH-10; i+=10)
|
|
{
|
|
//TOP ROW
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 1,i+BOBBYR_CITY_START_LOCATION_X, usPosY+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
//BOTTOM ROW
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 6,i+BOBBYR_CITY_START_LOCATION_X, usHeight-10+6+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
}
|
|
|
|
//blit the left and right row of images
|
|
usPosX = 0;
|
|
for(i=10; i< usHeight-10; i+=10)
|
|
{
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 3,usPosX+BOBBYR_CITY_START_LOCATION_X, i+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 4,usPosX+BOBBYR_DROP_DOWN_WIDTH-4+BOBBYR_CITY_START_LOCATION_X, i+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
}
|
|
|
|
//blt the corner images for the row
|
|
//top left
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 0, 0+BOBBYR_CITY_START_LOCATION_X, usPosY+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
//top right
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 2, BOBBYR_DROP_DOWN_WIDTH-10+BOBBYR_CITY_START_LOCATION_X, usPosY+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
//bottom left
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 5, 0+BOBBYR_CITY_START_LOCATION_X, usHeight-10+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
//bottom right
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 7, BOBBYR_DROP_DOWN_WIDTH-10+BOBBYR_CITY_START_LOCATION_X, usHeight-10+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
|
|
DrawSelectedCity( gbSelectedCity );
|
|
|
|
|
|
//display the scroll bars regions
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, BOBBYR_SCROLL_AREA_X, BOBBYR_SCROLL_AREA_Y, BOBBYR_SCROLL_AREA_X+BOBBYR_SCROLL_AREA_WIDTH, BOBBYR_SCROLL_AREA_Y+BOBBYR_SCROLL_AREA_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
//blt right bar of scroll area
|
|
usPosX = 0;
|
|
for(i=10; i< BOBBYR_SCROLL_AREA_HEIGHT-10; i+=10)
|
|
{
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 3,BOBBYR_SCROLL_AREA_X+BOBBYR_SCROLL_AREA_WIDTH-4, i+BOBBYR_CITY_START_LOCATION_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
}
|
|
|
|
//blit top row of images
|
|
for(i=0; i< BOBBYR_SCROLL_AREA_WIDTH; i+=10)
|
|
{
|
|
//TOP ROW
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 1,i+BOBBYR_SCROLL_AREA_X-10, BOBBYR_SCROLL_AREA_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
//BOTTOM ROW
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 6,i+BOBBYR_SCROLL_AREA_X-10, BOBBYR_SCROLL_AREA_Y-10+6+BOBBYR_SCROLL_AREA_HEIGHT, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
}
|
|
|
|
//top right
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 2, BOBBYR_SCROLL_AREA_X+BOBBYR_SCROLL_AREA_WIDTH-10, BOBBYR_SCROLL_AREA_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
//bottom right
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 7, BOBBYR_SCROLL_AREA_X+BOBBYR_SCROLL_AREA_WIDTH-10, BOBBYR_SCROLL_AREA_Y+BOBBYR_SCROLL_AREA_HEIGHT-10, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
//fix
|
|
BltVideoObject(FRAME_BUFFER, hImageHandle, 4, BOBBYR_DROP_DOWN_WIDTH-4+BOBBYR_CITY_START_LOCATION_X, BOBBYR_CITY_START_LOCATION_Y+2, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
|
|
//get and display the up and down arrows
|
|
GetVideoObject(&hArrowHandle, guiGoldArrowImages);
|
|
//top arrow
|
|
BltVideoObject(FRAME_BUFFER, hArrowHandle, 1, BOBBYR_SCROLL_UP_ARROW_X, BOBBYR_SCROLL_UP_ARROW_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
//top arrow
|
|
BltVideoObject(FRAME_BUFFER, hArrowHandle, 0, BOBBYR_SCROLL_DOWN_ARROW_X, BOBBYR_SCROLL_DOWN_ARROW_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
|
|
//display the scroll rectangle
|
|
DrawGoldRectangle( gbSelectedCity );
|
|
|
|
|
|
InvalidateRegion(LAPTOP_SCREEN_UL_X,LAPTOP_SCREEN_WEB_UL_Y,LAPTOP_SCREEN_LR_X,LAPTOP_SCREEN_WEB_LR_Y);
|
|
}
|
|
break;
|
|
}
|
|
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
void SelectDropDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
UINT8 ubSelected = (UINT8)MSYS_GetRegionUserData( pRegion, 0 );
|
|
gbSelectedCity = ubSelected + gubCityAtTopOfList ;
|
|
|
|
DrawSelectedCity( gbSelectedCity );
|
|
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
}
|
|
}
|
|
|
|
void SelectActivateCityDroDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
gubDropDownAction = BR_DROP_DOWN_CREATE;
|
|
}
|
|
}
|
|
|
|
|
|
void SelectDropDownMovementCallBack(MOUSE_REGION * pRegion, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LOST_MOUSE )
|
|
{
|
|
pRegion->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
|
|
}
|
|
else if( reason & MSYS_CALLBACK_REASON_GAIN_MOUSE )
|
|
{
|
|
pRegion->uiFlags |= BUTTON_CLICKED_ON ;
|
|
|
|
gbSelectedCity = (UINT8)MSYS_GetRegionUserData( pRegion, 0 ) + gubCityAtTopOfList;
|
|
|
|
gubDropDownAction = BR_DROP_DOWN_DISPLAY;
|
|
|
|
InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void DrawSelectedCity( UINT8 ubCityNumber )
|
|
{
|
|
UINT16 usPosY;
|
|
UINT16 usFontHeight = GetFontHeight( BOBBYR_DROPDOWN_FONT );
|
|
UINT8 i;
|
|
|
|
//DEBUG: make sure it wont go over array bounds
|
|
if( gubCityAtTopOfList+BOBBYR_NUM_DISPLAYED_CITIES > BOBBYR_ORDER_NUM_SHIPPING_CITIES )
|
|
gubCityAtTopOfList = BOBBYR_ORDER_NUM_SHIPPING_CITIES - BOBBYR_NUM_DISPLAYED_CITIES - 1;
|
|
|
|
|
|
//Display the list of cities
|
|
usPosY = BOBBYR_CITY_START_LOCATION_Y + 5;
|
|
for( i=gubCityAtTopOfList; i< gubCityAtTopOfList+BOBBYR_NUM_DISPLAYED_CITIES; i++)
|
|
{
|
|
DrawTextToScreen( *(BobbyROrderLocations[i].psCityLoc), BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, usPosY, 0, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
usPosY += usFontHeight + 2;
|
|
}
|
|
|
|
if( ubCityNumber != 255 )
|
|
usPosY = (usFontHeight + 2) * (ubCityNumber - gubCityAtTopOfList) + BOBBYR_CITY_START_LOCATION_Y;
|
|
else
|
|
usPosY = (usFontHeight + 2) * (gubCityAtTopOfList) + BOBBYR_CITY_START_LOCATION_Y;
|
|
|
|
|
|
//display the name in the list
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, BOBBYR_CITY_START_LOCATION_X+4, usPosY+4, BOBBYR_CITY_START_LOCATION_X+BOBBYR_DROP_DOWN_WIDTH-4, usPosY+usFontHeight+6, Get16BPPColor( FROMRGB( 200, 169, 87 ) ) );
|
|
|
|
SetFontShadow(NO_SHADOW);
|
|
if( ubCityNumber == 255 )
|
|
DrawTextToScreen( *(BobbyROrderLocations[ 0 ].psCityLoc), BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, (UINT16)(usPosY+5), 0, BOBBYR_DROPDOWN_FONT, BOBBYR_FONT_BLACK, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
else
|
|
DrawTextToScreen( *(BobbyROrderLocations[ubCityNumber].psCityLoc), BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, (UINT16)(usPosY+5), 0, BOBBYR_DROPDOWN_FONT, BOBBYR_FONT_BLACK, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
SetFontShadow(DEFAULT_SHADOW);
|
|
|
|
DisplayShippingLocationCity();
|
|
|
|
if( guiBobbyRAcceptOrder != -1 )
|
|
{
|
|
//if there is anything to buy, dont disable the accept button
|
|
if( IsAnythingPurchasedFromBobbyRayPage() && gbSelectedCity != -1 )
|
|
EnableButton( guiBobbyRAcceptOrder );
|
|
}
|
|
}
|
|
|
|
void DisplayShippingLocationCity()
|
|
{
|
|
CHAR16 sTemp[40];
|
|
UINT16 usPosY;
|
|
|
|
//display the name on the title bar
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, BOBBYR_SHIPPING_LOC_AREA_L_X, BOBBYR_SHIPPING_LOC_AREA_T_Y, BOBBYR_SHIPPING_LOC_AREA_L_X+175, BOBBYR_SHIPPING_LOC_AREA_T_Y+BOBBYR_DROP_DOWN_HEIGHT, Get16BPPColor( FROMRGB( 0, 0, 0 ) ) );
|
|
|
|
//if there is no city selected
|
|
if( gbSelectedCity == -1 )
|
|
DrawTextToScreen( BobbyROrderFormText[BOBBYR_SELECT_DEST], BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, BOBBYR_SHIPPING_LOC_AREA_T_Y+3, 0, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DROP_DOWN_SELEC_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
else
|
|
DrawTextToScreen( *(BobbyROrderLocations[gbSelectedCity].psCityLoc), BOBBYR_CITY_START_LOCATION_X+BOBBYR_CITY_NAME_OFFSET, BOBBYR_SHIPPING_LOC_AREA_T_Y+3, 0, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DROP_DOWN_SELEC_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED );
|
|
|
|
|
|
DisplayShippingCosts( TRUE, 0, BOBBYR_ORDERGRID_X, BOBBYR_ORDERGRID_Y, -1 );
|
|
|
|
if( gubDropDownAction == BR_DROP_DOWN_DISPLAY)
|
|
return;
|
|
|
|
|
|
//Display the shipping cost
|
|
usPosY = BOBBYR_OVERNIGHT_EXPRESS_Y;
|
|
|
|
wcscpy(sTemp, L"$0");
|
|
|
|
if( gbSelectedCity != -1 )
|
|
{
|
|
swprintf( sTemp, L"%d", ( INT32 )(BobbyROrderLocations[gbSelectedCity].usOverNightExpress/GetWeightBasedOnMetricOption( 1 ) ) );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
}
|
|
|
|
DrawTextToScreen(sTemp, BOBBYR_SHIPPING_SPEED_NUMBER_X, usPosY, BOBBYR_SHIPPING_SPEED_NUMBER_WIDTH, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED );
|
|
usPosY +=BOBBYR_GRID_ROW_OFFSET;
|
|
|
|
if( gbSelectedCity != -1 )
|
|
{
|
|
swprintf( sTemp, L"%d", ( INT32 )( BobbyROrderLocations[gbSelectedCity].us2DaysService / GetWeightBasedOnMetricOption( 1 ) ) );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
}
|
|
|
|
DrawTextToScreen(sTemp, BOBBYR_SHIPPING_SPEED_NUMBER_X, usPosY, BOBBYR_SHIPPING_SPEED_NUMBER_WIDTH, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED );
|
|
usPosY +=BOBBYR_GRID_ROW_OFFSET;
|
|
|
|
if( gbSelectedCity != -1 )
|
|
{
|
|
swprintf( sTemp, L"%d", (INT32 )( BobbyROrderLocations[gbSelectedCity].usStandardService / GetWeightBasedOnMetricOption( 1 ) ) );
|
|
InsertCommasForDollarFigure( sTemp );
|
|
InsertDollarSignInToString( sTemp );
|
|
}
|
|
|
|
DrawTextToScreen(sTemp, BOBBYR_SHIPPING_SPEED_NUMBER_X, usPosY, BOBBYR_SHIPPING_SPEED_NUMBER_WIDTH, BOBBYR_DROPDOWN_FONT, BOBBYR_ORDER_DYNAMIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED );
|
|
}
|
|
|
|
void SelectCloseDroDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
}
|
|
}
|
|
|
|
|
|
void RemovePurchasedItemsFromBobbyRayInventory()
|
|
{
|
|
INT16 i;
|
|
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
{
|
|
//if the item is used
|
|
if( BobbyRayPurchases[ i ].fUsed)
|
|
{
|
|
//removee it from Bobby Rays Inventory
|
|
if( ( LaptopSaveInfo.BobbyRayUsedInventory[ BobbyRayPurchases[ i ].usBobbyItemIndex ].ubQtyOnHand - BobbyRayPurchases[ i ].ubNumberPurchased) > 0 )
|
|
LaptopSaveInfo.BobbyRayUsedInventory[ BobbyRayPurchases[ i ].usBobbyItemIndex ].ubQtyOnHand -= BobbyRayPurchases[ i ].ubNumberPurchased;
|
|
else
|
|
LaptopSaveInfo.BobbyRayUsedInventory[ BobbyRayPurchases[ i ].usBobbyItemIndex ].ubQtyOnHand = 0;
|
|
}
|
|
|
|
//else the purchase is new
|
|
else
|
|
{
|
|
//removee it from Bobby Rays Inventory
|
|
if( (LaptopSaveInfo.BobbyRayInventory[ BobbyRayPurchases[ i ].usBobbyItemIndex ].ubQtyOnHand - BobbyRayPurchases[ i ].ubNumberPurchased) > 0 )
|
|
LaptopSaveInfo.BobbyRayInventory[ BobbyRayPurchases[ i ].usBobbyItemIndex ].ubQtyOnHand -= BobbyRayPurchases[ i ].ubNumberPurchased;
|
|
else
|
|
LaptopSaveInfo.BobbyRayInventory[ BobbyRayPurchases[ i ].usBobbyItemIndex ].ubQtyOnHand = 0;
|
|
}
|
|
}
|
|
}
|
|
gfRemoveItemsFromStock = FALSE;
|
|
}
|
|
|
|
|
|
BOOLEAN IsAnythingPurchasedFromBobbyRayPage()
|
|
{
|
|
UINT16 i;
|
|
BOOLEAN fReturnType = FALSE;
|
|
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
{
|
|
fReturnType = TRUE;
|
|
}
|
|
}
|
|
return( fReturnType );
|
|
}
|
|
|
|
void SelectTitleLinkRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if(iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
guiCurrentLaptopMode = LAPTOP_MODE_BOBBY_R;
|
|
}
|
|
}
|
|
|
|
|
|
void SelectScrollAreaDropDownRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
|
|
{
|
|
UINT8 ubCityNum = (UINT8)MSYS_GetRegionUserData( pRegion, 0 );
|
|
|
|
if( ubCityNum < gbSelectedCity )
|
|
{
|
|
gbSelectedCity--;
|
|
if( gbSelectedCity < gubCityAtTopOfList )
|
|
gubCityAtTopOfList--;
|
|
}
|
|
|
|
if( ubCityNum > gbSelectedCity )
|
|
{
|
|
gbSelectedCity++;
|
|
if( ( gbSelectedCity - gubCityAtTopOfList ) >= BOBBYR_NUM_DISPLAYED_CITIES )
|
|
gubCityAtTopOfList++;
|
|
}
|
|
|
|
gubDropDownAction = BR_DROP_DOWN_DISPLAY;
|
|
}
|
|
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT)
|
|
{
|
|
UINT8 ubCityNum = (UINT8)MSYS_GetRegionUserData( pRegion, 0 );
|
|
|
|
pRegion->uiFlags |= BUTTON_CLICKED_ON ;
|
|
|
|
if( ubCityNum < gbSelectedCity )
|
|
{
|
|
gbSelectedCity--;
|
|
if( gbSelectedCity < gubCityAtTopOfList )
|
|
gubCityAtTopOfList--;
|
|
}
|
|
|
|
if( ubCityNum > gbSelectedCity )
|
|
{
|
|
gbSelectedCity++;
|
|
if( ( gbSelectedCity - gubCityAtTopOfList ) >= BOBBYR_NUM_DISPLAYED_CITIES )
|
|
gubCityAtTopOfList++;
|
|
}
|
|
|
|
gubDropDownAction = BR_DROP_DOWN_DISPLAY;
|
|
|
|
InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
|
|
void SelectScrollAreaDropDownMovementCallBack(MOUSE_REGION * pRegion, INT32 reason )
|
|
{
|
|
if( reason & MSYS_CALLBACK_REASON_LOST_MOUSE )
|
|
{
|
|
pRegion->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
|
|
}
|
|
else if (reason & MSYS_CALLBACK_REASON_GAIN_MOUSE )
|
|
{
|
|
if( gfLeftButtonState )
|
|
{
|
|
UINT8 ubCityNum = (UINT8)MSYS_GetRegionUserData( pRegion, 0 );
|
|
|
|
pRegion->uiFlags |= BUTTON_CLICKED_ON ;
|
|
|
|
if( ubCityNum < gbSelectedCity )
|
|
{
|
|
gbSelectedCity = ubCityNum;
|
|
if( gbSelectedCity < gubCityAtTopOfList )
|
|
gubCityAtTopOfList = gbSelectedCity;
|
|
}
|
|
|
|
if( ubCityNum > gbSelectedCity )
|
|
{
|
|
gbSelectedCity = ubCityNum;
|
|
if( ( gbSelectedCity - gubCityAtTopOfList ) >= BOBBYR_NUM_DISPLAYED_CITIES )
|
|
gubCityAtTopOfList = gbSelectedCity - BOBBYR_NUM_DISPLAYED_CITIES + 1;
|
|
}
|
|
|
|
gubDropDownAction = BR_DROP_DOWN_DISPLAY;
|
|
|
|
InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void SelectUpDownArrowOnScrollAreaRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
|
|
{
|
|
if (iReason & MSYS_CALLBACK_REASON_INIT)
|
|
{
|
|
}
|
|
else if( iReason & MSYS_CALLBACK_REASON_LBUTTON_UP || iReason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT )
|
|
{
|
|
UINT8 ubUpArrow = (UINT8)MSYS_GetRegionUserData( pRegion, 0 );
|
|
|
|
if( ubUpArrow )
|
|
{
|
|
if( gbSelectedCity < BOBBYR_ORDER_NUM_SHIPPING_CITIES-1 )
|
|
{
|
|
gbSelectedCity++;
|
|
}
|
|
|
|
if( ( gbSelectedCity - gubCityAtTopOfList ) >= BOBBYR_NUM_DISPLAYED_CITIES )
|
|
{
|
|
gubCityAtTopOfList++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( gbSelectedCity != -1 )
|
|
{
|
|
if( gbSelectedCity > 0 )
|
|
gbSelectedCity--;
|
|
|
|
if( gbSelectedCity < gubCityAtTopOfList )
|
|
gubCityAtTopOfList--;
|
|
}
|
|
}
|
|
|
|
gubDropDownAction = BR_DROP_DOWN_DISPLAY;
|
|
}
|
|
}
|
|
|
|
|
|
void DrawGoldRectangle( INT8 bCityNum )
|
|
{
|
|
UINT32 uiDestPitchBYTES;
|
|
UINT8 *pDestBuf;
|
|
UINT16 usWidth, usTempHeight, usTempPosY, usHeight;
|
|
UINT16 usPosX, usPosY;
|
|
|
|
UINT16 temp;
|
|
|
|
if( bCityNum == -1 )
|
|
bCityNum = 0;
|
|
|
|
usTempPosY = BOBBYR_SCROLL_UP_ARROW_Y;
|
|
usTempPosY += BOBBYR_SCROLL_ARROW_HEIGHT;
|
|
usPosX = BOBBYR_SCROLL_AREA_X;
|
|
usWidth = BOBBYR_SCROLL_AREA_WIDTH - 5;
|
|
usTempHeight = ( BOBBYR_SCROLL_AREA_HEIGHT - 2 * BOBBYR_SCROLL_ARROW_HEIGHT ) - 8;
|
|
|
|
usHeight = usTempHeight / (BOBBYR_ORDER_NUM_SHIPPING_CITIES+1);
|
|
|
|
usPosY = usTempPosY + (UINT16)( ( ( BOBBYR_SCROLL_AREA_HEIGHT - 2 * BOBBYR_SCROLL_ARROW_HEIGHT ) / (FLOAT)(BOBBYR_ORDER_NUM_SHIPPING_CITIES +1) ) * bCityNum );
|
|
|
|
temp = BOBBYR_SCROLL_AREA_Y + BOBBYR_SCROLL_AREA_HEIGHT - BOBBYR_SCROLL_ARROW_HEIGHT - usHeight - 1;
|
|
|
|
if( usPosY >= temp )
|
|
usPosY = BOBBYR_SCROLL_AREA_Y + BOBBYR_SCROLL_AREA_HEIGHT - BOBBYR_SCROLL_ARROW_HEIGHT - usHeight - 5;
|
|
|
|
ColorFillVideoSurfaceArea( FRAME_BUFFER, BOBBYR_SCROLL_AREA_X, usPosY, BOBBYR_SCROLL_AREA_X+usWidth, usPosY+usHeight, Get16BPPColor( FROMRGB( 186, 165, 68 ) ) );
|
|
|
|
//display the line
|
|
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
|
|
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
|
|
|
// draw the gold highlite line on the top and left
|
|
LineDraw(FALSE, usPosX, usPosY, usPosX+usWidth, usPosY, Get16BPPColor( FROMRGB( 235, 222, 171 ) ), pDestBuf);
|
|
LineDraw(FALSE, usPosX, usPosY, usPosX, usPosY+usHeight, Get16BPPColor( FROMRGB( 235, 222, 171 ) ), pDestBuf);
|
|
|
|
// draw the shadow line on the bottom and right
|
|
LineDraw(FALSE, usPosX, usPosY+usHeight, usPosX+usWidth, usPosY+usHeight, Get16BPPColor( FROMRGB( 65, 49, 6 ) ), pDestBuf);
|
|
LineDraw(FALSE, usPosX+usWidth, usPosY, usPosX+usWidth, usPosY+usHeight, Get16BPPColor( FROMRGB( 65, 49, 6 ) ), pDestBuf);
|
|
|
|
// unlock frame buffer
|
|
UnLockVideoSurface( FRAME_BUFFER );
|
|
}
|
|
|
|
|
|
UINT32 CalcCostFromWeightOfPackage( UINT8 ubTypeOfService )
|
|
{
|
|
UINT32 uiTotalWeight = 0;
|
|
UINT16 usStandardCost=0;
|
|
UINT32 uiTotalCost=0;
|
|
|
|
if( gbSelectedCity == -1 )
|
|
{
|
|
// shipping rates unknown until destination selected
|
|
return(0);
|
|
}
|
|
|
|
//Get the package's weight
|
|
uiTotalWeight = CalcPackageTotalWeight();
|
|
|
|
/* for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
{
|
|
//add the current weight to the total
|
|
uiTotalWeight += Item[ BobbyRayPurchases[ i ].usItemIndex ].ubWeight * BobbyRayPurchases[ i ].ubNumberPurchased;
|
|
}
|
|
}
|
|
*/
|
|
Assert ( ubTypeOfService < 3);
|
|
|
|
switch( ubTypeOfService )
|
|
{
|
|
case 0:
|
|
usStandardCost = BobbyROrderLocations[gbSelectedCity].usOverNightExpress;
|
|
break;
|
|
case 1:
|
|
usStandardCost = BobbyROrderLocations[gbSelectedCity].us2DaysService;
|
|
break;
|
|
case 2:
|
|
usStandardCost = BobbyROrderLocations[gbSelectedCity].usStandardService;
|
|
break;
|
|
|
|
default:
|
|
usStandardCost = 0;
|
|
}
|
|
|
|
//Get the actual weight ( either in lbs or metric )
|
|
/// usStandardCost = (UINT16) GetWeightBasedOnMetricOption( usStandardCost );
|
|
|
|
//if the total weight is below a set minimum amount ( 2 kg )
|
|
if( uiTotalWeight < MIN_SHIPPING_WEIGHT )
|
|
{
|
|
//bring up the base cost
|
|
uiTotalWeight = MIN_SHIPPING_WEIGHT;
|
|
}
|
|
|
|
uiTotalCost = (UINT32)( ( uiTotalWeight / (FLOAT)10 ) * usStandardCost + .5 );
|
|
|
|
return( uiTotalCost );
|
|
}
|
|
|
|
void BobbyRayMailOrderEndGameShutDown()
|
|
{
|
|
ShutDownBobbyRNewMailOrders();
|
|
/*
|
|
if( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray )
|
|
{
|
|
MemFree( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray );
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray = NULL;
|
|
}
|
|
*/
|
|
|
|
}
|
|
|
|
void ShutDownBobbyRNewMailOrders()
|
|
{
|
|
if( gpNewBobbyrShipments != NULL )
|
|
{
|
|
MemFree( gpNewBobbyrShipments );
|
|
gpNewBobbyrShipments = NULL;
|
|
}
|
|
giNumberOfNewBobbyRShipment = 0;
|
|
}
|
|
|
|
INT8 CalculateOrderDelay( UINT8 ubSelectedService )
|
|
{
|
|
INT8 bDaysAhead;
|
|
|
|
//get the length of time to receive the shipment
|
|
if( ubSelectedService == 0 )
|
|
{
|
|
bDaysAhead = OVERNIGHT_EXPRESS;
|
|
}
|
|
else if( ubSelectedService == 1 )
|
|
{
|
|
bDaysAhead = TWO_BUSINESS_DAYS;
|
|
}
|
|
else if( ubSelectedService == 2 )
|
|
{
|
|
bDaysAhead = STANDARD_SERVICE;
|
|
}
|
|
else
|
|
{
|
|
bDaysAhead = 0;
|
|
}
|
|
|
|
if ( gMercProfiles[ SAL ].bLife == 0 )
|
|
{
|
|
// Sal is dead, so Pablo is dead, so the airport is badly run
|
|
// CJC comment: this seems really extreme!! maybe delay by 1 day randomly but that's it!
|
|
bDaysAhead += (UINT8) Random( 5 ) + 1;
|
|
}
|
|
|
|
return( bDaysAhead );
|
|
}
|
|
|
|
void PurchaseBobbyOrder()
|
|
{
|
|
//if the shipment is going to Drassen, add the inventory
|
|
if( gbSelectedCity == BR_DRASSEN || gbSelectedCity == BR_MEDUNA )
|
|
{
|
|
// BobbyRayOrderStruct *pBobbyRayPurchase;
|
|
// UINT32 uiResetTimeSec;
|
|
// UINT8 i, ubCount;
|
|
// UINT8 cnt;
|
|
// INT8 bDaysAhead;
|
|
|
|
/*
|
|
//if we need to add more array elements for the Order Array
|
|
if( LaptopSaveInfo.usNumberOfBobbyRayOrderItems <= LaptopSaveInfo.usNumberOfBobbyRayOrderUsed )
|
|
{
|
|
LaptopSaveInfo.usNumberOfBobbyRayOrderItems++;
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray = MemRealloc( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray, sizeof( BobbyRayOrderStruct ) * LaptopSaveInfo.usNumberOfBobbyRayOrderItems );
|
|
if( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray == NULL )
|
|
return;
|
|
|
|
memset( &LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ LaptopSaveInfo.usNumberOfBobbyRayOrderItems - 1 ], 0, sizeof( BobbyRayOrderStruct ) );
|
|
}
|
|
|
|
for( cnt =0; cnt< LaptopSaveInfo.usNumberOfBobbyRayOrderItems; cnt++ )
|
|
{
|
|
//get an empty element in the array
|
|
if( !LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].fActive )
|
|
break;
|
|
}
|
|
*/
|
|
|
|
//gets reset when the confirm order graphic disappears
|
|
gfCanAcceptOrder = FALSE;
|
|
|
|
// pBobbyRayPurchase = MemAlloc( sizeof( BobbyRayOrderStruct ) );
|
|
// memset(pBobbyRayPurchase, 0, sizeof( BobbyRayOrderStruct ) );
|
|
|
|
|
|
|
|
/*
|
|
ubCount = 0;
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
{
|
|
//copy the purchases into the struct that will be added to the queue
|
|
memcpy(&LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].BobbyRayPurchase[ ubCount ] , &BobbyRayPurchases[i], sizeof(BobbyRayPurchaseStruct));
|
|
ubCount ++;
|
|
}
|
|
}
|
|
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].ubNumberPurchases = ubCount;
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].fActive = TRUE;
|
|
LaptopSaveInfo.usNumberOfBobbyRayOrderUsed++;
|
|
*/
|
|
|
|
//add the delivery
|
|
AddNewBobbyRShipment( BobbyRayPurchases, gbSelectedCity, gubSelectedLight, TRUE, CalcPackageTotalWeight() );
|
|
|
|
/*
|
|
//get the length of time to receive the shipment
|
|
bDaysAhead = CalculateOrderDelay( gubSelectedLight );
|
|
|
|
//AddStrategicEvent( EVENT_BOBBYRAY_PURCHASE, uiResetTimeSec, cnt);
|
|
AddFutureDayStrategicEvent( EVENT_BOBBYRAY_PURCHASE, (8 + Random(4) ) * 60, cnt, bDaysAhead );
|
|
*/
|
|
|
|
}
|
|
|
|
//Add the transaction to the finance page
|
|
AddTransactionToPlayersBook(BOBBYR_PURCHASE, 0, GetWorldTotalMin(), -giGrandTotal);
|
|
|
|
//display the confirm order graphic
|
|
gfDrawConfirmOrderGrpahic = TRUE;
|
|
|
|
//Get rid of the city drop dowm, if it is being displayed
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
|
|
MSYS_EnableRegion(&gSelectedConfirmOrderRegion);
|
|
gfRemoveItemsFromStock = TRUE;
|
|
|
|
gbSelectedCity = -1;
|
|
}
|
|
|
|
void AddJohnsGunShipment()
|
|
{
|
|
BobbyRayPurchaseStruct Temp[ MAX_PURCHASE_AMOUNT ];
|
|
// UINT8 cnt;
|
|
INT8 bDaysAhead;
|
|
|
|
//clear out the memory
|
|
memset( Temp, 0, sizeof( BobbyRayPurchaseStruct ) * MAX_PURCHASE_AMOUNT );
|
|
|
|
/*
|
|
//if we need to add more array elements for the Order Array
|
|
if( LaptopSaveInfo.usNumberOfBobbyRayOrderItems <= LaptopSaveInfo.usNumberOfBobbyRayOrderUsed )
|
|
{
|
|
LaptopSaveInfo.usNumberOfBobbyRayOrderItems++;
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray = MemRealloc( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray, sizeof( BobbyRayOrderStruct ) * LaptopSaveInfo.usNumberOfBobbyRayOrderItems );
|
|
if( LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray == NULL )
|
|
return;
|
|
|
|
memset( &LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ LaptopSaveInfo.usNumberOfBobbyRayOrderItems - 1 ], 0, sizeof( BobbyRayOrderStruct ) );
|
|
}
|
|
|
|
for( cnt =0; cnt< LaptopSaveInfo.usNumberOfBobbyRayOrderItems; cnt++ )
|
|
{
|
|
//get an empty element in the array
|
|
if( !LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].fActive )
|
|
break;
|
|
}
|
|
*/
|
|
|
|
// want to add two guns (Automags, AUTOMAG_III), and four clips of ammo.
|
|
|
|
Temp[0].usItemIndex = AUTOMAG_III;
|
|
Temp[0].ubNumberPurchased = 2;
|
|
Temp[0].bItemQuality = 100;
|
|
Temp[0].usBobbyItemIndex = 0;// does this get used anywhere???
|
|
Temp[0].fUsed = FALSE;
|
|
|
|
// memcpy( &(LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].BobbyRayPurchase[0]), &Temp, sizeof(BobbyRayPurchaseStruct) );
|
|
|
|
Temp[1].usItemIndex = CLIP762N_5_AP;
|
|
Temp[1].ubNumberPurchased = 2;
|
|
Temp[1].bItemQuality = 5;
|
|
Temp[1].usBobbyItemIndex = 0;// does this get used anywhere???
|
|
Temp[1].fUsed = FALSE;
|
|
|
|
/*
|
|
memcpy( &(LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].BobbyRayPurchase[1]), &Temp, sizeof(BobbyRayPurchaseStruct) );
|
|
|
|
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].ubNumberPurchases = 2;
|
|
LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].fActive = TRUE;
|
|
LaptopSaveInfo.usNumberOfBobbyRayOrderUsed++;
|
|
*/
|
|
bDaysAhead = CalculateOrderDelay( 2 ) + 2;
|
|
|
|
//add a random amount between so it arrives between 8:00 am and noon
|
|
// AddFutureDayStrategicEvent( EVENT_BOBBYRAY_PURCHASE, (8 + Random(4) ) * 60, cnt, bDaysAhead );
|
|
|
|
//add the delivery ( weight is not needed as it will not be displayed )
|
|
AddNewBobbyRShipment( Temp, BR_DRASSEN, bDaysAhead, FALSE, 0 );
|
|
}
|
|
|
|
|
|
void ConfirmBobbyRPurchaseMessageBoxCallBack( UINT8 bExitValue )
|
|
{
|
|
// yes, load the game
|
|
if( bExitValue == MSG_BOX_RETURN_YES )
|
|
{
|
|
PurchaseBobbyOrder();
|
|
}
|
|
}
|
|
|
|
void EnterInitBobbyRayOrder()
|
|
{
|
|
memset(&BobbyRayPurchases, 0, sizeof(BobbyRayPurchaseStruct) * MAX_PURCHASE_AMOUNT);
|
|
gubSelectedLight = 0;
|
|
gfReDrawBobbyOrder = TRUE;
|
|
gbSelectedCity = -1;
|
|
gubCityAtTopOfList = 0;
|
|
|
|
//Get rid of the city drop dowm, if it is being displayed
|
|
gubDropDownAction = BR_DROP_DOWN_DESTROY;
|
|
|
|
//disable the accept order button
|
|
DisableButton( guiBobbyRAcceptOrder );
|
|
}
|
|
|
|
|
|
UINT32 CalcPackageTotalWeight()
|
|
{
|
|
UINT16 i;
|
|
UINT32 uiTotalWeight=0;
|
|
|
|
//loop through all the packages
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( BobbyRayPurchases[ i ].ubNumberPurchased )
|
|
{
|
|
//add the current weight to the total
|
|
uiTotalWeight += Item[ BobbyRayPurchases[ i ].usItemIndex ].ubWeight * BobbyRayPurchases[ i ].ubNumberPurchased;
|
|
}
|
|
}
|
|
|
|
return( uiTotalWeight );
|
|
}
|
|
|
|
|
|
void DisplayPackageWeight( )
|
|
{
|
|
CHAR16 zTemp[32];
|
|
UINT32 uiTotalWeight = CalcPackageTotalWeight();
|
|
// FLOAT fWeight = (FLOAT)(uiTotalWeight / 10.0);
|
|
|
|
//Display the 'Package Weight' text
|
|
DrawTextToScreen(BobbyROrderFormText[ BOBBYR_PACKAGE_WEIGHT ], BOBBYR_PACKAXGE_WEIGHT_X+8, BOBBYR_PACKAXGE_WEIGHT_Y+4, BOBBYR_PACKAXGE_WEIGHT_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED);
|
|
|
|
//Display the weight
|
|
// swprintf( zTemp, L"%3.1f %s", fWeight, pMessageStrings[ MSG_KILOGRAM_ABBREVIATION ] );
|
|
swprintf( zTemp, L"%3.1f %s", ( GetWeightBasedOnMetricOption( uiTotalWeight ) / 10.0f ), GetWeightUnitString() );
|
|
DrawTextToScreen( zTemp, BOBBYR_PACKAXGE_WEIGHT_X+3, BOBBYR_PACKAXGE_WEIGHT_Y+4, BOBBYR_PACKAXGE_WEIGHT_WIDTH, BOBBYR_ORDER_STATIC_TEXT_FONT, BOBBYR_ORDER_STATIC_TEXT_COLOR, FONT_MCOLOR_BLACK, FALSE, RIGHT_JUSTIFIED);
|
|
}
|
|
|
|
|
|
|
|
void BtnBobbyRGotoShipmentPageCallback(GUI_BUTTON *btn,INT32 reason)
|
|
{
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
|
|
{
|
|
btn->uiFlags |= BUTTON_CLICKED_ON;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
guiCurrentLaptopMode = LAPTOP_MODE_BOBBYR_SHIPMENTS;
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
|
|
{
|
|
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
|
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
|
|
}
|
|
}
|
|
|
|
|
|
BOOLEAN CreateBobbyRayOrderTitle()
|
|
{
|
|
VOBJECT_DESC VObjectDesc;
|
|
|
|
// load BobbyRayTitle graphic and add it
|
|
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
|
|
FilenameForBPP("LAPTOP\\BobbyRayTitle.sti", VObjectDesc.ImageFile);
|
|
CHECKF(AddVideoObject(&VObjectDesc, &guiBobbyRayTitle));
|
|
|
|
//the link to home page from the title
|
|
MSYS_DefineRegion( &gSelectedTitleLinkRegion, BOBBYR_BOBBY_RAY_TITLE_X, BOBBYR_BOBBY_RAY_TITLE_Y, (BOBBYR_BOBBY_RAY_TITLE_X + BOBBYR_BOBBY_RAY_TITLE_WIDTH), (UINT16)(BOBBYR_BOBBY_RAY_TITLE_Y + BOBBYR_BOBBY_RAY_TITLE_HEIGHT), MSYS_PRIORITY_HIGH,
|
|
CURSOR_WWW, MSYS_NO_CALLBACK, SelectTitleLinkRegionCallBack);
|
|
MSYS_AddRegion( &gSelectedTitleLinkRegion );
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
void DestroyBobbyROrderTitle()
|
|
{
|
|
MSYS_RemoveRegion( &gSelectedTitleLinkRegion);
|
|
DeleteVideoObjectFromIndex(guiBobbyRayTitle);
|
|
}
|
|
|
|
void DrawBobbyROrderTitle()
|
|
{
|
|
HVOBJECT hPixHandle;
|
|
|
|
// Bobbyray title
|
|
GetVideoObject(&hPixHandle, guiBobbyRayTitle);
|
|
BltVideoObject(FRAME_BUFFER, hPixHandle, 0, BOBBYR_BOBBY_RAY_TITLE_X, BOBBYR_BOBBY_RAY_TITLE_Y, VO_BLT_SRCTRANSPARENCY,NULL);
|
|
}
|
|
|
|
|
|
BOOLEAN AddNewBobbyRShipment( BobbyRayPurchaseStruct *pPurchaseStruct, UINT8 ubDeliveryLoc, UINT8 ubDeliveryMethod, BOOLEAN fPruchasedFromBobbyR, UINT32 uiPackageWeight )
|
|
{
|
|
INT32 iCnt;
|
|
INT32 iFoundSpot = -1;
|
|
UINT8 ubItemCount=0;
|
|
UINT8 i;
|
|
INT8 bDaysAhead=0;
|
|
// UINT32 uiPackageWeight;
|
|
// gpNewBobbyrShipments = NULL;
|
|
// giNumberOfNewBobbyRShipment = 0;
|
|
|
|
//loop through and see if there is a free spot to insert the new order
|
|
for( iCnt=0; iCnt<giNumberOfNewBobbyRShipment; iCnt++ )
|
|
{
|
|
if( !gpNewBobbyrShipments->fActive )
|
|
{
|
|
iFoundSpot = iCnt;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if( iFoundSpot == -1 )
|
|
{
|
|
//increment the number of spots used
|
|
giNumberOfNewBobbyRShipment++;
|
|
|
|
//allocate some more memory
|
|
gpNewBobbyrShipments = (NewBobbyRayOrderStruct *) MemRealloc( gpNewBobbyrShipments, sizeof( NewBobbyRayOrderStruct ) * giNumberOfNewBobbyRShipment );
|
|
|
|
iFoundSpot = giNumberOfNewBobbyRShipment - 1;
|
|
}
|
|
|
|
//memset the memory
|
|
memset( &gpNewBobbyrShipments[ iFoundSpot ], 0, sizeof( NewBobbyRayOrderStruct ) );
|
|
|
|
gpNewBobbyrShipments[ iFoundSpot ].fActive = TRUE;
|
|
gpNewBobbyrShipments[ iFoundSpot ].ubDeliveryLoc = ubDeliveryLoc;
|
|
gpNewBobbyrShipments[ iFoundSpot ].ubDeliveryMethod = ubDeliveryMethod;
|
|
|
|
if( fPruchasedFromBobbyR )
|
|
gpNewBobbyrShipments[ iFoundSpot ].fDisplayedInShipmentPage = TRUE;
|
|
else
|
|
gpNewBobbyrShipments[ iFoundSpot ].fDisplayedInShipmentPage = FALSE;
|
|
|
|
//get the apckage weight, if the weight is "below" the minimum, use the minimum
|
|
if( uiPackageWeight < MIN_SHIPPING_WEIGHT )
|
|
{
|
|
gpNewBobbyrShipments[ iFoundSpot ].uiPackageWeight = MIN_SHIPPING_WEIGHT;
|
|
}
|
|
else
|
|
{
|
|
gpNewBobbyrShipments[ iFoundSpot ].uiPackageWeight = uiPackageWeight;
|
|
}
|
|
|
|
gpNewBobbyrShipments[ iFoundSpot ].uiOrderedOnDayNum = GetWorldDay();
|
|
|
|
//count the number of purchases
|
|
ubItemCount = 0;
|
|
for(i=0; i<MAX_PURCHASE_AMOUNT; i++)
|
|
{
|
|
//if the item was purchased
|
|
if( pPurchaseStruct[ i ].ubNumberPurchased )
|
|
{
|
|
// copy the new data into the order struct
|
|
memcpy( &gpNewBobbyrShipments[ iFoundSpot ].BobbyRayPurchase[ ubItemCount ], &pPurchaseStruct[i], sizeof( BobbyRayPurchaseStruct ) );
|
|
|
|
//copy the purchases into the struct that will be added to the queue
|
|
// memcpy(&LaptopSaveInfo.BobbyRayOrdersOnDeliveryArray[ cnt ].BobbyRayPurchase[ ubCount ] , &BobbyRayPurchases[i], sizeof(BobbyRayPurchaseStruct));
|
|
ubItemCount++;
|
|
}
|
|
}
|
|
|
|
gpNewBobbyrShipments[ iFoundSpot ].ubNumberPurchases = ubItemCount;
|
|
|
|
|
|
//get the length of time to receive the shipment
|
|
if( fPruchasedFromBobbyR )
|
|
bDaysAhead = CalculateOrderDelay( ubDeliveryMethod );
|
|
else
|
|
bDaysAhead = ubDeliveryMethod;
|
|
|
|
|
|
//AddStrategicEvent( EVENT_BOBBYRAY_PURCHASE, uiResetTimeSec, cnt);
|
|
AddFutureDayStrategicEvent( EVENT_BOBBYRAY_PURCHASE, (8 + Random(4) ) * 60, iFoundSpot, bDaysAhead );
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
UINT16 CountNumberOfBobbyPurchasesThatAreInTransit()
|
|
{
|
|
UINT16 usItemCount=0;
|
|
INT32 iCnt;
|
|
|
|
for( iCnt=0; iCnt<giNumberOfNewBobbyRShipment; iCnt++ )
|
|
{
|
|
if( gpNewBobbyrShipments[iCnt].fActive )
|
|
{
|
|
usItemCount++;
|
|
}
|
|
}
|
|
|
|
return( usItemCount );
|
|
}
|
|
|
|
|
|
|
|
BOOLEAN NewWayOfSavingBobbyRMailOrdersToSaveGameFile( HWFILE hFile )
|
|
{
|
|
INT32 iCnt;
|
|
UINT32 uiNumBytesWritten;
|
|
|
|
//Write the number of orders
|
|
FileWrite( hFile, &giNumberOfNewBobbyRShipment, sizeof( INT32 ), &uiNumBytesWritten );
|
|
if( uiNumBytesWritten != sizeof( INT32 ) )
|
|
{
|
|
FileClose( hFile );
|
|
return( FALSE );
|
|
}
|
|
|
|
//loop through and save all the mail order slots
|
|
for( iCnt=0; iCnt<giNumberOfNewBobbyRShipment; iCnt++ )
|
|
{
|
|
//Write the order
|
|
FileWrite( hFile, &gpNewBobbyrShipments[iCnt], sizeof( NewBobbyRayOrderStruct ), &uiNumBytesWritten );
|
|
if( uiNumBytesWritten != sizeof( NewBobbyRayOrderStruct ) )
|
|
{
|
|
FileClose( hFile );
|
|
return( FALSE );
|
|
}
|
|
}
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
|
|
BOOLEAN NewWayOfLoadingBobbyRMailOrdersToSaveGameFile( HWFILE hFile )
|
|
{
|
|
INT32 iCnt;
|
|
UINT32 uiNumBytesRead;
|
|
|
|
//clear out the old list
|
|
ShutDownBobbyRNewMailOrders();
|
|
|
|
|
|
//Read the number of orders
|
|
FileRead( hFile, &giNumberOfNewBobbyRShipment, sizeof( INT32 ), &uiNumBytesRead );
|
|
if( uiNumBytesRead != sizeof( INT32 ) )
|
|
{
|
|
FileClose( hFile );
|
|
return( FALSE );
|
|
}
|
|
|
|
if ( giNumberOfNewBobbyRShipment == 0 )
|
|
{
|
|
gpNewBobbyrShipments = NULL;
|
|
}
|
|
else
|
|
{
|
|
//Allocate memory for the list
|
|
gpNewBobbyrShipments = (NewBobbyRayOrderStruct *) MemAlloc( sizeof( NewBobbyRayOrderStruct ) * giNumberOfNewBobbyRShipment );
|
|
if( gpNewBobbyrShipments == NULL )
|
|
{
|
|
Assert(0);
|
|
return(FALSE );
|
|
}
|
|
|
|
//loop through and load all the mail order slots
|
|
for( iCnt=0; iCnt<giNumberOfNewBobbyRShipment; iCnt++ )
|
|
{
|
|
//Read the order
|
|
FileRead( hFile, &gpNewBobbyrShipments[iCnt], sizeof( NewBobbyRayOrderStruct ), &uiNumBytesRead );
|
|
if( uiNumBytesRead != sizeof( NewBobbyRayOrderStruct ) )
|
|
{
|
|
FileClose( hFile );
|
|
return( FALSE );
|
|
}
|
|
}
|
|
}
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|