mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Notes: -There may still be bugs!! (In fact, I almost guarantee it -- there's -Ammo box code added to HR's crate code -Splitting a crate/box also automatically refills half empty magazines -new pathing arrows for map screen not included -code for scouts to know where enemies are going doesn't appear to work... but i'm not sure it was completed. -lots of gobledy gook (chinese?) comments turned back to english -also added Bob's popups -other languages besides english still need to have there language.cpp files updated with array changes -AI enhancements by Warmsteel (reloading, suppression, roaming, avoiding gas, and other fixes) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5181 3b4a5df2-a311-0410-b5c6-a8a6f20db521
235 lines
6.6 KiB
C++
235 lines
6.6 KiB
C++
#include "popup_class.h"
|
|
#include "popup_callback.h"
|
|
#include "sgp.h"
|
|
|
|
#include "popup_definition.h"
|
|
#include "Interface Items.h"
|
|
|
|
// for getting psoldier
|
|
#include "Map Screen Interface.h"
|
|
#include "Map Screen Interface Map.h"
|
|
#include "Overhead.h"
|
|
|
|
//////////////////////////////////////
|
|
// popupDef
|
|
//////////////////////////////////////
|
|
|
|
popupDef::popupDef(){}
|
|
|
|
popupDef::~popupDef(){
|
|
for(std::vector<popupDefContent*>::iterator content=this->content.begin(); content != this->content.end(); ++content)
|
|
{
|
|
delete *content;
|
|
}
|
|
}
|
|
|
|
BOOL popupDef::applyToBox(POPUP* popup){
|
|
for(std::vector<popupDefContent*>::iterator content=this->content.begin(); content != this->content.end(); ++content)
|
|
{
|
|
if ( (*content)->addToBox( popup ) != TRUE ) return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL popupDef::addOption(std::wstring* name, UINT16 callbackId, UINT16 availId){
|
|
// TODO: check for vaid callbacl/avail ID
|
|
|
|
this->content.push_back( new popupDefOption(name,callbackId,availId) );
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
popupDef * popupDef::addSubPopup(std::wstring* name){
|
|
|
|
popupDefSubPopupOption * sub = new popupDefSubPopupOption(name);
|
|
|
|
this->content.push_back( sub );
|
|
|
|
return sub->getSubDef();
|
|
}
|
|
|
|
BOOL popupDef::addSubPopup(popupDefSubPopupOption* sub){
|
|
// TODO: add check for max options
|
|
this->content.push_back( sub );
|
|
|
|
return TRUE;
|
|
};
|
|
|
|
BOOL popupDef::addGenerator(UINT16 id){
|
|
// TODO: check for valid generator id
|
|
|
|
this->content.push_back( new popupDefContentGenerator(id) );
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////
|
|
// popupDefContent
|
|
//////////////////////////////////////
|
|
|
|
popupDefContent::popupDefContent(){}
|
|
popupDefContent::~popupDefContent(){}
|
|
|
|
|
|
//////////////////////////////////////
|
|
// popupDefOption helpers
|
|
//////////////////////////////////////
|
|
|
|
static BOOL setPopupDefCallback( POPUP_OPTION * opt, UINT16 callbackId ){
|
|
|
|
// TODO
|
|
opt->setAction(NULL);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
static BOOL setPopupDefAvail( POPUP_OPTION * opt, UINT16 callbackId ){
|
|
|
|
// TODO
|
|
opt->setAvail(NULL);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
//////////////////////////////////////
|
|
// popupDefOption
|
|
//////////////////////////////////////
|
|
/* defined in header file
|
|
popupDefOption::popupDefOption(){}
|
|
popupDefOption::popupDefOption( std::wstring* name, UINT16 callbackId, UINT16 availId ){}
|
|
|
|
~popupDefOption::popupDefOption(){}
|
|
*/
|
|
BOOL popupDefOption::addToBox(POPUP * popup){
|
|
|
|
POPUP_OPTION * opt = new POPUP_OPTION();
|
|
|
|
opt->setName( this->name );
|
|
if ( !setPopupDefCallback(opt, this->callbackId)
|
|
|| !setPopupDefAvail(opt, this->availId) )
|
|
{
|
|
delete opt;
|
|
return false;
|
|
}
|
|
|
|
|
|
return popup->addOption(*opt);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////
|
|
// popupDefSubPopupOption
|
|
//////////////////////////////////////
|
|
/* defined in header file
|
|
popupDefSubPopupOption::popupDefSubPopupOption(){}
|
|
popupDefSubPopupOption::popupDefSubPopupOption( std::wstring* name ){}
|
|
|
|
popupDefSubPopupOption::~popupDefSubPopupOption(){}
|
|
*/
|
|
BOOL popupDefSubPopupOption::addToBox(POPUP * popup){
|
|
|
|
POPUP_SUB_POPUP_OPTION * sub = new POPUP_SUB_POPUP_OPTION( this->name );
|
|
|
|
if( !this->content->applyToBox( sub->subPopup ) ){
|
|
delete sub;
|
|
return false;
|
|
}
|
|
|
|
return popup->addSubMenuOption(sub);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////
|
|
// popupDefContentGenerator helpers
|
|
//////////////////////////////////////
|
|
|
|
/*
|
|
void addArmorToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addLBEToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addWeaponsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addWeaponGroupsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addGrenadesToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addBombsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addFaceGearToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addAmmoToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
|
|
void addRifleGrenadesToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addRocketAmmoToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addDrugsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
*/
|
|
|
|
static BOOL applyPopupContentGenerator( POPUP * popup, UINT16 generatorId ){
|
|
|
|
SOLDIERTYPE *pSoldier;
|
|
GetSoldier( &pSoldier, gCharactersList[ bSelectedInfoChar ].usSolID );
|
|
|
|
switch(generatorId){
|
|
case popupGenerators::dummy:
|
|
popup->addOption(new std::wstring( L"Dummy generator" ),NULL);
|
|
break;
|
|
|
|
case popupGenerators::addArmor:
|
|
addArmorToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addLBE:
|
|
addLBEToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addWeapons:
|
|
addWeaponsToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addWeaponGroups:
|
|
addWeaponGroupsToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addGrenades:
|
|
addGrenadesToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addBombs:
|
|
addBombsToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addFaceGear:
|
|
addFaceGearToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addAmmo:
|
|
addAmmoToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addRifleGrenades:
|
|
addRifleGrenadesToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addRocketAmmo:
|
|
addRocketAmmoToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addMisc:
|
|
addMiscToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
case popupGenerators::addKits:
|
|
addKitsToPocketPopup( pSoldier, gsPocketUnderCursor, popup );
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
//////////////////////////////////////
|
|
// popupDefContentGenerator
|
|
//////////////////////////////////////
|
|
/* defined in header file
|
|
popupDefContentGenerator::popupDefContentGenerator(){}
|
|
popupDefContentGenerator::popupDefContentGenerator( UINT16 generatorId ){}
|
|
|
|
popupDefContentGenerator::~popupDefContentGenerator(){}
|
|
*/
|
|
|
|
BOOL popupDefContentGenerator::addToBox(POPUP * popup){
|
|
|
|
return applyPopupContentGenerator( popup, this->generatorId );
|
|
|
|
}
|
|
|