From c8b656c03c2f07b1e253fbf5c85411e291742c0e Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Sun, 28 Oct 2012 13:57:31 +0100 Subject: [PATCH] Separated createTrack to own c/h as we need to call it from more places that Editor.c --- ogl_editor/src/Editor.c | 29 ++++------------------------- ogl_editor/src/TrackData.c | 18 ++++++++++++++++++ ogl_editor/src/TrackData.h | 18 ++++++++++++++++++ ogl_editor/src/loadsave.c | 28 +++++++++++++++++++++++----- ogl_editor/src/loadsave.h | 6 ++++-- 5 files changed, 67 insertions(+), 32 deletions(-) create mode 100644 ogl_editor/src/TrackData.c create mode 100644 ogl_editor/src/TrackData.h diff --git a/ogl_editor/src/Editor.c b/ogl_editor/src/Editor.c index 7c78c98..1f1e13e 100644 --- a/ogl_editor/src/Editor.c +++ b/ogl_editor/src/Editor.c @@ -7,6 +7,7 @@ #include "LoadSave.h" #include "TrackView.h" #include "rlog.h" +#include "TrackData.h" #include "RemoteConnection.h" #include "../../sync/sync.h" #include "../../sync/base.h" @@ -24,21 +25,11 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -typedef struct TrackInfo -{ - bool folded; -} TrackInfo; - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - typedef struct EditorData { struct sync_data syncData; TrackViewInfo trackViewInfo; - TrackInfo trackInfo; - int trackOrder[8192]; - int orderCount; - + TrackData trackData; } EditorData; static EditorData s_editorData; @@ -141,16 +132,6 @@ bool Editor_keyDown(int key) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static int createTrack(EditorData* data, const char* name) -{ - int index = sync_create_track(&data->syncData, name); - data->trackOrder[data->orderCount] = index; - data->orderCount++; - return index; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - static void processCommands() { //SyncDocument *doc = trackView->getDocument(); @@ -180,9 +161,7 @@ static void processCommands() // find track - serverIndex = sync_find_track(&s_editorData.syncData, trackName); - if (0 > serverIndex) - serverIndex = createTrack(&s_editorData, trackName); + serverIndex = TrackData_createGetTrack(&s_editorData.trackData, trackName); // setup remap and send the keyframes to the demo RemoteConnection_mapTrackName(trackName); @@ -220,7 +199,7 @@ void Editor_timedUpdate() static void onOpen() { - LoadSave_loadRocketXMLDialog(); + LoadSave_loadRocketXMLDialog(&s_editorData.trackData); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/TrackData.c b/ogl_editor/src/TrackData.c new file mode 100644 index 0000000..822d070 --- /dev/null +++ b/ogl_editor/src/TrackData.c @@ -0,0 +1,18 @@ +#include "TrackData.h" + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +int TrackData_createGetTrack(TrackData* trackData, const char* name) +{ + int index = sync_find_track(&trackData->syncData, name); + if (index < 0) + { + int index = sync_create_track(&trackData->syncData, name); + trackData->order[trackData->orderCount] = index; + trackData->orderCount++; + } + + return index; +} + + diff --git a/ogl_editor/src/TrackData.h b/ogl_editor/src/TrackData.h new file mode 100644 index 0000000..265ca24 --- /dev/null +++ b/ogl_editor/src/TrackData.h @@ -0,0 +1,18 @@ +#pragma once + +#include "../../sync/data.h" + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +typedef struct TrackData +{ + struct sync_data syncData; + int order[8192]; + int orderCount; +} TrackData; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Will get the get the track if it exists else create it + +int TrackData_createGetTrack(TrackData* trackData, const char* name); + diff --git a/ogl_editor/src/loadsave.c b/ogl_editor/src/loadsave.c index bb6491b..116783c 100644 --- a/ogl_editor/src/loadsave.c +++ b/ogl_editor/src/loadsave.c @@ -1,12 +1,17 @@ #include "LoadSave.h" #include "Dialog.h" +#include "TrackData.h" #include "External/mxml/mxml.h" +#include "../../sync/data.h" #include /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static void parseXml(mxml_node_t* rootNode) +static void parseXml(mxml_node_t* rootNode, TrackData* trackData) { + int track_index = 0; + //struct sync_track** tracks = trackData->syncData.tracks; + // find the tracks element mxml_node_t* node = mxmlFindElement(rootNode, rootNode, "tracks", NULL, NULL, MXML_NO_DESCEND); @@ -44,15 +49,28 @@ static void parseXml(mxml_node_t* rootNode) if (!strcmp("track", element_name)) { // TODO: Create the new track/channel here + + track_index = TrackData_createGetTrack(trackData, element_name); + printf("track_index %d\n", track_index); printf("Creating track/channel with name %s\n", mxmlElementGetAttr(node, "name")); } else if (!strcmp("key", element_name)) { + struct sync_track* track = trackData->syncData.tracks[track_index]; + const char* row = mxmlElementGetAttr(node, "row"); const char* value = mxmlElementGetAttr(node, "value"); const char* interpolation = mxmlElementGetAttr(node, "interpolation"); + struct track_key k; + k.row = atoi(row); + k.value = (float)(atof(value)); + k.type = (atoi(interpolation)); + + assert(!is_key_frame(track, k.row)); + sync_set_key(track, &k); + printf("Adding key: row %s | value %s | interpolation %s\n", row, value, interpolation); } } @@ -65,7 +83,7 @@ static void parseXml(mxml_node_t* rootNode) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -int LoadSave_loadRocketXML(const char* path) +int LoadSave_loadRocketXML(const char* path, TrackData* trackData) { FILE* fp = 0; mxml_node_t* tree = 0; @@ -79,7 +97,7 @@ int LoadSave_loadRocketXML(const char* path) return false; } - parseXml(tree); + parseXml(tree, trackData); fclose(fp); mxmlDelete(tree); @@ -89,14 +107,14 @@ int LoadSave_loadRocketXML(const char* path) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -int LoadSave_loadRocketXMLDialog() +int LoadSave_loadRocketXMLDialog(TrackData* trackData) { char path[512]; if (!Dialog_open(path)) return false; - return LoadSave_loadRocketXML(path); + return LoadSave_loadRocketXML(path, trackData); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/ogl_editor/src/loadsave.h b/ogl_editor/src/loadsave.h index 518d1fe..6f1d506 100644 --- a/ogl_editor/src/loadsave.h +++ b/ogl_editor/src/loadsave.h @@ -1,7 +1,9 @@ #pragma once -int LoadSave_loadRocketXML(const char* path); -int LoadSave_loadRocketXMLDialog(); +struct TrackData; + +int LoadSave_loadRocketXML(const char* path, struct TrackData* trackData); +int LoadSave_loadRocketXMLDialog(struct TrackData* trackData); int LoadSave_saveRocketXML(const char* path); int LoadSave_saveRocketXMLDialog();