Use ModeQueue and ModeImmediate instead of maybeDeleteTemplateFromProduction and reallyDeleteTemplateFromProduction.
parent
fcdba754c4
commit
d8ec229ec6
|
@ -4121,7 +4121,7 @@ void intProcessDesign(UDWORD id)
|
|||
|
||||
// Delete the template.
|
||||
//before deleting the template, need to make sure not being used in production
|
||||
deleteTemplateFromProduction(psTempl, (UBYTE)selectedPlayer);
|
||||
deleteTemplateFromProduction(psTempl, selectedPlayer, ModeQueue);
|
||||
free(psTempl);
|
||||
|
||||
/* get previous template and set as current */
|
||||
|
@ -4653,7 +4653,7 @@ static BOOL saveTemplate(void)
|
|||
newTemplate = false;
|
||||
/*ANY change to the template affect the production - even if the
|
||||
template is changed and then changed back again!*/
|
||||
deleteTemplateFromProduction(psTempl, (UBYTE)selectedPlayer);
|
||||
deleteTemplateFromProduction(psTempl, selectedPlayer, ModeQueue);
|
||||
SendDestroyTemplate(psTempl);
|
||||
sCurrDesign.multiPlayerID = generateNewObjectId();
|
||||
}
|
||||
|
|
24
src/droid.c
24
src/droid.c
|
@ -4539,7 +4539,7 @@ BOOL checkValidWeaponForProp(DROID_TEMPLATE *psTemplate)
|
|||
}
|
||||
|
||||
/*called when a Template is deleted in the Design screen*/
|
||||
static void maybeDeleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player, bool really)
|
||||
void deleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player, QUEUE_MODE mode)
|
||||
{
|
||||
STRUCTURE *psStruct;
|
||||
UDWORD inc, i;
|
||||
|
@ -4588,7 +4588,7 @@ static void maybeDeleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE
|
|||
// check not being built in the factory for the template player
|
||||
if (psTemplate->multiPlayerID == ((DROID_TEMPLATE *)psFactory->psSubject)->multiPlayerID)
|
||||
{
|
||||
if (really)
|
||||
if (mode == ModeImmediate)
|
||||
{
|
||||
syncDebugStructure(psStruct, '<');
|
||||
syncDebug("Clearing production");
|
||||
|
@ -4625,14 +4625,14 @@ static void maybeDeleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE
|
|||
}
|
||||
else
|
||||
{
|
||||
DROID_TEMPLATE *template = (DROID_TEMPLATE *)malloc(sizeof(DROID_TEMPLATE));
|
||||
DROID_TEMPLATE *oldTemplate = (DROID_TEMPLATE *)malloc(sizeof(DROID_TEMPLATE));
|
||||
debug(LOG_ERROR, "TODO: Fix this memory leak when deleting templates.");
|
||||
|
||||
*template = *(DROID_TEMPLATE *)psFactory->psSubject;
|
||||
template->pName = NULL;
|
||||
template->psNext = NULL;
|
||||
*oldTemplate = *(DROID_TEMPLATE *)psFactory->psSubject;
|
||||
oldTemplate->pName = NULL;
|
||||
oldTemplate->psNext = NULL;
|
||||
|
||||
psFactory->psSubject = (BASE_STATS *)template;
|
||||
psFactory->psSubject = (BASE_STATS *)oldTemplate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4640,16 +4640,6 @@ static void maybeDeleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE
|
|||
}
|
||||
}
|
||||
|
||||
void deleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player)
|
||||
{
|
||||
maybeDeleteTemplateFromProduction(psTemplate, player, false);
|
||||
}
|
||||
|
||||
void reallyDeleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player)
|
||||
{
|
||||
maybeDeleteTemplateFromProduction(psTemplate, player, true);
|
||||
}
|
||||
|
||||
|
||||
// Select a droid and do any necessary housekeeping.
|
||||
//
|
||||
|
|
|
@ -373,8 +373,7 @@ extern BOOL checkValidWeaponForProp(DROID_TEMPLATE *psTemplate);
|
|||
extern const char *getDroidNameForRank(UDWORD rank);
|
||||
|
||||
/*called when a Template is deleted in the Design screen*/
|
||||
extern void deleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player);
|
||||
extern void reallyDeleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player);
|
||||
extern void deleteTemplateFromProduction(DROID_TEMPLATE *psTemplate, UBYTE player, QUEUE_MODE mode);
|
||||
|
||||
// Select a droid and do any necessary housekeeping.
|
||||
extern void SelectDroid(DROID *psDroid);
|
||||
|
|
|
@ -1589,14 +1589,14 @@ static BOOL recvDestroyTemplate(NETQUEUE queue)
|
|||
|
||||
// Delete the template.
|
||||
//before deleting the template, need to make sure not being used in production
|
||||
reallyDeleteTemplateFromProduction(psTempl, player);
|
||||
deleteTemplateFromProduction(psTempl, player, ModeImmediate);
|
||||
free(psTempl);
|
||||
}
|
||||
else
|
||||
{
|
||||
DROID_TEMPLATE aaargh;
|
||||
aaargh.multiPlayerID = templateID;
|
||||
reallyDeleteTemplateFromProduction(&aaargh, player);
|
||||
deleteTemplateFromProduction(&aaargh, player, ModeImmediate);
|
||||
debug(LOG_ERROR, "TODO: Rewrite the whole interface, so it's possible to change the code without spaghetti dependencies causing problems everywhere, and without resorting to ugly hacks.");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue