public ObjectCamera(ArrayEntry bymlEntry, out string objID) { objID = string.Empty; foreach (var parameter in bymlEntry.IterDictionary()) { if (parameter.Key == "Id") { string id = parameter.Parse(); string[] idParts = id.Split('_'); if (idParts.Length > 1) { idSuffix = idParts[1]; } objID = idParts[0]; } else { dynamic data = parameter.Parse(); if (data is Dictionary <string, dynamic> dict && dict.Count == 3 && dict.ContainsKey("X") && dict.ContainsKey("Y") && dict.ContainsKey("Z")) { data = new Vector3( dict["X"] / 100, dict["Y"] / 100, dict["Z"] / 100 ); } properties.Add(parameter.Key, data); } } }
private static ObjectInfo GetObjectInfo(ref ArrayEntry objectEntry, SM3DWorldZone zone) { Dictionary <string, DictionaryEntry> properties = new Dictionary <string, DictionaryEntry>(); Dictionary <string, DictionaryEntry> links = new Dictionary <string, DictionaryEntry>(); ObjectInfo info = new ObjectInfo(); foreach (DictionaryEntry entry in objectEntry.IterDictionary()) { switch (entry.Key) { case "Comment": case "IsLinkDest": case "LayerConfigName": #if ODYSSEY case "SrcUnitLayerList": case "PlacementFileName": case "comment": #endif break; //ignore these case "Id": info.ID = entry.Parse(); break; case "Links": foreach (DictionaryEntry linkEntry in entry.IterDictionary()) { links.Add(linkEntry.Key, linkEntry); } break; case "ModelName": info.ModelName = entry.Parse() ?? ""; break; case "Rotate": dynamic _data = entry.Parse(); info.Rotation = new Vector3( _data["X"], _data["Y"], _data["Z"] ); break; case "Scale": _data = entry.Parse(); info.Scale = new Vector3( _data["X"], _data["Y"], _data["Z"] ); break; case "Translate": _data = entry.Parse(); info.Position = new Vector3( _data["X"] / 100f, _data["Y"] / 100f, _data["Z"] / 100f ); break; case "UnitConfigName": info.ObjectName = entry.Parse(); break; case "UnitConfig": _data = entry.Parse(); info.DisplayTranslation = new Vector3( _data["DisplayTranslate"]["X"] / 100f, _data["DisplayTranslate"]["Y"] / 100f, _data["DisplayTranslate"]["Z"] / 100f ); info.DisplayRotation = new Vector3( _data["DisplayRotate"]["X"], _data["DisplayRotate"]["Y"], _data["DisplayRotate"]["Z"] ); info.DisplayScale = new Vector3( _data["DisplayScale"]["X"], _data["DisplayScale"]["Y"], _data["DisplayScale"]["Z"] ); info.ClassName = _data["ParameterConfigName"]; break; default: if (!properties.ContainsKey(entry.Key)) { properties.Add(entry.Key, entry); } break; } } info.PropertyEntries = properties; info.LinkEntries = links; return(info); }