コード例 #1
0
        public void GameObjectsCanvas_Drop(object sender, DragEventArgs e)
        {
            Element element = e.Data.GetData(typeof(Element)) as Element;
            if (element != null)
            {
                System.Console.WriteLine("dropped " + element);
                GameObject pGo = App.ObjectBuilder.click(e.GetPosition(sender as Canvas)) as GameObject;
                Element newElement = new Element(element);
                if (pGo != null)
                {
                    pGo.Add(newElement);
                }
                else
                {
                    pGo = App.newGameObject();
                    if (pGo != null)
                    {
                        pGo.Position = e.GetPosition(sender as Canvas);
                        pGo.Add(newElement);
                    }
                }
            }
            ObjectBuilder ob = e.Data.GetData(typeof(ObjectBuilder)) as ObjectBuilder;
            if (ob != null && ob.IsMacro)
            {
                if (ob.IsRegistered || ob.IsLive)
                {
                    // TODO: Show Macro window
                    MacroCall macroCall = new MacroCall();
                    macroCall.Position = e.GetPosition(sender as Canvas);
                    macroCall.Macro = ob;
                    if (ob != App.ObjectBuilder)
                    {
                        App.ObjectBuilder.ScriptObjects.Add(macroCall);
                    }
                    else
                    {
                        MessageBox.Show("Cannot call Macro from within itself!", "Error");
                    }
                }
                else
                {
                    App.registerMacroInScript(ob);

                    (App.MainWindow as MainWindow).sortMacros();
                }
            }
        }
コード例 #2
0
ファイル: GameObject.cs プロジェクト: DelBero/XnaScrapEdit
 /// <summary>
 /// Make a deep copy
 /// </summary>
 /// <param name="copy"></param>
 public GameObject(GameObject copy, IObjectBuilder parent)
 {
     m_name = copy.m_name;
     m_elements = new ObservableCollection<Element>();
     //App app = (App)App.Current;
     foreach (Element comp in copy.m_elements)
     {
         Element newComp = new Element(comp);
         newComp.ParentGameObject = this;
         m_elements.Add(newComp);
         //app._3dEditorParameter(this, newComp);
     }
     m_dimension = copy.m_dimension;
     m_autoId = copy.m_autoId;
     m_parentObjectBuilder = parent;
     Point newPos = new Point(copy.m_position.X +5,copy.m_position.Y + 5);
     m_position = newPos;
 }
コード例 #3
0
ファイル: Element.cs プロジェクト: DelBero/XnaScrapEdit
        /// <summary>
        /// Copy Constructor
        /// </summary>
        /// <returns></returns>
        public Element(Element copy)
        {
            m_name = copy.Name;
            m_id = copy.m_id;
            m_dimension = copy.m_dimension;
            m_semantic = copy.m_semantic;
            foreach (Parameter p in copy.m_parameter)
            {
                Parameter newParameter = p.copy();
                newParameter.ParentComponent = this;
                m_parameter.Add(newParameter);
            }

            foreach (GameMessage msg in copy.Messages)
            {
                GameMessage m = msg.copy();
                m_messages.Add(m);
            }
        }
コード例 #4
0
ファイル: CogaenData.cs プロジェクト: DelBero/XnaScrapEdit
 private Exception paraseCompoundParameterData(Parameter compound, string[] values, ref int value, List<string> errors, Element compInstance)
 {
     Exception e = null;
     foreach (Parameter parameter in compound.Params)
     {
         if (parameter.Type == ParameterType.COMPOUNDPARAMETER || parameter.Type == ParameterType.SEQUENCEPARAMETER) // TODO this needs special treatment
         {
             e = paraseCompoundParameterData(parameter, values, ref value, errors, compInstance);
             if (e != null)
                 return e;
         }
         StringBuilder sb = new StringBuilder();
         // still enough left?
         if (value + parameter.Count > values.Length)
         {
             errors.Add("Error not enough ParameterData\nParameter " + parameter.Name + " in Element " + compInstance.Name);
             e = new Exception();
             break;
         }
         for (int i = 0; i < parameter.Count; ++i)
         {
             if (values[value] != null)
                 sb.Append(values[value++]);
             if (i < parameter.Count -1)
                 sb.Append(",");
         }
         parameter.Values = sb.ToString();
     }
     return e;
 }
コード例 #5
0
ファイル: CogaenData.cs プロジェクト: DelBero/XnaScrapEdit
        /// <summary>
        /// 
        /// </summary>
        /// <param name="gameobject"></param>
        /// <returns></returns>
        public LiveGameObject AddLiveGameObject(XmlNode gameobject)
        {
            // get name
            String gameObjectName = XmlHelper.getNodeAttributeValue(gameobject, "Name");

            LiveGameObject newGo = new LiveGameObject(gameObjectName);
            ObservableCollection<Element> comps = getAllComponents();

            // find elements child node
            XmlNode elementsNode = XmlHelper.getNodeByName(gameobject.ChildNodes, "Elements");

            if (elementsNode == null)
            {
                if (m_liveGameObjects != null)
                    m_liveGameObjects.ScriptObjects.Add(newGo);
                return newGo;
            }

            Exception e = null;
            List<string> errors = new List<string>();

            foreach (XmlNode compNode in elementsNode.ChildNodes)
            {
                String compName = XmlHelper.getNodeAttributeValue(compNode, "Name");

                // check existing components
                Element compInstance = null;
                foreach(Element comp in comps)
                {
                    if (compName.Length > 0 && compName.Equals(comp.Id))
                    {
                        compInstance = new Element(comp);
                        compInstance.ParentLiveGameObject = newGo;
                        newGo.Elements.Add(compInstance);
                        break;
                    }
                }
                if (compInstance != null)
                {
                    // check data
                    XmlNode dataNode = XmlHelper.getNodeByName(compNode.ChildNodes,"Data");
                    if (dataNode != null)
                    {
                        string[] values = new string[dataNode.ChildNodes.Count];
                        int index = 0;
                        foreach (XmlNode valueNode in dataNode.ChildNodes)
                        {
                            // <Value><text>actual value</text></Value>
                            if (valueNode.FirstChild != null)
                                values[index++] = valueNode.FirstChild.InnerText;
                        }

                        // is there data?
                        if (values.Length > 0)
                        {
                            int value = 0;
                            foreach (Parameter parameter in compInstance.Parameters)
                            {
                                if (parameter.Type == ParameterType.COMPOUNDPARAMETER || parameter.Type == ParameterType.SEQUENCEPARAMETER) // TODO this needs special treatment
                                {
                                    e = paraseCompoundParameterData(parameter, values, ref value, errors, compInstance);
                                    if (e != null)
                                        break;
                                    else
                                        continue;
                                }
                                StringBuilder sb = new StringBuilder();
                                // still enough left?
                                if (value + parameter.Count > values.Length)
                                {
                                    errors.Add("Error not enough ParameterData\nParameter " + parameter.Name + " in Element " + compInstance.Name);
                                    e = new Exception();
                                    break;
                                }
                                for (int i = 0; i < parameter.Count; ++i)
                                {
                                    if (values[value] != null)
                                        sb.Append(values[value++]);
                                    if (i < parameter.Count -1)
                                        sb.Append(",");
                                }
                                parameter.Values = sb.ToString();
                            }
                        }
                    }
                }
                else
                {
                    // TODO implement something
                }

            }
            if (m_liveGameObjects != null)
                m_liveGameObjects.ScriptObjects.Add(newGo);
            if (e != null)
            {
                StringBuilder sb = new StringBuilder();
                foreach (string err in errors)
                {
                    sb.AppendLine(err);
                }
                e = new Exception( sb.ToString() );
                throw e;
            }
            return newGo;
        }
コード例 #6
0
 public void GameObject_Drop(GameObject pGo, DragEventArgs e)
 {
     if (pGo != null)
     {
         Element elements = e.Data.GetData(typeof(Element)) as Element;
         if (elements != null)
         {
             Element newElement = new Element(elements);
             if (pGo != null)
             {
                 pGo.Add(newElement);
                 e.Handled = true;
             }
         }
     }
 }
コード例 #7
0
        private void dropElement(object sender, Element element, DragEventArgs e)
        {
            IObjectBuilder obj = DataContext as IObjectBuilder;
            if (obj != null)
            {
                IScriptObject so = obj.click(e.GetPosition(sender as Canvas), false,false) as IScriptObject;
                Element newElement = new Element(element);
                if (so != null && so is GameObject)
                {
                    GameObject go = so as GameObject;
                    go.Add(newElement);
                }
                else if (so != null)
                {

                }
                else
                {
                    StringQueryItem qry = new StringQueryItem("Enter new GameObject name", "New GameObject", "New");
                    StringQuery q = new StringQuery();
                    q.DataContext = qry;
                    bool? result = q.ShowDialog();
                    if (result.Value)
                    {
                        GameObject go = obj.newGameObject(qry.Text);
                        if (go != null)
                        {
                            go.Position = e.GetPosition(sender as Canvas);
                            go.Add(newElement);
                        }
                    }
                }
            }
        }
コード例 #8
0
        public void updateElementDataCallbackRest(String s, byte type, uint id, object data)
        {
            XmlNodeList elements = getRestData(s);

            try
            {
                if (data is Subsystem)
                {
                    Subsystem subsystem = data as Subsystem;

                    foreach (XmlNode node in elements)
                    {
                        if (node.Name == "Element")
                        {
                            String name = "";
                            String sId = "";
                            foreach (XmlAttribute attr in node.Attributes)
                            {
                                if (attr.Name == "Name")
                                {
                                    name = attr.Value;
                                }
                                else if (attr.Name == "Id")
                                {
                                    sId = attr.Value;
                                }
                            }
                            Element comp = new Element(name, sId);
                            // get semantic
                            comp.Semantic = DataItemsTools.getElementSemantic(sId);
                            subsystem.Elements.Add(comp);
                            updateParameterData(comp);
                            updateMessageData(comp);
                        }
                    }
                    //Data.getAllComponents(Data.ElementsList);
                }

                Data.getAllComponents(Data.ElementsList);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error while loading ElementData: " + e.Message, "Error");
            }
        }
コード例 #9
0
        public static ParameterSemantic getParameterSemantic(Element element, Parameter param)
        {
            App app = App.Current as App;
            OptionGroup optionGroup = null;
            Config config = app.Config;
            if (element.Semantic > Element.ElementSemantic.NONE && element.Semantic <= Element.ElementSemantic.CAMERA)
            {
                optionGroup = (config.GetOptionGroup("3D Editor Options") as OptionGroup);
            }
            else if (element.Semantic >= Element.ElementSemantic.STATE && element.Semantic <= Element.ElementSemantic.STATEMACHINE)
            {
                optionGroup = (config.GetOptionGroup("StateMachines") as OptionGroup);
            }

            if (optionGroup != null)
            {
                foreach (IOption option in optionGroup.Options)
                {
                    if (option.Type == StringSemanticOption.m_type)
                    {
                        StringSemanticOption Param = option as StringSemanticOption;
                        if (Param != null)
                        {
                            String[] values = Param.Value.Split(',');
                            foreach (String value in values)
                            {
                                if (value == param.Name)
                                {
                                    if (Param.Semantic == ParameterSemantic.MESH)
                                    {
                                        ResourceFolder folder = app.Data.Resources.getFolder("Meshes");
                                        if (folder != null)
                                        {
                                            param.SemanticValues = folder.Resources;
                                        }
                                    }
                                    else if (Param.Semantic == ParameterSemantic.MATERIAL)
                                    {
                                        ResourceFolder folder = app.Data.Resources.getFolder("Materials");
                                        if (folder != null)
                                        {
                                            param.SemanticValues = folder.Resources;
                                        }
                                    }
                                    else if (Param.Semantic == ParameterSemantic.TEXTURE)
                                    {
                                        ResourceFolder folder = app.Data.Resources.getFolder("Textures");
                                        if (folder != null)
                                        {
                                            param.SemanticValues = folder.Resources;
                                        }
                                    }
                                    return Param.Semantic;
                                }
                                //Parameter parameter = findParameter(component, dimension, value.Trim());
                            }
                        }
                    }
                }
            }
            return ParameterSemantic.NONE;
        }
コード例 #10
0
ファイル: GameObject.cs プロジェクト: DelBero/XnaScrapEdit
 public void Remove(Element comp)
 {
     comp.ParentGameObject = null;
     setDirty();
     m_elements.Remove(comp);
     if (m_elementsNode != null)
     {
         XmlNode nodeToRemove = Helper.XmlHelper.getNodeByNameAttribute(m_elementsNode.ChildNodes, comp.Name);
         m_elementsNode.RemoveChild(nodeToRemove);
     }
 }
コード例 #11
0
ファイル: GameObject.cs プロジェクト: DelBero/XnaScrapEdit
        public override void deserializeFromXml(XmlElement node)
        {
            m_xmlNode = node;
            m_elementsNode = XmlHelper.getNodeByName(node.ChildNodes, "Elements") as XmlElement;
            if (m_elementsNode == null)
                m_elementsNode = m_xmlNode.OwnerDocument.CreateElement("Elements");

            m_elements.Clear();

            Point p = new Point();
            Point d = new Point();
            foreach (XmlAttribute attrib in node.Attributes)
            {
                if (attrib.Name == "id")
                    this.m_name = attrib.Value;
                else if (attrib.Name == "auto_id")
                {
                    bool.TryParse(attrib.Value, out this.m_autoId);
                }
                else if (attrib.Name == "pos_x")
                {
                    double x;
                    if (double.TryParse(attrib.Value, out x))
                        p.X = x;
                }
                else if (attrib.Name == "pos_y")
                {
                    double y;
                    if (double.TryParse(attrib.Value, out y))
                        p.Y = y;
                }
                else if (attrib.Name == "dim_x")
                {
                    double x;
                    if (double.TryParse(attrib.Value, out x))
                        d.X = x;
                }
                else if (attrib.Name == "dim_y")
                {
                    double y;
                    if (double.TryParse(attrib.Value, out y))
                        d.Y = y;
                }
            }
            Position = p;
            //Dimension = d;

            if (m_elementsNode != null)
            {
                foreach (XmlNode element in m_elementsNode.ChildNodes)
                {
                    if (element is XmlElement && element.Name == "Element")
                    {
                        Element el = new Element();
                        el.deserializeFromXml(element as XmlElement);
                        m_elements.Add(el);
                        el.ParentGameObject = this;
                    }
                }
            }
        }
コード例 #12
0
ファイル: GameObject.cs プロジェクト: DelBero/XnaScrapEdit
 public override void deserialize(System.IO.BinaryReader br)
 {
     Name = br.ReadString();
     m_autoId = br.ReadBoolean();
     Point p = new Point();
     p.X = br.ReadDouble();
     p.Y = br.ReadDouble();
     Position = p;
     p.X = br.ReadDouble();
     p.Y = br.ReadDouble();
     Dimension = p;
     int compCount = br.ReadInt32();
     for (int i = 0; i < compCount; ++i)
     {
         Element newComp = new Element();
         newComp.deserialize(br);
         newComp.ParentGameObject = this;
         m_elements.Add(newComp);
     }
 }
コード例 #13
0
ファイル: GameObject.cs プロジェクト: DelBero/XnaScrapEdit
 public void Add(Element comp)
 {
     comp.ParentGameObject = this;
     setDirty();
     m_elements.Add(comp);
     if (m_elementsNode != null)
     {
         comp.serializeToXml(m_elementsNode.OwnerDocument, m_elementsNode);
     }
 }
コード例 #14
0
ファイル: Messages.cs プロジェクト: DelBero/XnaScrapEdit
 public void updateMessageData(Element el)
 {
     send("GET /Elements/" + el.Name + "/Messages/ HTTP/1.1", (byte)Connection.CommandType.C_GET, updateMessageDataCallbackRest, el);
 }
コード例 #15
0
ファイル: Messages.cs プロジェクト: DelBero/XnaScrapEdit
 private void updateParameterData(Element el)
 {
     send("GET /Elements/" + el.Name + "/Parameters/ HTTP/1.1", (byte)Connection.CommandType.C_GET, updateParameterDataCallbackRest, el);
 }
コード例 #16
0
        public static ParameterSemantic getParameterSemantic(XmlNode parameter, Element element, Parameter param)
        {
            //App app = App.Current as App;
            //String parameterName = "";
            //int size = 1;
            //foreach (XmlAttribute attr in parameter.Attributes)
            //{
            //    if (attr.Name == "Name")
            //    {
            //        parameterName = attr.Value;
            //    }
            //    if (attr.Name == "Default")
            //    {
            //        size = attr.Value.Split(',').Length;
            //    }
            //}
            //OptionGroup optionGroup = null;
            //if (element.Semantic > Element.ElementSemantic.NONE && element.Semantic <= Element.ElementSemantic.CAMERA)
            //{
            //    optionGroup = (app.Config.GetOptionGroup("3D Editor Options") as OptionGroup);
            //}
            //else if (element.Semantic >= Element.ElementSemantic.STATE && element.Semantic <= Element.ElementSemantic.STATEMACHINE)
            //{
            //    optionGroup = (app.Config.GetOptionGroup("StateMachines") as OptionGroup);
            //}

            //if (optionGroup != null)
            //{
            //    foreach (IOption option in optionGroup.Options)
            //    {
            //        if (option.Type == StringSemanticOption.m_type)
            //        {
            //            StringSemanticOption Param = option as StringSemanticOption;
            //            if (Param != null)
            //            {
            //                String[] values = Param.Value.Split(',');
            //                foreach (String value in values)
            //                {
            //                    if (value == parameterName)
            //                    {
            //                        if (Param.Semantic == ParameterSemantic.MESH)
            //                        {
            //                            ResourceFolder folder = app.Data.Resources.getFolder("Meshes");
            //                            if (folder != null)
            //                            {
            //                                param.SemanticValues = folder.Resources;
            //                            }
            //                        }
            //                        else if (Param.Semantic == ParameterSemantic.MATERIAL)
            //                        {
            //                            ResourceFolder folder = app.Data.Resources.getFolder("Materials");
            //                            if (folder != null)
            //                            {
            //                                param.SemanticValues = folder.Resources;
            //                            }
            //                        }
            //                        else if (Param.Semantic == ParameterSemantic.TEXTURE)
            //                        {
            //                            ResourceFolder folder = app.Data.Resources.getFolder("Textures");
            //                            if (folder != null)
            //                            {
            //                                param.SemanticValues = folder.Resources;
            //                            }
            //                        }
            //                        return Param.Semantic;
            //                    }
            //                    //Parameter parameter = findParameter(component, dimension, value.Trim());
            //                }
            //            }
            //        }
            //    }
            //}
            return ParameterSemantic.NONE;
        }