public static VPObjectInstance AddTransform(string modelName, float unitMultiplier, SetObjectTransform child, Vector3 posOffset) { return(AddObjectInstance(modelName, (child.Position * unitMultiplier) + posOffset, child.Rotation, child.Scale, child)); }
public static void WriteTransform(SetObjectTransform transform, XElement elem) { var pos = new XElement("Position"); var rot = new XElement("Rotation"); pos.AddElem(transform.Position); rot.AddElem(transform.Rotation); elem.Add(pos, rot); }
private void Duplicate_SOBJ_ToolStripMenuItem_Click(object sender, EventArgs e) { if (SelectedSetObject != null) { var sobj = new SetObject(); sobj.ObjectID = NewObjectForm.GenerateID(SetData); sobj.ObjectType = SelectedSetObject.ObjectType; sobj.Transform = new SetObjectTransform(); sobj.Transform.Position = SelectedSetObject.Transform.Position; sobj.Transform.Rotation = SelectedSetObject.Transform.Rotation; sobj.Transform.Scale = SelectedSetObject.Transform.Scale; // Copy Params foreach (var param in SelectedSetObject.Parameters) { var newParam = new SetObjectParam(); newParam.Data = param.Data; newParam.DataType = param.DataType; sobj.Parameters.Add(newParam); } // Copy Transforms var transforms = new List <SetObjectTransform>(); foreach (var transform in SelectedSetObject.Children) { var newTransform = new SetObjectTransform(); newTransform.Position = transform.Position; newTransform.Rotation = transform.Rotation; newTransform.Scale = transform.Scale; transforms.Add(newTransform); } sobj.Children = transforms.ToArray(); SetData.Objects.Add(sobj); SelectSetObject(sobj); UpdateObjects(); } }
public static SetObject ReadObject(XElement element, string elemName = null, Dictionary <string, SetObjectType> objectTemplates = null) { // Parameters var parameters = new List <SetObjectParam>(); var transform = new SetObjectTransform(); SetObjectTransform[] children = null; uint? objID = null; int tarID = 0; Vector3 tarPos = new Vector3(); float? range = null; if (elemName == null) { elemName = element.Name.LocalName; } foreach (var paramElement in element.Elements()) { // Special parameters string paramName = paramElement.Name.LocalName; switch (paramName.ToLower()) { case "position": transform.Position = paramElement.GetVector3(); continue; case "range": range = float.Parse(paramElement.Value); continue; case "rotation": transform.Rotation = paramElement.GetQuaternion(); continue; case "setobjectid": objID = uint.Parse(paramElement.Value); continue; case "multisetparam": { var countElem = paramElement.Element("Count"); if (countElem == null) { continue; } if (!int.TryParse(countElem.Value, out var childCount)) { continue; } var childObjs = new List <SetObjectTransform>(); foreach (var specialElem in paramElement.Elements()) { switch (specialElem.Name.LocalName.ToLower()) { case "element": { var indexElem = specialElem.Element("Index"); var posElem = specialElem.Element("Position"); var rotElem = specialElem.Element("Rotation"); if (indexElem == null || !int.TryParse( indexElem.Value, out var index)) { continue; } childObjs.Add(new SetObjectTransform() { Position = specialElem.GetVector3Elem("Position"), Rotation = specialElem.GetQuatElem("Rotation") }); break; } // TODO: Parse other elements. } } children = childObjs.ToArray(); continue; } case "target": { var tarElem = paramElement.Element("SetObjectID"); if (tarElem == null) { continue; } if (!int.TryParse(tarElem.Value, out tarID)) { continue; } //var childObjs = new List<SetObjectTransform>(); //children = childObjs.ToArray(); continue; } case "targetposition": { tarPos = paramElement.GetVector3(); continue; } } // Type bool doAutoDetect = (objectTemplates == null || !objectTemplates.ContainsKey(elemName)); var templateParam = (!doAutoDetect) ? objectTemplates[elemName].GetParameter(paramName) : null; var paramType = (doAutoDetect || templateParam == null) ? AutoDetectParamType(paramElement) : templateParam.DataType; if (paramType == null) { continue; } // Data object data = (paramType == typeof(Vector3)) ? paramElement.GetVector3() : (paramType == typeof(Quaternion)) ? paramElement.GetQuaternion() : Helpers.ChangeType(paramElement.Value, paramType); // Add the Parameter to the list parameters.Add(new SetObjectParam() { Data = data, DataType = paramType }); } // Ensure Object has ID if (!objID.HasValue) { Console.WriteLine("WARNING: {0} \"{1}\" {2}", "Object of type", elemName, "is missing its object ID! Skipping this object..."); return(null); } // Generate Object var obj = new GensSetObject() { ObjectType = elemName, Parameters = parameters, Transform = transform, Children = children ?? new SetObjectTransform[0], ObjectID = objID.Value, TargetID = (uint)tarID, TargetPosition = tarPos }; if (range.HasValue) { obj.CustomData.Add("Range", new SetObjectParam( typeof(float), range.Value)); } return(obj); }