Beispiel #1
0
        private void selectItem(object sender, TreeNodeMouseClickEventArgs e)
        {
            //Runtime.TargetMTA.Clear();
            //Runtime.TargetAnim = null;

            if (e.Node is Animation)
            {
                //Runtime.TargetAnimString = e.Node.Text;

                string AnimName = e.Node.Text;
                AnimName = Regex.Match(AnimName, @"([A-Z][0-9][0-9])(.*)").Groups[0].ToString();
                if (AnimName.Length > 3)
                {
                    AnimName = AnimName.Substring(3);
                }

                Animation running = new Animation(AnimName);
                running.ReplaceMe((Animation)e.Node);
                running.Tag = e.Node;

                List <MTA> display = new List <MTA>();
                List <MTA> def     = new List <MTA>();

                Queue <TreeNode> NodeQueue = new Queue <TreeNode>();
                foreach (TreeNode n in treeView1.Nodes)
                {
                    NodeQueue.Enqueue(n);
                }
                while (NodeQueue.Count > 0)
                {
                    try
                    {
                        TreeNode n        = NodeQueue.Dequeue();
                        string   NodeName = Regex.Match(n.Text, @"([A-Z][0-9][0-9])(.*)").Groups[0].ToString();
                        if (NodeName.Length <= 3)
                        {
                            Console.WriteLine(NodeName);
                        }
                        else
                        {
                            NodeName = NodeName.Substring(3);
                        }
                        if (n is Animation)
                        {
                            if (n == e.Node)
                            {
                                continue;
                            }
                            if (matchAnim.Checked && NodeName.Equals(AnimName))
                            {
                                running.Children.Add(n);
                            }
                        }
                        if (n is MTA)
                        {
                            if (n == e.Node)
                            {
                                continue;
                            }
                            if (NodeName.Contains(AnimName.Replace(".omo", ".")))
                            {
                                running.Children.Add(n);
                            }
                            if (n.Text.Contains("display"))
                            {
                                display.Add((MTA)n);
                            }
                            if (n.Text.Contains("default.mta"))
                            {
                                def.Add((MTA)n);
                            }
                        }
                        if (n is AnimationGroupNode)
                        {
                            foreach (TreeNode tn in n.Nodes)
                            {
                                NodeQueue.Enqueue(tn);
                            }
                        }
                    }
                    catch
                    {
                    }
                }

                ((ModelViewport)Parent).CurrentAnimation = running;

                //reset mtas
                foreach (TreeNode node in ((ModelViewport)Parent).draw)
                {
                    if (node is ModelContainer)
                    {
                        ModelContainer con = (ModelContainer)node;
                        if (con.NUD != null)
                        {
                            con.NUD.ClearMta();
                            con.NUD.ApplyMta(con.MTA, 0);
                            foreach (MTA d in display)
                            {
                                con.NUD.ApplyMta(d, 0);
                            }
                            foreach (MTA d in def)
                            {
                                con.NUD.ApplyMta(d, 0);
                            }

                            /*foreach (KeyValuePair<string, MTA> v in Runtime.MaterialAnimations)
                             * {
                             *  if (v.Key.Contains("display"))
                             *  {
                             *      con.NUD.applyMTA(v.Value, 0);
                             *      break;
                             *  }
                             * }*/
                        }
                    }
                }

                /*Runtime.TargetMTA.Clear();
                 * foreach (KeyValuePair<string, MTA> v in Runtime.MaterialAnimations)
                 * {
                 *  if (v.Key.Contains(e.Node.Text.Replace(".omo", "")))
                 *  {
                 *      Runtime.TargetMTA.Add(v.Value);
                 *  }
                 * }*/

                //MainForm.Instance.viewports[0].loadMTA(Runtime.MaterialAnimations[e.Node.Text]);

                //Console.WriteLine("Selected Anim " + e.Node.Text);
            }
            if (e.Node is MTA)
            {
                //MainForm.Instance.viewports[0].loadMTA((MTA)e.Node);
                //Runtime.TargetMTA = ;
                //Runtime.TargetMTAString = e.Node.Text;
                ((ModelViewport)Parent).CurrentMaterialAnimation = (MTA)e.Node;

                Queue <TreeNode> NodeQueue = new Queue <TreeNode>();
                foreach (TreeNode n in treeView1.Nodes)
                {
                    NodeQueue.Enqueue(n);
                }
                List <MTA> display = new List <MTA>();
                while (NodeQueue.Count > 0)
                {
                    TreeNode n = NodeQueue.Dequeue();
                    if (n is Animation || n is MTA)
                    {
                        if (n == e.Node)
                        {
                            continue;
                        }
                        if ((n.Text.Contains("default.mta") || n.Text.Contains("display")) && n is MTA)
                        {
                            display.Add((MTA)n);
                        }
                    }
                    if (n is AnimationGroupNode)
                    {
                        foreach (TreeNode tn in n.Nodes)
                        {
                            NodeQueue.Enqueue(tn);
                        }
                    }
                }

                foreach (TreeNode node in ((ModelViewport)Parent).draw)
                {
                    if (node is ModelContainer)
                    {
                        ModelContainer con = (ModelContainer)node;
                        if (con.NUD != null && con.MTA != null)
                        {
                            con.NUD.ApplyMta(con.MTA, 0);
                            foreach (MTA d in display)
                            {
                                con.NUD.ApplyMta(d, 0);
                            }

                            /*foreach (KeyValuePair<string, MTA> v in Runtime.MaterialAnimations)
                             * {
                             *  if (v.Key.Contains("display"))
                             *  {
                             *      con.NUD.applyMTA(v.Value, 0);
                             *      break;
                             *  }
                             * }*/
                        }
                    }
                }
            }
            if (e.Node is BFRES.MTA) //For BFRES
            {
                ((ModelViewport)Parent).CurrentBfresMaterialAnimation = (BFRES.MTA)e.Node;

                Queue <TreeNode> NodeQueue = new Queue <TreeNode>();
                foreach (TreeNode n in treeView1.Nodes)
                {
                    NodeQueue.Enqueue(n);
                }
                while (NodeQueue.Count > 0)
                {
                    TreeNode n = NodeQueue.Dequeue();

                    if (n is AnimationGroupNode)
                    {
                        foreach (TreeNode tn in n.Nodes)
                        {
                            NodeQueue.Enqueue(tn);
                        }
                    }
                }
                foreach (TreeNode node in ((ModelViewport)Parent).draw)
                {
                    if (node is ModelContainer)
                    {
                        ModelContainer con = (ModelContainer)node;
                        if (con.Bfres != null && con.BFRES_MTA != null)
                        {
                            con.Bfres.ApplyMta(con.BFRES_MTA, 0);
                        }
                    }
                }
            }
        }