MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / vfLoadEF

Method vfLoadEF

ogsr_engine/xrGame/ef_pattern.cpp:43–116  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43void CPatternFunction::vfLoadEF(LPCSTR caFileName)
44{
45 string_path caPath;
46 if (!FS.exist(caPath, "$game_ai$", caFileName))
47 {
48 Msg("! Evaluation function : File not found \"%s\"", caPath);
49 R_ASSERT(false);
50 return;
51 }
52
53 IReader* F = FS.r_open(caPath);
54 F->r(&m_tEFHeader, sizeof(SEFHeader));
55
56 if (EFC_VERSION != m_tEFHeader.dwBuilderVersion)
57 {
58 FS.r_close(F);
59 Msg("! Evaluation function (%s) : Not supported version of the Evaluation Function Contructor", caPath);
60 R_ASSERT(false);
61 return;
62 }
63
64 F->r(&m_dwVariableCount, sizeof(m_dwVariableCount));
65 m_dwaAtomicFeatureRange = xr_alloc<u32>(m_dwVariableCount);
66 ZeroMemory(m_dwaAtomicFeatureRange, m_dwVariableCount * sizeof(u32));
67 u32* m_dwaAtomicIndexes = xr_alloc<u32>(m_dwVariableCount);
68 ZeroMemory(m_dwaAtomicIndexes, m_dwVariableCount * sizeof(u32));
69
70 for (u32 i = 0; i < m_dwVariableCount; ++i)
71 {
72 F->r(m_dwaAtomicFeatureRange + i, sizeof(u32));
73 if (i)
74 m_dwaAtomicIndexes[i] = m_dwaAtomicIndexes[i - 1] + m_dwaAtomicFeatureRange[i - 1];
75 }
76
77 m_dwaVariableTypes = xr_alloc<u32>(m_dwVariableCount);
78 F->r(m_dwaVariableTypes, m_dwVariableCount * sizeof(u32));
79
80 F->r(&m_dwFunctionType, sizeof(u32));
81
82 F->r(&m_fMinResultValue, sizeof(float));
83 F->r(&m_fMaxResultValue, sizeof(float));
84
85 F->r(&m_dwPatternCount, sizeof(m_dwPatternCount));
86 m_tpPatterns = xr_alloc<SPattern>(m_dwPatternCount);
87 m_dwaPatternIndexes = xr_alloc<u32>(m_dwPatternCount);
88 ZeroMemory(m_dwaPatternIndexes, m_dwPatternCount * sizeof(u32));
89 m_dwParameterCount = 0;
90 for (u32 i = 0; i < m_dwPatternCount; ++i)
91 {
92 if (i)
93 m_dwaPatternIndexes[i] = m_dwParameterCount;
94 F->r(&(m_tpPatterns[i].dwCardinality), sizeof(m_tpPatterns[i].dwCardinality));
95 m_tpPatterns[i].dwaVariableIndexes = xr_alloc<u32>(m_tpPatterns[i].dwCardinality);
96 F->r(m_tpPatterns[i].dwaVariableIndexes, m_tpPatterns[i].dwCardinality * sizeof(u32));
97 u32 m_dwComplexity = 1;
98 for (int j = 0; j < (int)m_tpPatterns[i].dwCardinality; ++j)
99 m_dwComplexity *= m_dwaAtomicFeatureRange[m_tpPatterns[i].dwaVariableIndexes[j]];
100 m_dwParameterCount += m_dwComplexity;

Callers

nothing calls this directly

Calls 7

MsgFunction · 0.85
ZeroMemoryFunction · 0.85
xr_freeFunction · 0.85
existMethod · 0.80
r_openMethod · 0.80
r_closeMethod · 0.80
rMethod · 0.45

Tested by

no test coverage detected