private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "PSSG files|*.pssg|All files|*.*";
dialog.Title = "Select a PSSG file";
if (dialog.ShowDialog() == DialogResult.OK) {
closeFile();
StreamReader sr = new StreamReader(dialog.FileName);
CPSSGFile f = new CPSSGFile(sr.BaseStream);
pssgFile = f;
treeView.Nodes.Add(createTreeViewNode(f.rootNode));
listBoxModels.Items.Clear();
Model[] models = new Model[f.findNodes("MATRIXPALETTEJOINTRENDERINSTANCE").Count];
modelView1.renderDataSources = new Dictionary<string,RenderDataSource>();
int i = 0;
List<CNode> mpbnNodes = f.findNodes("MATRIXPALETTEBUNDLENODE");
foreach (CNode mpbnNode in mpbnNodes) {
List<CNode> mpjnNodes = mpbnNode.findNodes("MATRIXPALETTEJOINTNODE");
foreach (CNode mpjnNode in mpjnNodes) {
Matrix transform = getTransform((byte[])mpjnNode.subNodes[0].data);
foreach (CNode mpjriNode in mpjnNode.findNodes("MATRIXPALETTEJOINTRENDERINSTANCE")) {
string rdsId = mpjriNode.attributes["indices"].value.Substring(1);
RenderDataSource renderDataSource;
if (!modelView1.renderDataSources.TryGetValue(rdsId, out renderDataSource)) {
CNode rdsNode = f.findNodes("RENDERDATASOURCE", "id", rdsId)[0];
CNode dbNode = f.findNodes("DATABLOCK", "id", rdsNode.subNodes[1].attributes["dataBlock"].value.Substring(1))[0];
renderDataSource = createRenderDataSourceFromNodes(rdsNode, dbNode);
modelView1.renderDataSources.Add(rdsNode.attributes["id"].value, renderDataSource);
}
models[i] = new Model(mpjnNode.attributes["id"].ToString() + mpjriNode.attributes["shader"].ToString(), renderDataSource, transform,
(int)mpjriNode.attributes["streamOffset"].data, (int)mpjriNode.attributes["elementCountFromOffset"].data,
(int)mpjriNode.attributes["indexOffset"].data, (int)mpjriNode.attributes["indicesCountFromOffset"].data);
listBoxModels.Items.Add(models[i]);
i++;
}
}
}
createTreeViewTexturesList(f.rootNode);
} else {
}
}