 
/*******************************************************/
/**** For the structures and variables declarations ****/
/*******************************************************/
#define D_Brain_StructureDefine
#define D_Brain_VariableDefine
 
#include "InitEnum.h"
#include "ToolsCPA.h"
 
#include "Options/Options.h"
#include "Macros.h"
 
#include "Actions/AllActs.h"
 
#include "Structur/MemGame.h"
#include "Structur/EngMode.h"
#include "Structur/ErrGame.h"
#include "Structur/Objects.h"
#include "Structur/GameScpt.h"
#include "Structur/StdObjSt.h"
 
#include "Basic.h"
#include "ObjInit.h"
#include "ZeMem.h"
#include "ObjType.h"
#include "ToolCam.h"
#include "LoadBin.h"
 
/* For BIN*/
#ifdef GAM_USE_SNA
#include "sna.h"
#endif /* GAM_USE_SNA */
 
 
#include "ldt.h"
 
HREF g_hRefBrain;
 
enum{
  iEndCreateVariables,
  iEndIntellModel,
  iEndReflexModel,
  iEndAIModel,
  iEndInitVariables,
  iEndComportIntell,
  iEndComportReflex
};
 
 
/*****************************************************************
Name: 
Description: Create callback for LDT
Author: Mircea Petrescu
Date: 8/24/98
Modified: 
*****************************************************************/
int fn_iCreateBrain( LDT_tdst_Link *pLink )
{
	MS_tdxHandleToBrain h_Brain;
	struct tdstEngineObject_ *p_stEngineObject=(struct tdstEngineObject_ *)pLink->pParent->pObject;
 
    MMG_fn_vBeginMemoryInfo (MMG_C_lTypeMiniStructure , MMG_C_lSubTypeBrain , p_stEngineObject);
	h_Brain = fn_h_BrainRealAlloc();
    MMG_fn_vEndMemoryInfo ();
 
	p_stEngineObject->h_Brain=h_Brain;
 
 
  pLink->pObject=(void *)h_Brain;
  return 0;
}
 
int fn_iLoadBrain( LDT_tdst_Link *pLink )
{
  LDT_tdeParseResult result=ParseResult_BeginSection;
 
	MS_tdxHandleToBrain h_Brain = (MS_tdxHandleToBrain)pLink->pObject;
	AI_tdstMind *p_stMind;
	struct tdstEngineObject_ *p_stEngineObject=(struct tdstEngineObject_ *)pLink->pParent->pObject;
 
	char szIntellFileName[_MAX_PATH];
	char *szModelName;
	char *szFamilyName;
 
	p_stMind = M_pstGetMindOfBrain(h_Brain);
		
	szModelName  = fn_szFindModelTypeNameOfModelType(M_ObjectGetModelType(p_stEngineObject));
	szFamilyName = fn_szFindFamilyTypeNameOfFamilyType(M_ObjectGetFamilyType(p_stEngineObject));
 
 
  AI_M_SetPersoName(p_stMind, fn_szFindPersonalTypeNameOfPersonalType(M_ObjectGetPersonalType(p_stEngineObject)));
  LDT_SetLinkValue( pLink, (unsigned long)p_stMind );
 
	do{
		result=LDT_GetNextEntry();
		if( result== ParseResult_BeginSection )
			LDT_LoadSection( NULL );
	}while ( result!=ParseResult_EndSection );
 
	sprintf(szIntellFileName,"%s\\%s\\%s.ai",szFamilyName,szModelName,szModelName);
	/* read an .ai file		*/
	fn_vReadAI(p_stMind, szIntellFileName,p_stEngineObject );
 
 	/* alloc intelligence and link it with its script*/
	LDT_AddToRefsTable( g_hRefBrain, pLink, iEndAIModel, 0 );
 
 
  return 0;
}
 
/* LoadBrain =>Default*/
/* fn_vReadAI => ai\aibase\specif\readrule.c fn_vReadAIModel */
/* OS Note : fn_vReadAIModel > this function need to be changed for reading of .ai files with LDT instead of SCR*/
void AI_PostProcessLDT( HREF );
 
void fn_vBrainPostProcessLDT( HREF hRef )
{
  AI_PostProcessLDT(hRef);
}
 
 
