From 896a821fe5b673c6689e110d26fedfa4c22ae51b Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Sun, 19 Apr 2020 00:08:33 +0800 Subject: [PATCH] add environment exporter(semi-finished) --- .../SuperScriptMaterializer.vcxproj | 2 + .../SuperScriptMaterializer.vcxproj.filters | 6 + SuperScriptMaterializer/database.cpp | 237 ++++++++++++------ SuperScriptMaterializer/database.h | 50 +++- SuperScriptMaterializer/env_export.cpp | 41 +++ SuperScriptMaterializer/env_export.h | 9 + SuperScriptMaterializer/script_export.cpp | 30 +-- SuperScriptMaterializer/script_export.h | 30 +-- SuperScriptMaterializer/vt_menu.cpp | 73 ++++-- 9 files changed, 335 insertions(+), 143 deletions(-) create mode 100644 SuperScriptMaterializer/env_export.cpp create mode 100644 SuperScriptMaterializer/env_export.h diff --git a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj index 14361ed..ec72234 100644 --- a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj +++ b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj @@ -93,6 +93,7 @@ + @@ -100,6 +101,7 @@ + diff --git a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj.filters b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj.filters index fbdf3d9..1f7cfaa 100644 --- a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj.filters +++ b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj.filters @@ -30,6 +30,9 @@ 头文件 + + 头文件 + @@ -44,6 +47,9 @@ 源文件 + + 源文件 + diff --git a/SuperScriptMaterializer/database.cpp b/SuperScriptMaterializer/database.cpp index 2e420d3..68ba519 100644 --- a/SuperScriptMaterializer/database.cpp +++ b/SuperScriptMaterializer/database.cpp @@ -2,7 +2,7 @@ #pragma region helper -void dbDataStructHelper::init(CKParameterManager* paramManager) { +void dbScriptDataStructHelper::init(CKParameterManager* paramManager) { _dbCKBehavior = new dbCKBehavior(); _dbCKScript = new dbCKScript(); _db_pTarget = new db_pTarget(); @@ -19,7 +19,7 @@ void dbDataStructHelper::init(CKParameterManager* paramManager) { _parameterManager = paramManager; } -void dbDataStructHelper::dispose() { +void dbScriptDataStructHelper::dispose() { delete _dbCKBehavior; delete _dbCKScript; delete _db_pTarget; @@ -36,6 +36,14 @@ void dbDataStructHelper::dispose() { _parameterManager = NULL; } +void dbEnvDataStructHelper::init() { + _db_envOp = new db_envOp; +} + +void dbEnvDataStructHelper::dispose() { + delete _db_envOp; +} + #pragma endregion @@ -51,68 +59,8 @@ void database::open(const char* file) { result = sqlite3_open(file, &db); if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, "PRAGMA synchronous = OFF;", NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; + if (!init()) goto fail; - //init table - result = sqlite3_exec(db, - "CREATE TABLE script([thisobj] INTEGER, [name] TEXT, [index] INTEGER, [behavior] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE behavior([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [proto_name] TEXT, [proto_guid] TEXT, [flags] INTEGER, [priority] INTEGER, [version] INTEGER, [pin_count] TEXT, [parent] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pTarget([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [belong_to] INTEGER, [direct_source] INTEGER, [shard_source] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pIn([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [belong_to] INTEGER, [direct_source] INTEGER, [shard_source] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pOut([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE bIn([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE bOut([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE bLink([input] INTEGER, [output] INTEGER, [delay] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_index] INETEGR, [output_obj] INTEGER, [output_type] INTEGER, [output_index] INETEGR, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pLocal([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [is_setting] INTEGER, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pLocalData([field] TEXT, [data] TEXT, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pLink([input] INTEGER, [output] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_is_bb] INTEGER, [input_index] INETEGR, [output_obj] INTEGER, [output_type] INTEGER, [output_is_bb] INTEGER, [output_index] INETEGR, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE pOper([thisobj] INTEGER, [op] TEXT, [op_guid] TEXT, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - result = sqlite3_exec(db, - "CREATE TABLE eLink([export_obj] INTEGER, [internal_obj] INTEGER, [is_in] INTEGER, [index] INTEGER, [belong_to] INTEGER);", - NULL, NULL, &errmsg); - if (result != SQLITE_OK) goto fail; - - - //start job - sqlite3_exec(db, "begin;", NULL, NULL, &errmsg); - - //return return; fail: db = NULL; @@ -121,6 +69,88 @@ fail: void database::close() { if (db == NULL) return; + finalJob(); + + //release res + sqlite3_close(db); + db = NULL; + + free(errmsg); + free(commandStr); +} + +BOOL scriptDatabase::init() { + int result; + result = sqlite3_exec(db, "PRAGMA synchronous = OFF;", NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + //init table + result = sqlite3_exec(db, "begin;", NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + result = sqlite3_exec(db, + "CREATE TABLE script([thisobj] INTEGER, [name] TEXT, [index] INTEGER, [behavior] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE behavior([thisobj] INTEGER, [name] TEXT, [type] INTEGER, [proto_name] TEXT, [proto_guid] TEXT, [flags] INTEGER, [priority] INTEGER, [version] INTEGER, [pin_count] TEXT, [parent] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pTarget([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [belong_to] INTEGER, [direct_source] INTEGER, [shard_source] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pIn([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [belong_to] INTEGER, [direct_source] INTEGER, [shard_source] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pOut([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE bIn([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE bOut([thisobj] INTEGER, [index] INTEGER, [name] TEXT, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE bLink([input] INTEGER, [output] INTEGER, [delay] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_index] INETEGR, [output_obj] INTEGER, [output_type] INTEGER, [output_index] INETEGR, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pLocal([thisobj] INTEGER, [name] TEXT, [type] TEXT, [type_guid] TEXT, [is_setting] INTEGER, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pLocalData([field] TEXT, [data] TEXT, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pLink([input] INTEGER, [output] INTEGER, [input_obj] INTEGER, [input_type] INTEGER, [input_is_bb] INTEGER, [input_index] INETEGR, [output_obj] INTEGER, [output_type] INTEGER, [output_is_bb] INTEGER, [output_index] INETEGR, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE pOper([thisobj] INTEGER, [op] TEXT, [op_guid] TEXT, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + result = sqlite3_exec(db, + "CREATE TABLE eLink([export_obj] INTEGER, [internal_obj] INTEGER, [is_in] INTEGER, [index] INTEGER, [belong_to] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + result = sqlite3_exec(db, "commit;", NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + //start job + sqlite3_exec(db, "begin;", NULL, NULL, &errmsg); + + return TRUE; +} + +BOOL scriptDatabase::finalJob() { //stop job sqlite3_exec(db, "commit;", NULL, NULL, &errmsg); @@ -132,19 +162,44 @@ void database::close() { sqlite3_exec(db, "CREATE INDEX [quick_where4] ON pOut (thisobj)", NULL, NULL, &errmsg); sqlite3_exec(db, "commit;", NULL, NULL, &errmsg);*/ - //release res - sqlite3_close(db); - db = NULL; + return TRUE; +} - free(errmsg); - free(commandStr); +BOOL envDatabase::init() { + int result; + result = sqlite3_exec(db, "PRAGMA synchronous = OFF;", NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + //init table + result = sqlite3_exec(db, "begin;", NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + result = sqlite3_exec(db, + "CREATE TABLE op([funcptr] INTEGER, [in1_guid_1] INTEGER, [in1_guid_2] INTEGER, [in2_guid_1] INTEGER, [in2_guid_2] INTEGER, [out_guid_1] INTEGER, [out_guid_2] INTEGER, [op_guid_1] INTEGER, [op_guid_2] INTEGER, [op_name] TEXT, [op_code] INTEGER);", + NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + result = sqlite3_exec(db, "commit;", NULL, NULL, &errmsg); + if (result != SQLITE_OK) return FALSE; + + //start job + sqlite3_exec(db, "begin;", NULL, NULL, &errmsg); + + return TRUE; +} + +BOOL envDatabase::finalJob() { + //stop job + sqlite3_exec(db, "commit;", NULL, NULL, &errmsg); + + return TRUE; } #pragma endregion #pragma region write func -void database::write_CKBehavior(dbCKBehavior* data) { +void scriptDatabase::write_CKBehavior(dbCKBehavior* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO behavior VALUES (%d, '%s', %d, '%s', '%d, %d', %d, %d, %d, '%s', %d);", @@ -163,7 +218,7 @@ void database::write_CKBehavior(dbCKBehavior* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_CKScript(dbCKScript* data) { +void scriptDatabase::write_CKScript(dbCKScript* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO script VALUES (%d, '%s', %d, %d);", @@ -175,7 +230,7 @@ void database::write_CKScript(dbCKScript* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pTarget(db_pTarget* data) { +void scriptDatabase::write_pTarget(db_pTarget* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pTarget VALUES (%d, '%s', '%s', '%d, %d', %d, %d, %d);", @@ -191,7 +246,7 @@ void database::write_pTarget(db_pTarget* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pIn(db_pIn* data) { +void scriptDatabase::write_pIn(db_pIn* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pIn VALUES (%d, %d, '%s', '%s', '%d, %d', %d, %d, %d);", @@ -208,7 +263,7 @@ void database::write_pIn(db_pIn* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pOut(db_pOut* data) { +void scriptDatabase::write_pOut(db_pOut* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pOut VALUES (%d, %d, '%s', '%s', '%d, %d', %d);", @@ -223,7 +278,7 @@ void database::write_pOut(db_pOut* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_bIn(db_bIn* data) { +void scriptDatabase::write_bIn(db_bIn* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO bIn VALUES (%d, %d, '%s', %d);", @@ -235,7 +290,7 @@ void database::write_bIn(db_bIn* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_bOut(db_bOut* data) { +void scriptDatabase::write_bOut(db_bOut* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO bOut VALUES (%d, %d, '%s', %d);", @@ -247,7 +302,7 @@ void database::write_bOut(db_bOut* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_bLink(db_bLink* data) { +void scriptDatabase::write_bLink(db_bLink* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO bLink VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d);", @@ -265,7 +320,7 @@ void database::write_bLink(db_bLink* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pLocal(db_pLocal* data) { +void scriptDatabase::write_pLocal(db_pLocal* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pLocal VALUES (%d, '%s', '%s', '%d, %d', %d, %d);", @@ -280,7 +335,7 @@ void database::write_pLocal(db_pLocal* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pLink(db_pLink* data) { +void scriptDatabase::write_pLink(db_pLink* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pLink VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d);", @@ -299,7 +354,7 @@ void database::write_pLink(db_pLink* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pLocalData(db_pLocalData* data) { +void scriptDatabase::write_pLocalData(db_pLocalData* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pLocalData VALUES ('%s', '%s', %d);", @@ -310,7 +365,7 @@ void database::write_pLocalData(db_pLocalData* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_pOper(db_pOper* data) { +void scriptDatabase::write_pOper(db_pOper* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO pOper VALUES (%d, '%s', '%d, %d', %d);", @@ -323,7 +378,7 @@ void database::write_pOper(db_pOper* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } -void database::write_eLink(db_eLink* data) { +void scriptDatabase::write_eLink(db_eLink* data) { if (db == NULL) return; sprintf(commandStr, "INSERT INTO eLink VALUES (%d, %d, %d, %d, %d);", @@ -336,4 +391,24 @@ void database::write_eLink(db_eLink* data) { sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); } +void envDatabase::write_envOp(db_envOp* data) { + if (db == NULL) return; + + sprintf(commandStr, "INSERT INTO op VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d, '%s', %d);", + data->funcPtr, + data->in1_guid[0], + data->in1_guid[1], + data->in2_guid[0], + data->in2_guid[1], + data->out_guid[0], + data->out_guid[1], + data->op_guid[0], + data->op_guid[1], + data->op_name, + data->op_code); + + sqlite3_exec(db, commandStr, NULL, NULL, &errmsg); +} + + #pragma endregion diff --git a/SuperScriptMaterializer/database.h b/SuperScriptMaterializer/database.h index b3eb892..3aeabf5 100644 --- a/SuperScriptMaterializer/database.h +++ b/SuperScriptMaterializer/database.h @@ -139,9 +139,21 @@ typedef struct { EXPAND_CK_ID belong_to; }db_eLink; + + +typedef struct { + CK_PARAMETEROPERATION funcPtr; + CKDWORD in1_guid[2]; + CKDWORD in2_guid[2]; + CKDWORD out_guid[2]; + CKDWORD op_guid[2]; + char op_name[1024]; + CKOperationType op_code; +}db_envOp; + #pragma endregion -class dbDataStructHelper { +class dbScriptDataStructHelper { public: void init(CKParameterManager* paramManager); void dispose(); @@ -162,11 +174,31 @@ class dbDataStructHelper { db_eLink* _db_eLink; }; +class dbEnvDataStructHelper { + public: + void init(); + void dispose(); + + db_envOp* _db_envOp; +}; + + class database { public: void open(const char* file); void close(); + protected: + virtual BOOL init() { return TRUE; } + virtual BOOL finalJob() { return TRUE; } + + sqlite3* db; + char* errmsg; + char* commandStr; +}; + +class scriptDatabase : public database { + public: void write_CKBehavior(dbCKBehavior* data); void write_CKScript(dbCKScript* data); void write_pTarget(db_pTarget* data); @@ -181,10 +213,18 @@ class database { void write_pOper(db_pOper* data); void write_eLink(db_eLink* data); - private: - sqlite3* db; - char* errmsg; - char* commandStr; + protected: + BOOL init(); + BOOL finalJob(); +}; + +class envDatabase : public database { + public: + void write_envOp(db_envOp* data); + + protected: + BOOL init(); + BOOL finalJob(); }; #endif \ No newline at end of file diff --git a/SuperScriptMaterializer/env_export.cpp b/SuperScriptMaterializer/env_export.cpp new file mode 100644 index 0000000..b0f12a9 --- /dev/null +++ b/SuperScriptMaterializer/env_export.cpp @@ -0,0 +1,41 @@ +#include "env_export.h" +//disable shit tip +#pragma warning(disable:26812) + +void IterateParameterOperation(CKParameterManager* parameterManager, envDatabase* db, dbEnvDataStructHelper* helper) { + int count = parameterManager->GetParameterOperationCount(); + CKOperationDesc* opList = NULL; + int listCount = 0, cacheListCount = 0; + CKGUID _guid; + for (int i = 0; i < count; i++) { + //fill basic data + helper->_db_envOp->op_code = i; + _guid = parameterManager->OperationCodeToGuid(i); + helper->_db_envOp->op_guid[0] = _guid.d1; + helper->_db_envOp->op_guid[1] = _guid.d2; + strcpy(helper->_db_envOp->op_name, parameterManager->OperationCodeToName(i)); + + //allocate mem + cacheListCount = parameterManager->GetAvailableOperationsDesc(_guid, NULL, NULL, NULL, NULL); + if (cacheListCount > listCount) { + listCount = cacheListCount; + opList = (CKOperationDesc*)realloc(opList, listCount * sizeof(CKOperationDesc)); + assert(opList != NULL); + } + + parameterManager->GetAvailableOperationsDesc(_guid, NULL, NULL, NULL, opList); + for (int j = 0; j < cacheListCount; j++) { + helper->_db_envOp->in1_guid[0] = opList[j].P1Guid.d1; + helper->_db_envOp->in1_guid[1] = opList[j].P1Guid.d2; + helper->_db_envOp->in2_guid[0] = opList[j].P2Guid.d1; + helper->_db_envOp->in2_guid[1] = opList[j].P2Guid.d2; + helper->_db_envOp->out_guid[0] = opList[j].ResGuid.d1; + helper->_db_envOp->out_guid[1] = opList[j].ResGuid.d2; + helper->_db_envOp->funcPtr = opList[j].Fct; + + db->write_envOp(helper->_db_envOp); + } + } + if (opList != NULL) free(opList); + +} \ No newline at end of file diff --git a/SuperScriptMaterializer/env_export.h b/SuperScriptMaterializer/env_export.h new file mode 100644 index 0000000..8c58c4f --- /dev/null +++ b/SuperScriptMaterializer/env_export.h @@ -0,0 +1,9 @@ +#if !defined(_YYCDLL_HELP_EXPORT_H__IMPORTED_) +#define _YYCDLL_HELP_EXPORT_H__IMPORTED_ + +#include "stdafx.h" +#include "database.h" + +void IterateParameterOperation(CKParameterManager* parameterManager, envDatabase* db, dbEnvDataStructHelper* helper); + +#endif \ No newline at end of file diff --git a/SuperScriptMaterializer/script_export.cpp b/SuperScriptMaterializer/script_export.cpp index 8890a01..d550857 100644 --- a/SuperScriptMaterializer/script_export.cpp +++ b/SuperScriptMaterializer/script_export.cpp @@ -6,7 +6,7 @@ #pragma region inline func -inline void generate_pLink_in_pIn(CKContext* ctx, CKParameterIn* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB, BOOL isTarget) { +inline void generate_pLink_in_pIn(CKContext* ctx, CKParameterIn* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB, BOOL isTarget) { //WARNING: i only choose one between [DirectSource] and [SharedSource] bucause i don't find any pIn both have these two field CKParameter* directSource = NULL; CKObject* ds_Owner = NULL; @@ -71,7 +71,7 @@ inline void generate_pLink_in_pIn(CKContext* ctx, CKParameterIn* cache, database } } -inline void proc_pTarget(CKContext* ctx, CKParameterIn* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents) { +inline void proc_pTarget(CKContext* ctx, CKParameterIn* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents) { helper->_db_pTarget->thisobj = cache->GetID(); strcpy(helper->_db_pTarget->name, cache->GetName()); strcpy(helper->_db_pTarget->type, helper->_parameterManager->ParameterTypeToName(cache->GetType())); @@ -87,7 +87,7 @@ inline void proc_pTarget(CKContext* ctx, CKParameterIn* cache, database* db, dbD generate_pLink_in_pIn(ctx, cache, db, helper, parents, grandparents, -1, TRUE, TRUE); } -inline void proc_pIn(CKContext* ctx, CKParameterIn* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB) { +inline void proc_pIn(CKContext* ctx, CKParameterIn* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB) { helper->_db_pIn->thisobj = cache->GetID(); helper->_db_pIn->index = index; strcpy(helper->_db_pIn->name, cache->GetName()); @@ -119,7 +119,7 @@ inline void proc_pIn(CKContext* ctx, CKParameterIn* cache, database* db, dbDataS } -inline void proc_pOut(CKContext* ctx, CKParameterOut* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB) { +inline void proc_pOut(CKContext* ctx, CKParameterOut* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB) { helper->_db_pOut->thisobj = cache->GetID(); helper->_db_pOut->index = index; strcpy(helper->_db_pOut->name, cache->GetName()); @@ -181,7 +181,7 @@ inline void proc_pOut(CKContext* ctx, CKParameterOut* cache, database* db, dbDat } } -inline void proc_bIn(CKBehaviorIO* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, int index) { +inline void proc_bIn(CKBehaviorIO* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, int index) { helper->_db_bIn->thisobj = cache->GetID(); helper->_db_bIn->index = index; strcpy(helper->_db_bIn->name, cache->GetName()); @@ -190,7 +190,7 @@ inline void proc_bIn(CKBehaviorIO* cache, database* db, dbDataStructHelper* help db->write_bIn(helper->_db_bIn); } -inline void proc_bOut(CKBehaviorIO* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, int index) { +inline void proc_bOut(CKBehaviorIO* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, int index) { helper->_db_bOut->thisobj = cache->GetID(); helper->_db_bOut->index = index; strcpy(helper->_db_bOut->name, cache->GetName()); @@ -199,7 +199,7 @@ inline void proc_bOut(CKBehaviorIO* cache, database* db, dbDataStructHelper* hel db->write_bOut(helper->_db_bOut); } -inline void proc_bLink(CKBehaviorLink* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +inline void proc_bLink(CKBehaviorLink* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { CKBehaviorIO* io = cache->GetInBehaviorIO(); CKBehavior* beh = io->GetOwner(); helper->_db_bLink->input = io->GetID(); @@ -219,7 +219,7 @@ inline void proc_bLink(CKBehaviorLink* cache, database* db, dbDataStructHelper* db->write_bLink(helper->_db_bLink); } -inline void proc_pLocal(CKParameterLocal* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, BOOL is_setting) { +inline void proc_pLocal(CKParameterLocal* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, BOOL is_setting) { helper->_db_pLocal->thisobj = cache->GetID(); strcpy(helper->_db_pLocal->name, cache->GetName() ? cache->GetName() : ""); CKParameterType vaildTypeChecker = cache->GetType(); @@ -236,7 +236,7 @@ inline void proc_pLocal(CKParameterLocal* cache, database* db, dbDataStructHelpe IteratepLocalData(cache, db, helper, cache->GetID()); } -inline void proc_pOper(CKContext* ctx, CKParameterOperation* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +inline void proc_pOper(CKContext* ctx, CKParameterOperation* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { helper->_db_pOper->thisobj = cache->GetID(); strcpy(helper->_db_pOper->op, helper->_parameterManager->OperationGuidToName(cache->GetOperationGuid())); helper->_db_pOper->op_guid[0] = cache->GetOperationGuid().d1; @@ -253,19 +253,19 @@ inline void proc_pOper(CKContext* ctx, CKParameterOperation* cache, database* db //============================helper for pLocal data export -inline void helper_pLocalDataExport(const char* field, const char* data, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +inline void helper_pLocalDataExport(const char* field, const char* data, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { strcpy(helper->_db_pLocalData->field, field); strcpy(helper->_db_pLocalData->data, data); helper->_db_pLocalData->belong_to = parents; db->write_pLocalData(helper->_db_pLocalData); } -inline void helper_pLocalDataExport(const char* field, float data, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +inline void helper_pLocalDataExport(const char* field, float data, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { char str[32]; sprintf(str, "%f", data); helper_pLocalDataExport(field, str, db, helper, parents); } -inline void helper_pLocalDataExport(const char* field, long data, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +inline void helper_pLocalDataExport(const char* field, long data, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { char str[32]; ltoa(data, str, 10); helper_pLocalDataExport(field, str, db, helper, parents); @@ -277,7 +277,7 @@ inline void helper_pLocalDataExport(const char* field, long data, database* db, #pragma region normal func -void IterateScript(CKContext* ctx, database* db, dbDataStructHelper* helper) { +void IterateScript(CKContext* ctx, scriptDatabase* db, dbScriptDataStructHelper* helper) { CKBeObject* beobj = NULL; CKBehavior* beh = NULL; XObjectPointerArray objArray = ctx->GetObjectListByType(CKCID_BEOBJECT, TRUE); @@ -302,7 +302,7 @@ void IterateScript(CKContext* ctx, database* db, dbDataStructHelper* helper) { } } -void IterateBehavior(CKContext* ctx, CKBehavior* bhv, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +void IterateBehavior(CKContext* ctx, CKBehavior* bhv, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { //write self data helper->_dbCKBehavior->thisobj = bhv->GetID(); strcpy(helper->_dbCKBehavior->name, bhv->GetName()); @@ -355,7 +355,7 @@ void IterateBehavior(CKContext* ctx, CKBehavior* bhv, database* db, dbDataStruct IterateBehavior(ctx, bhv->GetSubBehavior(i), db, helper, bhv->GetID()); } -void IteratepLocalData(CKParameterLocal* p, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents) { +void IteratepLocalData(CKParameterLocal* p, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents) { CKGUID t = p->GetGUID(); BOOL unknowType = FALSE; diff --git a/SuperScriptMaterializer/script_export.h b/SuperScriptMaterializer/script_export.h index 2260de4..c43ee10 100644 --- a/SuperScriptMaterializer/script_export.h +++ b/SuperScriptMaterializer/script_export.h @@ -4,22 +4,22 @@ #include "stdafx.h" #include "database.h" -inline void generate_pLink_in_pIn(CKContext* ctx, CKParameterIn* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB, BOOL isTarget); -inline void proc_pTarget(CKContext* ctx, CKParameterIn* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents); -inline void proc_pIn(CKContext* ctx, CKParameterIn* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB); -inline void proc_pOut(CKContext* ctx, CKParameterOut* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB); -inline void proc_bIn(CKBehaviorIO* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, int index); -inline void proc_bOut(CKBehaviorIO* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, int index); -inline void proc_bLink(CKBehaviorLink* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); -inline void proc_pLocal(CKParameterLocal* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents, BOOL is_setting); -inline void proc_pOper(CKContext* ctx, CKParameterOperation* cache, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); +inline void generate_pLink_in_pIn(CKContext* ctx, CKParameterIn* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB, BOOL isTarget); +inline void proc_pTarget(CKContext* ctx, CKParameterIn* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents); +inline void proc_pIn(CKContext* ctx, CKParameterIn* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB); +inline void proc_pOut(CKContext* ctx, CKParameterOut* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, EXPAND_CK_ID grandparents, int index, BOOL executedFromBB); +inline void proc_bIn(CKBehaviorIO* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, int index); +inline void proc_bOut(CKBehaviorIO* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, int index); +inline void proc_bLink(CKBehaviorLink* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); +inline void proc_pLocal(CKParameterLocal* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents, BOOL is_setting); +inline void proc_pOper(CKContext* ctx, CKParameterOperation* cache, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); -inline void helper_pLocalDataExport(const char* field, long data, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); -inline void helper_pLocalDataExport(const char* field, float data, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); -inline void helper_pLocalDataExport(const char* field, const char* data, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); +inline void helper_pLocalDataExport(const char* field, long data, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); +inline void helper_pLocalDataExport(const char* field, float data, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); +inline void helper_pLocalDataExport(const char* field, const char* data, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); -void IterateBehavior(CKContext* ctx, CKBehavior* bhv, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); -void IterateScript(CKContext* ctx, database* db, dbDataStructHelper* helper); -void IteratepLocalData(CKParameterLocal* pl, database* db, dbDataStructHelper* helper, EXPAND_CK_ID parents); +void IterateBehavior(CKContext* ctx, CKBehavior* bhv, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); +void IterateScript(CKContext* ctx, scriptDatabase* db, dbScriptDataStructHelper* helper); +void IteratepLocalData(CKParameterLocal* pl, scriptDatabase* db, dbScriptDataStructHelper* helper, EXPAND_CK_ID parents); #endif \ No newline at end of file diff --git a/SuperScriptMaterializer/vt_menu.cpp b/SuperScriptMaterializer/vt_menu.cpp index 1d19ae7..cb8634b 100644 --- a/SuperScriptMaterializer/vt_menu.cpp +++ b/SuperScriptMaterializer/vt_menu.cpp @@ -1,6 +1,7 @@ #include "vt_menu.h" #include "database.h" #include "script_export.h" +#include "env_export.h" extern PluginInterface* s_Plugininterface; CMenu* s_MainMenu = NULL; @@ -45,6 +46,7 @@ void UpdateMenu() { s_Plugininterface->ClearPluginMenu(s_MainMenu); //clear menu s_Plugininterface->AddPluginMenuItem(s_MainMenu, 0, "Export all scripts"); + s_Plugininterface->AddPluginMenuItem(s_MainMenu, 1, "Export environment"); //===========================freeze chirs241097 code for future expand //s_Plugininterface->AddPluginMenuItem(s_MainMenu, -1, NULL, TRUE); @@ -63,32 +65,32 @@ void UpdateMenu() { } void PluginMenuCallback(int commandID) { - switch (commandID) { - case 0: - { - AFX_MANAGE_STATE(AfxGetStaticModuleState()); - CKContext* ctx = s_Plugininterface->GetCKContext(); + AFX_MANAGE_STATE(AfxGetStaticModuleState()); + CKContext* ctx = s_Plugininterface->GetCKContext(); - OPENFILENAME ofn; - char* file = (char*)malloc(1024 * sizeof(char)); - ZeroMemory(&ofn, sizeof(OPENFILENAME)); - ofn.lStructSize = sizeof(OPENFILENAME); - ofn.lpstrFile = file; - ofn.lpstrFile[0] = '\0'; - ofn.nMaxFile = 1024; - ofn.lpstrFilter = "Database file(*.db)\0*.db\0All files(*.*)\0*.*"; - ofn.lpstrFileTitle = NULL; - ofn.nMaxFileTitle = 0; - ofn.lpstrInitialDir = NULL; - ofn.Flags = OFN_EXPLORER; - - if (GetSaveFileName(&ofn)) { - //make sure file is not exist - DeleteFile(file); + OPENFILENAME ofn; + char* file = (char*)malloc(1024 * sizeof(char)); + ZeroMemory(&ofn, sizeof(OPENFILENAME)); + ofn.lStructSize = sizeof(OPENFILENAME); + ofn.lpstrFile = file; + ofn.lpstrFile[0] = '\0'; + ofn.nMaxFile = 1024; + ofn.lpstrFilter = "Database file(*.db)\0*.db\0All files(*.*)\0*.*\0"; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.Flags = OFN_EXPLORER; + if (GetSaveFileName(&ofn)) { + //make sure file is not exist + DeleteFile(file); + //switch mode + switch (commandID) { + case 0: + { //init resources - database* _db = new database(); - dbDataStructHelper* _helper = new dbDataStructHelper(); + scriptDatabase* _db = new scriptDatabase(); + dbScriptDataStructHelper* _helper = new dbScriptDataStructHelper(); _db->open(file); _helper->init(ctx->GetParameterManager()); @@ -100,11 +102,28 @@ void PluginMenuCallback(int commandID) { _db->close(); delete _helper; delete _db; - - ctx->OutputToConsole("[Super Script Materializer] Done"); } - free(file); + break; + case 1: + { + //init + envDatabase* _db = new envDatabase(); + dbEnvDataStructHelper* _helper = new dbEnvDataStructHelper(); + _db->open(file); + _helper->init(); + + //iterate parameter operation + IterateParameterOperation(ctx->GetParameterManager(), _db, _helper); + + //release all + _helper->dispose(); + _db->close(); + delete _helper; + delete _db; + } + break; } - break; + ctx->OutputToConsole("[Super Script Materializer] Done"); } + free(file); }