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(); } } }
/// <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; }
/// <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); } }
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; }
/// <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; }
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; } } } }
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); } } } } }
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"); } }
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; }
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); } }
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; } } } }
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); } }
public void Add(Element comp) { comp.ParentGameObject = this; setDirty(); m_elements.Add(comp); if (m_elementsNode != null) { comp.serializeToXml(m_elementsNode.OwnerDocument, m_elementsNode); } }
public void updateMessageData(Element el) { send("GET /Elements/" + el.Name + "/Messages/ HTTP/1.1", (byte)Connection.CommandType.C_GET, updateMessageDataCallbackRest, el); }
private void updateParameterData(Element el) { send("GET /Elements/" + el.Name + "/Parameters/ HTTP/1.1", (byte)Connection.CommandType.C_GET, updateParameterDataCallbackRest, el); }
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; }